Choose your agent
grith picks a supervisor profile from the command name. Here is the table it uses, the eleven built-in profiles, and what a profile changes.
You usually do not choose. grith exec matches the basename of the command you asked it
to supervise against a fixed table and picks the profile itself.
| Command basename | Profile |
|---|---|
claude, claude-code | claude-code |
codex | codex |
aider | aider |
goose | goose |
copilot, copilot-cli | copilot |
cursor-agent | cursor |
cline | cline |
openclaw | openclaw |
| anything else | generic |
Basename only. No config sniffing, no version detection, no fuzzy matching. Note that the
cursor profile is selected by cursor-agent, which is what the Cursor CLI is called on
disk.
To override, pass --profile:
$ grith exec --profile generic-cli -- ./our-house-agentThe eleven built-in profiles
| Profile | For |
|---|---|
generic | The default. Any tool grith does not recognise. |
generic-cli | Shell work by hand. Adds VS Code and GitHub destinations. Opt-in only - auto-detection never picks it. |
grith-repl | grith's own REPL. Not something you select. |
claude-code | Claude Code. |
codex | OpenAI Codex CLI. |
aider | Aider. |
goose | Goose. |
copilot | GitHub Copilot CLI. |
cursor | Cursor CLI. |
cline | Cline CLI. |
openclaw | OpenClaw. |
They are compiled into the binary. There is no profiles file to edit and no
~/.config/grith/profiles.toml.
ℹ️Some profiles disable the tool's own sandbox
claude-code, codex and cursor launch their tool with its inner sandbox turned off, on
purpose: two nested supervisors fight over ptrace, and the answer is one boundary, not two. grith
is that boundary.
What a profile changes
A profile is a list of routine paths, commands, network destinations and executable roots. At session start grith turns that list into a session allowlist. A call that matches it is allowed immediately: no filters run, no score is computed, and the proxy is never invoked. Everything else goes through the full pipeline.
Two things a profile deliberately cannot do:
- It is ignored under containment. Once a session is contained, the allowlist is not consulted at all, including the profile's trusted destinations.
- It cannot wave through a spawn that hands authority away. Listing
dockeras a routine command does not bypass authority-delegating spawn enforcement.
Do not read generic as "trusts nothing". Every profile inherits a shared defaults block,
so even generic carries 34 routine paths and 64 routine commands - shells, git, the
usual inspection and text tools, and the toolchain scratch directories under /tmp that
would otherwise generate a prompt per build.
You cannot write a profile
There is no profile authoring surface on v0.3.1 - no user profiles file, no
grith profile create, no dashboard editor. What you have instead:
- Answer prompts.
lat a prompt saves a permanent rule for that exact target, scoped to the profile you were running. - Widen the project boundary with
supervisor.trust.additional_project_rootsandinclude_linked_worktreesinconfig.toml. - Pick a different built-in with
--profile.
See also
- How profiles work - merge order, and the exact matching rules.
- Built-in profiles - what each profile carries.
- Workspace boundary - fencing a session to its project.