The complete .crabd.yml schema. Every field is optional, omitting anything will cause crab’d to use the built-in
default. For how these values combine across the org repo, the repo file, CI inputs, and env, see
Configuration.
| Field |
Type |
Default |
Description |
version |
1 |
1 |
Config schema version. |
model |
string |
anthropic/claude-sonnet-5 |
Default model specifier, <provider>/<model>. Its provider must be allowlisted. |
trigger_phrase |
string |
/crabd |
The mention phrase that triggers crab’d. |
thinking_level |
'off' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' |
medium |
Reasoning effort. |
providers |
object |
— |
Provider allowlist, gateway, and custom providers. See below. |
permissions |
object |
— |
Who may trigger crab’d. See below. |
review |
object |
— |
Review-mode behavior. See below. |
web_search |
object |
— |
Web research tools for the agent. See below. |
prompt |
object |
— |
Prompt customization. See below. |
limits |
object |
— |
Run limits. See below. |
modes |
map<string, Mode> |
built-ins enabled |
Per-mode configuration. See below. |
mcp |
McpServer[] |
[] |
Remote MCP servers whose tools the agent may call. Reconciled by name across layers. See below. |
governance |
object |
— |
Org config repo only. Locking and override allowlist. See below. |
| Field |
Type |
Default |
Description |
allowlist |
string[] |
[] |
Provider IDs crab’d may use. Empty means allow any provider (zero-config default). Set it — and lock it at the org level — to restrict egress; then a model or custom provider must be listed to be usable. |
gateway_url |
string | null |
null |
Org egress gateway. When set, each allowlisted built-in provider is routed through ${gateway_url}/<provider>, keeping its normal credentials. |
custom |
CustomProvider[] |
[] |
User-defined providers. Reconciled by id across layers — repos reuse org entries and add/override their own. |
| Field |
Type |
Default |
Description |
id |
string |
— |
Provider ID used in model specifiers (e.g. my-llm in my-llm/model). |
base_url |
string |
— |
Endpoint root, e.g. https://llm.internal/v1. |
api |
string |
openai-completions |
Wire-protocol slug. |
api_key_env |
string |
— |
Env var whose value is used as the API key. |
| Field |
Type |
Default |
Description |
allowed_associations |
string[] |
[OWNER, MEMBER, COLLABORATOR] |
Author-associations allowed to trigger crab’d. Bots are always denied. |
| Field |
Type |
Default |
Description |
comment_only |
boolean |
false |
When true, crab’d posts every review as a plain comment. It never formally approves or requests changes, so it can’t approve or block a PR. The verdict is still computed and shown in the summary. |
The review verdict maps to a plain-language line in the summary (and, unless comment_only, to the
forge review action):
| Summary says |
Forge review |
| Good to merge (LGTM) |
Approve |
| Nits found |
Comment |
| Please address the findings before merging |
Request changes |
Gives the agent web_search and fetch_url tools so it can research current information (library
versions, changelogs, APIs, issues) instead of relying on stale training data.
| Field |
Type |
Default |
Description |
enabled |
boolean |
true |
Whether the agent gets the web tools. |
max_results |
number |
5 |
Max results per search. |
Search uses Tavily when TAVILY_API_KEY is set (recommended, reliable), and
falls back to a best-effort keyless DuckDuckGo search otherwise. fetch_url needs no key.
| Field |
Type |
Default |
Description |
instructions |
string |
'' |
Extra instructions appended to the base prompt. Accumulates across all layers. |
allow_full_override |
boolean |
false |
Repo opt-in to replace the base prompt. Only effective if the org allowlists this repo via governance.full_override_repos. |
override |
string |
— |
The replacement system prompt used when full override is permitted. |
| Field |
Type |
Default |
Description |
max_turns |
number |
40 |
Hard ceiling on tool-calling turns — the run is aborted if it’s exceeded. Not injected into the prompt, so it doesn’t bias the model into finishing early. |
timeout_minutes |
number |
— |
Hard wall-clock limit, enforced via the agent’s durability timeout. |
Keys are mode names. Built-ins: mention, review, implement. Add your own via
crabd.config.ts.
| Field |
Type |
Default |
Description |
enabled |
boolean |
true |
Whether this mode may run. |
model |
string |
inherits model |
Per-mode model override (allowlist-gated). |
instructions |
string |
'' |
Per-mode instructions appended to the prompt. Accumulates across layers. |
thinking_level |
same as top-level |
inherits |
Per-mode reasoning override. |
tools |
string[] |
per built-in |
Forge operations the mode uses (comment, commit, review, open_pr). Replaced by the highest layer. |
Built-in defaults: mention → [comment, commit], review → [comment, review], implement →
[comment, commit, open_pr].
| Field |
Type |
Default |
Description |
name |
string |
— |
Server name; tools are exposed as mcp__<name>__<tool>. |
url |
string |
— |
MCP server endpoint. |
transport |
'streamable-http' | 'sse' |
streamable-http |
Remote transport. |
headers |
map<string, string> |
— |
Headers sent to the MCP server. |
Only meaningful in the org config repo’s .crabd.yml.
| Field |
Type |
Default |
Description |
locked |
string[] |
[] |
Dot-paths (e.g. providers.allowlist) that lower layers cannot override. |
full_override_repos |
string[] |
[] |
Repo slugs (owner/repo) permitted to use full prompt override. |