project-canon / skills
AGENTS.md0 starsChanged 2 months agoMITView on GitHub
This directory is the maintained home of the agent skills that project-canon ships with the AI-first CLI canon. Every copy anywhere else, under an operator's ~/.claude/skills/, .pi/agent/skills/, or .codex/skills/, or inside an adopting repo (Pi: .pi/skills/), was written by project-canon skill install from the sources described here and opens with a provenance comment saying so. Those installed copies are consumers: an edit made in one is overwritten by the next install and reaches nobody else. The older arrangement, in which…
In this repository6 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .issuectl/AGENTS.mdAGENTS.md
- issues/AGENTS.mdAGENTS.md
- issue-intakeSkill
- issue-newSkill
- issueSkill
The file
Files
skills/
This directory is the maintained home of the agent skills that project-canon ships with the
AI-first CLI canon. Every copy anywhere else, under an operator's ~/.claude/skills/,
.pi/agent/skills/, or .codex/skills/, or inside an adopting repo (Pi: .pi/skills/), was written by
project-canon skill install from the sources described here and opens with a provenance
comment saying so. Those installed copies are consumers: an edit made in one is overwritten by
the next install and reaches nobody else. The older arrangement, in which homebase and other
repos copied skill files out of this directory by hand, is what skill install replaced; the
provenance note at the top of the canon master still describes that arrangement.
Two skills, one canon
cli-canon/ is the behaviour skill: the reviewer and generator that applies the canon to a CLI
by judgment, picking up where doctor and review stop. It is SKILL.md plus templates/
(the probe table, the review-report shape, the generate plan). It is the companion skill the
canon's §15 asks a family tool to ship, and the installer stamps it with the binary's version
so §17 drift detection works.
ai-first-cli-canon is the content skill: the canon text itself, installed so an agent working
in an adopting repo has the family's binding conventions at hand. It has no directory here on
purpose. The binary assembles it at install or print time from a description constant in
crates/project-canon-cli/src/skill.rs and project_canon_core::CANON, the embedded master. A
checked-in SKILL.md with a pasted canon body would be a second copy of the canon, and a
second copy that goes stale is the problem this design exists to remove; a test asserts that
the rendered skill contains the master bytes verbatim. The two skills stay separate because
most adopters want the rules without the auditing apparatus. The forks and their reasons are
in issues/canon-installable-skill/design.md; its install formats and packaging details
predate pi support (0.6.0), native Codex skill trees (0.8.1), and scaffolds that reference the
skill instead of copying the canon (0.9.1), so trust the code over it there.
Where the files physically live
skills/cli-canon is a symlink. The physical directory is
crates/project-canon-cli/skills/cli-canon/, and skill.rs pulls every resource in with
include_str!. It lives inside the crate because cargo package ships only files under the
crate directory and the include_str! paths have to resolve inside the published tarball, so
the crates.io source archive carries the whole resource tree without a second copy. Either
path edits the same files. What breaks the design is a copy: another SKILL.md for either
skill anywhere in this repo, in homebase, or in a scaffold.
Changing the skill
The installer rewrites the frontmatter on the way out. It keeps the fields SKILL.md declares,
appends cli_version and schema_version, and inserts the provenance comment as the first body
line, which is also how a later install recognises the file as its own. So the source
frontmatter has to exist (rendering panics without it) and should not carry those two fields
itself. A test validates the rendered frontmatter of every shipped skill as portable Agent
Skills frontmatter for all three runtimes, and doctor applies the same validator to other
repos, so a frontmatter change that fails here would fail for adopters too.
Some tests in skill.rs pin the text. The cli-canon render is expected to contain the phrase
"check shipshape/issuectl/taskfleet" and not its ossctl predecessor, because that phrase
names a real review use case and a rewrite once dropped it and broke CI. No shipped skill
source or the canon may mention the retired product name that taskfleet replaced. The
resource count is pinned at four, so adding a template means adding it to
CLI_CANON_RESOURCES and updating that test, and renaming one means updating its entry there;
the same list is what skill list --json and skill print --json advertise as printable
resources.
skill list describes cli-canon from the catalog constant in skill.rs, not from the
frontmatter, and the two wordings already differ. A description change worth making belongs
in both places, or the list will describe a skill that no longer reads that way.
The skill's claims about the binary (review --verbose, the manual-verify rows,
config show --json) are held to the source in reviews; /fact-check-instructions exists for
that check. The canon only appends sections and is cited by number, so the §1–§24 range in
both descriptions (the cli-canon frontmatter and the ai-first-cli-canon constant in
skill.rs, which also names canon v4) follows the canon version rather than the other way
round.
What stays out of the text
The skill text ships to crates.io and lands in every adopter's home directory. A repository map,
an account name, or a path convention from the maintainer's machine would become a default in a
public artifact, which canon §23 forbids after versions 0.1.1 and 0.2.0 shipped exactly that.
Family repositories come from operator configuration, project-canon config show --json under
values.family_repos, and the default is empty. The skill should keep asking the configuration
rather than knowing an answer. Examples use obviously fictional values.
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.

