| name | self-improvement |
| description | Captures lessons and promotes recurring patterns. |
| tier | core |
| category | workflow |
| created_by | human |
| platforms | ["windows","macos","linux"] |
| tags | ["memory","lessons","patterns","continuous-learning"] |
| author | Andreas Wasita (@andreaswasita) |
Self-Improvement Skill
Logs every correction and failed approach to tasks/lessons.md with structured metadata, escalates recurring patterns into skill amendments via scripts/lesson-updater.sh, and respects the cache-aware mutation rule so amendments don't trash Copilot's prompt cache mid-session. Does NOT delete or rewrite past lessons — history is evidence, not noise.
The memory vault (memory/) extends this with structured, linked knowledge:
- Lessons live in
tasks/lessons.md (short-term capture)
- Patterns graduate to
memory/patterns/ when they hit 3+ occurrences
- Decisions are recorded in
memory/decisions/ for architectural context
- Preferences accumulate in
memory/preferences/ from user corrections
- Sessions are summarized in
memory/sessions/ with links to all of the above
When to Use
- Session start: Review
memory/INDEX.md + tasks/lessons.md before doing anything else
- After any correction: User points out a mistake or a better approach
- After a failed approach: Something you tried didn't work
- Pattern recognition: You notice you've made a similar mistake before
- Skill amendment: A pattern hits 3+ occurrences
- After any architectural decision: Record it in
memory/decisions/
- Session end: Write a session summary in
memory/sessions/
Prerequisites
tasks/lessons.md exists (created by scripts/init.sh).
scripts/lesson-updater.sh available for the pattern-scan + amendment proposal.
- Familiarity with the cache-aware mutation rule (see
AGENTS.md → Cache-Aware Mutations).
Before any work begins:
- Read
memory/INDEX.md — understand what knowledge exists
- Read
tasks/lessons.md — check for recent, un-promoted lessons
- Query relevant context:
bash scripts/memory-query.sh --type pattern --tag <current-task-domain>
- Filter for entries relevant to the current project, language, or task type
- Internalize active rules — these are your guardrails for this session
- Note any lessons with high occurrence counts — these are your blind spots
How to Run
1. At session start: `view tasks/lessons.md` and internalize active rules.
2. On correction: append a structured YAML entry (template in Procedure §2).
3. Periodically: `scripts/lesson-updater.sh` to scan for 3+ recurrences.
4. On amendment: edit the relevant skill; default to deferred invalidation.
Quick Reference
| Trigger | Action | Tool |
|---|
| Session start | Read lessons | view tasks/lessons.md |
| Correction logged | Append entry | edit tasks/lessons.md |
| Pattern scan | Run updater (deferred) | powershell → bash scripts/lesson-updater.sh |
| Pattern scan (urgent) | Run updater (immediate) | powershell → bash scripts/lesson-updater.sh --now |
| Amend a skill | Edit the SKILL.md | edit skills/<name>/SKILL.md |
| Archive a stale skill | Curator handles it | powershell → bash scripts/curator.sh archive <name> |
Procedure
Step 1: Session-Start Ritual
Before any work begins, view tasks/lessons.md. Filter mentally for entries relevant to the current project, language, or task type. High occurrences counts are your active blind spots — treat them as guardrails for this session.
Step 2: Capture a Lesson
After any correction or failed approach, append a structured entry to tasks/lessons.md:
- date: 2026-05-19
error_type: type-error
trigger: "Used string where number was expected in API response handler"
root_cause: "Did not check the API schema before assuming response types"
fix: "Added type validation at the API boundary"
rule: "Verify API response types against the schema before using them"
occurrences: 1
status: active
related_skill: code-review
Be ruthlessly honest. The only person you're fooling is yourself.
Step 3: Watch for Patterns
When the same rule appears across 2+ entries, increment occurrences on the canonical entry instead of duplicating. At occurrences: 3, escalate.
Step 4: Amend the Relevant Skill
- Identify the pattern — What's the common thread across occurrences?
- Draft a rule — Write a concrete, actionable rule
- Promote to memory vault — Create a file in
memory/patterns/ using the template:
cp memory/patterns/_template.md memory/patterns/pattern-name.md
- Propose the amendment — Suggest an update to
skills.md or copilot-instructions.md
- Run
scripts/lesson-updater.sh — Automated pattern scanning
- Run
scripts/link-index.sh — Update the link graph with new connections
- Evaluate — After the rule is in place, does the mistake rate drop?
- Revise or remove — If a rule isn't working, fix it or drop it. Dead rules are noise.
Recording Decisions
When an architectural or design decision is made during a session:
- Copy the template:
cp memory/decisions/_template.md memory/decisions/YYYY-MM-DD-short-name.md
- Fill in context, decision, alternatives, and consequences
- Link from the session summary:
[decision](../decisions/YYYY-MM-DD-short-name.md)
- Run
scripts/link-index.sh to update backlinks
Recording Preferences
When the user corrects your approach (not a bug, but a style/approach preference):
- Copy the template:
cp memory/preferences/_template.md memory/preferences/preference-name.md
- Record what they prefer and why
- Set confidence to
low initially — raise to medium after 2nd reinforcement, high after 3rd
Session End Ritual
At the end of every non-trivial session:
- Create
memory/sessions/YYYY-MM-DD-summary.md from template
- Link to any decisions, patterns, or preferences created/referenced
- Run
scripts/link-index.sh to rebuild the graph
- Update
tasks/lessons.md metrics
Pass --now only when correctness requires immediate effect. The script prints a warning about cache-invalidation cost.
After the amendment lands, set the lesson's status: amended-to-skill.
Step 5: Let the Curator Handle Stale Skills
Skills with created_by: agent and no recent use are auto-archived by scripts/curator.sh to skills/.archive/. Human-authored skills are never touched. Pin a skill to exempt it: bash scripts/curator.sh pin <name>.
Pitfalls
- DO NOT "remember next time." If a lesson isn't in
tasks/lessons.md, it doesn't exist.
- DO NOT log without a
rule: field. A symptom without a prevention rule is a diary entry.
- DO NOT write hyper-specific rules. "Don't use
parseInt on line 47 of auth.js" won't generalize. Extract the principle.
- DO NOT delete old lessons. Set
status: resolved instead — history is evidence.
- DO NOT pass
--now to lesson-updater.sh casually. It invalidates Copilot's prompt cache and dramatically raises cost.
- DO NOT edit
created_by: human skills via the curator. The curator only manages created_by: agent skills.
Verification
Concrete checks that prove the skill is producing intended outcomes. Run at session end (or after any correction) via the powershell tool:
bash scripts/self-improvement-verify.sh
The script (source: scripts/self-improvement-verify.sh) asserts:
tasks/lessons.md exists — required artifact.
- Every lesson has a
rule: field — a lesson without a prevention rule is a diary entry and fails the check.
- No duplicated active rules — the same
rule: across multiple entries means someone cloned instead of incrementing occurrences:.
- Threshold promotion happened — any entry with
occurrences: 3+ must either carry status: amended-to-skill or have a corresponding file under memory/patterns/.
- Memory graph has zero orphans — runs
scripts/link-index.sh and inspects memory/INDEX.md.
- Today's session summary (if any) links out — at least one link to
memory/decisions/, memory/patterns/, or memory/preferences/.
The script exits non-zero on hard failures and prints Summary: pass=… fail=… warn=…. Treat warnings as signal, not noise — investigate before closing the session.
Beyond the script: active rules should reduce repeat errors. If the same error_type + trigger recurs within 5 subsequent sessions after a rule lands, the rule is wrong — rewrite or remove it per Step 4 §8.