| name | distill-and-link |
| description | Stop forwarding raw AI output to humans. Use when the session's result needs to go to another person, "summarise this for the team", "give me something to send my PM", "distill and link". Writes a short summary the sender can own and ships the full working behind one link. Never uploads the transcript. |
Distill and Link
Forwarding a full AI response to a colleague delegates your reading to them. They get three thousand words they can tell you did not write, and you get a reputation as a copy-paste conduit between the model and the team: a meat proxy. The fix is to send less and link more. A handful of bullets you can defend in a meeting, one link to the full working for anyone who wants to check it.
The three layers
- The summary. Four or five bullets, pasted into the message itself. This is the deliverable.
- The full working. A clean document behind one link: the decision, the reasoning, the trade-offs, the options rejected and why.
- The raw transcript. Never leaves the machine. Not the product, not the appendix, not negotiable.
Get the raw material for free
The session transcript is already on disk. Run the bundled extractor before spending a single token:
python3 scripts/extract.py
python3 scripts/extract.py --list
python3 scripts/extract.py --last 12
It pulls the user prompts and the assistant's actual prose out of the session JSONL: no thinking blocks, no tool calls, no tool noise, no subagent chatter. A 300KB transcript comes out as a few KB of conversation, and it warns on stderr when anything in the extract looks like a secret. Extraction is deterministic; only the distillation earns a model.
Build the summary
- Distill the deliverable of the session, not the last message. If the session iterated five times, the summary is the converged result with the dead ends gone.
- Each bullet is a claim the sender could defend out loud without notes. If they could not, it does not go in.
- Write in the sender's voice, answer first, no slop tells (prose-revision applies). The recipient should not smell the model.
- Never invent a bullet. Everything traces back to the session.
Build the full working
Assemble, do not regenerate. The full working is the extract, curated: delete the dead ends, keep the converged answer and the roads not taken, stitch the survivors into one document, and strip the chat register ("Want me to draft it?" cannot ship). Aim it at the person who clicks through: they have just read the summary, now they want the why. Regenerating from a fat context is the expensive way to produce a worse version of what the session already said.
Cheap mode
The distillation does not need the session that produced it. Once the extract exists, a small model in a fresh context writes the bullets for pennies:
python3 scripts/extract.py | claude -p --model claude-haiku-4-5 \
"Distill the deliverable of this session into 4-5 bullets the sender could defend in a meeting. First person, plain English, no hype. Bullets only."
The same trick works after the fact: --list an old session and distill it without reopening its context. A cheap draft still gets the sender's eyes before it goes anywhere.
The gate
Show the human the full working before anything gets a URL. Sweep it for secrets, keys, client names, internal hostnames, file paths, anything not already public. The upload is the outward-facing act; it waits for a nod.
The share
Default backend is a secret gist, because it needs no infrastructure and any box with gh authed already has it:
gh gist create --desc "<topic>" 01-summary.md 02-full-working.md
Two files, numbered so the summary renders on top. The recipient clicks and reads a page: summary again, then the detail. No login, no account, renders fine on a phone.
Know what secret means: unlisted, not locked. The URL is unguessable, but anyone holding it can read it, and it lives until gh gist delete. Right for "how about this solution?" to the team. Wrong for genuinely sensitive content: if the environment has a sanctioned sensitive-share path (expiring links, an internal paste service), use that instead, and if it does not, stop and say so rather than shipping a forever URL.
The output
End with a paste-ready block and nothing after it:
- <bullet one, the actual answer>
- <bullet two>
- <three to five total>
Full working: <url>
Offer a provenance line ("AI-assisted, distilled by me") but let the human decide. Owning the distillation is the point; declaring the assistance is their call, per audience.
Rules
- The transcript never gets uploaded, in whole or in part.
- One link per share. A message with three links is a wall of AI output with extra steps.
- The human sends the message. Never post, mail, or Slack it on their behalf.
- If the session produced no defensible deliverable, say so. Distilling a meander produces a confident summary of nothing.