decision-capture
Capture patine (decision wisdom) at Gates when KO or challenge occurs
适合你,如果团队常在关键时刻做决策却缺乏记录机制
npx oh-my-skill add wellapp-ai/well/decision-capturecurl -fsSL https://oh-my-skill.com/install.sh | bash -s -- wellapp-ai/well/decision-capturenpx oh-my-skill verify wellapp-ai/well/decision-capture怎么用
商店整理自技能原文 · 版本 782601c · 表述以原文为准当你在项目关卡(Gate)中否决某个提案,或挑战一个决策时,Claude会自动记录决策原因和被拒绝的替代方案。还会自动捕捉重复出现的问题模式和学习反思,存入Notion知识库。
在Gate流程中你给出否决(KO)、拒绝提案,或调试时发现值得记住的模式时触发。也会自动捕捉修正2次以上的错误、用户纠正AI假设等场景。
技能原文 SKILL.md
Decision Capture Skill
Lightweight skill for capturing the "patine" - the accumulated wisdom of why decisions were made and alternatives rejected. Triggered at Gates when human provides KO or challenges a proposal.
When to Use
- At any Gate when human provides KO
- When human challenges or rejects a proposal
- When debug skill finds a pattern worth remembering
- When significant technical decision is made
Trigger Conditions
| Trigger | Context | Type | |---------|---------|------| | Gate 1 KO | Wireframe rejected | Decision | | Gate 2 KO | Scope option rejected | Decision | | Gate 3 KO/BLOCK | Phasing challenged | Decision | | Gate 4 KO | Technical approach rejected | Decision | | Gate 5 Changes | PR review feedback | Decision | | Debug Pattern | Recurring issue found | Kaizen | | DIG 3+ times | Same wireframe refined repeatedly | Kaizen | | Same error fixed 2+ times | Fix pattern emerged | Kaizen | | User corrects assumption | AI was wrong about something | Hansei | | Takt warning exceeded | Phase took longer than target | Hansei | | Jidoka Tier 2/3 | Escalation to human required | Hansei |
Phase 1: Detect Decision Type
Categorize the decision:
| Type | Signal | Example | |------|--------|---------| | Technical | Code, architecture, library | "Don't use GraphQL subscriptions" | | UX | Interaction, visual, flow | "Sidebar navigation, not top nav" | | Process | Workflow, phasing, priority | "Ship auth before tables" |
Phase 2: Prompt for Rationale
Ask for brief rationale (keep it light):
I'll note this decision for future reference. **In one sentence, why this decision?** Examples: - "We tried X in 2024, broke production" - "Users missed this in testing" - "Conflicts with our caching strategy" (Press Enter to skip if you prefer not to explain)
If human declines: Record decision without rationale (still valuable).
Phase 3: Attribute
Capture metadata:
| Field | Source | |-------|--------| | Who | Current user (from context) | | When | Current date | | Domain | From branch name or changed files | | Gate | Which Gate triggered capture | | Related Task | Notion task ID if available |
Phase 4: Store
Layer 1: Notion (Default - Always)
Use Notion MCP to create record:
API-create-page:
parent: { database_id: "[DECISION_PATINE_DB_ID]" }
properties:
Title: { title: [{ text: { content: "[Decision summary]" }}]}
Domain: { select: { name: "[domain]" }}
Type: { select: { name: "[Technical/UX/Process]" }}
Decision: { rich_text: [{ text: { content: "[What we decided]" }}]}
Rationale: { rich_text: [{ text: { content: "[Why]" }}]}
Rejected: { rich_text: [{ text: { content: "[What we didn't do and why]" }}]}
Impact: { select: { name: "[Low/Medium/High]" }}
Gate: { select: { name: "[Gate 1/2/3/4/5/Debug]" }}
Layer 2: ADR File (If High Impact)
If Impact = High or Type = Technical with cross-domain effect:
- Get next ADR number:
ls docs/decisions/ | wc -l - Create file:
/docs/decisions/NNN-[slug].md - Use ADR template
ADR Template:
# ADR-[NNN]: [Title] **Date**: [YYYY-MM-DD] **Status**: Accepted **Domain**: [domain] **Captured at**: Gate [N] ## Context [1-2 sentences: What problem were we solving?] ## Decision [What we chose to do] ## Rationale [Why this approach - the positive case] ## Rejected Alternatives ### [Alternative Name] **Why not**: [Reason] ## Consequences - [Trade-off 1] - [Trade-off 2] ## References - Notion: [link to Decision Patine record] - Task: [link to related task if applicable]
Layer 3: Inline Comment (If Micro/Code-Specific)
For small code-level decisions during implementation:
// ADR: [Brief decision]. [Why not alternative]. —@[initials] [YYYY-MM]
Example:
// ADR: No useMemo here - profiling showed <1ms gain, adds complexity. —@mc 2026-01
Phase 5: Confirm
Output confirmation:
**Noted:** [Decision summary] Stored in Decision Patine database. [If ADR created: Created ADR-[NNN] in /docs/decisions/] Continuing with workflow...
Kaizen/Hansei Capture (NEW)
Automatic learning capture without user prompts. These triggers capture patterns and reflections silently.
Automatic Triggers
These captures happen automatically without prompting user:
Kaizen (pattern emerged):
- Wireframe DIG'd 3+ times → Capture the pattern that emerged
- Same error fixed 2+ times → Capture the fix pattern
- Repeated code pattern → Capture abstraction opportunity
Hansei (reflection):
- User corrects AI assumption → Capture what was wrong
- Phase exceeded takt warning → Capture why it took longer
- Jidoka escalation → Capture what blocked progress
Kaizen Format
Type: KAIZEN Source: [Phase] [Loop/Commit] Learning: "[What pattern emerged]" Category: [UX_PATTERN | TECHNICAL | PROCESS] Impact: LOW | MEDIUM | HIGH
Example:
Type: KAIZEN Source: DIVERGE Loop 3 Learning: "Invite modals benefit from email preview side panel" Category: UX_PATTERN Impact: MEDIUM
Hansei Format
Type: HANSEI Source: [Phase] [Loop/Commit] Learning: "[What we learned from the mistake/delay]" Category: [ASSUMPTION | COMPLEXITY | PROCESS] Impact: LOW | MEDIUM | HIGH
Example:
Type: HANSEI Source: CONVERGE Learning: "Original scope too ambitious - exceeded 40min takt warning" Category: COMPLEXITY Impact: LOW
Silent Capture Rules
- Do NOT prompt user for rationale on Kaizen/Hansei triggers
- Capture automatically based on observed patterns
- Include in session-journal sync at end of session
- Only HIGH impact Kaizen/Hansei create immediate ADR files
Session Aggregation
Instead of immediately creating Notion entries for each:
- Collect Kaizen/Hansei entries in memory during session
- Aggregate in session-journal sync at end (Phase 5 of notion-sync)
- Only HIGH impact items create immediate ADR files
Querying Patine
Before proposing new patterns, query existing decisions:
API-query-database:
database_id: "[DECISION_PATINE_DB_ID]"
filter:
property: "Domain"
select:
equals: "[current domain]"
Use results to:
- Avoid re-proposing rejected alternatives
- Understand existing constraints
- Reference past decisions in new proposals
Anti-Patterns
DON'T:
- Require rationale for every micro-decision
- Create ADR files for non-architectural choices
- Capture decisions that are already in code comments
- Ask "why" more than once if human declines
DO:
- Capture at the moment of friction (KO, challenge)
- Accept "we tried this before, it failed" as valid rationale
- Keep entries scannable (1-2 sentences)
- Link to evidence when available (PRs, issues, metrics)
Integration
This skill is invoked by:
ask.mdc- Gates 1, 2, 3 on KOplan.mdc- Gate 4 on option rejectionpush-pr.mdc- Gate 5 on changes requesteddebug- When pattern worth remembering is found
Notion Database Schema
Database: Decision Patine
| Property | Type | Required | |----------|------|----------| | Title | Title | Yes | | Domain | Select | Yes | | Type | Select | Yes | | Decision | Rich Text | Yes | | Rationale | Rich Text | No | | Rejected | Rich Text | No | | Challenged By | Person | No | | Date | Date | Yes | | Impact | Select | Yes | | Gate | Select | No | | Related Task | Relation | No | | ADR File | URL | No |
Invocation
Invoked automatically at Gates on KO, or manually with "use decision-capture skill".