recording-decisions — Claude Code skill: ADRs and a decision log
A skill that writes decisions down as a full ADR or a short log entry, so the reasoning does not stay buried in chat.
npx skills add riekelt/technical-writer --skill recording-decisions -a claude-codeWhat recording-decisions does
The skill fires once a choice is made and needs a record: a full ADR for decisions with architecture-level consequences, a short log entry for the running stream of smaller ones. The ADR follows Nygard — status, date, deciders, context, decision, consequences, alternatives considered, references. A log entry per date holds the decision as an imperative sentence, one paragraph of the rule, the reasons, and the rejected option.
Both formats are append-only. An accepted decision is immutable; new context becomes a new entry that supersedes the old one. The only edit an accepted ADR allows is its status line gaining a pointer to the superseding ADR. The negative consequences block is mandatory and cannot be empty, and every alternative carries its strongest argument for — a rejection without one is a strawman.
The skill needs the technical-writing skill as background, with its hard rules and truth rules. It is the wrong tool while a decision is still being argued; that is writing-design-docs, whose Why & What box turns into the ADR once accepted. Record the decision before citing it — a chat session is not a durable source.
What it helps with
- record an architecture decision as an ADR
- log a small choice as a single dated entry
- explain why an option was rejected, not just what won
- supersede an outdated entry without editing the old one
- move a decision out of a PR thread into a durable document
Example prompts for the agent
- write an ADR: we release on tags instead of a release branch
- add a log entry that we picked SQLite over Postgres
- this has been explained twice now — record it with a date
How to install recording-decisions
1Skills CLI (Vercel)
npx skills add riekelt/technical-writer --skill recording-decisions -a claude-code2Manually: put the files in place
~/.claude/skills/recording-decisions/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/recording-decisions/
1Skills CLI (Vercel)
npx skills add riekelt/technical-writer --skill recording-decisions -a codex2Manually: put the files in place
.agents/skills/recording-decisions/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add riekelt/technical-writer --skill recording-decisions -a cursor2Manually: put the files in place
.cursor/skills/recording-decisions/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install riekelt/technical-writer recording-decisions2Manually: put the files in place
.github/skills/recording-decisions/SKILL.md1Skills CLI (Vercel)
npx skills add riekelt/technical-writer --skill recording-decisions -a gemini-cli2Platform CLI
gemini skills install https://github.com/riekelt/technical-writer --path plugins/technical-writer/skills/recording-decisionsManually: put the files in place
.devin/skills/recording-decisions/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add riekelt/technical-writer --skill recording-decisions -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about recording-decisions
How do I install recording-decisions in Claude?
Run npx skills add riekelt/technical-writer --skill recording-decisions -a claude-code. The skill lands at ~/.claude/skills/recording-decisions/SKILL.md.
What does recording-decisions do?
It encodes two formats for writing decisions down: a full Nygard-style ADR and a lightweight decision log entry. It offers to record a choice that would otherwise live only in chat.
What does the skill need to work?
The technical-writing skill as background — it supplies the hard rules and style constraints. Without it the skill does not run.
Source text
SKILL.md · MIT
--- name: recording-decisions description: Use when a decision needs recording - an ADR, a decision log entry, or when someone asks to write down why something was chosen, rejected, or superseded. Encodes the ADR and decision-log formats. Use whenever a choice was made that would otherwise live only in chat, even if nobody says "ADR". --- # Recording decisions **REQUIRED BACKGROUND:** the `technical-writing` skill (hard rules, truth rules, style). ## Overview Two formats, by weight: a full ADR for a decision with architecture-level consequences; a decision log entry for the running stream of smaller choices. Both are append-only: an accepted decision is immutable; new context is a new entry that supersedes the old one. ## When to invoke, and not Invoke when a choice has been made and needs recording, when someone asks "write down why we did this", or when an existing decision is superseded. Do NOT invoke for a decision still being argued (that is `writing-design-docs`; its Why & What box becomes the ADR once accepted). Also invoke on the signals that an unrecorded decision is passing by: "we decided X instead of Y", "let's just go with", a trade-off resolved in a PR comment or chat thread, or a rationale someone has now explained twice. Each is a decision living in a non-durable place; offer to record it. Record the decision before citing it. A chat session is not a durable source. Put the dated substance in the log, quote the decider where wording matters, commit the entry, then cite it. Record the smallest complete decision, not a transcript. ## ADR Nygard format. One decision per ADR. ```markdown # ADR-[number]: [short title of the decision] | | | |---|---| | **Status** | Proposed / Accepted / Superseded by ADR-XXX | | **Date** | YYYY-MM-DD | | **Deciders** | [who took part] | ## Context [The forces at play: technical, organizational, political. What must be solved. Factual, without giving away the decision.] ## Decision [What was decided. Active voice: "We release on tags", not "it was decided that".] ## Consequences **Positive:** [what gets easier] **Negative:** [what gets harder, which trade we accept] **Neutral:** [what changes without being better or worse] ## Alternatives considered **[Alternative]** - For: [...] Against: [...] Why not chosen: [...] ## References [Evidence, related decisions, measurements] ``` **Negative is mandatory and may not be empty.** Each alternative carries its strongest argument for; a rejection without it is a strawman. The sole permitted edit to an accepted ADR is its Status line gaining "Superseded by ADR-XXX". An objection raised but never answered goes in at full strength as a negative consequence with a named owner: the writer never invents a rebuttal and never withholds a decision its owner has declared. Names unknown at writing time are marked fill-before-filing, because a filed record carries real people. ## Decision log (lightweight) For the running log a full ADR would kill. Cheap enough to maintain: ```markdown ## YYYY-MM-DD ### [Decision stated as an imperative sentence] [One paragraph: the rule.] Why: - [reason] - [reason] Instead of: [rejected option] - [why not] ``` ## Rules - Append-only. A wrong entry gets a new dated entry that supersedes it, never an edit. Convert relative dates to absolute. - Record the why, not only the what. - When a written rule and shipped reality have diverged, record which one the team intended. Every doctrine document states what it owns and what it leaves to others. - Scope guard at the top when a sibling could overlap: "product ideas live in ROADMAP.md; this file is for engineering decisions." - Capture negative results and unknowns explicitly: "four theories, four disproved, cause not found" is a result. A search returning nothing is a result.
© riekelt · MIT · riekelt/technical-writer