From canon
Use when the user asks to turn a repeated browser/task workflow or a set of run traces into a durable skill — "graduate this task", "make a skill from this trace", "turn this browser workflow into a skill", or "iterate strategy.md until this task is reliable".
How this skill is triggered — by the user, by Claude, or both
Slash command
/canon:graduate-skillThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Turn repeated work — especially browser/task traces — into a durable, self-contained `SKILL.md`. Where `look-back` notices that something *should* become a skill and `optimize` improves an *existing* skill against evals, `graduate-skill` is the step in between: run the task, study the trace, make one bounded change to `strategy.md`, re-run, converge, then graduate.
Turn repeated work — especially browser/task traces — into a durable, self-contained SKILL.md. Where look-back notices that something should become a skill and optimize improves an existing skill against evals, graduate-skill is the step in between: run the task, study the trace, make one bounded change to strategy.md, re-run, converge, then graduate.
This skill is intentionally trace-driven and conservative. It never invents a skill from a single run, and it never copies secrets or raw transcripts into the graduated output.
Commands:
/canon:graduate-skill <task-name>
/canon:graduate-skill <task-name> --iterations 5
/canon:graduate-skill <task-name> --from-traces .canon/traces/<task>
Natural triggers:
All graduation state lives under .canon/graduation/:
.canon/graduation/
├── tasks/
│ └── <task-name>/
│ ├── task.md # fixed definition — what success means
│ ├── strategy.md # the only fast-changing state during iteration
│ ├── reports/ # one report per run (iter-001.md, iter-002.md, …)
│ └── graduated/
│ └── SKILL.md # the final, self-contained skill
└── README.md
Scaffold a workspace deterministically:
${CLAUDE_PLUGIN_ROOT}/scripts/graduation/scaffold.sh <task-name>
scaffold.sh is collision-safe — it skips existing files, supports --root, --force, and --dry-run, and never clobbers a strategy.md you have been iterating on.
task.md — fixed definitiontask.md is written once and rarely changes. It records the objective, inputs, expected output schema, observable success criteria, and constraints. Start from ${CLAUDE_PLUGIN_ROOT}/templates/graduation-task.md. Do not put strategy in task.md — that belongs in strategy.md.
strategy.md — the only fast-changing stateThe strategy file is where every iteration's lesson lands. Keep it tight.
Good strategy entries:
Bad strategy entries:
task.md (and strategy.md) if they do not exist.--from-traces.reports/iter-NNN.md.strategy.md with a single bounded change.--iterations is reached.SKILL.md under graduated/.Default convergence rule:
If neither holds, do not graduate. Report what's still flaky and stop.
The graduated SKILL.md (start from ${CLAUDE_PLUGIN_ROOT}/templates/graduated-skill.md) must include:
Frontmatter name and description.
Purpose.
When to use.
Required tools / env.
Workflow (the converged fast path).
Site/task-specific gotchas.
Failure recovery.
Expected output schema.
A source note:
Generated from canon skill graduation: <task-name>, <n> iterations, <date>.
It must not include:
Wrap any hard-won invariant in the graduated skill with protected-section markers so a later edit can't silently undo it:
<!-- canon:protected:start name="<task>-fast-path" -->
The converged steps that actually work. Don't rewrite without re-running.
<!-- canon:protected:end -->
canon does not reimplement browser execution. If a Browserbase / Autobrowse skill or workspace is present:
--from-traces at them).If Browserbase is absent, the manual trace-driven loop above still works — you supply the run summaries.
Once a skill is graduated and has a couple of repeatable tasks, it becomes a candidate for /canon:optimize: write an eval from ${CLAUDE_PLUGIN_ROOT}/templates/eval.yaml, then tighten the graduated skill against it. Mention this as the suggested next step in the final report, but don't run it automatically.
strategy.md change per iteration. No broad rewrites after a single failure.task.md is fixed; strategy.md is fast-changing. Never blur the two.npx claudepluginhub orthogon-ai-labs/canonGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.