Profiles¶
Profiles let you configure different reviewer behavior for different agents. A profile targeting coder subagents can use a different model, scrutiny level, and tool visibility than the profile targeting the main orchestrator agent.
How profiles work¶
defaults and profiles accept the same configuration keys. Settings resolve in order: server defaults → defaults → first matching profile. Each layer deep-merges on top of the previous.
defaults:
model: gpt-5.4
api_key: your-provider-key
profile_id: general
profiles:
code-review:
agents: [coder, web-dev]
model: claude-sonnet-4-6
tools:
output_visible: [Read, Edit, Write]
write_review: [Edit, Write]
research:
agents: [orchestrator]
model: gemini-2.5-pro
The agents key¶
Each profile requires an agents list to activate. Without it, the profile does nothing.
The agents list contains agent names that this profile should match:
orchestrator— the main Claude Code agent (default name)- Any subagent name (e.g.,
coder,web-dev,research) - Any CLI agent name from
claude --agent <name>
First match wins — if an agent matches multiple profiles, only the first one applies.
agents in defaults vs. profiles¶
The agents key behaves differently in defaults and profiles:
In defaults: Controls which agents get reviewed when no profile matches them. Omit it to review all agents. List specific names to only review those agents by default.
In profiles: Controls which agents this profile applies to. Required for the profile to activate.
An agent not listed in defaults.agents can still be reviewed if a profile targets it. The agents key in defaults is a routing decision, not a gate.
What profiles can override¶
A profile can set any key that defaults accepts:
| Key | Effect |
|---|---|
model |
Different reviewer model |
api_key |
Different provider credentials |
profile_id |
Different server-side adversary profile |
system_prompt |
Completely custom reviewer prompt |
system_prompt_mode |
"replace" (default) or "append" |
scrutiny_level |
Different starting scrutiny (1–5) |
tools |
Different tool visibility and enforcement |
cycle |
Different context cycling thresholds |
include_claude_md |
Whether to forward CLAUDE.md to this reviewer |
web_search |
Whether this reviewer can use web search |
model_tuning |
Whether to apply provider-specific prompt adjustments |
Deep merge behavior¶
For nested dicts like tools and cycle, the merge is key-by-key. A profile that sets tools.output_visible doesn't erase defaults.tools.pre_review.
Exception: system_prompt does not merge. A profile's system_prompt replaces the system prompt entirely — it does not inherit from defaults.system_prompt. The system_prompt_mode key controls whether it replaces or appends to the server profile's prompt, not the defaults prompt.
Example: full profile¶
profiles:
bulk-processing:
agents: [file-processor]
model: gemini-2.5-flash
scrutiny_level: 2
tools:
review_exempt: [Read, Glob, Grep]
pre_review: [Bash]
write_review: [Edit, Write]
cycle:
threshold_pct: 0.15
This configures a lightweight reviewer for a file-processing subagent: fast model, low scrutiny, most read-only tools exempt from review, but shell commands and file writes still reviewed.