grithdocs

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 basenameProfile
claude, claude-codeclaude-code
codexcodex
aideraider
goosegoose
copilot, copilot-clicopilot
cursor-agentcursor
clinecline
openclawopenclaw
anything elsegeneric

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:

terminal
$ grith exec --profile generic-cli -- ./our-house-agent

The eleven built-in profiles

ProfileFor
genericThe default. Any tool grith does not recognise.
generic-cliShell work by hand. Adds VS Code and GitHub destinations. Opt-in only - auto-detection never picks it.
grith-replgrith's own REPL. Not something you select.
claude-codeClaude Code.
codexOpenAI Codex CLI.
aiderAider.
gooseGoose.
copilotGitHub Copilot CLI.
cursorCursor CLI.
clineCline CLI.
openclawOpenClaw.

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 docker as 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. l at 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_roots and include_linked_worktrees in config.toml.
  • Pick a different built-in with --profile.

See also

Last updated: 2026-08-24Edit this page on GitHub →