Learn from Conversation
Extract learnings from the current conversation and persist them to CLAUDE.md, skills, or repo-specific documentation.
What This Skill Does
-
Analyzes the conversation to identify:
- User feedback: Code style, process preferences, tool usage, corrections
- Surprising discoveries: Gotchas, undocumented behavior, non-obvious patterns found while working
-
Summarizes these into actionable rules
-
Updates the appropriate files:
- Global (
~/dotfiles/claude/CLAUDE.md): General coding style and behavior rules - Skills (
~/dotfiles/claude/skills/<skill-name>/SKILL.md): Skill-specific learnings - Current repo (
AGENTS.mdorCLAUDE.md): Repo-specific gotchas and surprising behaviors
- Global (
-
Commits and pushes the changes
-
If running in a dev container, runs
~/dotfiles/install.shto propagate global changes
Workflow
1. Gather Context
If the current repo has an open PR, fetch PR review comments to include in the analysis:
# Get current repo info
repo=$(gh repo view --json nameWithOwner -q '.nameWithOwner')
# Check for open PR on current branch
pr_number=$(gh pr view --json number -q '.number' 2>/dev/null)
if [ -n "$pr_number" ]; then
# Fetch PR review comments
gh api repos/$repo/pulls/$pr_number/comments --paginate
# Fetch PR review threads for more context
gh api graphql -f query='
query {
repository(owner: "'${repo%/*}'", name: "'${repo#*/}'") {
pullRequest(number: '$pr_number') {
reviewThreads(first: 100) {
nodes {
comments(first: 10) {
nodes {
body
author { login }
}
}
}
}
}
}
}
'
fi
2. Analyze the Conversation
Review the entire conversation looking for:
User Feedback:
- Explicit corrections: "Don't do X, do Y instead"
- Style preferences: "I prefer X over Y"
- Code review feedback: Comments pointing out issues with generated code
- Process feedback: "You should have done X before Y"
- Repeated patterns: Things the user corrected multiple times
Surprising Discoveries (from working on tasks):
- Gotchas: Non-obvious behaviors that caused bugs or confusion
- Undocumented behavior: Things that weren't in docs but were discovered through trial/error
- Counterintuitive patterns: Code patterns that look wrong but are actually correct (or vice versa)
- Environment quirks: Unexpected system, library, or framework behaviors
- Integration issues: Surprising interactions between components
Focus on learnings that are:
- Actionable (can be turned into a rule or warning)
- Not already documented
- Likely to help future work
3. Draft Updates
For each learning, draft a concise rule:
- Use imperative mood ("Use X", not "You should use X")
- Be specific (include examples where helpful)
- Keep it brief (one line if possible, a few bullets if needed)
Group related learnings under existing sections in CLAUDE.md when possible.
4. Determine Where to Add
Add to ~/dotfiles/claude/CLAUDE.md (global) if:
- It's a general coding style rule
- It's a general behavior or process rule
- It applies across projects
Add to a skill file (~/dotfiles/claude/skills/<skill>/SKILL.md) if:
- It's specific to a particular workflow (commit, PR review, etc.)
- It only applies when using that skill
Add to the current repo's AGENTS.md or CLAUDE.md if:
- It's specific to this codebase (gotchas, quirks, non-obvious patterns)
- It documents surprising behavior discovered while working
- It would help future Claude sessions working on this repo
- It's something that "I wish I knew before starting"
Prefer AGENTS.md if it exists; otherwise use CLAUDE.md. Create the file if neither exists and the learning is valuable enough.
5. Read Current Files
Read the target file(s) to understand their structure:
# Global rules
cat ~/dotfiles/claude/CLAUDE.md
# Skill-specific
cat ~/dotfiles/claude/skills/<skill-name>/SKILL.md
# Current repo (check which exists)
cat AGENTS.md 2>/dev/null || cat CLAUDE.md 2>/dev/null || echo "No repo instructions file"
6. Apply Updates
Edit the file to add the new rules:
- Add to existing sections when there's a good fit
- Create new sections only when necessary
- Maintain consistent formatting with the rest of the file
7. Commit and Push
For global/skill updates (dotfiles repo):
cd ~/dotfiles
git add -A
git commit -m "Add learnings from conversation
<brief summary of what was added>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"
git push
For current repo updates:
# In the current repo (not dotfiles)
git add AGENTS.md CLAUDE.md 2>/dev/null
git commit -m "Document learnings from Claude session
<brief summary of gotchas/discoveries added>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"
git push
If updating both dotfiles and the current repo, make separate commits in each.
8. Propagate Changes (Dev Containers)
If running inside a dev container, run install.sh to propagate the updated CLAUDE.md:
# Check if we're in a dev container (not the dotfiles repo itself)
if [ -f /.dockerenv ] && [ "$PWD" != "$HOME/dotfiles" ] && [ "$PWD" != "/workspaces/dotfiles" ]; then
~/dotfiles/install.sh
fi
Example Learnings
Global CLAUDE.md (user feedback)
From a conversation where the user corrected test mocking practices:
## Testing (pytest)
- Mock only at external boundaries (I/O, network, external libraries), not internal implementation details
- Prefer real data structures over MagicMock for return values
From PR feedback about error handling:
## Python Style
- Fail early: prefer code that fails immediately over code that logs a warning and potentially behaves incorrectly later
Repo AGENTS.md/CLAUDE.md (surprising discoveries)
From debugging a test failure:
## Gotchas
- The `process_data()` function silently returns `None` if the input list is empty instead of raising an error
- Database migrations must be run with `--fake-initial` on first deploy due to legacy schema
From discovering undocumented API behavior:
## API Notes
- The `/users` endpoint returns max 100 results even without pagination params (undocumented limit)
- Rate limiting kicks in at 50 req/min per IP, not per API key as docs suggest
Notes
- Only extract learnings that are clearly intentional feedback, not off-hand comments
- When in doubt about whether something is a general rule or project-specific, ask the user
- If a learning contradicts an existing rule in CLAUDE.md, ask the user which should take precedence
- Don't add overly specific or one-off preferences that won't generalize
- For repo-specific learnings, focus on things that would save future sessions time/frustration
- Surprising discoveries should be documented even if the user didn't explicitly ask—these are valuable for future work
