Adr create
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.From its SKILL.md
npx -y skills add event4u-app/agent-config --skill adr-createAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 7 stars7 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 5 commands, including `./scripts-run src/scripts/adr/regenerate_index --dir docs/decisions/` and 4 more.
SKILL.md
9.3 KB, ~2.4k tokens by cl100k_base, as published. Nobody here has run it
adr-create
When to use
Use this skill when:
- A non-trivial architectural choice needs a written record (kernel membership, cap raises, contract changes, library swap, deprecation).
- A decision overrides a previous one and needs
supersedes:linkage. - A roadmap phase closes and the chosen variant must be cited.
- The user says "write an ADR for X", "decision log this", "we need a record of why we picked Y".
Do NOT use when:
- The change is reversible without governance impact (typo, lint fix, refactor that stays inside one module).
- The decision is already covered by an existing ADR — extend or supersede it instead of duplicating.
- A skill, rule, or guideline is the better home (use those skills).
Goal
- Sequential
ADR-NNN-<slug>.mdnumbering with no gaps. - Standard template: Status, Context, Decision, Consequences, Alternatives, References.
- Regenerated index so readers find the ADR by topic, not by ls.
- Zero MCP-tool dependency — pure filesystem + TypeScript tooling (run via ./scripts-run).
Preconditions
- An ADR directory exists. Two layouts coexist (see
docs/contracts/adr-layout.md):- Flat —
docs/decisions/(ordocs/adr/alias): cross-cutting governance ADRs, 3-digit numbering (ADR-NNN-<slug>.md). - Per-area —
docs/adrs/<area>/: sub-area ADRs, 4-digit numbering (NNNN-<slug>.md);<area>must match the canonical inventory inscripts/audit_adr_coverage.ts.
- Flat —
- The decision is already made — ADRs record outcomes, they do
not run the decision process. For unresolved trade-offs, run the
council or consult
adversarial-reviewfirst.
Procedure
1. Inspect and pick the surface
Ask one question only if both are plausible:
- Flat surface — chosen when the decision constrains the
package's contract with consumers (kernel composition, rule
taxonomy, package-wide architecture). Directory:
docs/decisions/(fallbackdocs/adr/). Filename:ADR-NNN-<slug>.md. - Per-area surface — chosen when the decision constrains code
inside one area folder (one runtime module, one contract group,
one CLI surface). Directory:
docs/adrs/<area>/. Filename:NNNN-<slug>.md(4-digit, noADR-prefix). - Unknown area —
<area>not in the inventory: refuse with a hint to add the area toAREASinscripts/audit_adr_coverage.tsin the same PR. Do not invent. - In doubt → per-area (cheaper to surface, easier to relocate).
2. Pick the next ADR number
- Flat surface — scan
docs/decisions/(ordocs/adr/) forADR-*.md, parse the leading 3-digit number, takemax + 1(zero-padded to 3). For an empty directory, start at001. - Per-area surface — scan
docs/adrs/<area>/for[0-9][0-9][0-9][0-9]-*.md, parse the leading 4-digit number, takemax + 1(zero-padded to 4). For an empty area, start at0001.README.mdis not an ADR — skip it.
Reject re-use of an existing number — index regeneration treats duplicates as a hard failure on both surfaces.
3. Pick a slug
Short, hyphen-lowercase, scope-revealing. Match peer ADRs in the
directory. Examples: kernel-swap-deferred, flat-cluster-subs,
http-bridge-deferred-with-trigger,
per-tier-smoke-scripts. Reject slugs longer than 60 chars.
4. Author the ADR
Use the surface-specific template. All sections are required; "—" is acceptable for genuinely empty Alternatives or References blocks but never for Status, Context, Decision, or Consequences.
review_trigger is required and it names a CONDITION, not a date. A
decision is a call made under conditions that held at the time; the trigger
records which change would make it worth re-deciding. "Review annually" is
ignored by everyone and rots into ceremony —
check_adr_frontmatter.ts rejects bare cadences for exactly that reason. Write
the event: "when a second consumer reports the same preservation surprise",
"when a host ships a native primitive for this", "if the measured lift drops
below the pre-registered threshold". Enforced from 2026-07-25 forward; earlier
ADRs are grandfathered by date.
When you later reopen one, say which premise moved and what evidences the move — not "we were wrong". If the original was right under its own conditions, record that too. A premise that turns out false while the decision stays correct gets a logged correction block, never a silent edit.
Flat-surface template (docs/decisions/ADR-NNN-<slug>.md):
---
adr: NNN
status: proposed | accepted | superseded | deprecated
date: YYYY-MM-DD
decision: <slug>
supersedes: — | ADR-MMM
superseded_by: — | ADR-MMM
phase: <roadmap> · <phase-id>
review_trigger: <the CONDITION that would reopen this decision>
---
# ADR-NNN — <Decision Title>
## Status
**<Proposed | Accepted | …>** · YYYY-MM-DD.
## Context / Decision / Consequences / Alternatives / References
Per-area template (docs/adrs/<area>/NNNN-<slug>.md):
# ADR NNNN — <Decision Title>
> Area: `<area>` · Status: accepted · Date: YYYY-MM-DD · Type: retrospective | new
> Roadmap: `agents/roadmaps/<file>.md` <phase-id>
> Supersedes: —
## Context / Decision / Considered alternatives / Consequences / References
Per-area ADRs use a quote-style header (no YAML frontmatter) so
audit_adr_coverage.ts's permissive parser can index them. Cite
the area's contract from the README in
docs/adrs/<area>/README.md.
5. Regenerate the index
- Flat surface —
./scripts-run src/scripts/adr/regenerate_index --dir docs/decisions/writesINDEX.mdfromADR-*.md. - Per-area surface —
./scripts-run src/scripts/audit_adr_coverage --regen-area-readme <area>rewritesdocs/adrs/<area>/README.md. Coverage gate: run./scripts-run src/scripts/audit_adr_coverage(no args) — exit 0 only when every canonical area has ≥ 1 ADR.
6. Validate
- Flat:
./scripts-run src/scripts/adr/regenerate_index --checkexits 0. - Per-area:
./scripts-run src/scripts/audit_adr_coverage --checkexits 0. - The project's CI / quality pipeline passes — locally only when
quality.local_auto_run: true; under the default (false/ missing) remote CI is the gate and no local pipeline run happens.
Rubric pass (optional, surfacing-only)
After drafting an ADR, run
judge-artifact-completeness
with rubric architecture-score to confirm alternatives, consequences,
reversibility, and risk are present. Invoke when the user asks for a
completeness check — not on every ADR by default.
Output format
- Path of the new ADR file.
- Path of the regenerated index / README.
- One-line summary of the decision.
- Linked roadmap or phase, if any.
Gotchas
- Flat default path is
docs/decisions/in this package; some projects usedocs/adr/. Pass--dirwhen running outside the default. - Per-area numbering is 4-digit (
NNNN-<slug>.md); the flat surface stays 3-digit (ADR-NNN-<slug>.md). Do not mix. - Area inventory is closed —
<area>must already exist inAREASinscripts/audit_adr_coverage.ts. Adding a new area is a separate PR with explicit reviewer sign-off. - Frontmatter
adr:(flat) is the canonical number; the filename prefix must match. The flat regenerator fails on mismatch. - ADRs are append-only history. To revise a decision, write a new
ADR with
supersedes: ADR-MMM(flat) or aSupersedes:line in the header quote-block (per-area) and flip the old one's status tosuperseded. - Never delete an ADR file — supersede it. Deletion breaks historical links and round-trips through git history checks.
Frugality Standards
Apply the Frugality Charter to every ADR you author.
Examples in this artifact:
- Per the charter's default-terse rule,
## Contextstates the forcing function in 2–3 sentences; no historical narrative. - Per the cite-don't-restate principle,
## Decisionlinks the rules / contracts it overrides; no rule body is quoted in full. - Per the cheap-question check,
## Alternatives consideredlists genuine design alternatives, not strawmen.
Pre-save self-check:
- Does
## Contextcarry more than 5 sentences of setup? - Does
## Decisionrestate rule text instead of citing the rule? - Are alternatives evaluated with a real consequence each, or with stylistic preference?
- Does the ADR forecast consequences with hedge phrases ("might", "could potentially") instead of decidable claims?
Do NOT
- Skip Context — a decision without context is folklore.
- Reuse an existing ADR number — the index regenerator hard-fails.
- Author ADRs for reversible refactors or minor cleanups.
- Cite a council session id without ensuring the file is committed
or otherwise reachable from the repo (per
no-roadmap-references, council clause).
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.