commands/learn.md
Analyze the current session and extract any patterns worth saving as skills.
Run /learn at any point during a session when you've solved a non-trivial problem.
Look for:
Error Resolution Patterns
Debugging Techniques
Workarounds
Project-Specific Patterns
Create a skill at ~/.claude/skills/<pattern-name>/SKILL.md:
Before writing, apply these guarded-write requirements:
pattern-name as a lowercase hyphenated slug. Reject path
separators and path traversal, resolve the target, and confirm it remains
inside the approved skill root (~/.claude/skills/).---
name: pattern-name
description: "Use when <observable trigger condition> — <one-line summary of the pattern>"
metadata:
origin: auto-extracted
---
# [Descriptive Pattern Name]
**Extracted:** [Date]
**Context:** [Brief description of when this applies]
## Problem
[What problem this solves - be specific]
## Solution
[The pattern/technique/workaround]
## Example
[Code example if applicable]
## When to Use
[Trigger conditions - what should activate this skill]
~/.claude/skills/<pattern-name>/SKILL.mdSKILL.md, its
parent directory matches name:, the ----delimited frontmatter parses as
valid YAML, and it contains a non-empty description: beginning with an
observable Use when ... trigger. If any check fails, report the specific
failure, remove or quarantine the invalid file, and stop. To repair it,
prepare a corrected draft without writing, show the full path, obtain fresh
explicit approval, then write and rerun validation. Do not report success
until every check passes.The directory form and frontmatter matter because Claude Code discovers
personal skills from <name>/SKILL.md; a flat skills/learned/<name>.md file
is not a skill entrypoint. The trigger-first description helps Claude decide
when to load the skill automatically.