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.mdbefore 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.mdexists (created byscripts/init.sh).scripts/lesson-updater.shavailable 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 # type-error | logic-bug | test-gap | over-engineering | scope-creep | …
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 # active | resolved | amended-to-skill
related_skill: code-review # optional — which skill should absorb the rule?
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.mdorcopilot-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.shto 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
lowinitially — raise tomediumafter 2nd reinforcement,highafter 3rd
Session End Ritual
At the end of every non-trivial session:
- Create
memory/sessions/YYYY-MM-DD-summary.mdfrom template - Link to any decisions, patterns, or preferences created/referenced
- Run
scripts/link-index.shto rebuild the graph - Update
tasks/lessons.mdmetrics
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
parseInton line 47 of auth.js" won't generalize. Extract the principle. - DO NOT delete old lessons. Set
status: resolvedinstead — history is evidence. - DO NOT pass
--nowtolesson-updater.shcasually. It invalidates Copilot's prompt cache and dramatically raises cost. - DO NOT edit
created_by: humanskills via the curator. The curator only managescreated_by: agentskills.
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.mdexists — 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 incrementingoccurrences:. - Threshold promotion happened — any entry with
occurrences: 3+must either carrystatus: amended-to-skillor have a corresponding file undermemory/patterns/. - Memory graph has zero orphans — runs
scripts/link-index.shand inspectsmemory/INDEX.md. - Today's session summary (if any) links out — at least one link to
memory/decisions/,memory/patterns/, ormemory/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.