Once you work across more than one repository, your AI conventions start to drift.

canon is a CLI and Claude Code plugin that keeps one authoritative copy and installs it into each project on demand.

See how it installs

It runs on itself

The workflow this toolkit ships is the workflow that built it. Several Claude Code sessions run at once, each in its own git worktree on its own branch, and each opens its own pull request.

4 working 4 completed

3 working 5 completed

Pinned

  1. orchestrator-canon-lead dispatching the planners that need a plan 4d

Working

  1. worker-canon-agent-view-and-deploy PR #1510 open (landing page) #1510 5h
  2. planner-canon-context-wireframe-draft drafting the context and wireframe plan 2m
  3. planner-canon-skill-coverage-pointers reading the skill coverage pointers 1m
  4. planner-canon-screenshot-trap-guard planning the screenshot trap guard 1m

Completed

  1. worker-canon-agent-view-and-deploy pull request opened #1510 5h
  2. planner-canon-write-route-hook-bypass plan written; tested write probe 32m
  3. planner-canon-indexes-list-lookup plan and task board consistent 13m
  4. worker-canon-labels-scan-body-file address-review pass finished #1508 21m
  5. worker-canon-web-context-entry PR #1507 addressed with commit #1507 20m

… 16 more

Session rows are a real canon sessions list --json read taken on . The activity text and the pull request number are transcribed, since no verb here reports either.

Two commands and the toolkit is present

Add the marketplace, then install the Claude Code plugin.

claude plugin marketplace add https://github.com/erclx/canon
claude plugin install canon@canon
Adding the canon marketplace and installing the plugin in Claude Code

The skills land as /canon:<name>. If your session was already open, run /reload-plugins to pick them up.

Several skills call the canon CLI to read catalogs and run installs, and the plugin doesn't put it on your path.

bun install --global @erclx/canon

The size of what installs

The canon catalog, listing skills, governance rules, and standards with the count each ships, the workflow skills named, and a sample of the rule and standard names

Read from the catalogs when this page was built.

skills
72
rules
71
standards
29
snippets
11
commands
41
audits
20

A rule arrives because of what you touched, not at startup

Governance rules load into a Claude session when a matching path is edited, installed per project and refreshed by sync.

Editing

src/design/tokens.ts

src/**/*.ts

Naming standards

Prefix booleans with is, has, should, or can: isLoading, hasAccess.

.claude/rules/canon/core/060-naming.md

What a target receives

Some domains are copied into your project and become yours to edit, and some are never copied at all. A tooling stack lands as real files under version control. A standard stays here and is opened by name, so there is no copy in your repo to drift from this one.

canon tooling list and canon standards list side by side, the first showing five stacks with their dependency and script counts, the second showing standards against the artifact each governs

A rule with a glob loads only when a matching path is edited, and a rule with none loads every session. Stacks compose, so a project inherits every rule its stack depends on.

canon gov list, showing seven stacks with the rules each carries and a sample of rules beside the path glob that loads each one

Work tracked in files, archived by a merge

.canon/tasks/ is gitignored session scratch, one row per task in flight, each naming the files it touches and the plan it runs under. A merge is what closes it, not a checkbox someone remembers to tick.

the task board's Run now table, one row per task in flight, each naming the files it touches and the plan it runs under

A hand-taken snapshot rather than something this build reads live, and it goes stale the moment the board moves.

Read the rest, or install it now

Everything above is read from this repository. The documentation is the same way.

Read the docs View on GitHub