writing-adrs
Guides writing concise, effective Architecture Decision Records. Use when creating ADRs, extracting decisions from specs, or reviewing ADR quality.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Guides writing concise, effective Architecture Decision Records. Use when creating ADRs, extracting decisions from specs, or reviewing ADR quality.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Develop, validate, and publish DorkOS marketplace packages — agents, plugins, skill-packs, and adapters. Use when creating marketplace items, working in the dork-labs/marketplace repo, or helping users build packages for the personal marketplace.
First-touch triage for incoming GitHub issues on dork-labs/dorkos. Use when DorkBot is asked to triage the issue queue: label each new issue by type and runtime, find likely duplicates, and ask the reporter for missing reproduction steps. Read-and-suggest by default; only comments or edits labels when explicitly allowed to act.
Regenerate DorkOS product screenshots and video loops from the real UI, and manage the shot registry, human overrides, and version archives that feed the marketing site, docs, and changelogs. Use when marketing/docs media is stale after UI changes, a new feature or docs page needs a money shot, a person wants to override an automated capture, or a release calls for a fresh capture or archive — anything under apps/site/public/product/ or the apps/e2e/capture pipeline.
Skill whose frontmatter name does not match its directory name.
Implements the Calm Tech design system using Tailwind CSS v4 and Shadcn UI. Use when writing styles, building components, or theming. For design decisions, see designing-frontend.
Writes human-friendly changelog entries and release notes. Use when populating changelog, preparing releases, or reviewing release notes quality.
| name | writing-adrs |
| description | Guides writing concise, effective Architecture Decision Records. Use when creating ADRs, extracting decisions from specs, or reviewing ADR quality. |
Architecture Decision Records (ADRs) capture significant technical decisions in a concise, standardized format. They answer "why did we do this?" for future developers and AI agents. DorkOS ADRs live in decisions/ with a manifest.json index.
Write an ADR when a decision:
Skip ADRs for:
Focus on the problem, not the solution. What situation existed? What forces were at play?
State what was decided in active voice. Start with "We will..."
List concrete positives and negatives. Every decision has trade-offs — if you can't list a negative, think harder.
When scanning specs for ADR candidates, look for:
| Signal | Example |
|---|---|
| "We chose X over Y" | Technology or library selection |
| "The recommended approach" | Pattern adoption after comparing options |
| "Trade-offs" section | Explicit trade-off analysis |
| "Architecture" or "Design" | Structural decisions |
| "We will not" / "Out of scope" | Deliberate exclusions with rationale |
| Status | Meaning |
|---|---|
proposed | Significant decision recorded, not yet committed |
accepted | Active decision guiding implementation |
deprecated | No longer relevant (project evolved past it) |
superseded | Replaced by a newer ADR (link via superseded-by) |
archived | Determined trivial or historical; moved to decisions/archive/ |
There is no draft status: significance is judged at extraction time. /adr:from-spec applies the significance rubric when extracting — decisions meeting 2+ "When to Write" criteria are written as proposed (or accepted if the spec already shipped); the rest are never written as files.
When a new ADR reverses part of an older one, the older ADR stays accepted. There is no superseded-in-part status, and inventing one is not the answer: a status is an instruction about whether to rely on the document, and marking a mostly-live ADR terminal tells every future reader to stop reading something they still need.
So:
status: accepted and superseded-by: null, in the file and in decisions/manifest.json.260726-170125 uses.supersedes: <parent-id> in its manifest entry, and says in its own Status section which clause it replaces. That field is the only machine-readable link, so it is not optional.Reserve status: superseded for a whole ADR being replaced (0224 → 260726-193526, 0070 → 260726-171347).
One older ADR diverges from this rule: 260713-143958 is a partial supersession that set status: superseded anyway. It predates this rule and is deliberately left alone. Do not copy it, and do not "fix" it either.
/adr:review (triggered when a spec is implemented or the proposed backlog grows)
Moves proposed ADRs to their terminal state:
Acceptance criteria: A proposed ADR is ready for acceptance when:
implemented in spec manifest)ADRs are seeded by the /flow:specify stage (when the flow plugin is loaded) or by /adr:from-spec when a spec is validated. Extraction applies the significance rubric immediately — only decisions that clear it become ADR files.
decisions/<id>-kebab-case-title.mdYYMMDD-HHMMSS for new ADRs (allocate via
.claude/scripts/id.ts); the ~260 legacy ADRs keep their frozen 4-digit numbers,
which sort before timestamp ids (spec #271)decisions/manifest.json tracks all ADRs (no nextNumber counter)decisions/TEMPLATE.md for the standard format