Use when explaining System V AMD64, ARM AAPCS, RISC-V psABI, stack frames, variadic calls, or FFI register rules. Not for the Rust FFI binding layer: use rust-ffi.
日本語の概要は準備中です。原文の説明を表示しています。
Use when asked to create an explainer document for a concept, diff, idea, or work recap. Drafts and verifies it in a scratch directory. Not for one-screen explanations: use explain-concept.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
| Field | Bound contract |
|---|---|
| Trigger | The user asks for an explainer document for a concept, diff reference, idea, or work recap window, or invokes the skill bare. |
| Authority | Reversible local: writes only to an isolated scratch run directory under /tmp/odin-$(id -u)/explainer-artifact/; rollback is deleting the run directory. No remote mutation. |
| Side effect | Creates and structurally verifies a durable local explainer artifact under the scratch run directory, presents it to the user, and stops before publishing or remotely relocating it; a human performs any publication or remote relocation. |
| Done | A structurally verified explainer artifact exists in the scratch directory and is presented to the user; any publication or remote relocation remains an unexecuted human handoff. A run that correctly ends without an artifact, an operational question answered in chat, an empty recap window, a bare invocation the user did not answer, is equally done. |
md instead of the default HTML).Classify the request into one of four input shapes, concept, diff, idea, or work-recap window, plus its audience. Classify plain language with no token by meaning. Routing guards: a verdict question ("Should we adopt X?") is not taught; a request to document a solved problem for future work is not taught. Explain an idea input as given: its implications and trade-offs. Never expand it into options or a requirements dialogue. Apply the operational-question gate: answer a diagnostic question ("why is this failing?") in chat rather than teaching it. Concept-vs-diff tiebreak: when a phrase names both a concept and a repo path, prefer diff when a ref is supplied and concept otherwise. Done when: the request is classified into one input shape with audience, or an operational question is answered in chat.
Bare invocation: ask one blocking question, "What should I explain?", offering a shortcut option for a recap of recent work in this repo alongside free-text. Do not produce a default artifact unprompted. If the user does not answer, the run ends as done with no artifact. Done when: the blocking question is asked or the run ends on no answer.
Create the run directory before any artifact exists. Run this block as written rather than improvising a mkdir, because the checks refuse a scratch root not owned by the agent or one reached through a symlink:
SCRATCH_ROOT="/tmp/odin-$(id -u)";
[ ! -L "$SCRATCH_ROOT" ] && (umask 077; mkdir -p "$SCRATCH_ROOT") 2>/dev/null && [ ! -L "$SCRATCH_ROOT" ] && [ -O "$SCRATCH_ROOT" ] && [ -w "$SCRATCH_ROOT" ] || SCRATCH_ROOT="${TMPDIR:-/tmp}/odin-$(id -u)";
if [ -L "$SCRATCH_ROOT" ]; then echo "unsafe scratch root symlink: $SCRATCH_ROOT" >&2; exit 1; fi;
(umask 077; mkdir -p "$SCRATCH_ROOT") || exit 1;
if [ -L "$SCRATCH_ROOT" ] || [ ! -O "$SCRATCH_ROOT" ]; then echo "scratch root is not owned by the current user: $SCRATCH_ROOT" >&2; exit 1; fi;
chmod 700 "$SCRATCH_ROOT" || exit 1;
RUN_DIR="$SCRATCH_ROOT/explainer-artifact/$(date +%Y%m%d)-$(openssl rand -hex 3)";
(umask 077; mkdir -p "$RUN_DIR") || exit 1; chmod 700 "$RUN_DIR" || exit 1;
echo "$RUN_DIR";
Done when: the run directory is created and its path is echoed.
Gather grounding material based on the input type. Sufficiency criteria for each shape:
CORPUS.md when it exists, or ask once which source to ground in.main..HEAD with uncommitted work): do not silently explain something else; say what the ref resolved to, name the nearest real candidate (the working tree, the last commit), and use it only after the user agrees. When the user cannot be asked, use it and state the substitution in the artifact's Subject.Check-in gate, before anything is revealed. Judge whether the material warrants a check-in (a substantial change or concept the user is likely to need to recall). Offer it with the blocking question tool, recording the user's exact choice as Just the explainer or Quiz me. Only Quiz me enables the prediction and exercise mechanics; Just the explainer skips both but still composes and presents the report. If the warrant test skips the offer, proceed without either mechanic. Do not offer it again after the user declines. In diff mode, word the offer without describing the change's content or purpose, so the offer does not pre-leak the reveal. Done when: the check-in choice is recorded or the offer is skipped.
Diff mode with Quiz me selected: hard ordering rule. No interpretive content, explanation, annotation, diagram, or surfaced opportunity, may be shown before the user's prediction turn ends. Show only the raw change reference (the diff or its stat summary), ask for the prediction ("What do you think this change does, and why was it made?"), and end the turn there. When no blocking tool exists, ask in chat and stop. Compose the explainer only after the prediction lands; the reveal names the gaps between the prediction and what the change actually does. Done when: the prediction is received before any interpretive content is shown.
Compose the explainer. Default format is a single self-contained HTML file; use Markdown only when intake resolved output:md. Voice is personal by default, adapted for another reader on request at unchanged depth. Write the artifact to $RUN_DIR/explainer.html (or explainer.md) before anything else happens with it. Then perform the structural and link check to establish the checked state:
[unchecked] next to the link text.
If the structural check fails, fix the artifact and re-check once. If it still fails, report the structural error and do not present the artifact as checked. Done when: the artifact is written to $RUN_DIR/explainer.html (or explainer.md), passes the structural and link check, and is displayed to the user.Exercises: only when the recorded exact choice was Quiz me. Pose exercises in chat, one at a time, using the blocking question tool where its option shape fits and free chat where the answer is narrative. Check each answer, correct it, and name the gap it exposed. Do not put exercises inside the artifact. When the choice was Just the explainer, skip this step. Done when: each exercise is posed, answered, checked, and gap-named, or skipped for Just the explainer.
Destination ask and close. Ask for the destination once with the blocking question tool. Never publish without human interaction or infer consent: a destination the user named up front is a choice of destination, not consent to publish. For any destination requiring publication or remote relocation, present the full warning, require explicit confirmation after the user has seen it, and stop. Hand publication or relocation to the human rather than executing it. If the consent sequence cannot be completed, do not publish; preserve the canonical artifact and report its local $RUN_DIR/explainer.html path. When no interaction is possible at this ask, do not hang or discard the artifact. It is already displayed and stable at its path; report the local path and end. Done when: the destination is resolved with explicit consent, or the local artifact path is reported with publication as an unexecuted human handoff.
$RUN_DIR is a real partial result; a failed publish never deletes it. Rollback for any local write is deleting $RUN_DIR; no VCS, credential, paid, published, deployed, or remote mutation is performed, so no remote rollback is needed.A structurally verified explainer artifact at $RUN_DIR/explainer.html (or explainer.md), displayed as an inline summary plus the file path, plus any check-in exercises run in chat when Quiz me was selected, with any publication or remote relocation reported as an unexecuted human handoff, or a done run with no artifact (operational question answered in chat, empty recap window, unanswered bare invocation).
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when explaining System V AMD64, ARM AAPCS, RISC-V psABI, stack frames, variadic calls, or FFI register rules. Not for the Rust FFI binding layer: use rust-ffi.
日本語の概要は準備中です。原文の説明を表示しています。
Use when configuring ADC sampling time, DMA-driven ADC, calibration, or DAC channel setup on bare-metal MCUs. Not for the DMA stream itself: use dma-baremetal.
日本語の概要は準備中です。原文の説明を表示しています。
Use when creating AF_XDP sockets, configuring UMEM and XSK rings, writing an XDP redirect program, or choosing copy versus zero-copy mode. Not for full kernel bypass: use dpdk.
日本語の概要は準備中です。原文の説明を表示しています。
Use when a completed session needs an agent-environment retrospective. Not for an engineering retrospective from telemetry: use engineering-retrospective.
日本語の概要は準備中です。原文の説明を表示しています。
Use when a redacted, trimmed agent transcript must be appended to a GitHub PR or issue body, with human approval and preview. Not for automated or model-initiated insertion.
日本語の概要は準備中です。原文の説明を表示しています。
Use when a repo needs agent setup, AGENTS.md added or made lean, CLAUDE.md audited, or agent instructions scored or pruned. Not for remote, credential, publish, deploy, or irreversible changes.
日本語の概要は準備中です。原文の説明を表示しています。