Install
openclaw skills install learn-from-experienceLearn from experience: self-reflection + self-criticism + self-learning + self-organizing memory + cross-session sync. Agent evaluates its own work, catches...
openclaw skills install learn-from-experienceUser corrects you or points out mistakes. You complete significant work and want to evaluate the outcome. You notice something in your own output that could be better. Knowledge should compound over time without manual maintenance.
This skill is agent-agnostic. It works with any product that loads a global config file on session start.
| Product | Skill Install Path | Global Config File | Global Config Path |
|---|---|---|---|
| Claude Code | ~/.claude/skills/learn-from-experience/ | CLAUDE.md | ~/.claude/CLAUDE.md |
| OpenClaw | ~/.openclaw/skills/learn-from-experience/ | AGENTS.md | ~/.openclaw/AGENTS.md |
| Codex | ~/.codex/skills/learn-from-experience/ | AGENTS.md | ~/.codex/AGENTS.md |
| CodeBuddy | ~/.codebuddy/skills/learn-from-experience/ | CODEBUDDY.md | ~/.codebuddy/CODEBUDDY.md |
| opencode | ~/.config/opencode/skills/learn-from-experience/ | AGENTS.md | ~/.config/opencode/AGENTS.md |
The skill auto-detects which product is running by checking which config path exists. Memory data always lives in ~/learn-from-experience/ (shared across all products).
Memory lives in ~/learn-from-experience/ with tiered structure. If ~/learn-from-experience/ does not exist, run setup.md.
Workspace setup should add the standard steering to the workspace AGENTS, SOUL, and HEARTBEAT.md files, with recurring maintenance routed through heartbeat-rules.md.
Confirmed preferences are compiled to the agent's global config ### Patterns section for cross-session persistence (see Sync Protocol below).
~/learn-from-experience/
├── memory.md # HOT: <=100 lines, always loaded
├── index.md # Topic index with line counts + sync status
├── heartbeat-state.md # Heartbeat state: last run, reviewed change, action notes
├── projects/ # Per-project learnings
├── domains/ # Domain-specific (code, writing, comms)
├── archive/ # COLD: decayed patterns
└── corrections.md # Last 50 corrections log
| Topic | File |
|---|---|
| Setup guide | setup.md |
| Heartbeat state template | heartbeat-state.md |
| Memory template | memory-template.md |
| Workspace heartbeat snippet | HEARTBEAT.md |
| Heartbeat rules | heartbeat-rules.md |
| Learning mechanics | learning.md |
| Security boundaries | boundaries.md |
| Scaling rules | scaling.md |
| Memory operations | operations.md |
| Self-reflection log | reflections.md |
Log automatically when you notice these patterns:
Corrections -> add to corrections.md, evaluate for memory.md:
Preference signals -> add to memory.md if explicit:
Pattern candidates -> track, promote after 3x:
Ignore (don't log):
After completing significant work, pause and evaluate:
corrections.mdWhen to self-reflect:
Log format:
CONTEXT: [type of task]
REFLECTION: [what I noticed]
LESSON: [what to do differently]
Example:
CONTEXT: Flutter UI build
REFLECTION: Spacing was wrong, had to redo
LESSON: Check visual spacing before showing to user
Self-reflection entries follow the same promotion rules: 3x applied successfully -> promote to HOT.
| User says | Action |
|---|---|
| "What do you know about X?" | Search all tiers for X |
| "What have you learned?" | Show last 10 from corrections.md |
| "Show my patterns" | List memory.md (HOT) |
| "Show [project] patterns" | Load projects/{name}.md |
| "What's in warm storage?" | List files in projects/ + domains/ |
| "Memory stats" | Show counts per tier |
| "Forget X" | Remove from all tiers (confirm first) |
| "Export memory" | ZIP all files |
| "Sync memory" / "sync" | Run cross-session sync now |
On "memory stats" request, report:
Learn-from-Experience Memory
HOT (always loaded):
memory.md: X entries
WARM (load on demand):
projects/: X files
domains/: X files
COLD (archived):
archive/: X files
Cross-session sync:
Last sync: YYYY-MM-DD
Status: in_sync | stale
Recent activity (7 days):
Corrections logged: X
Promotions to HOT: X
Demotions to WARM: X
| Trap | Why It Fails | Better Move |
|---|---|---|
| Learning from silence | Creates false rules | Wait for explicit correction or repeated evidence |
| Promoting too fast | Pollutes HOT memory | Keep new lessons tentative until repeated |
| Reading every namespace | Wastes context | Load only HOT plus the smallest matching files |
| Compaction by deletion | Loses trust and history | Merge, summarize, or demote instead |
| Tier | Location | Size Limit | Behavior |
|---|---|---|---|
| HOT | memory.md | <=100 lines | Always loaded |
| WARM | projects/, domains/ | <=200 lines each | Load on context match |
| COLD | archive/ | Unlimited | Load on explicit query |
projects/{name}.mddomains/When patterns contradict:
When file exceeds limit:
See boundaries.md -- never store credentials, health data, third-party info.
If context limit hit:
Memory in ~/learn-from-experience/memory.md is only loaded when the skill is activated.
The agent's global config file is automatically loaded every session.
Without sync, learnings from one session are invisible to the next.
Compile confirmed preferences from memory.md into the global config's ### Patterns section under ## Learnings. This is a one-way compile: memory.md is the source of truth, global config is the read-only cache.
## Confirmed Preferences entries from memory.md- [tag] one-line description### Patterns block under ## Learnings in agent's global config### Patterns header and the next ### or ## header. Never touch other global config content### Patterns header~/learn-from-experience/index.md sync status. If stale, auto-sync1. Read ~/learn-from-experience/memory.md -> extract ## Confirmed Preferences
2. Compile each entry: "### title | confidence" -> "- [tag] description"
3. Detect agent product -> locate global config file
4. Read global config file
5. Find ### Patterns block (create if missing, under ## Learnings)
6. Replace block content (preserve everything else)
7. Update ~/learn-from-experience/index.md sync timestamp + status
To find the correct global config file:
Check in order (first existing path wins):
1. ~/.claude/CLAUDE.md (Claude Code)
2. ~/.openclaw/AGENTS.md (OpenClaw)
3. ~/.codex/AGENTS.md (Codex)
4. ~/.codebuddy/CODEBUDDY.md (CodeBuddy)
5. ~/.config/opencode/AGENTS.md (opencode)
If multiple exist, sync to all of them (user may use multiple products).
Session Start:
1. Global config auto-loads (built-in to agent product)
2. Skill activates: read ~/learn-from-experience/memory.md (full HOT)
3. Check index.md sync status -> if stale, auto-sync
4. Detect project context -> load projects/{name}.md if needed
Session Work:
5. Correction received -> write corrections.md + memory.md + sync global config
6. New pattern discovered -> write memory.md (tentative) [no sync until confirmed]
Session End:
7. If new confirmed rules this session -> sync global config
This skill ONLY:
~/learn-from-experience/)### Patterns section~/learn-from-experience/heartbeat-state.md when the workspace integrates heartbeatThis skill NEVER:
~/learn-from-experience/ and the agent's global config file### Patterns blockLocal state lives in ~/learn-from-experience/:
memory.md for HOT rules and confirmed preferencescorrections.md for explicit corrections and reusable lessonsprojects/ and domains/ for scoped patternsarchive/ for decayed or inactive patternsheartbeat-state.md for recurring maintenance markersindex.md for tier index + cross-session sync statusInstall with clawhub install <slug> if user confirms:
memory -- Long-term memory patterns for agentslearning -- Adaptive teaching and explanationdecide -- Auto-learn decision patternsescalate -- Know when to ask vs act autonomously