agentleFS
bpappinbpappin/skills/skills/docs/to-adr/SKILL.md

to-adr

Skill1 starsChanged 3 months agoMITView on GitHub

Record a decision as an Architecture Decision Record - the forces, the choice, what was rejected and why. Use the moment a hard-to-reverse choice is made, not later - a library or technology picked over alternatives, an approach settled after weighing trade-offs, a constraint accepted, an earlier decision superseded, or an approach abandoned after it failed. Triggers - "we decided", "we're going with", "let's use X instead of Y", "chose X over Y", "record this decision", "new ADR", "document this trade-off", "why did we do it this way", "supersede that decision", "that approach didn't work".

5 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

7 rules. 0 are common, 5 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 5 edited versions we read keep these.

  • 5

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Write one when a choice is hard to reverse and someone could reasonably have chosen otherwise.

    line 27
  2. Distinctive:

    Do not write one for a reversible or obvious choice.

    line 35
  3. Very specific:

    Find where ADRs live: Do not assume. Look for docs/adr/, docs/decisions/, or an "Architecture Decision Records" section under …

    line 43
  4. Distinctive:

    Check for one to supersede: If this reverses or narrows an earlier decision, that is a relationship to record in both directions.

    line 49
  5. Very specific:

    Start from the project-docs template (assets/templates/adr.md in that skill) and keep to its four sections.

    line 54
  6. Distinctive:

    Record what was tried and failed: If an approach was attempted and abandoned, that is the most valuable content in the document - it is the …

    line 83
  7. Distinctive:

    Run the project-docs sync if the project has one.

    line 102

“Common” is measured: kept by at least 6 in 10 of the 5 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

Architecture Decision Records (to-adr)

An ADR captures why a choice was made, so the next person - or the next agent - does not relitigate it, and can tell when the reasons have expired.

Works with the project-docs skill: this skill is the authoring workflow; project-docs owns the conventions, the section, and the KB sync.

An ADR is a technical decision, not a capture. If you are recording something you noticed rather than making the call, file it as an issue and let triage route it. Nobody should be pushed into writing one because the story they picked up turned out to be thin.

When it is an ADR

Write one when a choice is hard to reverse and someone could reasonably have chosen otherwise. A decision with no alternatives was not a decision.

  • ADR - why a choice was made. The decision is frozen once accepted; new knowledge means a new ADR that supersedes it, not a rewritten decision - though the document's facts are kept correct (see After writing).
  • Spec - how a thing IS. Updated in place. If you are describing current behaviour, that is a spec, not an ADR.
  • Code comment - why this line is odd. Local, no alternatives weighed.

Do not write one for a reversible or obvious choice. A repo full of ceremonial ADRs is worse than none, because the real ones stop standing out.

Write it when the decision lands, not at the end of the work. The reasoning is available for about an hour and then it is reconstruction.

Before writing

  1. Find where ADRs live. Do not assume. Look for docs/adr/, docs/decisions/, or an "Architecture Decision Records" section under docs/knowledge/. Match whatever is already there - numbering, naming, frontmatter. A new ADR that does not match its neighbours is a smell.
  2. Read the last two. They show the house style and may already cover this ground.
  3. Check for one to supersede. If this reverses or narrows an earlier decision, that is a relationship to record in both directions.

Writing it

Start from the project-docs template (assets/templates/adr.md in that skill) and keep to its four sections. Number sequentially, zero-padded, with a slug in the filename: 0007-postgres-over-dynamo.md.

Keep the number out of the heading. The heading is the title alone — # Postgres over DynamoDB, not # ADR-0007: Postgres over DynamoDB. It becomes the article title when synced, and an index of prefixed titles is unreadable. The identifier belongs on the metadata line:

# Postgres over DynamoDB

ADR-0007 · 2026-08-05 · Status: accepted

Context - the forces, honestly. What pressure produced this decision. Include the constraints that were not negotiable, because those are what change later and make the decision revisitable.

Decision - actively phrased, in one or two sentences. "We use X."

Consequences - what gets easier, what gets harder, what was given up. The "harder" list is the one people skip and the one that pays off.

Two things that make the difference between an ADR worth reading and a formality:

  • Name the alternatives and why each lost. A decision recorded without its rejected options cannot be re-evaluated later; the reader has no idea whether the reasons still hold.
  • Record what was tried and failed. If an approach was attempted and abandoned, that is the most valuable content in the document - it is the thing a future reader is most likely to try again. Failures are evidence, not embarrassment.

State uncertainty where it exists. "We believe X, unverified" ages far better than false confidence, and tells a reader exactly what to re-check.

After writing

  • A changed decision is a new ADR, never an edit to the old one. Write it, cross-link both ways, and the old gets Status: superseded by ADR-0012. Editing the original instead leaves a record of reasoning nobody ever applied, and quietly repoints every code comment and story that cites the old ID at a different decision.
  • Consequences are the exception, and they are the part worth having. What a decision actually cost is learned months later, not on the day it was made. Add to Consequences as it becomes known, dated, and leave what was already there - a cost that was predicted and a cost that arrived are two different facts, and the distance between them is how anyone calibrates the next decision.
  • The decision is frozen; the document is maintained. A record that states something false - a constant it names has been renamed, a claim in Context or Consequences was wrong when written - is corrected in place. Filing a fresh ADR to say "that name is now X" is noise, and leaving the wrong sentence standing is worse, because the next reader takes it as authoritative and acts on it. A rename, a typo or a dead link is corrected silently; a substantive correction gets a dated line under ## Corrections at the foot of the record, saying what was wrong and what is right. Earlier wording is not lost - git and the knowledge base keep every version, and that is the audit trail, not a stale sentence in the current text.
  • Two edits are never corrections. Rewording the Decision sentence is a new ADR that supersedes this one, not a fix. Rewriting Context with hindsight, so the reasoning reads better than it was, destroys the only evidence of what was actually known at the time. Status: stays the decision's standing - accepted, or superseded by ADR-NNNN - and never becomes a correction log.
  • Point at it from the work it governs - the PRD, the spec, the story's ## References.
  • Where a decision constrains a library's public surface, summarise the rule in that library's shipped skill and leave the reasoning here. Do not re-argue it there.
  • Run the project-docs sync if the project has one; the ADR becomes a KB article.

Adopting mid-project

Decisions already made and undocumented are worth recording only where they are still live and still contested. Write those; do not backfill history for its own sake. Mark them plainly as reconstructed after the fact, since the context is remembered rather than captured.

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.