Use when making architectural decisions that need documentation, after brainstorming explores trade-offs, or when code review reveals undocumented decisions - captures decision context, alternatives, and rationale in standardized Architecture Decision Record format at the moment decisions are made
/plugin marketplace add mthalman/superpowers/plugin install superpowers@claude-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
assets/decision-log-index.mdassets/template-madr.mdreferences/examples.mdreferences/what-counts.mdscripts/New-ADR.ps1Capture architectural decisions when they're made, not months later when context is lost. This skill helps document significant technical decisions using the Architecture Decision Record (ADR) pattern, making it easy to understand why systems are built the way they are.
Use this skill when:
Making architectural decisions:
After brainstorming:
During code review:
Before implementation:
Is this a prototype/spike/experiment?
Before creating an ADR, determine if you're documenting an experiment or an architectural decision:
EXPERIMENT: Exploring what's possible, learning, prototyping
ARCHITECTURAL DECISION: Committing to ship/deploy something
The key distinction: The architectural decision is "use in production," not "try in prototype."
Create experiments/YYYY-MM-description.md instead of ADR.
Experiment Log Template:
# Experiment: [Description]
## Status
In Progress / Completed / Abandoned
## Goal
[What we're trying to learn or validate]
## Hypothesis
[What we think will work and why]
## Approach
- Technology: [What we're testing]
- Timeline: [How long for spike]
- Success Criteria: [How we'll know if it works]
## Findings
[Update as you learn - what worked, what didn't, metrics, observations]
## Decision Point
**IF this experiment succeeds AND we decide to ship to production:**
- Create ADR for production technology choice
- Re-evaluate with production criteria (scale, cost, operations, SLAs)
- The ADR will document the shipping decision, not the experiment
## References
- Branch: [link]
- Test data: [location]
- Related experiments: [links]
Why experiment logs instead of ADRs:
When to promote experiment to ADR: Only when experiment succeeds AND you decide to ship to production. At that point:
Now create an ADR.
Key points:
Example:
experiments/2025-12-vector-search-spike.md (used Pinecone for quick testing)Before creating ANY ADR, verify:
✅ Decision is actually made
✅ Decision is binding
✅ This is architecture vs implementation
Don't abuse status fields to force experiments into ADR format.
If uncertain, use experiment log first. You can always promote to ADR later if you ship.
⚠️ COGNITIVE CHECKPOINT: Before creating an ADR
You must be able to articulate:
If you cannot clearly articulate significance → This likely doesn't need an ADR If you can clearly articulate → Proceed with ADR creation
Not every decision needs an ADR. Ask:
If unsure, read references/what-counts.md for detailed guidance.
Quick examples:
Use the New-ADR.ps1 script to create a new ADR.
Script location: scripts/New-ADR.ps1
Run from project root:
# Basic usage (proposed status)
pwsh scripts/New-ADR.ps1 -Title "Use PostgreSQL for primary database"
# With options
pwsh scripts/New-ADR.ps1 `
-Title "Use PostgreSQL for primary database" `
-Status Accepted `
-DecisionsPath "docs/architecture/decisions"
Run from skill directory:
# If already in skills/adr-generator/
pwsh scripts/New-ADR.ps1 -Title "Use PostgreSQL for primary database"
Parameters:
Title: Decision title (required)Status: Proposed, Accepted, Deprecated, Superseded, Rejected. Default: ProposedDecisionsPath: Where to create ADR files. Default: docs/decisionsThe script:
docs/decisions/0005-use-postgresql-for-primary-database.mdOpen the created file and complete the template sections:
Read references/examples.md for well-written ADR examples.
Before writing the ADR, gather context that shapes the decision:
Consider team-specific factors that affect technology choices:
Team expertise: What technologies does the team have deep experience with?
Team size/maturity: How does team composition affect operational choices?
On-call burden tolerance: Who maintains this?
Consider organizational factors:
Existing technology stack: What's already in production?
Engineering principles: What principles guide decisions?
Risk tolerance: What's acceptable risk level?
Maintenance expectations: Who operates this long-term?
Operational maturity requirements: What's the SLA?
Support availability: What support exists?
Common established principles:
How to reference principles:
## Decision Drivers
- Team has PostgreSQL production experience (3 services)
- Aligns with "boring technology" principle: conserve innovation for differentiating features
- "You build it, you run it": choosing technology team can operate
- Budget constraints favor open-source solutions
Benefits of referencing principles:
❌ Generic, context-free:
### PostgreSQL
Relational database with good performance and ACID compliance.
* Good, because good performance
* Good, because ACID support
* Bad, because vertical scaling limits
✅ Contextualized with team/org factors:
### PostgreSQL
Relational database with JSON support and full ACID compliance.
* Good, because team has 5 years production experience (reduces operational risk)
* Good, because already in stack for 3 other services (reuse monitoring, runbooks, expertise)
* Good, because strong ACID guarantees needed for financial transactions
* Good, because aligns with "boring technology" principle for non-differentiating infrastructure
* Bad, because vertical scaling limits (may need sharding beyond 1M transactions/day)
* Bad, because team needs to learn PostgreSQL-specific features (JSONB indexing, query optimization)
Principle: Alternatives analysis without team/org context is academic, not architectural. Architecture exists in organizational context.
This section is the most important and requires one subsection per considered option.
Structure for each option:
### [Option Name]
[One sentence describing what this option is]
* Good, because [specific benefit]
* Good, because [specific benefit]
* Good, because [specific benefit]
* Bad, because [specific drawback]
* Bad, because [specific drawback]
* Bad, because [specific drawback]
Guidelines:
How to extract from brainstorming:
Example:
### PostgreSQL
Relational database with JSON support and full ACID compliance.
* Good, because native JSONB support handles both structured and semi-structured data
* Good, because strong ACID guarantees for financial transactions
* Good, because team has SQL experience
* Bad, because vertical scaling limits
* Bad, because requires operational expertise
Common mistakes:
Why this section matters: Future developers need to see ALL options were evaluated, understand trade-offs, and know why rejected options weren't chosen.
After filling in the ADR content, commit it to version control:
git add docs/decisions/0005-use-postgresql-for-primary-database.md
git commit -m "docs: add ADR-0005 for PostgreSQL database choice"
Why commit immediately:
Commit message format:
docs: prefix for ADR commitsNatural handoff:
Example:
[After brainstorming session]
"The brainstorming session identified PostgreSQL as the best choice for our use case.
Let me use the adr-generator skill to document this decision."
[Creates ADR capturing the alternatives and reasoning from brainstorming]
When reviewer questions a decision:
Example:
Reviewer asks: "Why JWT instead of sessions?"
If this wasn't documented, use adr-generator to create:
"ADR-0015: Use JWT with Refresh Tokens for Authentication"
Before claiming work is complete:
This skill uses the MADR (Markdown Any Decision Records) template format, which provides structured sections for comprehensive decision documentation:
Sections:
This structured format ensures all relevant context is captured, making it easy for future developers to understand both what was decided and why.
For projects with many ADRs, maintain an index file for easy navigation.
Template available: assets/decision-log-index.md
Location: docs/decisions/README.md or docs/decisions/INDEX.md
Contents:
Example:
# Architecture Decision Records
| ADR | Title | Status | Date |
|-----|-------|--------|------|
| [ADR-0001](0001-record-architecture-decisions.md) | Record architecture decisions | Accepted | 2024-01-15 |
| [ADR-0002](0002-use-postgresql.md) | Use PostgreSQL for primary database | Accepted | 2024-02-03 |
| [ADR-0003](0003-jwt-authentication.md) | Use JWT with refresh tokens | Accepted | 2024-02-10 |
When to create:
Maintenance:
Track decision lifecycle with these statuses:
Proposed → Accepted
git commit -m "docs: accept ADR-0005 (PostgreSQL choice)"Proposed → Rejected
git commit -m "docs: reject ADR-0007 (GraphQL adoption)"Accepted → Deprecated
git commit -m "docs: deprecate ADR-0003 (Redis caching pattern)"Accepted → Superseded
git commit -m "docs: supersede ADR-0005 (replaced by ADR-0020)"git commit -m "docs: add ADR-0020 (MongoDB adoption)"Status Change Guidelines:
How you document superseded decisions affects organizational learning culture.
When creating a new ADR that supersedes an old decision, language matters for psychological safety and learning culture.
❌ Avoid blame-implying language:
✅ Use context-change framing:
1. Historical Context Section
## Historical Context (Reference ADR-XXXX)
In [year], we chose [old technology] for the following reasons (from ADR-XXXX):
- [Reason 1 from original ADR]
- [Reason 2 from original ADR]
- [Reason 3 from original ADR]
**What has changed since ADR-XXXX:**
1. **Scale:** [How growth changed requirements]
2. **Requirements:** [What new needs emerged]
3. **Use patterns:** [How actual usage differed from expectations]
4. **Team expertise:** [How team capabilities evolved]
**ADR-XXXX was the correct decision at the time.** [Explain why it made sense then]
2. Lessons Learned Section
## Lessons Learned
**What we learned from this evolution:**
- [Insight 1]: [What this experience taught us]
- [Insight 2]: [What we'd consider differently next time]
- [Insight 3]: [How our understanding evolved]
**This is not a reversal of a "mistake"** - it's natural evolution as:
- Requirements became clearer
- Scale revealed different needs
- Team and system matured
3. Update Old ADR with Respectful Language
Add to the TOP of the old ADR (ADR-XXXX):
**Status**: Superseded by ADR-YYYY: [New Decision Title] (YYYY-MM-DD)
**Note**: This decision was appropriate for our context in [year] ([brief context]).
As of [current year], our needs evolved to require [new capability].
See ADR-YYYY for details on what changed and why.
Protect past decision-makers:
Promote honest documentation:
Encourage revisiting decisions:
❌ Blame framing:
## Why MongoDB Failed
MongoDB couldn't handle our transaction requirements and caused data consistency issues.
We're fixing this by migrating to PostgreSQL.
✅ Context-change framing:
## Historical Context (Reference ADR-0003)
In 2023, we chose MongoDB for schema flexibility during rapid MVP iteration (see ADR-0003).
**What has changed since ADR-0003:**
- Scale grew 10x (50K → 500K users)
- Requirements: ACID needs emerged for payment workflows
- Use patterns: Queries became relational (complex joins), fighting document model
- Schema: Stabilized after 6 months, flexibility less critical
**ADR-0003 was the correct decision at the time.** Schema flexibility enabled rapid
feature iteration in our MVP phase. Our needs evolved as the system matured.
## Lessons Learned
- Document model works well for early-stage flexibility
- Relational patterns emerge at scale with stable schemas
- Next time: Consider transaction patterns earlier in database evaluation
Be honest if the original decision was flawed:
If, in retrospect, the original decision missed obvious considerations:
## Reflection on ADR-XXXX
**In retrospect:** ADR-XXXX underestimated [factor] that was knowable at the time.
**What we missed:**
- [Consideration that should have been evaluated]
- [Risk that was foreseeable but not assessed]
**What we'd do differently:**
- [Specific process improvement]
- [Additional evaluation step]
**Learning:** This isn't about blame - it's about improving our decision-making process.
Principle: Honesty about mistakes is fine, but frame as process learning, not individual fault.
references/examples.mdContains complete, real-world examples of well-written ADRs:
When to load: Writing first ADR, unsure how much detail to include, want to see good examples.
How to load:
Read references/examples.md
references/what-counts.mdComprehensive guide for determining when to create an ADR:
When to load: Unsure if decision warrants an ADR, debating with team about documentation, establishing ADR practice.
How to load:
Read references/what-counts.md
Scenario: User asks "Should we use PostgreSQL or MongoDB for our database?"
Step 1: Brainstorming session
User: "Should we use PostgreSQL or MongoDB?"
Claude (using brainstorming skill):
- Asks about requirements: ACID needs? JSON data? Team experience?
- Proposes alternatives: PostgreSQL, MongoDB, MySQL
- Explores trade-offs:
- PostgreSQL: Strong ACID, JSON support, team knows SQL
- MongoDB: Flexible schema, horizontal scaling, no ACID across docs
- MySQL: Mature, team knows it, weaker JSON support
- User chooses: PostgreSQL
Step 2: Recognize architectural decision
Claude: "This database choice is an architectural decision that should be documented.
Let me use the adr-generator skill to create an ADR."
Step 3: Create ADR file
pwsh scripts/New-ADR.ps1 -Title "Use PostgreSQL for primary database"
# Creates: docs/decisions/0003-use-postgresql-for-primary-database.md
Step 4: Fill ADR from brainstorming context
## Context and Problem Statement
We need a database for user data, product catalog, and transactions. Requirements include
ACID compliance, JSON support, and team familiarity.
What database should we use that balances structured and flexible data needs?
## Decision Drivers
* Need ACID guarantees for transactions
* Team has SQL experience
* Require JSON support for flexible product attributes
* Budget constraints favor open-source
## Considered Options
* PostgreSQL
* MongoDB
* MySQL
## Decision Outcome
Chosen option: "PostgreSQL", because it provides ACID + JSONB + team expertise.
## Positive Consequences
* JSONB handles structured and flexible data
* Strong ACID compliance
* Team already knows SQL
## Negative Consequences
* Vertical scaling limitations
* Requires index tuning
* Team needs to learn PostgreSQL-specific features
## Pros and Cons of the Options
### PostgreSQL
Relational database with JSON support.
* Good, because JSONB support for flexible schemas
* Good, because strong ACID guarantees
* Good, because team has SQL experience
* Bad, because vertical scaling limits
* Bad, because operational complexity
### MongoDB
Document-oriented NoSQL database.
* Good, because excellent flexible schema
* Good, because horizontal scaling built-in
* Bad, because no ACID across documents (deal-breaker)
* Bad, because team needs to learn NoSQL patterns
### MySQL
Popular relational database.
* Good, because team has SQL experience
* Good, because mature ecosystem
* Bad, because weaker JSON support than PostgreSQL
* Bad, because less powerful full-text search
Step 5: Commit
git add docs/decisions/0003-use-postgresql-for-primary-database.md
git commit -m "docs: add ADR-0003 for PostgreSQL database choice"
Key insight: All the content for the ADR (context, alternatives, pros/cons) came from the brainstorming session. The ADR is just organizing that context into the structured format.
1. Reviewer asks: "Why did you do this?"
2. Recognize: This was an architectural decision
3. Use adr-generator skill: Create ADR with reasoning
1. Make primary decision (e.g., "Use microservices")
2. Document with ADR-0010
3. Subsequent decisions reference it:
- ADR-0011: Service communication pattern (references ADR-0010)
- ADR-0012: Service discovery approach (references ADR-0010)
1. Context changes, old decision no longer appropriate
2. Create new ADR-0020 with updated decision
3. Update ADR-0005 status to "Superseded by ADR-0020"
4. New ADR explains why previous decision was superseded
Be honest about consequences:
Capture decision drivers:
Link related ADRs:
Keep ADRs immutable:
Write for future developers:
❌ Documenting after implementation
❌ Skipping alternatives
❌ Only positive consequences
❌ Too vague
❌ Treating ADRs as implementation docs
❌ Changing ADRs after acceptance
"I'm not sure if this needs an ADR"
→ Read references/what-counts.md and use the decision tree
"I don't know what alternatives to list"
→ If you didn't consider alternatives, maybe don't make the decision yet. Read references/examples.md for inspiration.
"We need to change an existing ADR" → Don't edit it. Create new ADR that supersedes the old one.
"Team won't read these" → Reference ADRs in code reviews, onboarding docs, and implementation plans. Make them discoverable.
Create ADR (from project root):
pwsh scripts/New-ADR.ps1 -Title "Your decision title"
With options:
pwsh scripts/New-ADR.ps1 `
-Title "Decision title" `
-Status Accepted `
-DecisionsPath "docs/architecture/decisions"
Read examples:
Read references/examples.md
Decide if needed:
Read references/what-counts.md
Commit ADR:
git add docs/decisions/0005-your-decision.md
git commit -m "docs: add ADR-0005 (your decision)"
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.