À propos
La compétence ax-narrate génère une narration structurée de session lorsqu'elle est déclenchée par des phrases telles que "narrate this session" ou "summarize what changed". Elle capture l'histoire complète du développement, y compris les corrections, les tentatives abandonnées et les échecs d'outils qui n'apparaissent pas dans les PR finales. La sortie est enregistrée sous forme de fichier JSON dans `.ax/narrations/` pour examen dans ax studio.
Installation rapide
Claude Code
Recommandénpx skills add Necmttn/ax -a claude-code/plugin add https://github.com/Necmttn/axgit clone https://github.com/Necmttn/ax.git ~/.claude/skills/ax-narrateCopiez et collez cette commande dans Claude Code pour installer cette compétence
Documentation
ax:narrate - write the session's story as a structured narration
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.
Step 1 - identify the session
- Preferred:
ax sessions here --days=1 --jsonand pick the current session's id (the one matching this conversation). Use the short id. - If
axis unavailable or the session isn't ingested yet, derive a slug:<repo>-<YYYYMMDD-HHmm>. Note inmetathat turn seqs are best-effort ordinals in that case. - If available,
ax sessions show <id> --jsongives you the real turn seqs to anchor against. Prefer real seqs over guesses.
Step 2 - reconstruct the story from your own context
Re-read the conversation in your head before writing anything:
- What did the user originally ask for? (intent)
- What existed before, what exists now? (before/after)
- Where did the user redirect or correct you? EVERY one of these
becomes a
correctionanchor. No exceptions. - Which tool failures actually mattered (changed your approach, cost
real time, forced a workaround)? Each becomes a
tool_failureanchor. Skip trivial retries that changed nothing. - Which attempts were abandoned? They get a stop or at least a
turnanchor - abandonment is part of the story.
Step 3 - choose 3-7 stops, in reading-flow order
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):
- Entry point first: the change that, understood alone, unlocks the rest.
- Cause before effect: the correction comes before the code it caused.
- Definitions before consumers: types/schema stops before usage stops.
- Verification last: tests, typecheck, and the failures hit on the way.
- Combine trivial housekeeping into one final stop, or omit it.
Step 4 - write each stop
- title: short and friendly. "Call counts become a char diffstat", not "Changes to files-touched.ts".
- gist: ONE sentence. Not two. A reader who reads nothing else must get the stop from the gist. Conversational, the way you'd say it to a colleague.
- detail: 2-4 sentences of markdown (paragraphs,
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. - transition: a short connective phrase to the next stop; empty
string
""for the last stop. - anchors: MUST be non-empty. An unanchored stop is an unsupported claim. Anchor kinds:
| 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 |
Hard anchor rules
file_hunkcarries 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: nullfor pure insertions,new_text: nullfor pure deletions. Never both null.- Every user correction/redirect in the session gets a
correctionanchor with a verbatim (trimmed)quoteand a concreteoutcome- what actually changed because of it. - Every consequential tool failure gets a
tool_failureanchor with a realerror_excerptand how you recovered (or"abandoned"). - Never fabricate turn seqs. Use
ax sessions showseqs when you have them; otherwise count user turns from the start of the conversation and say so in the detail. code_stateis the architecture spine of the narration: pick ONE stableartifactid (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. Usecode_statefor the evolving design; usefile_hunkfor one-off code jumps (those render as static before/after diffs, not motion).
Step 5 - emit the artifact
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:
stopsnon-empty (3-7), every stop'sanchorsnon-empty.- Every gist is one sentence; every
correctionhas anoutcome; everytool_failurehas arecovery; nofile_hunkwith both sides null or empty. - Strings are plain JSON strings (escape newlines in hunks as
\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.
Dépôt GitHub
Questions fréquentes
Qu’est-ce que le Skill ax-narrate ?
ax-narrate est un Skill Claude créé par Necmttn. Un Skill regroupe des instructions et des ressources que Claude charge à la demande pour effectuer des tâches liées à ax-narrate sans consigne supplémentaire.
Comment installer ax-narrate ?
Utilisez les commandes d’installation de cette page : ajoutez ax-narrate à Claude Code comme plugin ou clonez son dépôt dans votre dossier skills, puis redémarrez Claude pour charger le Skill.
À quelle catégorie appartient ax-narrate ?
ax-narrate appartient à la catégorie Méta.
ax-narrate est-il gratuit ?
Oui. ax-narrate est référencé sur AIMCP et son installation est gratuite.
Compétences associées
Cette compétence propose une configuration éprouvée en production pour Content Collections, un outil axé sur TypeScript qui transforme des fichiers Markdown/MDX en collections de données typées de manière sûre avec une validation Zod. Utilisez-la lors de la création de blogs, de sites de documentation ou d'applications Vite + React riches en contenu pour garantir la sécurité de typage et la validation automatique du contenu. Elle couvre tout, de la configuration du plugin Vite et de la compilation MDX à l'optimisation des déploiements et la validation des schémas.
Cette compétence permet aux développeurs de créer des applications avec la plateforme de marchés prédictifs Polymarket, incluant l'intégration d'API pour le trading et les données de marché. Elle fournit également une diffusion de données en temps réel via WebSocket pour surveiller les transactions en direct et l'activité du marché. Utilisez-la pour mettre en œuvre des stratégies de trading ou pour créer des outils traitant les mises à jour de marché en direct.
Cette compétence aide les développeurs à créer des plugins OpenCode qui s'interconnectent avec plus de 25 types d'événements tels que les commandes, les fichiers et les opérations LSP. Elle fournit la structure du plugin, les spécifications de l'API événementielle et les modèles d'implémentation pour les modules JavaScript/TypeScript. Utilisez-la lorsque vous avez besoin d'intercepter, de surveiller ou d'étendre le cycle de vie de l'assistant IA OpenCode avec une logique personnalisée pilotée par les événements.
SGLang est un framework de service LLM haute performance spécialisé dans la génération rapide et structurée pour les workflows JSON, regex et agentiques grâce à son cache de préfixe RadixAttention. Il offre une inférence nettement plus rapide, particulièrement pour les tâches avec des préfixes répétés, ce qui le rend idéal pour les sorties complexes et structurées ainsi que les conversations multi-tours. Choisissez SGLang plutôt que des alternatives comme vLLM lorsque vous avez besoin d'un décodage contraint ou que vous construisez des applications avec un partage étendu de préfixes.
