agentleFS
markphelpsmarkphelps/agent-plugins/skills/decision-records/SKILL.md

decision-records

Skill5 starsChanged 45 days agoMITView on GitHub

A records directory is a repository's durable registry for decisions and implementation plans. A record explains what the team decided, why, and what follows from that decision. Records are historical evidence: they are appended to and amended, not rewritten. Do not use a record for a routine code change, a temporary task, a release note, or an investigation without a durable outcome. 1. Look for an existing registry, in this order: docs/records/, docs/adr/, docs/decisions/, adr/, decisions/, or any directory that…

8 other projects use a version of this.

Adopted by

Most recently taken up by

The file

Show its rules and text

We split this skill into the rules it gives an agent

34 rules. 0 are common, 25 are distinctive, and 9 are very specific to this project.

  • 0

    Common

    Most of the 7 edited versions we read keep these.

  • 25

    Distinctive

    This author's own choices. Worth a look.

  • 9

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Do not use a record for a routine code change, a temporary task, a release note, or an investigation without a durable outcome.

    line 20
  2. Very specific:

    Look for an existing registry, in this order: docs/records/, docs/adr/, docs/decisions/, adr/, decisions/, or any directory that contains a …

    line 25
  3. Distinctive:

    If a registry exists, its README.md is the contract.

    line 29
  4. Very specific:

    If no registry exists, ask the user whether to create one.

    line 32
  5. Distinctive:

    Read the registry README.md completely.

    line 38
  6. Distinctive:

    Read the records that relate to the work.

    line 39
  7. Distinctive:

    Read the product, design, or architecture source that defines the facts.

    line 40
  8. Distinctive:

    If a record conflicts with newer evidence, preserve the record's history and record the correction or new decision.

    line 41
  9. Distinctive:

    Do not copy a legacy record's errors into a new record.

    line 44
  10. Distinctive:

    Create a record only after the decision or plan has a clear scope.

    line 49
  11. Distinctive:

    Add the exact frontmatter contract from the registry README.

    line 55
  12. Very specific:

    Use kind: decision for a durable choice.

    line 57
  13. Distinctive:

    Start with the six required headings, in this order:

    line 63
  14. Distinctive:

    Add the new row to the registry table in the README.

    line 70
  15. Distinctive:

    Use this when the registry README does not define its own:

    line 77
  16. Distinctive:

    Write factual, direct prose in plain English.

    line 95
  17. Distinctive:

    Use relative links. Keep the frontmatter ID lists in the same order as the links in this section.

    line 140
  18. Very specific:

    Add a dated ## Amendment (YYYY-MM-DD) — <short title> for a later decision, correction, or material scope change.

    line 150
  19. Very specific:

    Update ## Validation / Current state when new evidence changes the status.

    line 152
  20. Very specific:

    Create a new record when a decision or plan is fully replaced.

    line 153
  21. Very specific:

    Use related, not supersedes, for a dependency, coordinated work, or a partial refinement.

    line 156
  22. Distinctive:

    Never silently rewrite history to make an old decision look current.

    line 158
  23. Distinctive:

    Default vocabulary, unless the registry README defines its own:

    line 165
  24. Very specific:

    Only when the user agrees to create one.

    line 175
  25. Distinctive:

    Keep the README short. It is a contract, not a guide.

    line 185
  26. Distinctive:

    Make sure that the new ID is unique and matches the filename.

    line 191
  27. Distinctive:

    Make sure that the frontmatter has every required key and valid values.

    line 192
  28. Distinctive:

    Make sure that the required headings exist in the required order.

    line 193
  29. Distinctive:

    Make sure that every linked or listed record ID exists.

    line 194
  30. Very specific:

    Make sure that supersedes means full replacement.

    line 195
  31. Distinctive:

    Make sure that the registry row and frontmatter agree.

    line 196
  32. Distinctive:

    Read the record as a future maintainer.

    line 197
  33. Distinctive:

    Run git diff --check. If the repo has a Markdown linter or link checker, run it on the changed files.

    line 199
  34. Distinctive:

    Do not run the app build or test suite for a records-only change.

    line 202

“Common” is measured: kept by at least 6 in 10 of the 7 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Project records

A records directory is a repository's durable registry for decisions and implementation plans. A record explains what the team decided, why, and what follows from that decision. Records are historical evidence: they are appended to and amended, not rewritten.

Do not use a record for a routine code change, a temporary task, a release note, or an investigation without a durable outcome.

Find the records directory

  1. Look for an existing registry, in this order: docs/records/, docs/adr/, docs/decisions/, adr/, decisions/, or any directory that contains a README.md with a table of numbered records. Check the project's README.md, CONTRIBUTING.md, AGENTS.md, or CLAUDE.md for a pointer.
  2. If a registry exists, its README.md is the contract. It is the authority for ID format, filename pattern, frontmatter, status vocabulary, and required headings. Follow it even where it differs from the defaults below.
  3. If no registry exists, ask the user whether to create one. If they agree, create docs/records/README.md from the template in "Bootstrap a registry" before writing the first record.

Read first

  1. Read the registry README.md completely.
  2. Read the records that relate to the work.
  3. Read the product, design, or architecture source that defines the facts.
  4. If a record conflicts with newer evidence, preserve the record's history and record the correction or new decision. Do not edit the old text in place.

Do not copy a legacy record's errors into a new record. When a legacy record and the registry contract disagree, the contract wins.

Create a record

Create a record only after the decision or plan has a clear scope. Ask for missing product or technical facts before you invent them.

  1. Find the next unused ID in the registry table. Default format is a global three-digit number (001, 002, ...). Never reuse or skip an ID.
  2. Name the file <id>-<short-kebab-case-title>.md.
  3. Add the exact frontmatter contract from the registry README. Keep every list key, even when the list is empty.
  4. Use kind: decision for a durable choice. Use kind: plan for committed, outcome-based work.
  5. New decisions start as proposed until accepted. New plans start as planned until work begins. Use another valid status only when the current state differs.
  6. Set date and updated to the creation date. Use ISO dates (YYYY-MM-DD).
  7. Start with the six required headings, in this order:
    • ## Intent
    • ## Context
    • ## Record
    • ## Consequences
    • ## Validation / Current state
    • ## Related records
  8. Add the new row to the registry table in the README.

The table row is part of the change. Keep its ID, title, kind, status, date, supersession, and related-record fields aligned with the record's frontmatter.

Default frontmatter

Use this when the registry README does not define its own:

---
id: 007
title: Short title
kind: decision # decision | plan
status: proposed # see "Status rules"
date: 2026-09-13
updated: 2026-09-13
supersedes: []
superseded_by: []
related: []
---

Write the sections

Write factual, direct prose in plain English. Use the project's own terms, matching the related records. Prefer short sentences and concrete nouns over abstractions. If the repo has a writing-style skill or guide, apply it.

Intent

State the user or project outcome. State what the record makes possible or protects. Do not repeat implementation detail here.

Context

State the facts, constraints, research, risks, and alternatives that shaped the choice. Link evidence (issues, PRs, benchmarks, docs) when it is useful. Mark assumptions and open questions as such.

Record

State the decision or plan precisely. Use numbered items when the contract has several rules. Name scope boundaries and required behavior. For a plan, make the desired outcome and completion evidence clear.

Consequences

State costs, tradeoffs, follow-up work, and intentionally deferred work. Do not present a consequence as a requirement unless the record commits to it.

Validation / Current state

State the current, observable status. For completed work, name the evidence: tests, checks, measurements, or human acceptance. For proposed or active work, state what remains. Do not claim that work shipped or passed unless the evidence exists.

Related records

Use this form:

**Supersedes:** None.

**Related:**

- [005 — Short title of record 005](005-short-title.md)

Use relative links. Keep the frontmatter ID lists in the same order as the links in this section.

Update a record

A record is historical evidence. Preserve its ID, filename, creation date, and past decisions.

  • Change updated only for a substantive content change.
  • Change status only to a value valid for the record kind.
  • Add a dated ## Amendment (YYYY-MM-DD) — <short title> for a later decision, correction, or material scope change. Put it after the existing material.
  • Update ## Validation / Current state when new evidence changes the status.
  • Create a new record when a decision or plan is fully replaced. Put the old IDs in the new record's supersedes, set the old record's status to superseded and its superseded_by, and update the registry rows.
  • Use related, not supersedes, for a dependency, coordinated work, or a partial refinement.
  • Never silently rewrite history to make an old decision look current.

A superseded record stays in the registry. Do not renumber, delete, or reuse its ID.

Status rules

Default vocabulary, unless the registry README defines its own:

  • Decisions: proposed, accepted, superseded, rejected.
  • Plans: planned, active, completed, blocked, superseded, rejected.

A status tells the truth about the record. It does not predict the desired outcome.

Bootstrap a registry

Only when the user agrees to create one. Write docs/records/README.md with:

  1. A one-paragraph statement of what belongs in a record and what does not.
  2. The ID and filename pattern.
  3. The frontmatter contract (copy the default above).
  4. The status vocabulary per kind.
  5. The six required headings in order.
  6. An empty registry table with these columns: ID | Title | Kind | Status | Date | Supersedes | Related.

Keep the README short. It is a contract, not a guide.

Final review

Before you finish:

  1. Make sure that the new ID is unique and matches the filename.
  2. Make sure that the frontmatter has every required key and valid values.
  3. Make sure that the required headings exist in the required order.
  4. Make sure that every linked or listed record ID exists.
  5. Make sure that supersedes means full replacement.
  6. Make sure that the registry row and frontmatter agree.
  7. Read the record as a future maintainer. Remove vague promises and unsupported claims.
  8. Run git diff --check. If the repo has a Markdown linter or link checker, run it on the changed files.

Do not run the app build or test suite for a records-only change.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.