capturing-decisions
Creates and maintains MADR-format Architectural Decision Records with explicit trade-offs, considered alternatives, and consequence analysis. Use when a technical decision has been made, after brainstorming converges on an approach, when writing an ADR or architecture decision record, or when an implicit decision should be captured explicitly.
Capturing Decisions
Announce at start: "I'm using the capturing-decisions skill with the Technical Writer persona to record this decision."
This skill creates (and keeps tidy) Architectural Decision Records (ADRs) using MADR (Markdown Architectural Decision Records) v4.0.0.
A helpful bar for what "counts" as an architectural decision is Martin Fowler's: "a decision you wish you could get right early." ("Who needs an architect?", IEEE Software, 2003)
Primary reference: Markdown Architectural Decision Records
Existing ADRs
Injected at skill load time — use this to determine the next sequence number.
!ls "${CLAUDE_PLUGIN_OPTION_DOC_OUTPUT_DIR:-record}"/decisions/[0-9]*.md 2>/dev/null || ls docs/decisions/[0-9]*.md 2>/dev/null || echo "(no existing ADRs found)"
Repository layout and naming
All ADRs live in:
{PROJECT_ROOT}/${user_config.doc_output_dir}/decisions/NNNN-title-with-dashes.md(defaults torecord/if not configured)
Where:
NNNNis a zero-padded 4-digit sequence number (0001,0002, ...)title-with-dashesis a lowercase slug (letters/digits/hyphens)
If {PROJECT_ROOT}/${user_config.doc_output_dir}/decisions/ does not exist yet, create it.
Template
Use the ADR template from ${CLAUDE_PLUGIN_ROOT}/templates/adr.md.
Create new ADRs by copying the template and replacing placeholders. Optional sections may be removed (the template marks them clearly).
Required metadata
Each ADR must include YAML front matter at the top with:
status: one ofproposed,accepted,rejected,deprecated, orsuperseded by ADR-NNNNdate:YYYY-MM-DD(update when the ADR is materially changed)
Status emoji for the index
Maintain an index at {PROJECT_ROOT}/${user_config.doc_output_dir}/decisions/README.md that lists all ADRs with:
- status emoji
- ADR title (matching the H1 of the ADR), as a link to the full ADR
- date last updated
Use this mapping:
- 🟡 proposed
- ✅ accepted
- ❌ rejected
- ⚠️ deprecated
- 🔁 superseded
Process
- Pick the next number by scanning existing ADR filenames in
{PROJECT_ROOT}/${user_config.doc_output_dir}/decisions/and incrementing the highestNNNN. Start at0001if none exist. - Slugify the title into
title-with-dashes(lowercase, hyphens, no punctuation). - Load the persona. Load the Technical Writer persona from
${CLAUDE_PLUGIN_ROOT}/personas/technical-writer.md. - Check dialect. Check for
BITO_DIALECTenvironment variable or the project's bito config for a dialect preference (en-us, en-gb, en-ca, en-au). If set, use that dialect's spelling conventions consistently throughout the draft. If not set, default to en-US. - Create the ADR from
${CLAUDE_PLUGIN_ROOT}/templates/adr.md.- Default
statustoproposedunless the change set includes implementation and agreement to accept. - Title format:
NNNN: [Problem solved and solution chosen]. Good: "0007: Pluggable tokenizer backends for handoff budget enforcement." Bad: "0007: Token counting decision." - Frame the Context and Problem Statement as a question where possible.
- Minimum two Considered Options. Three is ideal. Include options you rejected — future readers will ask "why didn't we just...?"
- At least one "Good, because..." and one "Bad, because..." in Consequences. If you can't name a downside, you haven't thought hard enough about the trade-off.
- Default
- Update
${user_config.doc_output_dir}/decisions/README.md:- Add the ADR in numeric order.
- Ensure the emoji matches the ADR's
status.
- Quality check. Before saving, verify:
- Trade-offs are explicit — at least one "Bad, because..." consequence
- At least two options were considered
- The title describes both the problem and the solution
- Links to related ADRs and design docs are included
- The document stands alone — no assumed context from conversations
- Tone firewall. Run the ADR through the editorial review process (agent or self-check). Ensure it passes the conference-talk test and matches the Technical Writer persona voice.
- If an ADR is superseded, keep the old ADR file, set its status to
superseded by ADR-NNNN, and update the index row emoji.
Integration
- Upstream: Brainstorming sessions and
writing-design-docsproduce decisions that this skill captures - Downstream: ADRs are referenced by design docs, handoffs, and changelogs
- Paired with:
writing-design-docs— if a design doc contains discrete decisions, they should be extracted into ADRs and referenced from the design doc
Output expectations
- ADR markdown should be clean and readable in GitHub rendering.
- Keep ADRs concise, but include enough context that a new reader can understand why the decision was made.
- One decision per ADR. If a design involves five decisions, write five ADRs and one design doc that references them.
- Supersede, don't delete. When a decision is reversed, mark the original as
superseded by ADR-NNNNand write a new ADR explaining what changed.