Skip to content
Self-Learning

Self-Learning

MIT
Repository
markdown Development
memorymeta-skillcontext-engineeringclaude-codecursoragents-md

Summary

A meta-skill that spots the moment your agent has just earned a hard-won golden path and writes it down as a reusable skill, so the next session starts already knowing the route.

Features

  • Recognises a reusable golden path without being asked and harvests it on the spot
  • Captures the procedure and the dead ends, not a one-off answer
  • Triage routes each lesson to a skill, to memory, or to the bin
  • Three-part promotion rule: a passing check, a named failure pattern, a ruled-out dead end
  • Writes to SKILL.md, .cursor/rules/learned/, or AGENTS.md depending on the tool
  • Installs across 70+ agents through the community `skills` CLI

Install This Skill

Add this skill to your favorite AI agent in a few steps.

Any AI agent

This skill is plain instructions — it works with any assistant that accepts custom instructions or system prompts.

  1. Copy the skill content with the button below.
  2. Paste it into your agent's instruction file or system prompt (for example AGENTS.md, .cursorrules, or a custom instructions field).
  3. Ask the agent to apply the skill whenever the task matches.

Skill Content

Markdown Content

Copy this content and use it with your preferred AI agent

---
name: self-learning
description: >
  Capture a hard-won "golden path" from the current session as a reusable Agent
  Skill, so future sessions start already knowing it. Use it (1) right after
  non-trivial debugging, after working out a multi-step operational workflow, or
  after rediscovering project facts you didn't know up front — e.g. how to reach
  the dev/prod database, where credentials and env vars live, how to deploy, run
  migrations, or verify a change live; and (2) whenever the user says "remember
  this", "save this as a skill", "make a skill for this", "don't make me
  re-explain this next time", or otherwise wants a workflow preserved across
  sessions. Proactively recognize the moment even when unprompted: if a task took
  several attempts before it worked, used non-obvious tooling, or is likely to
  recur, harvest it without asking first. Delegates to a subagent when your tool
  supports one, or works inline, to extract the proven procedure into a new
  project-local or global skill.
license: MIT
metadata:
  author: kulaxyz
  version: "1.0"
---

# Self-learning: harvest golden paths into skills

This skill turns something you just figured out the hard way into a reusable
Agent Skill, so the next session — yours or a teammate's — starts already
knowing the proven route instead of rediscovering it from scratch.

It is a *meta-skill*: it doesn't do the work, it captures **how** work got done.
It's tool-neutral — it works with any agent that reads the Agent Skills format
(e.g. Claude Code and Codex, which both load `SKILL.md` skills natively). Where a
step differs by tool, the generic version comes first and any tool-specific
detail is only an example.

## Recognize the moment

Watch for these signals during normal work. Any one of them is a cue to harvest:

- A task only worked **after several attempts**, wrong turns, or a correction
  from the user. The successful path is worth more than the failures around it.
- You discovered **project-specific facts the agent didn't know up front**:
  where creds/env vars live, which selector or backend talks to a service, a
  non-obvious command, a required sequence, a gotcha that defies the obvious
  assumption.
- It's an **operational workflow likely to recur**: reach the dev/prod DB,
  deploy, run migrations, seed data, verify a change live, run one specific
  test path, rotate a key, tail the right logs.
- The user **signals it explicitly**: "remember this", "save this as a skill",
  "don't make me re-explain this next time".

**Act on the cue immediately — don't ask for permission first**, whether the
user requested it or you noticed it yourself. Harvest the skill, then tell the
user what you captured and where (step 5). They can always edit or delete it.

### Skill, memory, or skip?

Not every lesson deserves a whole skill — triage first, so you don't bloat the
skills list with one-liners:

- **A multi-step, reusable procedure or workflow** (how to deploy, reach the DB,
  run the migration dance, verify live) → harvest it as a **skill** using the
  procedure below.
- **A single standalone fact or one-line correction** (an env var name, a path,
  one gotcha) → if your harness has a lightweight memory/notes facility (e.g. a
  `MEMORY.md` index), record it **there** instead; a whole skill is overkill for
  a one-liner. With no such facility, make a small skill.
- **A genuinely one-off thing** unlikely to recur → skip it.

When you do harvest, capture the **failures too**, not just the win: the
approaches you ruled out and *why* often save more time next session than the
golden path itself.

### Promotion rule: don't enshrine guesses

A skill is authoritative — the next session trusts it without re-deriving it —
so hold promotion to a high bar. Only write a skill when **all three** hold:

1. **A passing check.** The path was actually verified — a test passed, the
   command exited clean, the repro reproduced, the build went green. Record what
   the check was. "Seemed to work" is not a passing check.
2. **A named failure pattern.** You can name the failure this path avoids or
   diagnoses (e.g. "stale build cache → phantom type errors"), not a vague
   "sometimes it breaks".
3. **At least one ruled-out dead-end.** A concrete approach you tried and
   eliminated, with the reason.

If any is missing, it isn't a skill yet — leave a tentative note in memory
(marked unverified) or skip it. This keeps confident guesses out of the skill
set.

## Harvest procedure

- [ ] 1. **Apply the promotion rule** (above). Passing check + named failure
      pattern + one ruled-out dead-end — or it isn't a skill: note it in memory
      or skip. Don't proceed on a confident guess.
- [ ] 2. **Choose scope and name yourself** using the heuristics below — don't
      stop to ask. Default to project scope; pick a clear, specific `name`.
- [ ] 3. **Dedupe.** Look for an existing skill to UPDATE rather than duplicate.
      List your agent's skills directories — the project one and the user-level
      one (e.g. Claude Code `.claude/skills` + `~/.claude/skills`, Codex
      `.codex/skills` + `~/.codex/skills`, or your tool's equivalent). Also
      glance at any memory/notes index — a fact already there may just need a
      pointer.
- [ ] 4. **Distill the golden path from THIS conversation** before delegating —
      while it's fresh in your head: the exact working commands, file paths, env
      var names, the required order, and (just as important) the dead-ends to
      avoid. This is the raw material for the write.
- [ ] 5. **Delegate the write** to a subagent that inherits this conversation if
      your tool supports one, or do it inline otherwise — see below. The
      conversation is the only place the golden path lives, so whoever writes it
      must have that context.
- [ ] 6. When the write is done, **relay the new skill's path** to the user
      and, in one line, what it captured.

### Scope: project vs global

- **Project** (the repo's skills directory — e.g. `.claude/skills/`,
  `.codex/skills/`): the path is specific to THIS codebase — its env vars, its
  build/release steps, its schema, its quirks. Most harvested operational skills
  are project-scoped, and they ship to the team via git.
- **Global** (your user-level skills directory — e.g. `~/.claude/skills/`,
  `~/.codex/skills/`): the path generalizes across projects — a personal tool, a
  cross-repo habit, or a workflow tied to your machine rather than to one repo.

When unsure, prefer **project** — an over-shared global skill triggers in repos
where its commands don't apply.

## Delegate the write (subagent, or inline)

Whoever writes the skill needs THIS conversation's context — it's the only place
the golden path lives. Two equally valid ways to run it:

- **Inline** — do the steps yourself in the main loop. Always works.
- **Subagent** — if your tool can delegate to a subagent that **inherits this
  conversation**, use it to keep the harvesting work out of your main context.
  (Claude Code: a skill with `context: fork`. Codex and others spawn subagents
  their own way.) Don't hand it to a *fresh* agent with no context — it would
  start blank with nothing to extract.

Either way it over-reaches by default, so box it in tightly. Follow this brief
(fill in the bracketed parts) — hand it to the subagent, or work through it
yourself inline:

> You are harvesting a skill. Your ONLY job is to write a new Agent Skill
> capturing the golden path we just worked out in this conversation:
> **[one-line description of the workflow]**.
>
> Hard rules:
> - Write ONLY under `[skills dir]/[skill-name]/`. Do NOT modify project
>   source, run builds, install anything, or resume the original task.
> - First read `[this-skill-dir]/references/skill-authoring.md` and
>   `[this-skill-dir]/assets/SKILL.template.md`, then author `SKILL.md` to that
>   spec, plus any `references/` or `assets/` files the procedure warrants.
> - Capture the PROCEDURE — commands, paths, the required order, gotchas — not a
>   one-off answer. Generalize so it works next time.
> - Capture the FAILURES too: the approaches we ruled out and why, so the next
>   session skips the dead-ends. Put them in a "What didn't work" section.
> - Enforce the promotion rule: the skill must record the passing check that
>   verified this path, name the failure pattern it addresses, and list at least
>   one ruled-out dead-end. If any is missing (e.g. nothing was actually
>   verified), STOP and report it isn't promotable — leave a tentative memory
>   note instead of writing the skill.
> - NEVER write secret VALUES (passwords, tokens, connection strings, API keys).
>   Record only WHERE to find them: the env var name, the selector function, the
>   MCP tool, the secret manager. Reproducing a secret into a skill file leaks it.
> - Self-validate before finishing (see the checklist in skill-authoring.md).
> - Report back: the absolute path you wrote and a one-line summary. Then STOP —
>   do not pick the original task back up.

## Gotchas

- **Secrets never go in a skill file.** Skills get committed and open-sourced.
  Point to *where* the secret lives; never reproduce the value. This is the
  single most important rule in this skill.
- **`name` must equal the directory name**, and be lowercase `a-z`/`0-9`/hyphens
  only — no leading, trailing, or doubled hyphens. A mismatch means the skill
  won't load.
- **Whoever writes the skill over-reaches by default** (a subagent especially).
  That's why the brief above forbids touching project source or resuming the
  task — keep it boxed to the skills directory.
- **Don't duplicate.** If a near-identical skill (or memory) already exists,
  update it instead of spawning a second one that competes to trigger.
- **Capture procedures, not answers.** "Join orders to customers for EMEA" is
  useless next time; "how to find the right tables and build the query" is the
  skill. See `references/skill-authoring.md`.
- **Keep `SKILL.md` tight** (< 500 lines, < ~5000 tokens). Push detail into
  `references/` and tell the reader *when* to load each file.

For the full authoring spec, see
[references/skill-authoring.md](references/skill-authoring.md). The fill-in
template is [assets/SKILL.template.md](assets/SKILL.template.md).

Usage Instructions

Learn how to use this skill with different AI agents.

Generic Instructions
npx skills add kulaxyz/self-learning-skills        # auto-detects your agents
npx skills add kulaxyz/self-learning-skills -g     # global — all projects
npx skills add kulaxyz/self-learning-skills -a claude-code

Or as a Claude Code plugin:

/plugin marketplace add kulaxyz/self-learning-skills
/plugin install self-learning@self-learning-skills

Example Usage

That took four attempts to get right — remember this so I don't have to re-explain the migration workflow next session.

Description

Every session where you debug something difficult, work out a deployment sequence, or rediscover where the credentials live, that knowledge evaporates when the session ends. The next session starts from zero and re-learns it. Self-Learning is a meta-skill that fixes the leak: it does not do the work, it captures how the work got done.

The loop
  1. Recognise the moment. A task that only worked after several attempts, a non-obvious command, a project fact you did not know up front, an operational workflow likely to recur — or you simply saying "remember this".
  2. Capture it unprompted. It acts on the cue immediately, picks the scope and name itself, and tells you afterwards. What gets captured is the procedure, plus a note on what did not work — because skipping a known dead end next session is often worth more than the win.
  3. Reuse. Next session the entry loads automatically, matched by skill description or because the instructions file is always read.
Two rules that keep it from becoming noise

Triage decides granularity. A multi-step reusable procedure becomes a skill or rule. A single fact or one-line correction goes to lightweight memory. A genuine one-off is skipped. Your config does not fill up with one-liners.

The promotion rule decides confidence. A skill is authoritative — the next session trusts it without re-deriving it — so a session is promoted to a skill only when all three hold: a passing check (a test passed, a clean exit, a green build; "seemed to work" does not count), a named failure pattern it avoids or diagnoses, and at least one concrete dead end ruled out. Miss any one and it stays a tentative memory note. This is what keeps confident-but-unverified guesses out of your standing instructions.

Where it writes

The loop is identical across tools; only the destination differs. Claude Code, Codex and other Agent Skills clients get a new skills/<name>/SKILL.md loaded by description matching. Cursor gets .cursor/rules/learned/<name>.mdc loaded by rule description or globs. Zed, Aider, Gemini CLI and anything else that reads standing instructions get an AGENTS.md entry.

Install with npx skills add kulaxyz/self-learning-skills (auto-detects your agents, -g for global), as a Claude Code plugin, or by copying the folder into place. MIT licensed.

Related Skills

Skill: SkillHone

by Tencent

New

Tencent's skill-evolution harness: it rewrites a whole skill folder — SKILL.md, scripts and references together — and lands every decision as a real Git issue, PR and wiki entry you can review.

Development

Skill: OpenSearch Launchpad

by OpenSearch Project

New

Take an OpenSearch search application from requirements to a running cluster — BM25, dense and sparse vectors, hybrid retrieval, agentic search and RAG, with relevance evaluation built in.

Development
1 views

Auth0's official agent skill: a router that detects your framework and intent, then loads the right Auth0 guidance for login, MFA, Organizations, tenant audits, debugging or provider migration.

Development

Skill: Redis Search

by Redis, Inc.

New

Redis' own guidance for FT.CREATE schema design, FT.SEARCH / FT.AGGREGATE / FT.HYBRID, HNSW vector similarity and RAG retrieval pipelines.

Development
Browse all skills →