Share what Claude Code produced
You asked Claude Code to trace the regression, or plan the Postgres upgrade, or work out what changed in the dependency tree since the last release. It did the work. The result is four hundred lines of well-structured analysis in a terminal buffer on your laptop.
Every way you move it from there loses something. Scrollback gets truncated by the pane height. A screenshot loses the tables and every link. Pasting into Slack strips the structure and sinks below the next standup thread. Committing it means the audience is exactly the set of people with a checkout, which is almost never the set of people who asked.
Let it publish
Attach Comma's MCP server — see Claude Code setup, which is
one claude mcp add and a scoped token — or install the
Claude Code plugin, which brings the slash commands
along with it.
Then write the rule down once, in CLAUDE.md, so it applies to every session
without you re-typing it:
When you finish work a human needs to read — an audit, a migration plan, a
postmortem, a benchmark — publish it to Comma as an HTML report and reply with
the URL. Do not print the full document into the transcript. Keep the report id
in `.claude/comma-report-id` and update that report on later runs.
From then on "audit our dependencies" ends with a link. Claude Code writes the HTML, calls the publish tool, and hands you something you can paste into the thread where the question started.
Headless runs are the real win
Interactive sessions at least have you sitting in front of them. A scheduled
claude -p run does not:
claude -p "Review last night's error budget burn and publish the summary \
to Comma. Reply with only the URL." >> "$GITHUB_STEP_SUMMARY"
The job prints one URL. Nobody reads a 4,000-line log to find out whether the error budget is fine — they open the page. See CI reports if the run lives in a pipeline, or routines if you would rather Comma own the schedule.
Why a report and not a transcript
- It renders. Tables stay tables, the flame graph stays a flame graph, the diff stays aligned. The markup is stored verbatim and served in a sandboxed iframe.
- Readers need nothing. No Claude subscription, no terminal, no repo access.
- Comments anchor to the line. Someone highlights step 4 of the migration and says "not until the vendor contract renews," and the thread stays pinned there — see commenting on HTML.
- Context stays cheap. A published report costs one URL in the transcript instead of the whole document on every subsequent turn — see context budgeting.
- Re-running keeps the URL. Update the same report and yesterday's link still resolves, with the old version in the revision history.
Worth knowing
- Scope the token down.
reports:writeis enough to publish. A token that can also read every report in the account is a wider blast radius than a CLI needs — see scoped tokens. - HTML body: 5 MB. That is a lot of prose and a little base64.
- Nothing re-executes. A report is a snapshot, not a live dashboard. For a refresh on a schedule, hand the job to a routine.
Try it
Comma is free — unlimited reports, unlimited commenters, unlimited revision history.