Cratis AI is the canonical set of rules, agents, prompts, and skills used when building with or contributing to Cratis.
.cratis/ai/ Canonical AI corpus and availability manifest
Source/
Harness.Setup/ TypeScript tool that maintains repository harness adapters
Pi.Plugin/ Published @cratis/pi package
Verification/ Corpus, profile, package, and skill behavior verification
.claude/ Claude Code adapters
.github/ GitHub Copilot adapters and the quality/release workflow
.agents/ Codex adapters
.pi/ Pi adapters
.cursor/ Cursor adapters
.opencode/ OpenCode adapters
There is one corpus: .cratis/ai. Harness folders point to it and must not carry
independent copies.
The Cratis CLI provides the complete repository-managed path:
cratis ai install \
--harnesses claude,codex,copilot,cursor,opencode,pi \
--profiles cratis/application \
--languages csharp,typescriptThe CLI reads .cratis/ai/manifest.json, resolves the matching skills through
.cratis/ai/profile-catalog.json, installs managed content in .cratis/ai, and
creates native harness adapters. It records hashes in
.cratis/ai.manifest.json, refuses to overwrite user-owned paths, and stops
update or uninstall when managed content was changed unless --force is used.
Native plugins remain an independent single-harness choice. Claude Code, Codex, GitHub Copilot, and Cursor use the marketplace manifests in this repository. Pi uses the published package:
pi install -l npm:@cratis/pi@cratis/pi reads .cratis/ai.json when present and exposes skills matching the
selected profiles and languages. Without the file, it exposes every packaged
skill. The package also contributes rules, prompts, agents, the subagent tool,
and Cratis quality hooks. It yields to an existing managed CLI installation so
resources and extensions are never registered twice. It does not create the
shared corpus, configure other harnesses, or provide managed update and
uninstall protection.
The Pi subagent tool, whether it comes from the package or a managed
installation, stands down for the session when another extension already
provides a delegation tool named Agent (such as pi-subagents, which reads the
same .pi/agents). It removes itself from the active tools at session start,
shows one notice when Pi has a UI, and so never offers the model two tools that
list the same agents. Without such a tool it is unchanged.
OpenCode can consume the standard .opencode and AGENTS.md adapters directly.
After adding or removing an agent, prompt, or harness asset, synchronize the repository adapters:
npm ci --prefix Source/Harness.Setup
npm run setup --prefix Source/Harness.Setup
npm run check --prefix Source/Harness.SetupAll quality checks live in Source/Verification or the package they compile:
npm ci --prefix Source/Pi.Plugin
npm ci --prefix Source/Verification
npm run check --prefix Source/Pi.Plugin
npm run check --prefix Source/Verification
npm run verify --prefix Source/Verification
npm test --prefix Source/Verification
(cd Source/Pi.Plugin && npm pack --dry-run)The verification suite uses Pi's DefaultResourceLoader directly, without a
model or credentials, to prove that project context, all 68 skills, 18 prompts,
and the three managed extensions are actually discovered. It also verifies the
canonical skill and rule paths exposed to Claude, Codex, Copilot, Cursor, and
OpenCode.
Static skill checks live beside the skill as verification.json. They record
an example input and assert that required guidance is present; they do not run
that input through a model, compile examples, or prove writing quality.
Behavioral assessment needs a separate task exercise and review of its output. The repository deliberately
has no provenance ledger, evidence chain, generated inventory, or distribution
tooling pipeline.
.github/workflows/publish.yml is the single workflow. It verifies
the corpus and packages, checks semantic release intent, uses
cratis/release-action to calculate the version after merge, and publishes
@cratis/pi when a release is requested by the merged pull request label.