Choose Cratis AI profiles
A profile decides which Cratis guidance a repository receives. The choice that matters is what the repository builds: an application on Cratis, part of the Cratis framework itself, or documentation. Get that wrong and the agent follows rules written for a different kind of project.
Choose the profile
Section titled “Choose the profile”| Repository | Profile |
|---|---|
| .NET application on Arc and Chronicle, with a React frontend | cratis/application/csharp |
| .NET application on Arc without Chronicle | cratis/application/arc-only |
| Application on the Kotlin clients | cratis/application/kotlin |
| Application on the TypeScript Chronicle client | cratis/application/typescript |
| A Cratis framework repository (library, kernel, client SDK) | cratis/engineering/<language>, for example cratis/engineering/csharp |
| Any repository with documentation | add cratis/documentation |
cratis/application composes every application language profile. Prefer the
language-specific one unless the repository really spans them.
Only a cratis/application* profile brings in the application rules: vertical
slices, model-bound commands and read models, the MVVM frontend. Only a
cratis/engineering* profile brings in the framework-contributor rules. The
product profiles, such as cratis/arc or cratis/chronicle, select skills for
that product but deliver neither rule set on their own.
The corpus’s .cratis/ai/manifest.json is the authoritative list of the
profiles, languages, and harnesses cratis ai install accepts. An unknown value
fails validation with the rejected value. Use the profile table above and the CLI reference to choose a supported selection.
Configure the repository
Section titled “Configure the repository”-
Run the installer. In a terminal it prompts for each choice:
Terminal window cratis ai install -
Or pass every selection, which is required in scripts, CI, and agent terminals:
Terminal window cratis ai install \--harnesses claude,cursor,opencode,pi \--profiles cratis/application/typescript \--languages typescript -
Review and commit
.cratis/ai.json:{"schemaVersion": "1.0","harnesses": ["claude", "cursor", "opencode", "pi"],"profiles": ["cratis/application/typescript"],"languages": ["typescript"]}
The CLI expands composed profiles, keeps the language-specific parts that match your languages, and installs the matching skills. Agents, prompts, and hooks are always installed. Rules are filtered by profile and by language.
Update or change a selection
Section titled “Update or change a selection”To change products, languages, or harnesses, run install again with the new
options. To pick up a newer corpus for the selection you already have, run:
cratis ai updateThe update adds newly selected content, removes Cratis-owned content that is no
longer selected, and reconnects the harness links. It stops before changing
anything if a managed file was edited locally. Review that edit before you use
cratis ai update --force.
Use a native plugin instead
Section titled “Use a native plugin instead”A native plugin is independent of the managed path. It suits one person using one harness. The Claude Code, Codex, GitHub Copilot, and Cursor plugins deliver every Cratis skill and do not read profiles. The Pi package does:
pi install -l npm:@cratis/pi@cratis/pi reads .cratis/ai.json when it exists and exposes the skills for
those profiles and languages; without it, the package exposes all skills.
Neither kind of plugin creates the shared .cratis/ai corpus, configures other
harnesses, or protects local edits.