Spec 065 introduces this skill as jig's on-demand explainer — the third
consumer of the shipped lexicon (065-01). The barrier jig is lowering is
vocabulary: the artifacts are dense with opinionated jargon (SPIDR, ADR,
vertical slice, reconciliation, deviation log, DoR/AC/DoD, frontmatter) and
almost none of it is explained where the reader meets it. The hook (065-02)
surfaces one-line defs just-in-time; this skill is the strong-handholding
escalation — define a term in depth, or translate a whole dense spec/ADR into
plain language for a junior.
Like /jig:clarify, /jig:pr-review, and /jig:arch-review, explain is a
judgment skill — it ships no .py helper. The only determinism it
needs (load the merged lexicon, read the named artifact, resolve the refs it
links) Codex runs inline via Read + the 065-01 loader. The plain-language
quality is judgment exercised by this prompt, not something a unit test can
assert — the same accepted shape as every judgment-only jig skill.
What this skill does
Translates jig's vocabulary and artifacts into plain language for a reader who
is new here — a junior, or anyone meeting spec-driven work for the first
time. It has three modes, selected by what the argument is:
- Term mode — the argument is a word or short phrase (
/jig:explain reconciliation). The skill returns that term's plain-language definition from
the merged lexicon (jig's shipped lexicon.json with the project's
docs/memory/glossary.md overlaid on top — 065-01), plus its example and
see-also when present. If the term is not in the lexicon, the skill says
so plainly rather than inventing a definition.
- Artifact mode — the argument is a path to a spec or ADR
(
/jig:explain docs/specs/062-refactor-workflow/spec.md). The skill produces
a fixed-shape, junior-grade walkthrough of that artifact, defining every
jig term it uses inline and auto-pulling the ADRs/specs it links so the
reader doesn't have to chase references.
- Passage mode — the argument is a pasted snippet of jig output that is
neither a single term nor a file path: a review
VERDICT: envelope, a
status-board row like IN_PROGRESS (wt-me), a hook's "Unrecognized
references in prompt…" message, a workflow.py transition refusal, a
session-plan block. The skill scans the snippet for jig terms (defining each
inline) and explains what it is and what — if anything — the reader
should do. When the snippet carries no jig vocabulary at all, it gives a
plain generic read. This is the mode for the most common confusion moment: a
reader pastes the thing that stumped them.
All three modes are ephemeral: the output is chat-only. The skill writes nothing
to disk — no --save flag, no appended section, no file mutation. This keeps
the hot path clean (the 055/057 context-cost discipline) and matches the
clarify-Q3 resolution that explain output is always chat-only.
This is a best-effort comprehension floor, not a guarantee the reader will
understand everything — the same honest framing as jig's security floor
(ADR-0013) and the soft context mechanisms (055/057). The skill surfaces and
explains; it does not certify understanding.
When to use vs. when to defer
Defer to a richer installed skill first. If another installed skill's
description identifies it as handling plain-language explanation, onboarding, or
artifact/codebase walkthroughs, prefer it — jig's explain is a slim baseline.
This skill does not defer to the generic built-in (a bare explain/init
with no onboarding framing); it only steps aside for a skill whose description
names the explanation/onboarding/walkthrough job.
Three sibling jig skills are easy to confuse with this one:
/jig:independent-review — reviews a finished implementation against
its spec's ACs. It evaluates whether the code is correct; this skill explains
what the spec says to a reader who finds it dense. Reach for
independent-review after a slice is implemented; reach for explain when a
reader is stuck on the vocabulary or shape of an artifact.
/jig:analyze — cross-artifact consistency analysis: does spec A
contradict ADR B? It hunts for drift between artifacts. This skill explains
one artifact (and the refs it pulls in) to a human. Reach for analyze to
audit alignment; reach for explain to understand.
/jig:memory-sync — persists a new term to the project glossary or
hot cache. It writes vocabulary. This skill reads the existing lexicon to
explain a term; it never authors one. Reach for memory-sync to record a term;
reach for explain to look one up. (If explain flags a term as absent and the
user wants it captured, route them to /jig:memory-sync.)
Rule of thumb: understand an artifact or term → this skill. Persist a term →
/jig:memory-sync. Check the implementation → /jig:independent-review. Audit
across artifacts → /jig:analyze.
Inputs — mode precedence
The argument selects the mode by a fixed resolution order:
path → artifact mode · exact / normalized lexicon key → term mode ·
otherwise → passage mode.
- A resolvable path to a spec or ADR → artifact mode. Examples:
/jig:explain docs/specs/062-refactor-workflow/spec.md,
/jig:explain docs/decisions/adr-0021-lexicon-home-and-overlay.md. A spec
directory (docs/specs/065-lower-vocabulary-barrier/) resolves to its
spec.md.
- A word or short phrase that is an exact / normalized lexicon key → term
mode. Examples:
/jig:explain SPIDR, /jig:explain "vertical slice",
/jig:explain deviation log. Matching is case-insensitive and
whitespace-collapsed (the lexicon's key convention).
- Anything else → passage mode (a pasted snippet of jig output, or any
text that is neither a resolvable path nor a lexicon key).
Two carve-outs sit on top of that order:
- Term-mode honesty (do not let passage mode swallow the absent-term
signal). An unknown short query phrase — a brief, single-line argument
that looks like it wants a definition but isn't a lexicon key — still routes
to term mode and gets its honest "that term isn't in the lexicon" flag
(see Term mode step 4). It is not silently absorbed into a passage-mode
guess. Distinguish by shape, not word count: a short single-line phrase is
a term query (some lexicon keys are themselves 3+ words, e.g.
closed-spec drift policy); a multi-line block or output-shaped paste is a passage. Passage
mode is for pasted output, not a greedy catch-all that erodes the absent-term
signal.
- Path-shaped-but-unresolvable input — ask, don't guess (clarify Q1). When
the argument looks like a repo file path — it sits under
docs/ (e.g.
docs/specs/…, docs/decisions/…) or ends in a doc/code extension like .md
— but no file exists there, the most likely cause is a typo, a stale path,
or a path from another repo. Ask the user whether they meant a file path (and
offer to retry with a corrected one) or a snippet to explain — don't silently
fall through to passage mode and answer the path string as if it were prose. (A
bare / alone — as in a pasted command line or URL — does not count as
path-shaped; that's a passage.)
Term mode
Load the merged lexicon. Resolve the project root, then load jig's
shipped lexicon with the project's glossary overlaid on top, using the
065-01 loader. Run it inline via Bash — the loader is stdlib-only:
python3 -c "
import sys, os, json
# Auto-resolve the loader across both layouts (copy-paste-safe):
# jig repo -> skills/_common; scaffolded project -> .codex/skills/_common.
for d in ('skills/_common', '.codex/skills/_common'):
if os.path.isfile(os.path.join(d, 'lexicon.py')):
sys.path.insert(0, d); break
import lexicon
merged = lexicon.load('.') # project root; reads docs/memory/glossary.md overlay
print(json.dumps(merged, indent=2))
"
(The loader lives at .codex/skills/_common/lexicon.py in a scaffolded
project and skills/_common/lexicon.py in the jig repo itself — the snippet
above probes both. The project glossary overlay wins on a collision — a
project that redefines a term gets its own definition, per ADR-0021.)
Look up the term. Normalize the argument (lowercase, collapse internal
whitespace) and find its key in the merged lexicon.
Present the definition. When the term is found, render:
- the plain-language definition (the
plain field — a junior-readable
paragraph, not just the one-line short);
- the example, if the entry has one;
- the see-also terms, if present, so the reader can follow related
vocabulary.
Flag an absent term — never invent. If the term is not in the merged
lexicon, say so explicitly: "<term> isn't in jig's lexicon or this
project's glossary." Offer the nearest matches if any look close, and
suggest /jig:memory-sync if the user wants to capture it. Do not
fabricate a definition for a term the lexicon doesn't carry — a confident
wrong answer is worse than an honest gap (the clarify/AC-honesty boundary).
Artifact mode — strong handholding
The argument is a path to a spec or ADR. Read it, resolve the artifacts it
links, and produce a junior-grade walkthrough with this fixed shape:
- In one sentence. What this artifact is and what it decides/delivers, in a
single plain sentence a newcomer can hold onto.
- Why it exists. The problem or pressure that made someone write this — the
motivation, not the mechanism.
- Words you'll need first. The jig terms a newcomer won't know, defined
inline from the merged lexicon (the
plain field) — the ones load-bearing for
this artifact, not a glossary dump of every term it uses. This is the
vocabulary-barrier fix: the reader gets the words before the prose that
uses them. If a term the artifact uses is not in the lexicon, flag the
gap (don't invent) and define it from the artifact's own context if you can,
marking it as not-from-the-lexicon.
- Walkthrough. Section by section, in plain language. Translate the dense
prose: spell out acronyms, unpack jargon, and say what each section is
actually doing. Keep the artifact's own order.
- The decisions & why (ADRs especially). For an ADR, lay out the
alternatives considered and the trade-off that settled it — the
reasoning, so the reader understands why this and not the others. For a
spec, summarize the load-bearing choices (the Clarifications / Design notes).
- If you had to work on this. A short, concrete orientation: where the real
work lives, what the reader would touch first, and the one or two things that
would trip them up.
Auto-pull linked refs. While reading the artifact, follow the ADRs and specs
it links (e.g. [ADR-0021](...), [spec 055](...), sibling slice files) and
read them too, so you can resolve those references for the reader inside
the walkthrough instead of leaving a trail of links to chase. Pull what the
artifact directly depends on; don't recurse the entire graph — one hop of the
links that carry the artifact's meaning is the target. If a linked artifact is
missing or unreadable, note it briefly and keep going (fail-soft).
Passage mode — explain a pasted snippet
The argument is a chunk of text the reader copy-pasted because it confused
them — typically jig output. Reuse the term-scan primitive from artifact mode,
then explain the snippet:
Load the merged lexicon (the same inline loader recipe shown under Term
mode) and scan the passage for jig terms — the "Words you'll need first"
primitive, applied to the pasted text instead of a file. Define each jig term
present, inline, from the plain field. Not capped at the 065-02 hook's
per-prompt N (clarify Q4): this is an explicit, on-demand request, so define
as many as the passage genuinely needs — but scope to the terms that are
load-bearing for understanding it, not every term present.
Say what the passage is and what to do. In plain language: what this
snippet is telling the reader, and what — if anything — they should do next
(e.g. "this is a review verdict saying the slice passed; nothing to do" or
"this transition was refused because another branch holds the claim — release
it with … --release or pick a different slice").
Identify the source — best-effort, never fabricated (clarify Q3 / AC3).
When the snippet is recognizably from a known jig surface, name it and explain
accordingly:
- a
VERDICT: … block → a review verdict (compliance / craft / arch /
reconciliation pass);
- a
| … | … | DONE | … | row → a docs/specs/README.md status-board row;
- "Jig terms in this prompt…" / "Unrecognized references in prompt…" → the
jig-memory-scan hook's additionalContext;
- "refuses a foreign still-IN_PROGRESS claim" / "transitioned … →" → a
workflow.py transition / claim message;
- a numbered
implement → compliance → … block → a session-plan dispatch
plan.
When the source is not recognizable, say so plainly ("I don't recognize
which jig surface produced this") and still explain the content — do not
invent a source.
No jig vocabulary at all → explain generically (clarify Q2). If the
passage contains no recognizable jig terms (generic prose, or output from a
non-jig tool), give a plain-language read of what it appears to be, with no
jig framing — explain it the way a general assistant would. (This doesn't
conflict with the deferral clause: that only steps aside for a richer
installed explanation skill, not for the absence of jig content.)
Hold the honesty line (never invent). Any jig-shaped token in the passage
(an ADR-####, a NNN-NN slice id, a /jig:* skill, a STATUS word) that
is not in the merged lexicon is flagged as unrecognized rather than given
a fabricated meaning — the same never-invent rule as term mode.
Large, artifact-like pastes → nudge toward artifact mode (clarify Q3).
Passage mode still processes a big block, but if the paste looks like a whole
spec or ADR (it has the section shape, or names its own path), suggest
/jig:explain <path> for the richer six-block walkthrough with auto-pulled
linked refs — passage mode reads only the pasted text, artifact mode resolves
the references too.
Passage mode is ephemeral like the others — it explains in chat and writes
nothing.
Ephemeral output (writes nothing)
The skill's output is always chat-only. It does not:
- write or append to the explained artifact (no
## Explanation section);
- create any new file;
- offer a
--save flag or any disk-writing option.
This was resolved at clarify (Q3): explain is always ephemeral, for zero
context-cost risk and a clean hot path (055/057). If a reader wants the
explanation preserved, that's a deliberate, separate act they take (copy it into
a doc, or run /jig:memory-sync to capture a term) — explain itself never
writes.
No .py helper
Like /jig:clarify, this skill ships no helper script. The only determinism
it needs runs inline:
- lexicon lookup via the 065-01 loader (
skills/_common/lexicon.py — a
one-line python3 -c invocation, shown above);
- artifact + linked-ref reading via the Read tool.
There is no explain.py; section surgery and lookups happen inline. The
trade-off, accepted for a judgment skill: the walkthrough is generated prose, so
its quality is judgment exercised by this prompt, not asserted by a unit test
(the AC-testability gap flagged at clarify, accepted — the structural surface
is tested: registration, ephemeral contract, no-helper, deferral language).
Gotchas
- Never invent a definition. A term absent from the merged lexicon is
flagged as absent, not fabricated. Honesty over a confident-sounding guess.
- Project glossary wins. The merged lexicon overlays the project's
docs/memory/glossary.md on jig's shipped lexicon.json; a project that
redefines a term gets its own definition (ADR-0021). Always load via the
loader, never read lexicon.json alone — that would miss the overlay.
- Ephemeral, always. No file writes, ever. If you catch yourself about to
Edit/Write the artifact, stop — that's not this skill.
- One hop of links, not the whole graph. Auto-pull the refs the artifact
directly links; don't recurse indefinitely or you'll blow the reader's (and
the orchestrator's) context budget.
- Fail-soft on a degraded lexicon. The loader returns shipped-only (or
empty) on a missing/malformed glossary and never raises; if the lexicon is
empty, term mode still works for whatever is shipped, and artifact mode just
defines fewer terms in "Words you'll need first."
- Mode is chosen by the argument, not a flag. Resolution order: resolvable
path → artifact mode; exact/normalized lexicon key → term mode; otherwise →
passage mode. An unknown single term still goes to term mode (honest
"absent" flag), and a path-shaped-but-missing argument is asked about, not
routed to passage (see Inputs — mode precedence). There is no silent
"ambiguous → give up" dead-end any more: a snippet that is neither a path nor
a key is explained in passage mode.
- Passage provenance is best-effort, never fabricated. Name the producing
jig surface only when you actually recognize the shape; otherwise say you
don't recognize it and explain the content anyway. Don't invent a source.
Relationship to other skills
/jig:memory-sync — complementary. memory-sync persists a term to the
glossary/hot cache; explain reads the merged lexicon to define one. When
explain flags an absent term the user wants kept, route them to memory-sync.
/jig:independent-review — downstream and different. independent-review
checks a finished slice against its spec; explain helps a reader understand
the spec (or ADR) in the first place.
/jig:analyze — sibling, different scope. analyze surfaces drift
between artifacts; explain illuminates one artifact (plus the refs it
pulls in) for a human.
/jig:clarify — sibling judgment skill, opposite direction. clarify asks
the author questions to remove ambiguity from a DRAFT spec; explain helps a
reader get through an already-written dense artifact. Both are no-helper
judgment skills.
- The 065-02 hook (
jig-memory-scan) — the just-in-time sibling. The hook
surfaces a one-line short def of any lexicon term that appears in a prompt,
automatically; this skill is the on-demand, strong-handholding escalation
(full plain def, or a whole-artifact walkthrough).
1---2name: explain-23description: Explain jig vocabulary and artifacts in plain language. Three modes: term mode defines one lexicon term; artifact mode walks through a spec or ADR and its linked references; passage mode explains pasted jig output. Output is ephemeral (chat-only). Auto-triggers when you say explain this term, walk me through this spec, explain this ADR, what does this output mean, or explain this snippet; invoke explicitly with `/jig:explain`. Defers to any other installed skill whose description identifies it as handling plain-language explanation, onboarding, or artifact walkthroughs. Does not defer to the generic built-in. Do not use for finished-slice compliance (use `/jig:independent-review` instead), cross-artifact analysis (use `/jig:analyze` instead), or glossary updates (use `/jig:memory-sync` instead).4---56> Spec 065 introduces this skill as jig's **on-demand explainer** — the third7> consumer of the shipped lexicon (065-01). The barrier jig is lowering is8> vocabulary: the artifacts are dense with opinionated jargon (SPIDR, ADR,9> vertical slice, reconciliation, deviation log, DoR/AC/DoD, frontmatter) and10> almost none of it is explained where the reader meets it. The hook (065-02)11> surfaces one-line defs just-in-time; this skill is the **strong-handholding**12> escalation — define a term in depth, or translate a whole dense spec/ADR into13> plain language for a junior.14>15> Like `/jig:clarify`, `/jig:pr-review`, and `/jig:arch-review`, explain is a16> **judgment skill** — it ships **no `.py` helper**. The only determinism it17> needs (load the merged lexicon, read the named artifact, resolve the refs it18> links) Codex runs inline via Read + the 065-01 loader. The plain-language19> *quality* is judgment exercised by this prompt, not something a unit test can20> assert — the same accepted shape as every judgment-only jig skill.2122## What this skill does2324Translates jig's vocabulary and artifacts into plain language for a reader who25is **new here** — a junior, or anyone meeting spec-driven work for the first26time. It has three modes, selected by what the argument is:2728- **Term mode** — the argument is a word or short phrase (`/jig:explain29 reconciliation`). The skill returns that term's plain-language definition from30 the **merged lexicon** (jig's shipped `lexicon.json` with the project's31 `docs/memory/glossary.md` overlaid on top — 065-01), plus its example and32 see-also when present. If the term is **not** in the lexicon, the skill says33 so plainly rather than inventing a definition.34- **Artifact mode** — the argument is a path to a spec or ADR35 (`/jig:explain docs/specs/062-refactor-workflow/spec.md`). The skill produces36 a fixed-shape, junior-grade **walkthrough** of that artifact, defining every37 jig term it uses inline and **auto-pulling the ADRs/specs it links** so the38 reader doesn't have to chase references.39- **Passage mode** — the argument is a **pasted snippet of jig output** that is40 neither a single term nor a file path: a review `VERDICT:` envelope, a41 status-board row like `IN_PROGRESS (wt-me)`, a hook's *"Unrecognized42 references in prompt…"* message, a `workflow.py` transition refusal, a43 `session-plan` block. The skill scans the snippet for jig terms (defining each44 inline) and explains **what it is** and **what — if anything — the reader45 should do**. When the snippet carries **no jig vocabulary at all**, it gives a46 plain generic read. This is the mode for the most common confusion moment: a47 reader pastes the thing that stumped them.4849All three modes are **ephemeral**: the output is chat-only. The skill writes nothing50to disk — no `--save` flag, no appended section, no file mutation. This keeps51the hot path clean (the 055/057 context-cost discipline) and matches the52clarify-Q3 resolution that explain output is always chat-only.5354This is a **best-effort comprehension floor**, not a guarantee the reader will55understand everything — the same honest framing as jig's security floor56(ADR-0013) and the soft context mechanisms (055/057). The skill surfaces and57explains; it does not certify understanding.5859## When to use vs. when to defer6061**Defer to a richer installed skill first.** If another installed skill's62description identifies it as handling plain-language explanation, onboarding, or63artifact/codebase walkthroughs, prefer it — jig's explain is a slim baseline.64This skill does **not** defer to the generic built-in (a bare `explain`/`init`65with no onboarding framing); it only steps aside for a skill whose description66names the explanation/onboarding/walkthrough job.6768Three sibling jig skills are easy to confuse with this one:6970- **`/jig:independent-review`** — reviews a *finished implementation* against71 its spec's ACs. It evaluates whether the code is correct; this skill explains72 what the spec *says* to a reader who finds it dense. Reach for73 independent-review after a slice is implemented; reach for explain when a74 reader is stuck on the vocabulary or shape of an artifact.75- **`/jig:analyze`** — cross-artifact consistency analysis: does spec A76 contradict ADR B? It hunts for *drift between* artifacts. This skill explains77 *one* artifact (and the refs it pulls in) to a human. Reach for analyze to78 audit alignment; reach for explain to understand.79- **`/jig:memory-sync`** — *persists* a new term to the project glossary or80 hot cache. It writes vocabulary. This skill *reads* the existing lexicon to81 explain a term; it never authors one. Reach for memory-sync to record a term;82 reach for explain to look one up. (If explain flags a term as absent and the83 user wants it captured, route them to `/jig:memory-sync`.)8485Rule of thumb: **understand an artifact or term → this skill. Persist a term →86`/jig:memory-sync`. Check the implementation → `/jig:independent-review`. Audit87across artifacts → `/jig:analyze`.**8889## Inputs — mode precedence9091The argument selects the mode by a fixed resolution order:9293> **path → artifact mode · exact / normalized lexicon key → term mode ·94> otherwise → passage mode.**95961. **A resolvable path to a spec or ADR** → artifact mode. Examples:97 `/jig:explain docs/specs/062-refactor-workflow/spec.md`,98 `/jig:explain docs/decisions/adr-0021-lexicon-home-and-overlay.md`. A spec99 *directory* (`docs/specs/065-lower-vocabulary-barrier/`) resolves to its100 `spec.md`.1012. **A word or short phrase that is an exact / normalized lexicon key** → term102 mode. Examples: `/jig:explain SPIDR`, `/jig:explain "vertical slice"`,103 `/jig:explain deviation log`. Matching is case-insensitive and104 whitespace-collapsed (the lexicon's key convention).1053. **Anything else** → passage mode (a pasted snippet of jig output, or any106 text that is neither a resolvable path nor a lexicon key).107108Two carve-outs sit on top of that order:109110- **Term-mode honesty (do not let passage mode swallow the absent-term111 signal).** An unknown **short query phrase** — a brief, single-line argument112 that *looks* like it wants a definition but isn't a lexicon key — still routes113 to **term mode** and gets its honest *"that term isn't in the lexicon"* flag114 (see Term mode step 4). It is **not** silently absorbed into a passage-mode115 guess. Distinguish by **shape, not word count**: a short single-line phrase is116 a term query (some lexicon keys are themselves 3+ words, e.g. `closed-spec117 drift policy`); a multi-line block or output-shaped paste is a passage. Passage118 mode is for pasted output, not a greedy catch-all that erodes the absent-term119 signal.120- **Path-shaped-but-unresolvable input — ask, don't guess (clarify Q1).** When121 the argument **looks like a repo file path** — it sits under `docs/` (e.g.122 `docs/specs/…`, `docs/decisions/…`) or ends in a doc/code extension like `.md`123 — but **no file exists there**, the most likely cause is a typo, a stale path,124 or a path from another repo. **Ask the user whether they meant a file path (and125 offer to retry with a corrected one) or a snippet to explain** — don't silently126 fall through to passage mode and answer the path string as if it were prose. (A127 bare `/` alone — as in a pasted command line or URL — does **not** count as128 path-shaped; that's a passage.)129130## Term mode1311321. **Load the merged lexicon.** Resolve the project root, then load jig's133 shipped lexicon with the project's glossary overlaid on top, using the134 065-01 loader. Run it inline via Bash — the loader is stdlib-only:135136 ```bash137 python3 -c "138 import sys, os, json139 # Auto-resolve the loader across both layouts (copy-paste-safe):140 # jig repo -> skills/_common; scaffolded project -> .codex/skills/_common.141 for d in ('skills/_common', '.codex/skills/_common'):142 if os.path.isfile(os.path.join(d, 'lexicon.py')):143 sys.path.insert(0, d); break144 import lexicon145 merged = lexicon.load('.') # project root; reads docs/memory/glossary.md overlay146 print(json.dumps(merged, indent=2))147 "148 ```149150 (The loader lives at `.codex/skills/_common/lexicon.py` in a scaffolded151 project and `skills/_common/lexicon.py` in the jig repo itself — the snippet152 above probes both. The project glossary overlay **wins** on a collision — a153 project that redefines a term gets its own definition, per ADR-0021.)1541552. **Look up the term.** Normalize the argument (lowercase, collapse internal156 whitespace) and find its key in the merged lexicon.1571583. **Present the definition.** When the term is found, render:159 - the **plain-language** definition (the `plain` field — a junior-readable160 paragraph, not just the one-line `short`);161 - the **example**, if the entry has one;162 - the **see-also** terms, if present, so the reader can follow related163 vocabulary.1641654. **Flag an absent term — never invent.** If the term is **not** in the merged166 lexicon, say so explicitly: *"`<term>` isn't in jig's lexicon or this167 project's glossary."* Offer the nearest matches if any look close, and168 suggest `/jig:memory-sync` if the user wants to capture it. **Do not169 fabricate a definition** for a term the lexicon doesn't carry — a confident170 wrong answer is worse than an honest gap (the clarify/AC-honesty boundary).171172## Artifact mode — strong handholding173174The argument is a path to a spec or ADR. Read it, resolve the artifacts it175links, and produce a **junior-grade walkthrough** with this **fixed shape**:1761771. **In one sentence.** What this artifact is and what it decides/delivers, in a178 single plain sentence a newcomer can hold onto.1792. **Why it exists.** The problem or pressure that made someone write this — the180 motivation, not the mechanism.1813. **Words you'll need first.** The jig terms **a newcomer won't know**, defined182 inline from the merged lexicon (the `plain` field) — the ones load-bearing for183 this artifact, not a glossary dump of every term it uses. This is the184 vocabulary-barrier fix: the reader gets the words *before* the prose that185 uses them. If a term the artifact uses is **not** in the lexicon, flag the186 gap (don't invent) and define it from the artifact's own context if you can,187 marking it as not-from-the-lexicon.1884. **Walkthrough.** Section by section, in plain language. Translate the dense189 prose: spell out acronyms, unpack jargon, and say what each section is190 actually doing. Keep the artifact's own order.1915. **The decisions & why** *(ADRs especially)*. For an ADR, lay out the192 **alternatives considered** and the **trade-off** that settled it — the193 reasoning, so the reader understands *why* this and not the others. For a194 spec, summarize the load-bearing choices (the Clarifications / Design notes).1956. **If you had to work on this.** A short, concrete orientation: where the real196 work lives, what the reader would touch first, and the one or two things that197 would trip them up.198199**Auto-pull linked refs.** While reading the artifact, follow the ADRs and specs200it links (e.g. `[ADR-0021](...)`, `[spec 055](...)`, sibling slice files) and201**read them too**, so you can resolve those references *for* the reader inside202the walkthrough instead of leaving a trail of links to chase. Pull what the203artifact directly depends on; don't recurse the entire graph — one hop of the204links that carry the artifact's meaning is the target. If a linked artifact is205missing or unreadable, note it briefly and keep going (fail-soft).206207## Passage mode — explain a pasted snippet208209The argument is a chunk of text the reader copy-pasted because it confused210them — typically jig output. Reuse the term-scan primitive from artifact mode,211then explain the snippet:2122131. **Load the merged lexicon** (the same inline loader recipe shown under Term214 mode) and **scan the passage for jig terms** — the "Words you'll need first"215 primitive, applied to the pasted text instead of a file. Define each jig term216 present, inline, from the `plain` field. Not capped at the 065-02 hook's217 per-prompt N (clarify Q4): this is an explicit, on-demand request, so define218 as many as the passage genuinely needs — but scope to the terms that are219 **load-bearing for understanding it**, not every term present.2202. **Say what the passage is and what to do.** In plain language: what this221 snippet is telling the reader, and what — if anything — they should do next222 (e.g. *"this is a review verdict saying the slice passed; nothing to do"* or223 *"this transition was refused because another branch holds the claim — release224 it with `… --release` or pick a different slice"*).2253. **Identify the source — best-effort, never fabricated (clarify Q3 / AC3).**226 When the snippet is recognizably from a known jig surface, name it and explain227 accordingly:228 - a `VERDICT: …` block → a review verdict (compliance / craft / arch /229 reconciliation pass);230 - a `| … | … | DONE | … |` row → a `docs/specs/README.md` status-board row;231 - *"Jig terms in this prompt…"* / *"Unrecognized references in prompt…"* → the232 `jig-memory-scan` hook's `additionalContext`;233 - *"refuses a foreign still-IN_PROGRESS claim"* / *"transitioned … →"* → a234 `workflow.py` transition / claim message;235 - a numbered `implement → compliance → …` block → a `session-plan` dispatch236 plan.237238 When the source is **not** recognizable, say so plainly (*"I don't recognize239 which jig surface produced this"*) and still explain the content — **do not240 invent a source.**2414. **No jig vocabulary at all → explain generically (clarify Q2).** If the242 passage contains no recognizable jig terms (generic prose, or output from a243 non-jig tool), give a plain-language read of what it appears to be, with **no244 jig framing** — explain it the way a general assistant would. (This doesn't245 conflict with the deferral clause: that only steps aside for a *richer246 installed* explanation skill, not for the absence of jig content.)2475. **Hold the honesty line (never invent).** Any jig-shaped token in the passage248 (an `ADR-####`, a `NNN-NN` slice id, a `/jig:*` skill, a `STATUS` word) that249 is **not** in the merged lexicon is flagged as unrecognized rather than given250 a fabricated meaning — the same never-invent rule as term mode.2516. **Large, artifact-like pastes → nudge toward artifact mode (clarify Q3).**252 Passage mode still processes a big block, but if the paste looks like a whole253 spec or ADR (it has the section shape, or names its own path), **suggest254 `/jig:explain <path>`** for the richer six-block walkthrough with auto-pulled255 linked refs — passage mode reads only the pasted text, artifact mode resolves256 the references too.257258Passage mode is **ephemeral** like the others — it explains in chat and writes259nothing.260261## Ephemeral output (writes nothing)262263The skill's output is **always chat-only**. It does **not**:264265- write or append to the explained artifact (no `## Explanation` section);266- create any new file;267- offer a `--save` flag or any disk-writing option.268269This was resolved at clarify (Q3): explain is always ephemeral, for zero270context-cost risk and a clean hot path (055/057). If a reader wants the271explanation preserved, that's a deliberate, separate act they take (copy it into272a doc, or run `/jig:memory-sync` to capture a term) — explain itself never273writes.274275## No `.py` helper276277Like `/jig:clarify`, this skill ships **no helper script**. The only determinism278it needs runs inline:279280- **lexicon lookup** via the 065-01 loader (`skills/_common/lexicon.py` — a281 one-line `python3 -c` invocation, shown above);282- **artifact + linked-ref reading** via the Read tool.283284There is no `explain.py`; section surgery and lookups happen inline. The285trade-off, accepted for a judgment skill: the walkthrough is generated prose, so286its quality is judgment exercised by this prompt, not asserted by a unit test287(the AC-testability gap flagged at clarify, accepted — the structural surface288*is* tested: registration, ephemeral contract, no-helper, deferral language).289290## Gotchas291292- **Never invent a definition.** A term absent from the merged lexicon is293 flagged as absent, not fabricated. Honesty over a confident-sounding guess.294- **Project glossary wins.** The merged lexicon overlays the project's295 `docs/memory/glossary.md` on jig's shipped `lexicon.json`; a project that296 redefines a term gets its own definition (ADR-0021). Always load via the297 loader, never read `lexicon.json` alone — that would miss the overlay.298- **Ephemeral, always.** No file writes, ever. If you catch yourself about to299 Edit/Write the artifact, stop — that's not this skill.300- **One hop of links, not the whole graph.** Auto-pull the refs the artifact301 directly links; don't recurse indefinitely or you'll blow the reader's (and302 the orchestrator's) context budget.303- **Fail-soft on a degraded lexicon.** The loader returns shipped-only (or304 empty) on a missing/malformed glossary and never raises; if the lexicon is305 empty, term mode still works for whatever is shipped, and artifact mode just306 defines fewer terms in "Words you'll need first."307- **Mode is chosen by the argument, not a flag.** Resolution order: resolvable308 path → artifact mode; exact/normalized lexicon key → term mode; otherwise →309 passage mode. An unknown *single term* still goes to term mode (honest310 "absent" flag), and a path-shaped-but-missing argument is **asked about**, not311 routed to passage (see Inputs — mode precedence). There is no silent312 "ambiguous → give up" dead-end any more: a snippet that is neither a path nor313 a key is explained in passage mode.314- **Passage provenance is best-effort, never fabricated.** Name the producing315 jig surface only when you actually recognize the shape; otherwise say you316 don't recognize it and explain the content anyway. Don't invent a source.317318## Relationship to other skills319320- **`/jig:memory-sync`** — complementary. memory-sync *persists* a term to the321 glossary/hot cache; explain *reads* the merged lexicon to define one. When322 explain flags an absent term the user wants kept, route them to memory-sync.323- **`/jig:independent-review`** — downstream and different. independent-review324 checks a finished slice against its spec; explain helps a reader *understand*325 the spec (or ADR) in the first place.326- **`/jig:analyze`** — sibling, different scope. analyze surfaces drift327 *between* artifacts; explain illuminates *one* artifact (plus the refs it328 pulls in) for a human.329- **`/jig:clarify`** — sibling judgment skill, opposite direction. clarify asks330 the author questions to *remove* ambiguity from a DRAFT spec; explain helps a331 *reader* get through an already-written dense artifact. Both are no-helper332 judgment skills.333- **The 065-02 hook (`jig-memory-scan`)** — the just-in-time sibling. The hook334 surfaces a one-line `short` def of any lexicon term that appears in a prompt,335 automatically; this skill is the on-demand, strong-handholding escalation336 (full `plain` def, or a whole-artifact walkthrough).