Research a problem and draft an Architecture Decision Record. Use when user asks to design/draft/write an ADR or make an architectural decision.
86
83%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Advisory
Suggest reviewing before use
Research a problem, explore trade-offs, and draft an Architecture Decision Record following the project's ADR conventions.
Key Philosophy: ADRs capture why decisions were made, not just what was decided. Invest time in understanding the problem space and documenting trade-offs so future developers (and agents) understand the reasoning.
Clarify the decision scope: Ask the user:
Research the problem space: Gather context from the codebase and docs:
a. Existing decisions:
# Check for related ADRs
ls docs/ADR/
grep -rl "<relevant keywords>" docs/ADR/b. Current implementation:
c. Design docs and principles:
docs/beamtalk-principles.md — Does this align with core philosophy?docs/beamtalk-language-features.md — Does this affect language semantics?docs/beamtalk-syntax-rationale.md — Are there prior rejected alternatives?docs/development/architecture-principles.md — Architectural constraints?docs/beamtalk-ddd-model.md — DDD implications?d. Prior art — how do similar languages/platforms handle this?
Compare against these reference points (use web search when needed):
| Category | Languages/Platforms | Why compare |
|---|---|---|
| Smalltalk family | Pharo, Squeak, Newspeak, GNU Smalltalk | Direct ancestors — what works, what we'd improve |
| BEAM languages | Erlang, Elixir, Gleam, LFE | Same VM — what's possible, what's idiomatic on BEAM |
| Modern interactive | Swift Playgrounds, Jupyter, Livebook | Interactive-first peers — UX expectations |
| Actor languages | Pony, Akka (Scala), Dart (isolates) | Actor model — messaging, concurrency patterns |
For each relevant comparison:
User perspective analysis: Evaluate the decision from each user persona's viewpoint:
a. Newcomer (learning Beamtalk, coming from Python/JS/Ruby):
b. Smalltalk developer (experienced, opinionated about Smalltalk purity):
c. Erlang/Elixir developer (using Beamtalk for BEAM interop):
d. Production operator (running Beamtalk in production):
e. Tooling developer (building IDE support, LSP, debugger):
DevEx validation: Before finalizing options, check each against the DevEx checklist:
If you can't write a compelling REPL example, the design needs more work.
Identify options: List 2-4 concrete approaches with trade-offs:
For each option:
Steelman each option: For each option, argue for it from every user cohort's perspective. The goal is to find the strongest possible case for options you might otherwise dismiss.
For each option, write the best argument a member of each cohort would make:
| Cohort | Their strongest argument for this option |
|---|---|
| Newcomer | "This is the best option because..." |
| Smalltalk purist | "This preserves/improves on Smalltalk because..." |
| Erlang/BEAM veteran | "This works best on BEAM because..." |
| Production operator | "This is most reliable in production because..." |
| Language designer | "This is the most elegant/composable because..." |
Rules for steelmanning:
Present the steelman summary to the user:
## Steelman Analysis
### Option A: [Name]
- 🧑💻 **Newcomer**: "This is most intuitive because [X] — I'd guess this syntax without reading docs"
- 🎩 **Smalltalk purist**: "This stays true to message-passing because [Y]"
- ⚙️ **BEAM veteran**: "This maps cleanly to OTP because [Z]"
- 🏭 **Operator**: "This is observable and predictable because [W]"
- 🎨 **Language designer**: "This composes well because [V]"
### Option B: [Name]
- 🧑💻 **Newcomer**: "This matches what I know from Python/JS because [X]"
- ...
### Tension Points
- Newcomers prefer Option B but Smalltalk purists strongly prefer Option A
- BEAM veterans and operators agree on Option A
- Language designers are split: A is more elegant, B is more pragmaticPresent options to user: Show the options with steelman analysis and a clear recommendation:
## Option A: [Name] (Recommended)
[Description, code example, pros/cons]
## Option B: [Name]
[Description, code example, pros/cons]
## Steelman Summary
[Condensed from step 6]
## Recommendation
Option A because [reasoning informed by steelman analysis].Wait for the user to choose or discuss before writing the ADR.
Determine next ADR number:
ls docs/ADR/*.md | grep -v README | sort | tail -1Increment from the highest existing number.
Write the ADR: Copy docs/ADR/TEMPLATE.md to docs/ADR/NNNN-kebab-case-title.md and fill in all sections using the research, options analysis, and steelman results from previous steps.
cp docs/ADR/TEMPLATE.md docs/ADR/NNNN-kebab-case-title.mdFill in every section. Remove Migration Path if not applicable. The Prior Art, User Impact, and Steelman Analysis sections should draw directly from steps 2d, 3, and 6.
Update the ADR index: Add the new ADR to docs/ADR/README.md.
Commit the ADR:
git add docs/ADR/NNNN-*.md docs/ADR/README.md
git commit -m "docs: add ADR NNNN - <title> BT-XXX"/plan-adr to break this into implementation issues?"✅ Create an ADR for:
❌ Don't create an ADR for:
Always evaluate options against the core principles (docs/beamtalk-principles.md):
6552512
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.