---
name: learn
description: Extract and persist insights from the current conversation to the knowledge base
user_invokable: true
---
# Learn
Extract insights from the current conversation and persist them to the project's knowledge base.
## What This Does
Analyzes the conversation context to identify:
- **Patterns**: Approaches that worked well in this project
- **Quirks**: Project-specific oddities or non-standard behaviors discovered
- **Decisions**: Architectural or implementation choices made with their rationale
These insights survive session boundaries and context compaction, building a persistent understanding of the project over time.
## Instructions
1. **Analyze the conversation** looking for:
- Successful problem-solving approaches that could apply again
- Unusual behaviors or gotchas discovered about the codebase
- Decisions made and why (architectural choices, library selections, patterns chosen)
2. **Categorize each insight** as pattern, quirk, or decision
3. **Format and append** to the appropriate file in `knowledge/learnings/`:
- `patterns.md` - What works well
- `quirks.md` - Unexpected behaviors
- `decisions.md` - Choices with rationale
4. **Update metadata** in each file's frontmatter (entry_count, last_updated)
5. **Update state** in `knowledge/state.json`:
- Set `last_extraction` to current timestamp
- Increment `extraction_count`
- Reset `queries_since_extraction` to 0
6. **Report** what was learned to the user
## Entry Format
### Pattern Entry
```markdown
## Pattern: [Short descriptive title]
- **Discovered:** [ISO date]
- **Context:** [What task/problem led to this discovery]
- **Insight:** [What approach works well and why]
- **Confidence:** high|medium|low
```
### Quirk Entry
```markdown
## Quirk: [Short descriptive title]
- **Discovered:** [ISO date]
- **Location:** [File/module/area where this applies]
- **Behavior:** [What's unusual or unexpected]
- **Workaround:** [How to handle it]
- **Confidence:** high|medium|low
```
### Decision Entry
```markdown
## Decision: [Short descriptive title]
- **Made:** [ISO date]
- **Context:** [What prompted this decision]
- **Choice:** [What was decided]
- **Rationale:** [Why this choice over alternatives]
- **Confidence:** high|medium|low
```
## Confidence Levels
- **high**: Clear, verified insight with strong evidence
- **medium**: Reasonable inference, likely correct
- **low**: Tentative observation, needs validation
Only high and medium confidence insights influence routing decisions.
## Steps
1. Review the conversation for extractable insights
2. For each insight found:
- Read the target file (patterns.md, quirks.md, or decisions.md)
- Check for duplicates (skip if similar insight exists)
- Append new entry in the format above
- Update frontmatter (increment entry_count, set last_updated)
3. Read and update `knowledge/state.json`
4. Report summary to user:
```
Knowledge Extraction Complete
─────────────────────────────
Extracted:
[Pattern] "Title of pattern learned"
[Quirk] "Title of quirk discovered"
[Decision] "Title of decision recorded"
Knowledge base now contains:
- X patterns
- Y quirks
- Z decisions
```
## Example Extraction
From a conversation where we debugged an auth issue:
**Quirk extracted:**
```markdown
## Quirk: Auth tokens require base64 padding
- **Discovered:** 2026-01-08
- **Location:** src/auth/tokenService.ts
- **Behavior:** JWT tokens in this codebase use non-standard base64 without padding, causing standard decoders to fail
- **Workaround:** Use the custom `decodeToken()` helper instead of atob()
- **Confidence:** high
```
## Notes
- This command extracts insights from the CURRENT conversation
- For continuous extraction, use `/learn-on` instead
- Insights should be project-specific, not generic programming knowledge
- Avoid extracting obvious or trivial information
- When in doubt about confidence, use "medium"