Skip to content

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.

RepositoryProfile
.NET application on Arc and Chronicle, with a React frontendcratis/application/csharp
.NET application on Arc without Chroniclecratis/application/arc-only
Application on the Kotlin clientscratis/application/kotlin
Application on the TypeScript Chronicle clientcratis/application/typescript
A Cratis framework repository (library, kernel, client SDK)cratis/engineering/<language>, for example cratis/engineering/csharp
Any repository with documentationadd 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.

  1. Run the installer. In a terminal it prompts for each choice:

    Terminal window
    cratis ai install
  2. 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
  3. 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.

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:

Terminal window
cratis ai update

The 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.

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:

Terminal window
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.