From ax
Generates structured session narrations capturing corrections, dead ends, and tool failures missed by PR diffs. Outputs .ax/narrations/<session-id>.json for ax studio review.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ax:narrateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You were there. This skill turns YOUR OWN memory of the session into a
You were there. This skill turns YOUR OWN memory of the session into a reviewable artifact: 3-7 stops in reading-flow order, each anchored to real evidence - code hunks, turn numbers, user quotes, failures. The point is to capture what a PR diff never shows: the corrections, the dead ends, the recoveries.
The artifact validates against SessionNarration in
apps/studio/src/routes/narration-types.ts and renders in ax studio.
ax sessions here --days=1 --json and pick the current
session's id (the one matching this conversation). Use the short id.ax is unavailable or the session isn't ingested yet, derive a
slug: <repo>-<YYYYMMDD-HHmm>. Note in meta that turn seqs are
best-effort ordinals in that case.ax sessions show <id> --json gives you the real turn
seqs to anchor against. Prefer real seqs over guesses.Re-read the conversation in your head before writing anything:
correction anchor. No exceptions.tool_failure
anchor. Skip trivial retries that changed nothing.turn anchor - abandonment is part of the story.A stop is a LOGICAL unit of change, not a file. If three files changed for one reason, that is ONE stop with several anchors. Order rules (stolen from the code-tour playbook because they work):
inline code,
bold). Say WHY the change looks the way it does; "we did X
instead of Y because Z" is exactly what the reader wants."" for the last stop.| kind | required fields | use for |
|---|---|---|
file_hunk | file, old_text, new_text, label, opt turn_seq | a real code change |
code_state | artifact, label, lang, code, opt turn_seq | the evolving architecture snapshot |
turn | turn_seq, label | a plain moment in the transcript |
user_direction | turn_seq, quote | user steering (not correcting) |
correction | turn_seq, quote, outcome | user correcting course |
tool_failure | turn_seq, tool, error_excerpt, recovery | consequential failure |
term | name, definition | a domain term the story leans on |
file_hunk carries VERBATIM old/new fragments from the actual edits
you made - copy the real text, never paraphrase code. Keep hunks
short (5-15 lines per side); pick the most telling fragment, not the
whole edit. old_text: null for pure insertions, new_text: null
for pure deletions. Never both null.correction
anchor with a verbatim (trimmed) quote and a concrete outcome -
what actually changed because of it.tool_failure anchor with a
real error_excerpt and how you recovered (or "abandoned").ax sessions show seqs when you have
them; otherwise count user turns from the start of the conversation
and say so in the detail.code_state is the architecture spine of the narration: pick ONE
stable artifact id (e.g. "review-architecture") and restate the
FULL snapshot at each stop where the design moved - pseudo-code of
types/interfaces, how they compose, and the call stack (plan-style:
Caller -> Callee // note). Consecutive snapshots of the same
artifact animate token-by-token in studio, so KEEP shared lines
byte-identical between stops and let only the real delta differ - a
new method, a renamed shape, an added edge case. Use code_state
for the evolving design; use file_hunk for one-off code jumps
(those render as static before/after diffs, not motion).Write .ax/narrations/<session-id>.json (create the directory if
needed) with exactly this top-level shape:
{
"schema_version": 1,
"kind": "narration",
"meta": {
"session_id": "<id>",
"generated_at": "<ISO-8601 now>",
"generator": "skill",
"model": "<your model id>"
},
"title": "...",
"intent": "...",
"before": "...",
"after": "...",
"stops": [ { "title": "...", "gist": "...", "detail": "...", "transition": "...", "anchors": [ ... ] } ]
}
Before finishing, self-check against the validator's rules:
stops non-empty (3-7), every stop's anchors non-empty.correction has an outcome;
every tool_failure has a recovery; no file_hunk with both
sides null or empty.\n).Then tell the user where the file landed and give a 2-line summary of the story you wrote. Do not paste the whole JSON into chat.
npx claudepluginhub necmttn/axFinds, analyzes, and shares AI coding sessions (Claude Code, Cursor, Codex) using vibe-replay. Generates replay artifacts, session summaries, and attaches context to PRs.
Generates and saves Markdown session logs capturing objectives, file changes, referenced materials, technical notes, future plans, open items, and metrics to resume project work across conversations.
Ingests a coding session JSONL into an AKB vault as structured notes, drafting session reports, TILs, tasks, ideas, and decisions.