Skill evolve
Skill Iabstergo1/pdf-to-study-kb/.agents/skills/skill-evolve
Distill a recurring ingest/lint failure into a bounded improvement to one skill — read the skill-mine backlog → write a bounded SKILL.md edit on an isolated branch → run skill-gate (pytest + dual-tree parity + gate-integrity) → skill-stage the candidate, leaving skill-adopt to a human. Use when the user says "distill this failure into the skill / evolve a skill / let a skill self-improve / handle skill backlog item N". Only for improving this project's own skills; "summarize this / explain this / translate this / add this book to the KB (that is ingest)" must never trigger it.From its SKILL.md
npx -y skills add Iabstergo1/pdf-to-study-kb --skill skill-evolveAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 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
8.0 KB, ~1.9k tokens by cl100k_base, as published. Nobody here has run it
skill-evolve — make a skill steadier under a gate (the only LLM, human-triggered)
Distill a recurring failure into a bounded improvement to one skill; whether it's correct is judged
by deterministic tests, and release is decided by a human. This is the human-triggered "only LLM
action" under the core constraints — never an unattended batch run. Project truth: CLAUDE.md / AGENTS.md.
1. Triggers / Non-triggers
- Triggers: the user wants to distill a recurring failure into a skill — "evolve a skill / handle backlog item N / write this lesson into the skill / let a skill self-improve".
- Non-triggers (never fire):
- "add this book / PDF to the KB" → that is ingest, not a skill edit.
- "summarize this / explain this / translate this / query X in the KB" → read-only or ingest/kb-query, unrelated to editing a skill.
- a one-off, non-reproducing failure (backlog
count= 1) → not worth a skill edit. - anything that would need editing
tests/orpipeline.pygate logic to "pass" → out of bounds, refuse.
2. Inputs
- The
skill-mineoutputpipeline-workspace/skill-evolution/backlog.yaml: each entry hassignature / count / sources / sample_reason / last_seen. Onlyopenproposals are counted — signatures already fixed and retired viaproposals-resolvedrop out; uselast_seento judge how fresh a signal is. - The user-named backlog entry (by
signatureor index). - The target skill's
SKILL.md(both trees) + failure-sample context (review_proposalsreason/ Review-Queue items).
3. Outputs
- A bounded edit to a single skill: only a section or two of that
SKILL.md; edit both trees in sync, keep them byte-equivalent. - A candidate on an isolated branch + the
skill-stage-registered proposalpipeline-workspace/skill-evolution/candidates/<id>/proposal.diff. - Not published directly: a candidate is semantically
proposed; only a humanskill-adoptmerges it into both trees (stage→adopt is the two-phase-publish analogue).
4. Dependencies
- CLI:
skill-mine(read backlog),skill-gate(deterministic gate),skill-stage(register a proposal),skill-adopt(human accept). - Isolation: a git branch / worktree (candidate isolated from mainline).
- Truth:
CLAUDE.md/AGENTS.md(the core constraints, especially that this is the human-triggered only-LLM action). - It does not depend on any LLM-judge / training backend / rollout-replay.
5. Persisted artifacts
All under the gitignored workspace pipeline-workspace/skill-evolution/:
backlog.yaml(skill-mine output, the input).candidates/<id>/proposal.diff(skill-stage output, for human review).audit.jsonl(staged / adopted / rejected "dead-end" negatives, append-only).
6. CLI commands (all business logic here)
python scripts/pipeline.py skill-mine # failure signals → backlog.yaml
# a human reads the backlog and picks a count>=2 (recurring) signature
git switch -c skill-cand/<id> # isolated branch
# write the bounded SKILL.md edit on that branch (both trees in sync, byte-equivalent)
python scripts/pipeline.py skill-gate --candidate <id> # pytest + dual-tree parity + gate-integrity
python scripts/pipeline.py skill-stage --candidate <id> # green → register the proposal, mainline untouched
# report proposal.diff to the human, await confirmation
python scripts/pipeline.py skill-adopt --candidate <id> # human-triggered: re-run the gate + commit both trees
7. Workflow
| Sub-unit | Input | Output | Acceptance | Persisted | Failure stop |
|---|---|---|---|---|---|
| E1 mine | review_proposals | backlog.yaml entries (count≥2) | recurring signature only | backlog.yaml | nothing recurring |
| E1.5 route | one signature + failure samples | legislation-routing verdict (three written answers) | only "semantic judgment / thin orchestration" proceeds to E2 | routing answers in the hand-off report / proposal | routed to another layer → stop + report |
| E2 bounded edit | one signature + target SKILL.md | a 1–2 section edit, both trees | byte-equivalent across trees | branch worktree | edit needs tests/pipeline changes |
| E3 gate | candidate id | gate result | gate-integrity PASS + pytest green | — | gate red |
| E4 stage | green candidate | proposal.diff + audit entry | mainline untouched | candidates/<id>/ + audit.jsonl | — |
| E5 adopt (human) | proposal | both-tree commit | gate re-run passes | git commit + audit | gate red on re-run |
E1.5 legislation routing (mandatory, before any edit)
A skill edit is the last resort, not the default output — the most valuable outcome of this skill is often "do not edit the skill; sink the fix into the runtime". Classify the failure before touching any SKILL.md:
| Failure class | Belongs in (NOT a skill edit) |
|---|---|
| deterministically reproducible & machine-checkable (state / order / ownership / accounting / format / render-safety) | parser / state machine / gate / schema in the CLI runtime |
| induced by a runtime prompt surface (CLI output, template seed, RESUME text) | that prompt surface + its contract test |
| a missing deterministic capability | a new CLI primitive |
| calling judgment / writing strategy / when-to-invoke / how-to-phrase | the skill — the only class that proceeds to E2 |
| not yet reducible to any of the above | postmortem / QA / Review-Queue / human |
Every candidate must answer three questions in writing before E2:
- What is the minimal reproduction?
- Why can't a deterministic runtime check block or detect it?
- Why does it belong in the skill rather than a runtime prompt surface?
If any answer routes away from the skill: stop skill-evolve and report which layer should receive the
fix — that hand-off report is a successful outcome of this skill, not a failure. (This skill still never
edits tests/ or pipeline.py itself; routing to runtime means handing the signal back to a human /
normal development flow, not implementing it here.)
8. Failure stops / recovery
skill-gatered → stop, do not stage:- gate-integrity: the candidate touched anything outside the two skill trees (especially
tests/) → stop immediately. That is out-of-bounds / gaming its own gate. - pytest red (incl. dual-tree parity T2) → stop; paste the failure back, log a "dead-end" negative in audit, rewrite or abandon.
- gate-integrity: the candidate touched anything outside the two skill trees (especially
- the backlog entry's
count= 1 (not reproducing) → not worth it, stop. - E1.5 routes the failure to runtime / prompt surface / new primitive / human → stop, report the target layer, do not edit any SKILL.md.
- it would require editing
tests/or gate logic to pass → never do it, stop and hand back. skill-adoptis always human-triggered; this skill never auto-adopts. Recovery: the audit.jsonl trail records every staged/rejected attempt.
9. Acceptance criteria
- The candidate diff only touches
.claude/skills/and.agents/skills/(skill-gategate-integrity PASS). - Dual-tree byte-equivalence holds (pytest T2 green).
-
pytest testsall green (skill-gatePASS). - The E1.5 routing answers (three questions) are recorded, and the failure genuinely remains "semantic judgment or thin orchestration" — anything determinable was routed to the runtime instead.
- The edit is bounded (a section or two) and targets that backlog
signature. - The proposal is
skill-stage-d;audit.jsonlhas a record;skill-adoptis left to a human.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.