Create and manage Architecture Decision Records (ADRs) — lightweight documents committed to the repo that capture why a design decision was made, readable by both humans and AI agents. Use this skill when the user asks to create, update, or manage ADRs or decision records. Also activate when asked to document a decision, record an architectural choice, backfill undocumented decisions, or convert an RFC into an ADR. PROACTIVELY recommend this skill during conversations where the user is making or has just made a significant architectural choice — choosing between libraries, establishing patterns, selecting dependencies, or debating trade-offs — even if they haven't explicitly asked for documentation. Trigger phrases include "decision record", "architecture decision", "ADR", "document this decision", "why did we choose", "design rationale", "let's go with", "we decided to", "what's our standard for". For proposals needing team discussion before a decision is made, use /rfc instead. Do NOT use for: general documentation, README files, API reference docs, runbooks, or incident reports.
How this skill is triggered — by the user, by Claude, or both
Slash command
/architecture-decisions:adrThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Create lightweight decision records that help both humans and AI agents understand *why* something was built a certain way — not just *what* was built.
Create lightweight decision records that help both humans and AI agents understand why something was built a certain way — not just what was built.
An ADR captures a decision after it's been made: "We decided X, because Y, accepting tradeoff Z." For proposals that need team discussion before a decision, use /rfc to open a Request for Comments first — then convert it to an ADR when it concludes.
Both document types live in docs/decisions/ so they travel with the code they describe.
Proactively suggest an ADR when you detect these patterns in conversation. The guiding question (adapted from Spotify engineering) is: "Has a significant decision been made that future engineers will need to understand?"
Suggest an ADR when:
Suggest /rfc instead when the decision is large, needs input from others, or involves competing approaches that need structured debate.
Is a significant decision being made or discussed?
├── No → don't suggest anything
└── Yes → Is it a big change needing input from others?
├── Yes → suggest /rfc (then an ADR when it concludes)
└── No / consensus already exists → suggest an ADR
When nudging, keep it brief: "This looks like an architectural decision worth capturing. Want me to draft an ADR?"
All decision documents live in docs/decisions/ at the repo root:
docs/decisions/
INDEX.md
RFC-001-auth-token-storage.md
ADR-001-use-react-hooks.md
ADR-002-postgres-over-mongo.md
File naming: {TYPE}-{NNN}-{slug}.md — type prefix, zero-padded 3-digit ID, kebab-case slug derived from the title.
Auto-incrementing: Before creating a document, scan docs/decisions/ for existing files matching ADR-*.md or RFC-*.md, find the highest number for that type, and use the next one. If the directory doesn't exist, create it and start at 001.
Based on Michael Nygard's format (used by Backstage, among others), extended with structured frontmatter for agent discoverability.
---
id: ADR-{NNN}
title: "{Title}"
status: proposed | accepted | deprecated | superseded
date: {YYYY-MM-DD}
decision-makers: []
related: []
tags: []
superseded-by:
---
# ADR-{NNN}: {Title}
## Status
{Proposed | Accepted | Deprecated | Superseded by [ADR-XXX](ADR-XXX-slug.md)}
## Context
Describe the forces at play — technical constraints, business requirements,
team dynamics, timeline pressure. The language here is value-neutral: state
facts, not conclusions. A reader (human or agent) should understand the
problem space without needing to read the source code.
## Decision
State the decision in active voice. "We will use..." or "We chose X over Y
because Z." Lead with the choice, then the reasoning.
## Consequences
All consequences — positive, negative, and neutral — should be listed here.
Every decision has trade-offs; naming them honestly builds trust and helps
future decision-makers know when to revisit this choice.
- **Positive:** {what becomes easier}
- **Negative:** {what becomes harder or what we give up}
- **Neutral:** {side effects that are neither good nor bad}
## Alternatives considered
For each alternative, briefly state what it is and why it was not chosen.
Even a sentence or two prevents future engineers from re-proposing ideas
that were already evaluated.
Every ADR needs Context, Decision, and Consequences — those are the core. Alternatives Considered is strongly recommended but can be omitted for trivial decisions. Keep the document proportional to the decision's weight: a small choice gets a short ADR.
The YAML frontmatter serves a specific purpose: it makes decision records queryable by agents and tooling without parsing prose. An agent can scan all ADRs, filter by status or tag, and follow the related links to build a decision graph — something that's hard to do from unstructured text alone.
| Field | Purpose |
|---|---|
id | Unique identifier for cross-referencing |
status | Lifecycle state — agents can filter for active vs. superseded decisions |
date | When created (or when the original decision was made, for backfills) |
related | Links between RFCs and ADRs, or between ADRs that interact |
tags | Categorization (e.g., [frontend, auth, database]) for discovery |
superseded-by | When set, signals that a newer ADR replaces this one |
When asked to document decisions that were already made:
git log --all --oneline --grep="keyword" and git log --diff-filter=A -- path/to/file to find when a pattern or library was introduced. Check commit messages and PR descriptions for reasoning.Backfilled on {today}. Original decision made circa {original date}.
When an RFC reaches a conclusion and needs to become an ADR:
status to closed and fill in its Resolution section with a link to the new ADRrelated field includes the RFC ID; the RFC's resolution links to the ADRWhen a decision is revisited:
status: superseded and superseded-by: ADR-{NNN} on the old ADR. The new ADR should reference the old one in its Context section, explaining what changed.status: deprecated when a decision is abandoned without a replacement.After creating or modifying any decision document, update docs/decisions/INDEX.md:
# Decision Records
## ADRs
| ID | Title | Status | Date |
|----|-------|--------|------|
| [ADR-002](ADR-002-slug.md) | Title | Accepted | 2024-03-10 |
| [ADR-001](ADR-001-slug.md) | Title | Accepted | 2024-01-20 |
## RFCs
| ID | Title | Status | Date |
|----|-------|--------|------|
| [RFC-001](RFC-001-slug.md) | Title | Closed | 2024-01-15 |
Sort newest first within each section. If the index doesn't exist, create it.
These documents answer a future question: "Why did we do it this way?" The reader might be a new teammate, a future version of the author, or an AI agent analyzing the codebase to understand constraints before proposing changes.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
npx claudepluginhub heyitsgilbert/marketplace --plugin architecture-decisions