compound
Skill1 starsChanged 33 days agoMITView on GitHub
The codify step: mine THIS session for durable lessons (the user's corrections, repeated friction, findings that exposed a missing standard) and fold them into memory, skills, or CLAUDE.md. Self-applies contained, reversible changes as commits; gates high-blast-radius ones behind a /go-able proposal. Run manually after a session, or on "what did we learn", "what should we codify", "compound this session". NOT /curate, /report, /handoff, or /done-check.
17 other projects use a version of this.
Adopted by
Most recently taken up by
- chrislacey89/skillstheir own version, first seen Nov 4, 2026
- pfeff/claude-skillstheir own version, first seen Nov 1, 2026
- dsonders/claude-skillstheir own version, first seen Oct 20, 2026
- rcelebrone/DotAgentstheir own version, first seen Oct 14, 2026
- Andamio-Platform/coachtheir own version, first seen Oct 13, 2026
- Artifacts7/newsletter-context-kittheir own version, first seen Oct 13, 2026
Used with
Projects with it also use ship, research and 1 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
AWSSkillship
Finalize dev work on an issue branch — update docs, push, and open a PR.
Also in 3 projects that use this
NVIDIASkillresearch
Before designing a feature, research how comparable libraries solve the problem, check best practices, known pitfalls, and upstream changes. Use when starting a new feature, investigating an unfamiliar area, or the user asks to research something.
Also in 3 projects that use this
SentrySkillreview
Fixture review skill.
Also in 3 projects that use this
Other versions17 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 17
- m-xlsea/ruoyi-plus-soybean★ 328same name
- garagon/nanostack★ 206same name
- team-attention/hoyeon★ 173same name
- ai-native-camp/camp-2★ 19same name
- rcelebrone/DotAgents★ 15same name
- Andamio-Platform/coach★ 6same name
- chrislacey89/skills★ 4same name
- pfeff/claude-skills★ 3same name
- toverux/cantrips★ 3same name
- Artifacts7/newsletter-context-kit★ 2same name
7 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository56 other files it gives its agents.
- autopilotSkill
- before-afterSkill
- bigpictureSkill
- blast-radiusSkill
- brainstormSkill
- confidence-checkSkill
- contextualizeSkill
- create-ship-skillSkill
- create-skillSkill
- curateSkill
- debugSkill
- deep-researchSkill
- devtoolsSkill
- distillSkill
- done-checkSkill
- doneSkill
- double-checkSkill
- envsetSkill
- explainSkill
- fortifySkill
- goSkill
- handoffSkill
- harness-auditSkill
- interviewSkill
- matrixSkill
- mockupSkill
- mutateSkill
- notesSkill
- postmortemSkill
- presentSkill
- qaSkill
- readableSkill
- recommendSkill
- reportSkill
- retireSkill
- review-planSkill
- scoutSkill
- sec-reviewSkill
- setup-ticketingSkill
- setup-worktreesSkill
- spec-checkSkill
- specSkill
- stepsSkill
- successionSkill
- super-reviewSkill
- tangentSkill
- tddSkill
- tend-memorySkill
- testSkill
- ticketSkill
- tldrSkill
- triageSkill
- waitSkill
- workSkill
- worth-itSkill
- wrap-upSkill
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 4 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 12 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 51
Err lean: Every entry is a permanent tax on every future session until someone retires it, and a stale one actively misleads, while a real …
- Distinctive: line 113
If more than one item is gated, the verdict names the top-ranked one and says "+N more — /go for all, or by number."
- Distinctive: line 121
Verdict last, always — and it names what: Every run ends with exactly one bold verdict line, content-bearing, nothing after it.
- Distinctive: line 125
Respect declined proposals: If the user previously rejected a codification, don't re-raise it from new evidence of the same flavor — and …
“Common” is measured: kept by at least 6 in 10 of the 12 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
You are running the codify step: each unit of work should make the next one easier, and that only happens if lessons flow back into the system that does the work. Without a deliberate codify pass, corrections evaporate when the session ends — the user gives the same instruction again in three weeks, and the suite never compounds. Mine the session, classify what's durable, apply what's safe, and surface only what genuinely needs the user's call.
Self-apply by default; gate only the risky few
The suite self-improves without a review ritual. Every codification is its own commit, pushed immediately — so git log is the changelog and any application is one git revert away. That reversibility is what makes broad auto-apply safe: don't hand the user a pile to read and approve, just do the safe work and tell them what you did in one line.
The split is by risk and blast radius, not by type of change:
Auto-apply (the default — almost everything): any codification that is (a) easily reversible — a single pushed commit — and (b) contained — it lands in one place and can't silently break anything else. That covers nearly every real lesson:
- memory writes (isolated — only affect recall),
- edits to one existing skill (sharpened description, an added guardrail line, an expiry tag on a workaround, a fixed stale reference),
- additive lines to a project-scoped
CLAUDE.md(one repo).
Apply each, one pushed commit each, and list it. Don't ask.
Gate for /go (rare — only genuinely high-risk or high-blast-radius): propose, don't apply, when the change:
- rewrites or destroys an existing skill wholesale (vs. an additive edit) — a lossless move into an archive dir outside the loaded skills dir is not this; see the retire-list guardrail below — or
- creates a new skill (route through
/create-skill— needs deliberate authoring, not a one-shot edit), or - extracts a rule into a shared standards file (a new file that two or more skills apply, plus edits to every skill that restates the rule), or
- touches the control flow of a heavily-chained orchestrator (
/work,/super-review,/done) where a wrong edit silently breaks every downstream chain, or - edits global
~/.claude/CLAUDE.md(reshapes every session, every project — permanent context tax), or - is one you're genuinely not confident is correct.
These are the exceptions, not a second pile to clear by default. A typical session auto-applies everything and gates nothing.
When it's unclear which side a change falls on: lean auto-apply if it's reversible and contained; gate only if it's broad or you're unsure it's right. A wrong contained edit is one revert away; a wrong broad edit taxes every future session.
What counts as a lesson (and what doesn't)
The bar: a lesson earns a slot only if all of these hold:
- A fresh session wouldn't land on it by itself. That leaves three kinds: a local fact (true here, absent from training data and from a quick look: a branch flow, the timezone the servers run in, a harness quirk known only from observation), a contested choice the user made (write the side and why the other lost), or a correction this session actually needed. Good practice the model already follows earns nothing.
- Having it would have prevented the friction, and the situation recurs. Both must be yes.
- It carries its why and its source. The why is one clause, so a later reader can judge the edge cases the rule didn't foresee; the source is a pointer (a ticket, a PR, a dated decision), never the story. A rule with neither is gut feel; the why and source are what let a later cleanup tell a load-bearing rule from sediment.
It's a durable rule, never an event log: "repo X's path alias is @/" changes future behavior; "shipped TICKET-123" is tracker/git history and does NOT belong in the always-loaded index. Prefer updating an existing entry over adding a new one. A process lesson that keeps getting missed belongs in the skill or CLAUDE.md where it fires, not in memory.
Err lean. Every entry is a permanent tax on every future session until someone retires it, and a stale one actively misleads, while a real lesson re-presents itself. "Let it go" is the most common correct verdict.
Mine the session for:
- Explicit corrections — the user redirected the approach, rejected output, or restated a preference. The correction and its why are the lesson.
- The same instruction given twice — once is a request; twice is a missing default.
- Findings that exposed a missing standard — a /super-review, /mutate, or /tdd pass caught something a skill should have prevented upstream. The lesson lives in the upstream skill, not the catcher.
- Hard-won workarounds — a harness quirk, tool limitation, or environment trap that cost real time to discover.
- Decisions with reusable rationale — a /recommend call whose why will be needed again (these often want a memory or project doc, not a skill).
- Skill misfires — a skill that fired when it shouldn't, didn't fire when it should, or was missing entirely.
Not lessons: one-off trivia, anything the repo / git history / CLAUDE.md / memory already records, event-logs of completed work (what shipped / merged / filed — that's the tracker & git history, not load-every-session context), facts that only mattered to this conversation. "Let it go" is a valid and common verdict — name it and say why it doesn't clear the bar. A session that produced only event-logs codifies nothing — and that's a correct outcome, not a failure.
Classify each lesson → its destination
- Skill edit — name the skill and the concrete change (the line or section, quotable). Most lessons land here, and most are auto-applied (single existing skill, additive). Prefer sharpening the existing line over appending a new one — if the skill already says it and it wasn't followed, strengthen or relocate that line instead of restating it; appended duplicates are how skills bloat (the #1 smell /curate hunts).
- New skill candidate — only if it clears /create-skill's bar: one job, and (for composites) the rule of three. Gated — propose the name and one-line description; authoring goes through
/create-skill. - CLAUDE.md rule — for cross-skill defaults. Project-scoped → auto-apply; global
~/.claude/CLAUDE.md→ gate. Quote the proposed line either way. - Memory — for facts about the user, projects, or context (not process — process belongs in skills). Auto-applied. Read the store's actual shape before writing — it differs per machine:
- Hierarchical store (lean always-loaded
MEMORY.mdcore + on-demanddomain-*.mdfiles): write the entry into the matchingdomain-*.md(read it first) as a short (~150–180 char) recall hook with the detail in the topic file — NOT intoMEMORY.md. Only a genuinely cross-cutting rule earns a core slot; a fact needing a new domain gets a topic file + a one-lineMEMORY.mdpointer. Keeping entries out of the core is what stops the 200-line/25KB ceiling creeping back;/tend-memory+/retireare the cure if it does. - Flat harness-native store (one frontmattered topic file per fact + one-line
MEMORY.mdpointers, nodomain-*.md): follow the harness's native memory format — write/update the topic file, add its one-line pointer, update-don't-duplicate. Skip the domain routing; the platform owns that store's hygiene.
- Hierarchical store (lean always-loaded
- Test or check — when the lesson is "we keep breaking X", the durable fix is a test, a hook, or an eval, not prose.
Tag every codification (applied or proposed) as one of:
- [standards] — encodes judgment (what good looks like, definition of done, what to verify). Appreciates as models improve.
- [workaround] — compensates for a model/harness limitation. Legitimate, but depreciates — include the expiry condition ("delete when X is fixed/changed") so future curation can retire it.
Output format
Glance-first, verdict last. The deliverable is a single bold verdict line at the very bottom — the thing your eye lands on when you stop scrolling, and a TLDR of what actually happened, not boilerplate. Everything above it is skippable context for when you're curious. You context-switch constantly; the job here is "what got better, and is there one thing that needs me?", not a report.
Emit top-to-bottom, dropping any section that's empty:
## Compound — <session scope, one line>
**Applied** (each its own pushed commit):
- <lesson, one line> → <file> — <sha>
**Needs your call** (high-risk / broad — ranked by leverage):
1. <what the change IS, one line> → <destination> — <why it's gated (broad / unsure)>
2. …
Let go: <N>. ← one line, count only; omit if 0
**<verdict line>**Under nested (a composite like /wrap-up is driving and owns the final report): produce the same verdict line, but hand it back as mid-pipeline input rather than ending the turn — the caller has a next step and the verdict is not it.
Nested runs usually end with the session closing, so a gated item can't wait for a /go here. Append each one to a suite inbox file (e.g. ~/.claude/FINDINGS.md) as a ## Proposal: <the change> heading with the exact change, its destination, why it's gated, and Found: <date>, /compound in "<session title>" — enough to apply it cold. /curate drains those headings. The verdict then reads Applied <N> (<gist>); <M> gated → FINDINGS.md (<top one>).
The verdict line — name WHAT, never boilerplate
The final line is bold, standalone, and a one-line TLDR of the codify state — it must name the actual substance. Never emit a generic "improvement recommended" / "Recommend improvement, respond /go" placeholder: that tells the user nothing about what's being suggested, which was the whole complaint. Pick the matching shape and fill in the real content:
- Something gated → name it + key off
/go: Applied <N> (<one-line gist>); 1 needs your call — <what the gated change is>. /go to apply it, or ask to see it. e.g. Applied 2 (register-TZ note → memory, /tdd red-first guardrail); 1 needs your call — rewrite /work's harden phase to run mutate isolated. /go to apply it, or ask to see it. - Everything applied, nothing gated → name what got better: Applied <N>: <one-line gist of what>. Nothing pending.
- Nothing at all → Nothing worth codifying. All clean.
If more than one item is gated, the verdict names the top-ranked one and says "+N more — /go for all, or by number."
Three deliberate tiers of detail: the verdict line is the glance (what changed / is there a /go); the numbered "Needs your call" one-liners are the fuller context you read only if curious; the deep per-item detail (the exact quotable change, [standards|workaround] tag + expiry, effort S/M/L) is derived but held back — surface it only when the user asks to see an item, or when /go fires and you apply it. /go acts on the gated list top-down (or cherry-pick by number).
Guardrails
- Risk discipline, not type discipline. Auto-apply is gated on reversible + contained, not on whether it's "a skill edit" vs "a CLAUDE.md edit". A contained, reversible change auto-applies even if it's a CLAUDE.md line; a broad or low-confidence change gates even if it's "just" a skill edit. The genuinely high-risk set (new skills, orchestrator control flow, global CLAUDE.md, wholesale rewrites/deletions) always gates.
- No silent broad changes. Everything auto-applied is its own pushed commit so the ledger +
git logkeep the receipt and revert is one command. If you can't cleanly revert it, it doesn't qualify for auto-apply. - Verdict last, always — and it names what. Every run ends with exactly one bold verdict line, content-bearing, nothing after it. Never the old boilerplate. A clean session collapses to scope + verdict.
- Hold the deep detail. Tags, expiry, effort, and the exact quotable change are worked out internally but kept off the glance.
/go(or "show me #1") is when they surface. - Don't manufacture lessons. A clean session gets a short ledger. Mirror the no-manufactured-nits rule — three real lessons beat ten padded ones.
- The bar above is the filter; when in doubt, let it go. An unneeded rule is permanent context tax and a stale one is worse than absent, while a real lesson re-presents itself. (Distinct from the apply/gate call above, which is about how to land a lesson you've already decided to keep.)
- Respect declined proposals. If the user previously rejected a codification, don't re-raise it from new evidence of the same flavor — and don't auto-apply a variant of it either.
- Work the audit's retire list — archiving auto-applies. The add path here is automatic; if the delete path stays manual, the suite only grows and flagged skills sit unmoved across audits. When the latest
~/.claude/audits/harness-audit-*.mdnames retire candidates still underskills/, retire them in this run:git mv skills/<x> <archive-dir>/<x>verbatim, repoint every cross-reference (grep -rn '/<x>\b' skills/), one pushed commit. Lossless (restore =git mvback), so it clears the auto-apply bar. Gate only what the audit marked borderline. The audit's evidence is the trigger — never retire on a usage hunch. - Suite-rot routes to /curate, not an inline patch. If a lesson reveals structural rot rather than a missing standard — a skill has sprawled into several jobs, duplicated another, gone to sediment (unused/stale), or become a no-op (fires but adds nothing) — the fix is a
/curatepass, not a one-line patch here. Don't repair structural rot one session-lesson at a time; name the anti-pattern and route it. (/curateowns the named anti-patterns and the refactor backlog;/harness-auditconfirms sediment/no-op from usage.) - This session only. /compound mines the current session, not history — run it after a working session, not as an archaeology tool.
- Lean and fast is part of the contract. /compound is a codify pass, not an audit — it reads the session it already has, writes a handful of commits, and gets out. If a step is fanning out across files or the whole memory store to decide something, that step belongs in
/curate,/tend-memory, or/harness-audit, and you should route it there instead of running it inline. - Close with a memory-health pass — act, don't just nudge. Two halves. Truth (every store shape) — BOUNDED, this is not a store-wide sweep. Check only the memories this session actually leaned on (used to make a decision, or wrote/updated) and that name a concrete artifact — a file, flag, path, script, command. Cap at 5; if more qualify, take the 5 most load-bearing and say so. Verify the named artifact still exists and nothing this session learned contradicts it. Stale → update or archive it as an Applied item; unsure → flag it under Needs your call; never delete on vibes. Auditing memories the session merely had in context, or the store at large, is
/tend-memory's job — doing it here is what turns a two-minute codify into a ten-minute one. Size (hierarchical stores only — a flat harness-native store has no manual budget to police): check the lean core on BOTH dimensions —wc -l <MEMORY.md>vs 200 lines ANDwc -c <MEMORY.md>vs ~24.4KB (platform limit is 200 lines OR 25KB, whichever bites first). If over, don't reimplement GC here —/retire(eviction) and/tend-memory(lossless compression) own that logic; chain them as an auto-applied sub-step (both are lossless + reversible, so they clear the auto-apply bar). Spawn a fresh subagent (not a fork — the GC procedure needs none of the session context): "run theretireskill's procedure withapplyagainst<MEMORY.md path>; if still over budget, run thetend-memoryskill's the same way; return a one-line summary + any BORDERLINE entries." Report it under Applied (e.g.ran /retire+/tend-memory: archived N, tightened M, 24.6→22.1KB). Borderline retirements still gate under 'Needs your call' — never auto-evict an entry that isn't wholly stale. This is the only side effect /compound triggers beyond its own commits. (A healthy index often has no dead weight, so the retire→tend-memory fallthrough is the common path.)
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

