ADR Skill
Philosophy
ADRs created with this skill are agent-first: they are written so that a coding agent can read one and implement the decision without further clarification. Humans review and approve, but the primary consumer is an agent working from the ADR.
This means:
- Constraints must be explicit and measurable, not vibes
- Decisions must be specific enough to act on ("use PostgreSQL 16 with pgvector" not "use a database")
- Consequences must map to concrete follow-up tasks
- Non-goals must be stated to prevent scope creep
- The ADR must be self-contained — no tribal knowledge assumptions
Three-Phase Workflow
Every ADR goes through three phases. Do not skip Phase 1.
Phase 1: Capture Intent (Socratic)
Before writing anything, interview the human to understand the decision space. Ask questions one at a time, building on previous answers. Do not dump a list of questions.
Core questions (ask in roughly this order, skip what's already clear from context):
- What are you deciding? — Get a short, specific title. Push for a verb phrase ("Choose X", "Adopt Y", "Replace Z with W").
- Why now? — What broke, what's changing, or what will break if you do nothing? This is the trigger.
- What constraints exist? — Tech stack, timeline, budget, team size, existing code, compliance. Be concrete.
- What does success look like? — Measurable outcomes. Push past "it works" to specifics (latency, throughput, DX, maintenance burden).
- What options have you considered? — At least two. For each: what's the core tradeoff? If they only have one option, help them articulate why alternatives were rejected.
- What's your current lean? — Capture gut intuition early. Often reveals unstated priorities.
- Who needs to know or approve? — Decision-makers, consulted experts, informed stakeholders.
- What would you tell a new engineer (or agent) implementing this? — This surfaces the practical context that often gets left out.
Adaptive follow-ups: Based on answers, probe deeper where the decision is fuzzy. Common follow-ups:
- "What's the worst-case outcome if this decision is wrong?"
- "What would make you revisit this in 6 months?"
- "Is there anything you're explicitly choosing NOT to do?"
- "What prior art or existing patterns in the codebase does this relate to?"
When to stop: You have enough when you can mentally draft every section of the ADR without making things up. If you're guessing at any section, ask another question.
Phase 2: Draft the ADR
-
Choose the ADR directory.
- If one exists (
adr/,docs/adr/,docs/decisions/, etc.), use it. - If none exists, create
docs/decisions/(MADR default) oradr/(simpler repos).
- If one exists (
-
Choose a filename strategy.
- If existing ADRs use numeric prefixes (
0001-...), continue that. - Otherwise use slug-only filenames (
choose-database.md).
- If existing ADRs use numeric prefixes (
-
Choose a template.
- Use
assets/templates/adr-simple.mdfor straightforward decisions (one clear winner, minimal tradeoffs). - Use
assets/templates/adr-madr.mdwhen you need to document multiple options with structured pros/cons/drivers. - See
references/template-variants.mdfor guidance.
- Use
-
Fill every section from Phase 1 answers. Do not leave placeholder text. Every section should contain real content or be removed (optional sections only).
-
Generate the file.
- Preferred: run
scripts/new_adr.js(handles directory, naming, and optional index updates). - If you can't run scripts, copy a template from
assets/templates/and fill it manually.
- Preferred: run
Phase 3: Review Against Checklist
After drafting, review the ADR against the agent-readiness checklist in references/review-checklist.md. Present findings to the human and iterate.
Key questions the review answers:
- Could an agent implement this decision from the ADR alone?
- Are there ambiguities that would cause an agent to guess or ask for clarification?
- Are consequences actionable (specific tasks, not vague aspirations)?
- Is the scope bounded (what's in AND what's out)?
Do not finalize until the ADR passes the checklist or the human explicitly accepts the gaps.
Other Operations
Update an Existing ADR
-
Identify the intent:
- Accept / reject: change status, add any final context.
- Deprecate: status →
deprecated, explain replacement path. - Supersede: create a new ADR, link both ways (old → new, new → old).
- Add learnings: append to
## More Informationwith a date stamp. Do not rewrite history.
-
Use
scripts/set_adr_status.jsfor status changes (supports both YAML front matter and inline status).
Index
If the repo has an ADR index/log file (often README.md or index.md in the ADR dir), keep it updated.
Preferred: let scripts/new_adr.js --update-index do it. Otherwise:
- Add a bullet entry for the new ADR.
- Keep ordering consistent (numeric if numbered; date or alpha if slugs).
Bootstrap
When introducing ADRs to a repo that has none:
bashnode /path/to/adr-skill/scripts/bootstrap_adr.js
This creates the directory, an index file, and the first ADR ("Adopt architecture decision records"). Use --json for machine-readable output. Use --dir to override the directory name.
Categories (Large Projects)
For repos with many ADRs, organize by subdirectory:
docs/decisions/ backend/ 0001-use-postgres.md frontend/ 0001-use-react.md infrastructure/ 0001-use-terraform.md
Numbers are local to each category. Choose a categorization scheme early (by layer, by domain, by team) and document it in the index.
Resources
scripts/
scripts/new_adr.js— create a new ADR file from a template, using repo conventions.scripts/set_adr_status.js— update an ADR status in-place (YAML front matter or inline). Use--jsonfor machine output.scripts/bootstrap_adr.js— create ADR dir,README.md, and initial "Adopt ADRs" decision.
references/
references/review-checklist.md— agent-readiness checklist for Phase 3 review.references/adr-conventions.md— directory, filename, status, and lifecycle conventions.references/template-variants.md— when to use simple vs MADR-style templates.references/examples.md— filled-out short and long ADR examples.
assets/
assets/templates/adr-simple.md— lean template for straightforward decisions.assets/templates/adr-madr.md— MADR 4.0 template for decisions with multiple options and structured tradeoffs.assets/templates/adr-readme.md— default ADR index scaffold used byscripts/bootstrap_adr.js.
Script Usage
From the target repo root:
bash# Simple ADR node /path/to/adr-skill/scripts/new_adr.js --title "Choose database" --status proposed # MADR-style with options node /path/to/adr-skill/scripts/new_adr.js --title "Choose database" --template madr --status proposed # With index update node /path/to/adr-skill/scripts/new_adr.js --title "Choose database" --status proposed --update-index # Bootstrap a new repo node /path/to/adr-skill/scripts/bootstrap_adr.js --dir docs/decisions
Notes:
- Scripts auto-detect ADR directory and filename strategy.
- Use
--dirand--strategyto override. - Use
--jsonto emit machine-readable output.


