write-adr
Generate ADRs from decisions made in the current session. Extracts decisions, confirms with user, writes MADR-formatted documents.
Best use case
write-adr is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Generate ADRs from decisions made in the current session. Extracts decisions, confirms with user, writes MADR-formatted documents.
Teams using write-adr should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/write-adr/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How write-adr Compares
| Feature / Agent | write-adr | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Generate ADRs from decisions made in the current session. Extracts decisions, confirms with user, writes MADR-formatted documents.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
AI Agents for Coding
Browse AI agent skills for coding, debugging, testing, refactoring, code review, and developer workflows across Claude, Cursor, and Codex.
AI Agents for Marketing
Discover AI agents for marketing workflows, from SEO and content production to campaign research, outreach, and analytics.
AI Agents for Startups
Explore AI agent skills for startup validation, product research, growth experiments, documentation, and fast execution with small teams.
SKILL.md Source
# Write ADR
Generate Architecture Decision Records (ADRs) from decisions made during the current session.
## Workflow Overview
1. **Context** - Gather repository context and existing ADRs
2. **Extract** - Analyze conversation for decisions using a subagent
3. **Confirm** - Present decisions to user for selection
4. **Write** - Generate ADRs in parallel using subagents
5. **Report** - Summarize created files and status
6. **Verify** - Validate generated ADRs against Definition of Done
## Step 1: Gather Context
```bash
# Get current branch and recent commits
git branch --show-current
git log --oneline -5
# Check for existing ADRs
ls docs/adrs/ 2>/dev/null || echo "No ADR directory found"
# Count existing ADRs for numbering
find docs/adrs -name "*.md" 2>/dev/null | wc -l
```
This context helps the ADR writer:
- Reference related commits in the ADR
- Avoid duplicate ADRs for already-documented decisions
- Determine correct sequence numbering
## Step 2: Extract Decisions
Launch a subagent to analyze the current conversation for architectural decisions:
```text
Task(
description: "Analyze conversation and extract architectural decisions",
model: "sonnet",
prompt: |
Load the skill: Skill(skill: "beagle-analysis:adr-decision-extraction")
Analyze the conversation for decisions that warrant ADRs:
- Technology choices, architecture patterns, design trade-offs
- Rejected alternatives, significant implementation approaches
Return JSON:
{
"decisions": [
{
"id": 1,
"title": "Use PostgreSQL for primary datastore",
"context": "Brief context about why this came up",
"decision": "What was decided",
"alternatives": ["What was considered but rejected"],
"rationale": "Why this choice was made"
}
]
}
)
```
If the subagent returns an empty `decisions` array, skip to Step 5 with message: "No architectural decisions detected in this session."
## Step 3: Confirm with User
**Display all extracted decisions with full details**, then ask user to select:
```text
## Detected Decisions
### 1. Use PostgreSQL for primary datastore
**Confidence:** high
**Problem:** Need ACID transactions for financial records
**Decision:** PostgreSQL for user data storage
**Alternatives discussed:**
- MongoDB
- SQLite
**Rationale:** ACID compliance, team familiarity, mature ecosystem
**Source:** Discussion about database selection in planning phase
---
### 2. Implement event sourcing for audit trail
**Confidence:** medium
**Problem:** Compliance requires complete audit history
**Decision:** Event sourcing pattern for state changes
**Alternatives discussed:**
- Database triggers
- Application-level logging
**Rationale:** Immutable audit trail, temporal queries, debugging capability
**Source:** Compliance requirements discussion
---
## Selection
Which decisions should I write ADRs for?
- Enter numbers (e.g., "1,2" or "1-2"), "all", or "none" to skip
```
**Important:** Always display the full decision details (problem, decision, alternatives, rationale) from the extraction output BEFORE asking for selection. Do not truncate to just title and context.
Parse user response:
- `"all"` - Process all decisions
- `"none"` or empty - Skip with message "No ADRs will be created."
- `"1,2"` or `"1-2"` - Process specified decisions
## Step 4: Write ADRs (Parallel)
**Pre-allocate ADR numbers before launching subagents** to prevent numbering conflicts:
```bash
# Pre-allocate numbers for all confirmed decisions
# Example: If user selected 3 decisions
python skills/adr-writing/scripts/next_adr_number.py --count 3
# Output:
# 0003
# 0004
# 0005
```
**Assign each pre-allocated number to its corresponding decision** before launching subagents.
For each confirmed decision, launch an ADR Writer subagent in background with its **pre-assigned number**:
```text
Task(
description: "Write ADR for: {decision.title}",
model: "sonnet",
run_in_background: true,
prompt: |
Load the skill: Skill(skill: "beagle-analysis:adr-writing")
Write an ADR for this decision:
```json
{decision JSON}
```
**IMPORTANT: Use this pre-assigned ADR number: {assigned_number}**
Instructions:
1. Explore codebase for additional context
2. Write MADR-formatted ADR to docs/adr/
3. Use the pre-assigned number {assigned_number} - DO NOT call next_adr_number.py
4. Filename format: {assigned_number}-slugified-title.md
5. Return created file path
)
```
**Critical:** Pass the pre-allocated number to each subagent. Subagents must NOT call `next_adr_number.py` themselves - this causes duplicate numbers when running in parallel.
All subagents run in parallel. Wait for all to complete before proceeding.
## Step 5: Report Results
Collect outputs from all subagents and present summary:
```markdown
## ADR Generation Complete
| File | Decision | Status |
|------|----------|--------|
| docs/adr/0003-use-postgresql.md | Use PostgreSQL for primary datastore | Draft |
### Next Steps
- Review generated ADRs for accuracy
- Update status from "proposed" to "accepted" when finalized
### Gaps Requiring Investigation
- [List any decisions where subagent noted missing context]
```
If no decisions were processed:
```text
No ADRs were created. Run this command again after making architectural decisions.
```
## Step 6: Verify Generated ADRs
For each created ADR, validate against Definition of Done:
```markdown
## Verification Checklist
| ADR | E | C | A | D | R | Status |
|-----|---|---|---|---|---|--------|
| 0003-use-postgresql.md | ✓ | ✓ | ✓ | ⚠ | ✗ | Incomplete |
Legend: E=Evidence, C=Criteria, A=Agreement, D=Documentation, R=Realization
```
**Verification steps:**
1. Open each generated ADR file
2. Confirm filename follows `NNNN-slugified-title.md` pattern
3. **Verify YAML frontmatter exists at file start:**
- File MUST begin with `---`
- Contains `status: draft` (or valid status)
- Contains `date: YYYY-MM-DD` (actual date)
- Ends with `---` before title
- If frontmatter is missing, add it immediately
4. Review for `[INVESTIGATE]` prompts - these need follow-up
5. Verify at least 2 alternatives are documented
6. Confirm consequences section has both Good and Bad items
**If gaps exist:**
- Keep status as `draft` until gaps are resolved
- Use `[INVESTIGATE]` prompts to guide follow-up session
- Schedule review with stakeholders before changing to `accepted`
## Output Location
ADRs are written to `docs/adr/`. If no ADR directory exists, create it with an initial `0000-use-madr.md` template record.
## MADR Format Reference
```markdown
---
status: draft
date: YYYY-MM-DD
---
# {TITLE}
## Context and Problem Statement
{What is the issue motivating this decision?}
## Decision Drivers
* {driver 1}
* {driver 2}
## Decision Outcome
Chosen option: "{option}", because {reason}.
### Consequences
* Good, because {positive}
* Bad, because {negative}
```Related Skills
Cold Email Writer
Writes personalized cold emails that actually get replies
Policy Writer
Generate professional internal policies for any business function — HR, IT, finance, compliance, data privacy, acceptable use, and more.
Grant Writer
Write winning grant proposals and funding applications. Works for government grants (SBIR, Innovate UK, Horizon Europe), foundation grants, and corporate funding programs.
问专家技能 - 使用 Playwriter 控制已登录的浏览器
## 技能描述
resume-rewrite
简历改写 skill。用于优化个人总结、工作经历、项目经历、技能和教育经历,强调结果、业务价值和岗位匹配度。当用户说“优化简历”“改写工作经历”“润色项目经历”时使用。
case-writer-hybrid
Expand a structured brief in `content-production/inbox/` into a reusable long-form markdown article draft, then run a local writer / critic / judge quality loop with a constrained humanization pass. Use when Codex needs a stage-1 article draft plus reusable writing sidecars for downstream `generate-image` and `wechat-formatter`.
novel-writer
小说写作助手。触发词:写小说/创作小说/生成小说/帮我写个小说/小说大纲/网文创作。工作流:需求收集(类型/风格/字数)→ AI生成大纲(世界观/人物/剧情/章节规划)→ 用户确认 → 自动逐章生成 → 一章一个文件保存。支持玄幻、仙侠、都市、科幻、历史、武侠、网游、灵异、军事、竞技等主流网文类型,面向新手作者。
cjl-writes
写作引擎。带着一个观点出发,在写的过程中把它想透。
writer
Fix AI writing patterns that create repetitive and robotic content
Landing Page Copywriter Lite
Free version — generate hero section copy and run a quick 3-point CRO audit on any landing page.
sop-writer
Write GCP-compliant Standard Operating Procedures for labs and clinical sites
blog-writer
为张向阳(Astral Wave)的个人博客 astralwaveorg 生成高质量技术博客文章。当用户说"写博客xxx"、"帮我写一篇xxx"、"引用消息写成博客"、"总结今天聊天",或者 cron 触发每日聊天总结时,使用此技能。文章风格必须模拟作者本人:用工程师第一人称视角,诚实直接,有踩坑说踩坑,读起来像同事之间的经验分享,而不是翻译官方文档。绝不出现"非常优秀""极其强大"等废话词汇。目标是让读者感觉这是技术大牛写的,不是"AI 生成的"。