Agent skill

Record A Decision

by inkeep in inkeep/open-knowledge

Records an architecture decision as a Nygard/MADR-shaped ADR under decisions/ — capturing the context that forced the choice, the options weighed, the decision itself, and its consequences in both…

GPL-3.0Auto-check passedDevelopment

Install Record A Decision

skills CLI
$ npx skills add inkeep/open-knowledge --skill record-a-decision -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install inkeep/open-knowledge record-a-decision --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/inkeep/open-knowledge.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/server/assets/skills/packs/software-lifecycle/record-a-decision .claude/skills/record-a-decision && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
record-a-decision
GitHub stars
4.4k
Token cost
~3.5k tokens
SKILL.md length
1,876 words
Files
1
Skills in repo
18
Repo updated
First seen
Licence
GPL-3.0

At a glance

Records an architecture decision as a Nygard/MADR-shaped ADR under decisions/ — capturing the context that forced the choice, the options weighed, the decision itself, and its consequences in both…

  • Works in 10 steps: Confirm a decision was actually MADE… → Scan for prior art (surface supersedes… → Allocate the next number and create from… → …
  • Tasks that involve Architecture decision records
  • SKILL.md covers Step 0 — Confirm a decision…, Step 1 — Scan for prior art…, Step 2 — Allocate the next… and Step 3 — Context: the forces…, plus 7 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Record A Decision is an agent skill from inkeep/open-knowledge. Records an architecture decision as a Nygard/MADR-shaped ADR under decisions/ — capturing the context that forced the choice, the options weighed, the decision itself, and its consequences in both directions, plus the supersedes chain that keeps a decision log honest. Read when asked to record an architecture decision, write an ADR, log the decision we made, document why we chose X over Y, capture this decision for the record, or supersede an old decision with a new one. Do NOT read to frame a proposal or explore…

Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Any agent host with the OpenKnowledge MCP server configured. Installed project-local by ok seed --pack software-lifecycle.

It sits in Development, covering Architecture decision records and Runbooks and postmortems. The repository describes itself as: Beautiful, AI-native markdown IDE and LLM wiki. The licence is GPL-3.0.

When your agent uses it

  • Tasks that involve Architecture decision records
  • Tasks that involve Runbooks and postmortems

Example prompts

  • “Use the record-a-decision skill to record an architecture decision as a Nygard/MADR-shaped ADR under decisions/ — capturing the context that forced…”
  • “/record-a-decision”

Requirements

  • Compatibility (from SKILL.md): Any agent host with the OpenKnowledge MCP server configured. Installed project-local by `ok seed --pack software-lifecycle`.

Workflow steps

10 steps, taken from the step headings in SKILL.md.

  1. Confirm a decision was actually MADE (HARD GATE)
  2. Scan for prior art (surface supersedes candidates BEFORE writing)
  3. Allocate the next number and create from the template
  4. Context: the forces at play (invest here)
  5. Decision: active voice, one paragraph, unambiguous
  6. Consequences: both directions, honestly
  7. Soundness self-check (adversarial pass before committing)
  8. Supersedes chain (both directions or it's broken)
  9. Link and validate
  10. Recap to the user

What it can do on your machine

Read from SKILL.md and the folder at commit cf9b84c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are yaml).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Any agent host with the OpenKnowledge MCP server configured. Installed project-local by `ok seed --pack software-lifecycle`.

    From compatibility in the SKILL.md frontmatter.

Context cost

Record A Decision loads about 3.5k tokens when it runs. Until then it costs about 203 tokens; SKILL.md has 1,876 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~203
When it runs · the whole SKILL.md, loaded when a task matches
~3.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from inkeep/open-knowledge at commit cf9b84c, republished under its GPL-3.0 licence (© inkeep). 1,876 words, ~3,530 tokens.

Download SKILL.mdSave it as .claude/skills/record-a-decision/SKILL.md (or your agent's skills folder).
name
record-a-decision
description
Records an architecture decision as a Nygard/MADR-shaped ADR under decisions/ — capturing the context that forced the choice, the options weighed, the decision itself, and its consequences in both directions, plus the supersedes chain that keeps a decision log honest. Read when asked to record an architecture decision, write an ADR, log the decision we made, document why we chose X over Y, capture this decision for the record, or supersede an old decision with a new one. Do NOT read to frame a proposal or explore an idea not yet decided (frame-a-proposal), to write a spec or implementation plan (write-a-spec), to write an incident postmortem (write-a-postmortem), or to judge whether a design is sound (review-a-design). This skill records a decision already made; it does not make one.
compatibility
Any agent host with the OpenKnowledge MCP server configured. Installed project-local by `ok seed --pack software-lifecycle`.
metadata.pack
software-lifecycle
metadata.author
Inkeep
metadata.repository
https://github.com/inkeep/open-knowledge-skills

Record a decision — write an ADR under decisions/

The platform /open-knowledge skill still governs every markdown operation here (grounding, linking, the rule that OK's MCP tools own in-scope markdown); this skill layers ADR craft on top.

An Architecture Decision Record is a small, dated, frozen document that captures one decision, the forces that made it necessary, and what the team now has to live with. The value compounds over years: a reader who joins in three years should understand not just what was decided but why it was even a question. ADRs are frozen once accepted — you never rewrite one to change your mind, you supersede it with a new record and leave the old one standing as history. That supersedes chain is what separates an honest decision log from a pile of stale opinions.

Filenames are NNNN-title.md (zero-padded 4-digit sequence + kebab title). Status vocabulary: proposed / accepted / deprecated / superseded. Template id decision, body sections exactly ## Context, ## Decision, ## Consequences in that order.


Step 0 — Confirm a decision was actually MADE (HARD GATE)

An ADR records a decision; it does not make one. Before anything else, establish that a choice has been settled.

  • If the user is still weighing options, comparing approaches, or asking "should we do X or Y?" — they do not have a decision yet. Stop and route them to the /frame-a-proposal skill. A proposal is where options get explored and argued; an ADR is where the settled outcome gets recorded. Recording a decision the user has not made produces a fake record that misleads every future reader.
  • If the user says "we decided X" but you cannot tell what lost or why, ask one question: "What were the alternatives, and what made you pick this one?" An ADR with no rejected options is a press release, not a record.
  • If the thing in question is whether the design itself is sound — not the record of it — hand off to /review-a-design. This skill assumes the decision is sound; it captures it.

Do not proceed past this gate until the user has confirmed a specific decision. State it back to them in one sentence and get a nod.


Step 1 — Scan for prior art (surface supersedes candidates BEFORE writing)

A new ADR that silently contradicts an accepted one is how a decision log rots. Before allocating a number, find what already exists.

  1. search({ query: "<subsystem or topic of the decision>" }) — semantic sweep for related decisions, proposals, and specs.
  2. exec("ls -A decisions/") — see the existing sequence and titles.
  3. exec("grep -rln <subsystem-keyword> decisions/") — find records touching the same subsystem, interface, or constraint.
  4. For each promising hit, exec("cat decisions/NNNN-x.md") — read its Decision and Status.

Then classify and surface to the user before writing:

  • Contradicts an accepted record → this new decision reverses or replaces it. Flag the path as a supersedes: candidate: "This looks like it supersedes 0007-use-rest-api, which is currently accepted. Confirm and I'll wire the chain in Step 7." Do not silently write a contradicting record.
  • Extends without contradicting → note the related record; you'll link it, not supersede it.
  • Genuinely new → proceed.

If the decision graduated from an accepted proposal in proposals/, locate that proposal now (exec("grep -rln <topic> proposals/")) — you'll link it as the parent in Step 4.


Step 2 — Allocate the next number and create from the template

Never guess the sequence number. List the folder and take the next integer.

  1. exec("ls -A decisions/") — read the highest existing NNNN.
  2. Next number = highest + 1, zero-padded to 4 digits. First-ever decision is 0001.
  3. Pick a short kebab title naming the decision, not the topic: 0012-adopt-event-sourcing-for-orders, not 0012-orders.
  4. Create it from the template:
write({ document: { path: "decisions/0012-adopt-event-sourcing-for-orders.md", template: "decision" } })

The template lays down the frontmatter scaffold and the three H2 sections. Fill the frontmatter now:

yaml
type: decision
description: "One line: the decision, active voice."
status: proposed        # proposed until the deciders accept; then accepted
date: YYYY-MM-DD        # today
deciders: [<user>]      # who owns this decision
supersedes: []          # fill in Step 7 if this replaces an earlier record
tags: [decision]

Leave status: proposed while drafting. It becomes accepted only when the deciders sign off (Step 8) — an ADR that ships accepted before anyone agreed is backdating.


Step 3 — Context: the forces at play (invest here)

## Context is the section that ages best. Write it so a reader three years from now understands why this was even a question — no access to the meeting, the thread, or your memory. Cover:

  • The state of the system when the decision was forced — what exists, what's under strain.
  • What changed to make a choice necessary now rather than never. A new requirement, a scaling limit hit, a deprecated dependency, a deadline.
  • The constraints that bounded the options — team size, existing tech, latency budgets, compliance, a hard date.
  • The forces in tension — the reason this is a decision and not an obvious call. If there were no competing pressures, there'd be nothing to record.

Write it neutrally and factually. Do not argue for the decision here — that's Step 4's job. Context describes the problem so completely that the Decision reads as one reasonable response to it. If a reader finishes Context and still can't see why a choice was needed, the section has failed; rewrite it.

Ground every factual claim about the system in something checkable — link the proposal, a spec, or a prior decision rather than asserting from memory.


Step 4 — Decision: active voice, one paragraph, unambiguous

## Decision states what will be done, in the active voice, present or future tense: "We will ..." One clear paragraph. A reader must finish it knowing exactly what was chosen with zero ambiguity.

Then, briefly:

  • Name the options that were weighed and why the others lost. Two or three sentences per rejected option is enough — "We considered X but it couldn't meet the latency budget; Y was simpler but locked us to a single vendor." This is the heart of the record; a decision with no visible alternatives is unverifiable.
  • Link the parent proposal if the decision graduated from one: "This decision accepts 0004-orders-rearchitecture-proposal." Plain markdown relative link, never backticked, never an HTML anchor.

Do not fold implementation detail into the Decision — how it gets built belongs in a spec, not the ADR. The Decision says what and why, not the migration steps.


Step 5 — Consequences: both directions, honestly

## Consequences records what the team now lives with — good AND bad. A Consequences section with only upside is a marketing document, not an ADR. Cover, in whatever grouping fits:

  • What gets easier — the wins that motivated the choice.
  • What gets harder — the costs, the new complexity, the thing that's now more awkward.
  • What new obligation the team carries — ongoing maintenance, a new skill to hire for, a dependency to track, an invariant someone must now uphold.
  • What this forecloses — options you can no longer take cheaply, doors this closes.
  • Neutral consequences — facts that are neither win nor loss but that a future reader needs.

Force yourself to write at least one genuine negative and one new obligation. If you can't find any, you haven't thought hard enough — every real decision costs something. The negatives are the most valuable part of the record; they're what a future team checks when the decision starts to hurt.


Show full SKILL.md (718 more words)Show less

Step 6 — Soundness self-check (adversarial pass before committing)

Read the draft as a skeptic who disagrees with the decision. Answer each honestly and fix what fails:

  • One-way door or reversible? Is the reversibility of this decision stated? A one-way door (hard or expensive to undo) must say so explicitly in Consequences — that's the single most important thing a future reader needs to know before they inherit it.
  • Does Context actually motivate the Decision? Or does the Decision arrive from nowhere, with forces in Context that don't point at it? If the two sections don't connect, one of them is wrong.
  • Would a reader who disagrees find their objection addressed? The strongest counter-argument should appear somewhere — in a rejected option or a named consequence. If the obvious objection is missing, add it.
  • Is any consequence being hidden because it's inconvenient? The cost you'd rather not write down is exactly the one that belongs in the record.

If this pass reveals that the design itself is in question — not the quality of the record but whether the decision is right — stop and hand off to /review-a-design. This skill records sound decisions; it is not the place to relitigate one.


Step 7 — Supersedes chain (both directions or it's broken)

If this record replaces an earlier one, the chain must be wired in both directions or the log lies from one side.

  1. Forward, on the new record: add the old path to supersedes: frontmatter.
edit({ document: { path: "decisions/0012-adopt-event-sourcing-for-orders.md",
  frontmatter: { supersedes: ["decisions/0007-use-rest-api.md"] } } })
  1. Backward, on the old record: flip its status and add a forward link so a reader landing on the old decision is sent to the new one.
edit({ document: { path: "decisions/0007-use-rest-api.md",
  frontmatter: { status: "superseded" } } })

Then add a line near the top of the old record's Context (or a short > Superseded by ... note): Superseded by [0012-adopt-event-sourcing-for-orders](./decisions/0012-adopt-event-sourcing-for-orders.md).

Never edit the old record's Context, Decision, or Consequences prose. ADRs are frozen — the old decision was true when it was made and stays on the record as history. You add the status flip and the forward pointer; you do not rewrite what it said. Both edits land, or the chain is broken in one direction and the log becomes untrustworthy.


  • Backlinks in: ensure the parent proposal links forward to this decision, and any spec that implements this decision links back to it. links({ kind: "backlinks", document: "decisions/0012-adopt-event-sourcing-for-orders" }) to see who points here; add the missing ones so the record is discoverable.
  • Validate: audit({ path: "decisions/0012-adopt-event-sourcing-for-orders.md" }) returns clean (every lint violation + broken internal link) — fix every finding; a broken link to a superseded record defeats the whole chain.
  • Frontmatter complete: type, description, status, date, deciders, supersedes, tags all present and correct.
  • Status reflects reality: if the deciders have accepted, flip status: proposed → accepted. If they haven't, leave it proposed and tell the user it's awaiting sign-off. Do not mark a decision accepted on the user's behalf.
  • Body shape: exactly ## Context, ## Decision, ## Consequences, in order. No extra top-level sections — depth that doesn't fit these three belongs in a linked spec.

Step 9 — Recap to the user

Close in conversation, three things:

  1. The decision in one sentence — the "We will ..." line.
  2. Its biggest consequence — the one cost or obligation the team most needs to remember, especially if it's a one-way door.
  3. Any record it superseded — name the old ADR and confirm the chain is wired both ways.

Then note whether status is accepted (deciders signed off) or proposed (awaiting sign-off), so the user knows what, if anything, is still open.


Non-goals

  • Don't decide on the user's behalf. If no decision has been made, route to /frame-a-proposal. This skill records; it does not choose.
  • Don't rewrite an accepted record. ADRs are frozen. To change a past decision, supersede it (Step 7) and leave the old one standing — never edit its Context/Decision/Consequences prose.
  • Don't fold implementation detail into an ADR. The migration plan, the API shape, the rollout steps belong in a spec (/write-a-spec). The ADR captures what and why, not how.
  • Don't record a decision that has no consequences section. A record with only upside, or with no costs and no new obligations, isn't an ADR — it's marketing. Every real decision costs something; find it and write it down.
  • Don't judge the soundness of the design here. If the question is whether the decision is right rather than whether it's well-recorded, that's /review-a-design.

© inkeep, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in packages/server/assets/skills/packs/software-lifecycle/record-a-decision of inkeep/open-knowledge.

Open the folder on GitHubat commit cf9b84c

Compare with similar skills

Record A Decision next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Record A Decision compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Record A Decision this skillinkeep/open-knowledge4.4k—~3.5kAutomated safety check: PassGPL-3.0
Coding Standardtestdouble/han279—~8.6kAutomated safety check: PassMIT
Project Documentationtestdouble/han279—~3.5kAutomated safety check: PassMIT
Technical Writingrsmdt/the-startup536—~1.3kAutomated safety check: PassMIT
Technical Documentationkid-sid/claude-spellbook189—~3.4kAutomated safety check: NotesMIT
Simplified Technical Englishathola/claude-night-market342—~2kAutomated safety check: PassMIT

Similar skills

  • Coding Standard

    testdouble/han

    Creates and updates coding standards, conventions, rules, and guidelines for the current project.

    279 GitHub stars~8.6k tokensUpdated 6 days ago
    DevelopmentAuto-check passed
  • Project Documentation

    testdouble/han

    Creates and maintains project documentation for features, systems, and components.

    279 GitHub stars~3.5k tokensUpdated 6 days ago
    DevelopmentAuto-check passed
  • Technical Writing

    rsmdt/the-startup

    Create architectural decision records (ADRs), system documentation, API documentation, and operational runbooks.

    536 GitHub stars~1.3k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • Technical Documentation

    kid-sid/claude-spellbook

    A skill your agent uses when writing a README, documenting an API with OpenAPI, drafting a runbook for on-call engineers, authoring a technical spec or ADR, or setting up docs-as-code with…

    189 GitHub stars~3.4k tokensUpdated 2 mo ago
    DevelopmentAuto-check: notes
  • Simplified Technical English

    athola/claude-night-market

    Applies an ASD-STE100-derived register to operator and procedural text.

    342 GitHub stars~2k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Writes, repairs and copyedits project docs against the Google developer documentation style guide, verifying claims in the repository before stating them.

    946 GitHub stars~2k tokensUpdated 4 days ago
    DevelopmentAuto-check passed

More from inkeep/open-knowledge

All 18 skills in this repo
  • Open Knowledge Write Skill

    inkeep/open-knowledge

    A skill your agent uses when the user wants to create, author, write, or design a new Agent Skill (a SKILL.md) — for OpenKnowledge or for their editors — including requests like 'help me write a…

    4.4k GitHub stars~3.7k tokensUpdated today
    Auto-check passed
  • Open Knowledge Discovery

    inkeep/open-knowledge

    Read when the user asks what OpenKnowledge is, wants to install it on a repository, wants to open or preview a single markdown file that is not part of an OpenKnowledge project, wants to share an…

    4.4k GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Write A Postmortem

    inkeep/open-knowledge

    Write a blameless incident postmortem under postmortems/ following the Google SRE shape — evidence-based timeline, trigger vs root cause vs symptom, contributing factors, what went well, and…

    4.4k GitHub stars~4.4k tokensUpdated today
    Auto-check passed
  • Codebase Wiki

    inkeep/open-knowledge

    How to work in a Codebase Wiki project (the codebase-wiki starter pack): an agent-authored, source-grounded wiki of the surrounding codebase.

    4.4k GitHub stars~1.8k tokensUpdated today
    Auto-check passed
  • Open Knowledge

    inkeep/open-knowledge

    Authoritative agent-runtime contract for working inside an OpenKnowledge project — a markdown-CRDT knowledge base exposed over MCP.

    4.4k GitHub stars~4.7k tokensUpdated today
    Auto-check passed
  • Consolidate Notes

    inkeep/open-knowledge

    Promote existing research into a stable-status canonical article under articles/ in a Knowledge Base project (the knowledge-base starter pack).

    4.4k GitHub stars~2.3k tokensUpdated today
    Auto-check passed

Questions about Record A Decision

What does Record A Decision do?

Records an architecture decision as a Nygard/MADR-shaped ADR under decisions/ — capturing the context that forced the choice, the options weighed, the decision itself, and its consequences in both…. Record A Decision is an agent skill from inkeep/open-knowledge. Records an architecture decision as a Nygard/MADR-shaped ADR under decisions/ — capturing the context that forced the choice, the options weighed, the decision itself, and its consequences in both directions, plus the supersedes chain that keeps a decision log honest.

When should I use Record A Decision?

Record A Decision fits situations like: tasks that involve Architecture decision records; tasks that involve Runbooks and postmortems.

How do I install Record A Decision in Claude Code?

Run `npx skills add inkeep/open-knowledge --skill record-a-decision -a claude-code`. Or copy the skill folder (packages/server/assets/skills/packs/software-lifecycle/record-a-decision in inkeep/open-knowledge) into .claude/skills/record-a-decision in your project. Claude Code loads it when a task matches its description.

How do I install Record A Decision in Codex?

Run `npx skills add inkeep/open-knowledge --skill record-a-decision -a codex`. Or copy the skill folder (packages/server/assets/skills/packs/software-lifecycle/record-a-decision in inkeep/open-knowledge) into .agents/skills/record-a-decision in your project. Codex loads it when a task matches its description.

Can I use Record A Decision in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add inkeep/open-knowledge --skill record-a-decision -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/record-a-decision, .gemini/skills/record-a-decision, .github/skills/record-a-decision and .opencode/skills/record-a-decision in your project.

What does Record A Decision need to run?

SKILL.md names no scripts, command-line tools or credentials: Record A Decision is instructions for the agent only. Compatibility (from SKILL.md): Any agent host with the OpenKnowledge MCP server configured. Installed project-local by `ok seed --pack software-lifecycle`..

Does Record A Decision access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Record A Decision safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Record A Decision use?

Record A Decision is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Record A Decision use?

About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Record A Decision?

Skills that share tags, products or a category with Record A Decision: Coding Standard (testdouble/han, 279 stars), Project Documentation (testdouble/han, 279 stars), Technical Writing (rsmdt/the-startup, 536 stars) and Technical Documentation (kid-sid/claude-spellbook, 189 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Record A Decision?

inkeep (a GitHub organization) maintains it in inkeep/open-knowledge, which has 4,407 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on October 7, 2026.

Source: inkeep/open-knowledge on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.