Automatically capture implicit technical decisions and uncertainties encountered by AI agents during coding work. This skill logs decision points where the agent chose an approach without explicit user guidance, enabling later review and context enrichment. Use this proactively during any coding task to track "what choices I made and why."
57
65%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./.claude/skills/implicit-decision-capture/SKILL.mdThis skill helps AI agents create a transparent log of implicit technical decisions made during implementation. The goal is to capture specific, non-obvious choices that could be valuable for later review and potential standardization.
TRIGGER THIS SKILL IMMEDIATELY DURING CODING WHEN:
TRIGGER DURING IMPLEMENTATION - log decisions as you make them, not after the fact.
MANDATORY SELF-CHECK: Whenever you think "Should I do X or Y?" and choose without asking the user → trigger this skill.
User: "Add a search feature to the user list"
AI: [Thinks: "Should search be debounced? How long? No guidance..."]
AI: [Chooses 300ms debounce]
AI: [Thinks: "Case-sensitive or insensitive? No examples..."]
AI: [Chooses case-insensitive]
AI: [Implements feature but FORGETS to log these decisions] ❌
CORRECT BEHAVIOR:
AI: [Makes decision about debounce]
AI: [Immediately triggers skill and logs to .claude/decisions.yaml]
AI: [Makes decision about case sensitivity]
AI: [Triggers skill again]
AI: [Completes implementation]
AI: [Responds to user]AI agents constantly make technical decisions during implementation without explicit guidance:
These decisions:
By capturing them, developers can:
Use this skill proactively and silently during any coding work when you (the AI agent):
Make a design decision without explicit guidance
Encounter ambiguity in requirements
Apply implicit knowledge from general training
Feel uncertain about your choice
Choose implementation strategies
Decide on code organization
Don't capture:
When you make a decision during coding, silently append it to .claude/decisions.yaml without interrupting the user or your workflow:
- timestamp: 2026-01-09T10:30:00Z
file: src/components/UserProfile.tsx
context: 'Implementing user profile component'
category: 'architecture' # architecture|patterns|naming|testing|error-handling|performance|security|styling|dependencies
question: 'Should the component fetch its own data or receive it via props?' # Optional: the uncertainty you had
decision: 'Use compound component pattern with Profile.Header, Profile.Content, Profile.Actions'
reasoning: 'Provides composition flexibility while maintaining encapsulation. Follows Chakra UI pattern seen in codebase.'
alternatives:
- 'Single monolithic component with section props'
- 'Separate independent components'
impact: 'module' # local|module|global
confidence: 'medium' # low|medium|high
source: 'pattern-matching' # ai-agent|inference|pattern-matching
tags:
- 'react'
- 'component-architecture'
- 'compound-components'Location: Always use .claude/decisions.yaml at the repository root.
Structure: Array of decision entries, most recent last.
Format Rules:
timestamp: ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ)file: Relative path from repo root where decision was appliedcontext: Brief description of what you were implementingcategory: One of: architecture, patterns, naming, testing, error-handling, performance, security, styling, dependenciesquestion: (Optional) The question/uncertainty you had before decidingdecision: The technical decision made (verb-first, imperative like "Use X pattern", "Structure Y as Z")reasoning: Why you chose this approach (reference similar patterns if found)alternatives: List of other valid options you consideredimpact: Scope of the decision
local: Affects only this file/componentmodule: Could affect this package/folderglobal: Could be project-wide patternconfidence: low (uncertain, needs review) | medium (reasonable choice) | high (confident but worth documenting)source: How you arrived at this decision
ai-agent: Based on your general AI knowledgeinference: Inferred from codebase patternspattern-matching: Following similar code you foundtags: Relevant keywords for filtering/searchingIMPORTANT: This is an automatic, non-interrupting operation:
.claude/decisions.yaml laterThis skill is MANDATORY during coding work - it's not optional.
Users can review .claude/decisions.yaml at any time to:
- timestamp: 2026-01-09T09:15:00Z
file: src/features/dashboard/Dashboard.tsx
context: 'Creating dashboard feature with multiple widgets'
category: 'architecture'
question: 'Should the dashboard component handle data fetching or just presentation?'
decision: 'Use container/presenter pattern with DashboardContainer fetching data and Dashboard handling presentation'
reasoning: 'Separates data fetching concerns from UI logic. Saw this pattern in features/analytics folder.'
alternatives:
- 'All-in-one component with hooks'
- 'Use React Query in presentational component'
impact: 'module'
confidence: 'high'
source: 'inference'
tags:
- 'react'
- 'container-presenter'
- 'separation-of-concerns'- timestamp: 2026-01-09T14:22:00Z
file: src/services/auth.spec.ts
context: 'Writing unit tests for authentication service'
category: 'testing'
question: 'Should I mock the database or use an in-memory test database?'
decision: 'Use mocks for the database layer'
reasoning: 'Tests run faster with mocks and other test files in the codebase use this approach'
alternatives:
- 'Use in-memory SQLite for integration testing'
- 'Use test containers with real database'
impact: 'module'
confidence: 'medium'
source: 'pattern-matching'
tags:
- 'testing'
- 'mocking'
- 'database'- timestamp: 2026-01-09T10:45:00Z
file: src/services/payment/PaymentService.ts
context: 'Implementing payment processing service'
category: 'error-handling'
question: 'Should API errors throw exceptions or return Result<T, Error> types?'
decision: 'Use Result<T, E> type instead of throwing exceptions for expected errors (insufficient funds, invalid card)'
reasoning: 'Makes error handling explicit and type-safe. Allows callers to handle errors functionally without try-catch.'
alternatives:
- 'Throw custom exception classes'
- 'Return null with separate error channel'
impact: 'global'
confidence: 'medium'
source: 'ai-agent'
tags:
- 'error-handling'
- 'functional-programming'
- 'type-safety'- timestamp: 2026-01-09T16:10:00Z
file: src/hooks/useUserData.ts
context: 'Creating custom React hook for user data'
category: 'naming'
question: 'Should custom hooks be in /hooks or co-located with components?'
decision: 'Place reusable hooks in /src/hooks/ directory'
reasoning: 'Found other custom hooks in this directory'
alternatives:
- 'Co-locate with the component that uses it'
- 'Create /src/lib/hooks for reusable hooks'
impact: 'global'
confidence: 'high'
source: 'pattern-matching'
tags:
- 'react'
- 'hooks'
- 'project-structure'- timestamp: 2026-01-09T15:20:00Z
file: src/components/DataTable.tsx
context: 'Implementing large data table with pagination'
category: 'performance'
decision: 'Use React.memo with custom comparison function on table rows instead of virtualizing'
reasoning: 'Table has max 50 rows per page, virtualization overhead not worth it. Memo prevents unnecessary row re-renders on pagination.'
alternatives:
- 'Virtual scrolling with react-window'
- 'No optimization (let React handle it)'
impact: 'local'
confidence: 'high'
source: 'ai-agent'
tags:
- 'performance'
- 'react'
- 'memoization'- timestamp: 2026-01-09T16:55:00Z
file: src/utils/date.ts
context: 'Adding date formatting utility'
category: 'dependencies'
question: 'Should I use date-fns, dayjs, or native Intl for date formatting?'
decision: 'Use date-fns because it was already in package.json'
reasoning: 'Avoiding adding new dependencies, date-fns already installed and tree-shakeable'
alternatives:
- 'Use dayjs (smaller bundle size)'
- 'Use native Intl.DateTimeFormat (no dependencies)'
impact: 'global'
confidence: 'high'
source: 'inference'
tags:
- 'dependencies'
- 'date-formatting'
- 'bundle-size'When implementing a feature:
User: "Add a search feature to the user list"
[AI Agent thinking: "Should search be debounced? How long? No guidance provided..."]
[AI Agent silently logs to decisions.yaml with question + decision]
[AI Agent implements with 300ms debounce]
[AI Agent thinking: "Should search be case-sensitive? No examples to follow..."]
[AI Agent silently logs to decisions.yaml]
[AI Agent implements case-insensitive search]
AI Agent: "I've added the search feature with debounced input (300ms) and case-insensitive matching."User sees the implementation but can later review decisions.yaml to see what decisions were made and why.
# .claude/decisions.yaml
- timestamp: string # ISO 8601: "2026-01-09T10:30:00Z"
file: string # Relative path: "src/api/users.ts"
context: string # Brief: "Adding user authentication"
category: string # architecture|patterns|naming|testing|error-handling|performance|security|styling|dependencies
question: string # Optional: "Should validation be in middleware or controller?"
decision: string # Imperative: "Use factory pattern for object creation"
reasoning: string # Why: "Encapsulates creation logic, saw pattern in auth module"
alternatives: array # Other options considered
- string
impact: string # local|module|global
confidence: string # low|medium|high
source: string # ai-agent|inference|pattern-matching
tags: array # Keywords for filtering
- stringOnce .claude/decisions.yaml accumulates entries, developers can:
signal-capture: When user reviews decisions and wants to formalize a pattern
User: "I like this compound component pattern, let's make it our standard"
→ Use signal-capture to add to standardsStandard creation: Decisions file provides source material for new standards
REMEMBER: This skill is MANDATORY during ALL coding work. When you make technical decisions without explicit user guidance, you MUST log them - this is not optional. The logging happens automatically without user interaction. Every undocumented decision is an opportunity to improve project guidelines and maintain transparency.
e198635
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.