--- name: gaia-technical-presentation description: "Generate a TECHNICAL slide presentation (engineering audience) from a source document as self-contained HTML that prints cleanly to PDF, one slide per page. Use when the user asks for a technical presentation, engineering slides, an architecture or deep-dive deck, or to turn a README/spec/design doc into technical slides. Covers architecture, methodology, request/response contracts, and metrics with their method; code blocks and diagrams allowed. Offline HTML with an @media print profile; no PPTX/Keynote/Google Slides. For a leadership-facing version, use gaia-executive-presentation." --- # GAIA Technical Presentation Turn one source document into a credible **technical** slide presentation for an engineering audience — architecture, methodology, contracts, and metrics — as a single self-contained HTML file that exports cleanly to PDF, one slide per printed page. This skill produces the **technical tier only**. For a leadership / decision-maker version of the same source, use the **`gaia-executive-presentation`** skill. ## Invocation `gaia-technical-presentation ` - **Input:** a path to a repo file (`.md`, `.mdx`, `.json`, `.html`, `.txt`) — the primary form. Pasted text is accepted as a fallback when no file exists. - **Output:** `presentations/.technical.html` at the **repo root**, where the slug is the source path with `/` replaced by `-` (so `hub/agents/chat/python/README.md` → `presentations/hub-agents-chat-python-README.technical.html`). Deterministic; re-runs overwrite in place — never hand-edit the output. - **Never write next to the source.** Decks are local scratch, and many sources live in directories that ship (`hub/agents/*/python/`, `src/`). The root `presentations/` dir is gitignored; a `presentations/` dir dropped next to a package is not, and would land in the published artifact. The path slug keeps two same-named sources (two `README.md`s) apart. ## Shared design system The look, fonts, slide patterns, and print profile live in the shared assets directory and are inlined verbatim into the output (do not duplicate or hand-edit them per run): - `.claude/skills/gaia-presentation-assets/assets/fonts.css` — base64 brand fonts (offline) - `.claude/skills/gaia-presentation-assets/assets/deck.css` — design system + `@media print` - `.claude/skills/gaia-presentation-assets/assets/deck-viewer.js` — screen-only viewer - `.claude/skills/gaia-presentation-assets/assets/slide-blocks.html` — slide patterns to compose from ## Pipeline (follow in order, every run) 1. **Read** the source document in full, and re-read the user's request so you know the goal the presentation must serve. 2. **Build a real-artifact inventory.** List every concrete artifact that *actually exists in the source*: metrics, tables, charts, code/contract snippets, screenshots, version strings, dated milestones — each with its source location (`file:line` or section). This inventory is the ONLY content source for slide facts. 3. **Ask the user upfront** for any known evaluation/benchmark results the source does not contain (accuracy, latency, throughput, cost). One concise prompt; proceed with whatever they give. 4. **Select the technical slides** (rules below), drawing values only from the inventory or the user's answers. Any quantitative point with neither becomes a **loud, labeled placeholder** — never an invented value. 5. **Emit** the presentation: inline `fonts.css`, `deck.css`, and `deck-viewer.js` from the shared assets directory into one HTML file, compose slides from `slide-blocks.html`, populate from the inventory. Write to the output path. 6. **Self-check** against the checklist, then **report the placeholder list** to the user (every `⚠ PLACEHOLDER` with what value it needs). ## Credibility contract (non-negotiable) Resolve every slide value in this order: **cite-from-source → else ask the user → else insert a loud, labeled placeholder.** The one forbidden act is **silent fabrication**: an invented number presented as if it came from the source. Placeholders are fine because they are visually unmistakable as not-yet-real and are reported back. Where the source supports no real artifact for a slide and the slide is not load-bearing, omit it rather than pad with generic prose. ## Technical tier — what belongs here - Engineering audience: architecture, methodology, the request/response contract, metrics *with* their method. - **Code blocks and inline-SVG diagrams are allowed and encouraged** where they carry real source content. - Typically 8–14 slides — enough to preserve precision and depth. - This is *not* the executive tier: keep the depth; do not strip methodology to chase brevity. (A leadership-facing cut is the `gaia-executive-presentation` skill's job.) ## Self-contained + print (enforced by the shared assets — do not weaken) - Inline everything. No `http(s)://`, no CDN, no external file refs. - `deck.css` carries the `@media print` profile: `@page { size: landscape; margin:0 }`, one slide per page (`break-after: page; break-inside: avoid`), `height:auto; min-height:100vh` in print, all chrome hidden. Do not edit these rules per-presentation. - The viewer JS is screen-only; it is disabled under `@media print`. ## Worked example `reference/example-technical.html` — generated from the GAIA email agent hub package (`hub/agents/email/python/`): 12 slides covering architecture, the request/response contract, the packaging table, the token-usage schema, and code blocks. Its benchmark slide intentionally shows labeled `⚠ PLACEHOLDER` values because no eval results existed in the source at generation time — a demonstration of the credibility contract. ## Checklist before reporting done - [ ] **Does the presentation satisfy the user's goal?** Re-read the user's request: do the slides cover what they asked to present, at engineering depth, so the audience leaves with what the user intended? If not, revise before reporting done. - [ ] One self-contained HTML file; no external refs (`grep -c 'https\?://'` is 0). - [ ] Every quantitative value is sourced, user-supplied, or a labeled placeholder — no fabricated numbers. - [ ] Placeholder list reported to the user. - [ ] (If a browser is available) printed-page count == slide count, nothing clipped.