Experience pack
Two-layer experience system for any project: keep a per-project EXPERIENCE.md ledger (dated entries: what happened, what we did, what it cost), then distill it through an experience-vs-decision boundary test into portable, noun-free lessons that other projects can safely reuse — experience inherits, decisions die. Ships a reference pack distilled from a real 5-rebuild contamination saga (source-lock bundles, planner/executor/ verifier role isolation, zero-context probes, quarantined banned-noun lists, bounded repair loops, multi-AI reference-not-instruction triage) plus five prevention advices. Use when the user says 经验包 / 记录经验 / 复盘 / 经验文件 / 沉淀经验 / experience pack / lessons learned / post-mortem / record this experience / distill experience / "what did we learn" / wants a project to learn from another project's history, or after any expensive incident worth recording. NOT for closing an iteration (use iteration-close) and NOT a decision register — decisions stay in the project's own truth files.From its SKILL.md
npx -y skills add m1nga/skill-builder --skill experience-packAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.6 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it
Experience Pack
One sentence: every project keeps its own experience ledger; a boundary test distills the portable part; only the portable part travels between projects.
The two layers
| Layer | File | Owner | Content rules |
|---|---|---|---|
| Ledger | EXPERIENCE.md in the project root | the project | dated, concrete, project specifics allowed; process experience only — never product truth, never a decision register |
| Portable | the project's portable-lessons file (e.g. LESSONS.md) and/or this skill's reference pack | travels | abstract, product-noun-free, true in a DIFFERENT project read by a stranger |
Pipeline: something happens → ledger entry (same day, while it hurts) → periodic distillation pass → portable lessons. Strategy and product decisions never travel: experience inherits, decisions die.
Protocol A — RECORD (ledger)
Create EXPERIENCE.md at the project root on day one (or on first use).
Append an entry when any of these happen: an incident cost real time/money/
trust; a method visibly worked; an independent reviewer caught something the
author missed; a collaboration pattern succeeded or failed; the user corrected
the agent's course.
Entry format:
### YYYY-MM-DD — title
**What happened:** facts, concrete.
**What we did:** the response, concrete.
**What worked / what failed:** both, honestly.
**Cost:** time / tokens / trust / rework.
**Portable?** yes → <lesson-slug> | not yet | no (project-specific).
Rules: record process experience, not product facts; if the workspace has contamination-hygiene rules (banned nouns), the ledger obeys them; never backdate or rewrite old entries — append corrections as new entries.
Binding rules (added 2026-07-18, distilled from the second adopter project):
- Recording is part of done. An incident's fix may not be declared complete until its ledger entry exists — the ledger is a gate, not a diary. (Its first adopter backfilled 8 entries in one day because nothing forced writing at incident time; firefights never leave time for diaries.)
- Bootstrap imports are legitimate, silent backdating is not. When adopting the pack on a project with history: date each entry by its INCIDENT date and declare the import in a dated note at the top of the ledger. An entry dated in the past without a declared import is fabrication.
- Distribution hygiene. The ledger contains project internals. In a repo
with a public remote, gitignore
EXPERIENCE.mdby default; publish only the boundary-tested portable layer. - Discoverability. Add one pointer line to the project's primary truth file (CLAUDE.md / system map / state doc) so a zero-context agent can FIND the ledger; an undiscoverable ledger records nothing for the next session.
Protocol B — DISTILL (boundary test)
For each ledger entry marked "Portable? yes/not yet", run the tests in order:
- Substitution test — strip every proper noun and specific number. Does the statement still teach something? Collapses → it is a decision, dies.
- Mechanism vs choice — does it say how things work or fail (mechanism → inherit), or who/what/how much was chosen (choice → dies)?
- Re-derivation test — could a smart stranger re-derive it from the new project's own context? If it could only come from the old project's strategy, it is the old strategy talking — dies.
- Sunk-cost test — is its only value that effort was spent on it? Dies.
- Verifiability test — does checking it require a dead noun? Abstract it or let it die.
Survivors are rewritten as one abstract imperative line + why + how to apply, tagged with provenance ("prior project, distilled · date"). Write the portable layer in English (or bilingually): the ledger may use any language the project lives in, but portable lessons travel to strangers — project-local idiom strands them. Ambiguous items default to DIE — the ledger keeps them recoverable for a later pass. DOWNGRADE (rare): a strategy-shaped artifact re-enters another project only as an explicit HYPOTHESIS with a re-validation condition, and only by the user's call — never silently.
Protocol C — SHARE / APPLY (another project learns from this one)
- In the receiving project: read
references/rebuild-experience-pack.md(this skill's packaged saga) and/or the source project's portable-lessons file — never the source project's ledger, truth files, or strategy. - Bootstrap the receiving project's own
EXPERIENCE.md(Protocol A). - Walk the pack's five advices as a setup checklist; adopt what applies; record deviations as the receiving project's first ledger entry.
- Adopted lessons enter the receiving project tagged with provenance; they are engineering constraints, not user decisions — the user may re-class any of them.
Boundaries — what this skill never does
- Never copies strategy, product facts, personas, pricing, channels, client names, or account identities between projects — in either direction.
- Never treats the ledger as a decision register; decisions live in the project's own truth/decision files with their own provenance rules.
- Never edits other skills or the user's global config.
- Never reads a project's quarantined/archived material to "enrich" a pack; distillation input is the ledger and the live files only.
Relationship to adjacent skills
- iteration-close — closes an iteration of a continuing direction (distill,
delete baggage, tag, seed). Run experience-pack's Protocol B as part of it if
both are installed; iteration-close owns the closure ritual. Caveat both
skills must honor: "git history is the archive" holds ONLY for tracked
files. Untracked/gitignored material (private IP in a public repo) has no
archive — quarantine it under an explicit local rule (e.g.
_retired/) before any purge; deleting it is permanent loss, not cleanup. - Decontamination / fresh-start skills — when a direction is REPLACED, the boundary test here is the same test used to decide what survives; the decontamination skill owns the purge mechanics.
- This skill is product-agnostic and must stay that way: if a project's noun ever appears in this file or its references, that is a defect — remove it.
Reference
references/rebuild-experience-pack.md — the packaged, noun-free experience
from a real five-rebuild contamination saga: the six contamination doors, the
source-lock reset method, the three-probe verification stack, the multi-AI
collaboration protocol, and the five prevention advices.
What ships with it: 1 file
8.0 KB alongside SKILL.md