/adr-new
What it does
Creates a new numbered ADR file in docs/adr/ and adds an entry to the
index. ADRs are the lightweight memory of why the architecture looks
the way it does — without them, six months from now nobody (human or
agent) remembers why we chose A instead of B.
The convention is documented in
docs/adr/README.md: MADR-flavored,
numbered, immutable status (proposed → accepted → deprecated /
superseded).
Workflow
-
Find target dir. Default
docs/adr/from the current repo root (viagit rev-parse --show-toplevel). If nodocs/adr/exists, ask the user: "create it now?". If yes, also copytemplates/adr-template.mdif shipped (the plugin ships its own template underdocs/adr/template.md— useful as a reference even when the target repo doesn't have one yet). -
Pick next number. List existing
docs/adr/NNNN-*.mdfiles, parse the leading number, take the max + 1. Pad to 4 digits. -
Get the title.
- If
$ARGUMENTShas a positional, use it as the title. - If
--noninteractive, fail if no title was given (we won't hallucinate one). - Otherwise, prompt the user.
- Convert to kebab-case for the filename:
0042-replace-polling-with-webhooks.md.
- If
-
Ask for context (skip in
--noninteractive):- One-line summary of the problem.
- The chosen option (one sentence, stated as fact in present tense).
- 1–3 alternatives considered (one line each).
- Whether to mark
status: proposed(default) oraccepted(if the team already decided in conversation and just needs the record).
-
Generate the file at
docs/adr/<NNNN>-<kebab-title>.mdusing the MADR template (the plugin shipsdocs/adr/template.mdfor reference). Substitute:NNNN→ resolved numberTitle→ user-provided titleYYYY-MM-DD→ today (date +%Y-%m-%d)Status→ resolved value- Context / Decision / Alternatives → user input or
<TODO: fill in>placeholders if user skipped them
-
Update the index. Append the new ADR to the bulleted list in
docs/adr/README.md(or create it if it doesn't exist). Preserve the existing index style:- [NNNN — Title](NNNN-kebab.md) -
Report. Print the new file path and remind the user that ADRs are immutable once
accepted— future revisions are new ADRs superseding the old one, not edits.
Hard rules
- Numbers are immutable. Once shipped, an ADR's number never changes. If you regenerate the file (because of typos in the title before commit), keep the number.
- Status is immutable once
accepted. Edits to anacceptedADR should be limited to typos and link fixes. Substantive changes ship as a new ADR that explicitly supersedes the old one (Status: superseded by NNNN). - The index is the source of truth for "what ADRs exist." Always update it; never let it drift from the directory contents.
- Never overwrite an existing ADR. If the kebab-title collides with an existing file, ask the user for a different title.
Tunables
--status accepted— start the ADR asacceptedrather thanproposed. Use when the decision is already settled and you're just recording it.--noninteractive— skip prompts; requires a title positional and fills the context/decision/alternatives with<TODO>placeholders.--dry-run— print what would be written, write nothing.
When to write an ADR (and when not to)
Write an ADR for:
- Architectural tradeoffs likely to be re-litigated (e.g., "no embedding RAG", "AGENTS.md canonical, CLAUDE.md import").
- Decisions that depend on external constraints (a vendor, an open issue, a benchmark result).
- Decisions where alternatives are plausible enough that a future agent will propose them.
Don't write an ADR for:
- Implementation choices the code itself shows (variable names, function structure).
- One-off tactical fixes.
- Things covered by an obvious convention (test naming, lint config).
If you're not sure: write it. Three sentences in docs/adr/0042.md
is cheap; re-arguing the same point six months later is expensive.
What this skill does NOT do
- Doesn't make the decision. It records a decision you've already
made. If you don't yet know the decision, you want a
docs/specs/document (orsuperpowers:brainstorming), not an ADR. - Doesn't read the conversation context. You tell it the decision in your own words; the skill just structures the file.
- Doesn't supersede or modify existing ADRs. Modification is a
manual edit + new ADR with
Status: superseded by NNNN.