stdout, made permanent 1 / 14

1.0Launch talk · 15 min · for developers who run coding agents

stdout, made permanent

The case for HTML artifacts: when an agent's answer has shape, give it a document — one self-contained file that opens anywhere and lives forever.

Mode
TALK-DECK
Source
github.com/zakelfassi/htmlify
Date
2026-06-11
Runtime
~15:00
Plate 01 / 14Talk-Deckstdout, made permanent

2.0Cold open

You asked a good question. The answer is already gone.

agent session · scrollback · 14,200 tokens ago
## Comparison: queue vs. cron vs. event-driven rebuild
### Option A — durable queue
| Option | Latency | Failure mode | Ops cost |
|--------|---------|--------------|----------|
| Queue  | ~2s     | redelivery   | medium   |
| Cron   | ~60s    | silent skip  | low      |
- Tradeoff 14 of 23: backpressure vs. simplicity...
- See also the migration plan in section 6, which...
### Rollback strategy (do not lose this part)
$ █
Plate 02 / 14Talk-Deckstdout, made permanent

3.0The problem

Terminal answers fail twice

Ephemeral

  • Scrollback is a buffer, not a record
  • Close the tab, lose the analysis
  • Context compaction eats the middle of long sessions
  • Nothing to send to a teammate or a meeting

Unreadable at length

  • Comparisons become pipe-table ASCII art
  • Architecture has no spatial layout in a stream
  • No side-by-side, no jump links, no collapse
  • 2,000-word markdown is a wall, not a document

Short answers are fine in the terminal. The failure starts exactly when the answer becomes worth keeping.

Plate 03 / 14Talk-Deckstdout, made permanent

4.0The thesis

Answers with shape deserve a document.


If the reader needs to compare, navigate, review, archive, or hand the answer to someone else — it should be one self-contained HTML file, not a scroll of markdown. The browser is the most widely deployed document reader on earth, and it is already on your machine.

Plate 04 / 14Talk-Deckstdout, made permanent

5.0Mental model

Evidence → author → validate. One file out.

1 · EVIDENCE 2 · AUTHOR 3 · VALIDATE repo · diff · logs docs · CI · prior answer read before designing one HTML file inline CSS + JS visual before verbose profile: rich | app | deck structure · safety · size 0 errors or no ship answer .html OPENS ANYWHERE · NO SERVER · NO BUILD · LIVES IN THE REPO OR THE EXPORT DIR
Fig 1 · The htmlify pipeline · Source: skills/htmlify/SKILL.md operating rules
Plate 05 / 14Talk-Deckstdout, made permanent

6.0What an artifact is

Anatomy of a Hardcopy document

MODE SOURCE DATE GENERATOR HASH COUNTS BASH $ node bin/htmlify-answer.js --validate ... PASS PLATE · MODE · TITLE · PROGRESS CROP MARKS — print registration, quiet on screen THE PLATE — title block: mode, source, date, hash DISPLAY SERIF — one idea, Charter/Georgia CARBON WELL — the terminal lives inside the doc STAMP — PASS / RISK / NEEDS VERIFICATION PLATE FOOTER — page n / total, mode, title
Fig 2 · Hardcopy devices, labeled · Source: skills/deckify/references/hardcopy.md
Plate 06 / 14Talk-Deckstdout, made permanent

7.0The skill family

Two skills, one contract

htmlify — operator artifacts

  • operator-brief · status-report — what happened, what is next
  • build-plan · implementation-map — phases, files, data flow
  • pr-review-packet · release-brief — diff tour, deploy proof
  • incident-report · decision-brief — timeline, options, tradeoffs
  • explainer · prototype / editor — concepts, clickable flows

deckify — presentation artifacts

  • talk-deck — speaker notes + run-of-show (this file)
  • workshop-deck — exercises, labs, checkpoints
  • essay-deck — deck plus long-form guide
  • demo-deck — live demos with fallbacks
  • launch-deck · teaching-guide — narrative, PDF-first

Shared rules: smallest mode that fits, evidence first, self-contained file, validate before shipping.

Plate 07 / 14Talk-Deckstdout, made permanent

8.0Self-containment is a security posture

Generated HTML is untrusted until validated

Banned in every profileWhy
<script src> · CDNsno remote code, ever
inline on* handler attributesscript goes in one auditable block
javascript: URLs · meta refreshno sneaky execution or redirects
iframe · object · embed · baseno foreign documents inside yours
external fonts, images, css url()no phone-home, works offline forever
RICH — documents APP — interactive DECK — presentations no scripts at all · pure reading + one inline script, still no remote + slides, keyboard nav, speaker notes enforced THIS DECK
Fig 3 · Validation profiles, strictest outward · Source: src/validate.js
Plate 08 / 14Talk-Deckstdout, made permanent

9.0The annotation loop

The document talks back

ARTIFACT IN BROWSER SELECT + COMMENT EXPORT COMMENTS AGENT APPLIES EDITS answer.html, file:// read like a reviewer highlight any passage, attach a note in place one markdown bundle: quote + comment + anchor paste bundle into session; agent revises the artifact REVISED ARTIFACT
Fig 4 · Comment in the browser, markdown back to the agent · Source: htmlify export-comments workflow
Plate 09 / 14Talk-Deckstdout, made permanent

10.0Demo · live

/htmlify, end to end

StepBeat
1Ask the agent a question with shape — a six-option architecture comparison
2Run /htmlify on the answer
3Validator runs; artifact opens in the default browser
4Highlight a weak claim, leave a comment, export the bundle
5Paste the bundle back; the agent ships a revised artifact
Visual slot · 16:9 · fallback if the live demo fails Pending visual

Screenshot of the rendered decision-brief artifact with an annotation open. To be captured from a real session before recording — not faked, not illustrated.

Plate 10 / 14Talk-Deckstdout, made permanent

11.0Failure modes

When to stay in the terminal

Answer shapeRight channelWhy
Short, linear, command-likestdoutyou will act, not re-read
Yes/no plus one reasonstdouta file is ceremony
Mid-loop iteration, half-formedstdoutartifacts assert; drafts should not
Comparison, plan, timeline, reviewartifactshape needs layout
Anything headed to a meeting or archiveartifactpermanence is the point

Rule of thumb: if you would never scroll back to it, do not make a file out of it.

Plate 11 / 14Talk-Deckstdout, made permanent

12.0Install

One command per agent

Claude Code · skill
git clone https://github.com/zakelfassi/htmlify.git ~/.claude/skills/htmlify
Codex · skill
git clone https://github.com/zakelfassi/htmlify.git ~/.codex/skills/htmlify
Pi · extension
pi install npm:@zakelfassi/htmlify
Any agent · CLI pipe
printf '%s' "$ANSWER" | npx @zakelfassi/htmlify htmlify-answer --title "Answer"
Plate 12 / 14Talk-Deckstdout, made permanent

13.0Run of show · chapters copy-pastable for YouTube

15 minutes, chaptered

TimeChapterBeat
00:00Cold openthe wall of markdown, scrolling away
01:10The problemephemeral + unreadable at length
02:40The thesisanswers with shape deserve a document
04:00Mental modelevidence, author, validate — one file
05:30Anatomy of an artifactplate, wells, stamps, crop marks
07:00The skill familyhtmlify modes, deckify modes
08:20Security posturewhat the validator bans; three profiles
09:50The annotation loopcomment in browser, markdown back
11:10Demo/htmlify end to end, fallback ready
13:00When to stay in the terminalfailure modes, rule of thumb
13:50Installone command per agent
14:30Closechecklist + repo
Plate 13 / 14Talk-Deckstdout, made permanent

14.0Close

Before your next long answer evaporates

  • Notice the shape: comparison, plan, timeline, review, system
  • Give it a document — one self-contained HTML file
  • Validate before shipping: --profile rich | app | deck, zero errors
  • Review in the browser; send comments back as markdown
  • Keep short, linear, command-like answers in the terminal

Star it, install it, htmlify your next real answer:
github.com/zakelfassi/htmlify

Plate 14 / 14Talk-Deckstdout, made permanent