Your Own Profiles
Put profiles in ~/.config/caretz/config.json or .caretz/config.json. Every
profile inherits general, so you list only what changes:
{
"profile": "coding",
"profiles": {
"general": {
"output": {"mode": "compact"},
"tasks": {"enabled": true}
},
"coding": {
"skills": ["go-development"],
"agents": ["reviewer"]
}
}
}
There is no extends chain. Omitted fields inherit, an empty list clears an
inherited list, and ["*"] selects all available resources.
Example: Lean by Default
{
"profile": "simple",
"profiles": {
"simple": {
"systemPrompt": "You are a coding assistant.",
"disabledTools": ["CallSubagent"],
"skills": ["*"],
"agents": [],
"sandbox": {
"sessionExec": true,
"allowDocker": true,
"env": ["GOPROXY", "GOFLAGS=-mod=readonly"]
}
}
}
}
The simple profile removes both the agent catalog and the CallSubagent tool
while retaining every discovered skill. Switch to --profile ops for one
process when you need infrastructure access.
Settings and Precedence
Operational settings belong under a profile: systemPrompt, tools,
disabledTools, toolConfig, skills, agents, sandbox,
execution.docker, tasks, goal, schedules
,
output, plan, incognito, request, and modelDiscovery. Legacy root-level sandbox, execution, tools, tasks,
and output are rejected with a migration message.
Profile resolution is deliberately interleaved:
- Built-in
general, then the selected built-in profile. - Home
general, then the selected home profile. - Project
general, then the selected project profile. - Environment variables.
- Explicit CLI arguments.
Every explicit CLI argument wins, including false booleans such as
--plan=false. Tool policy flags (--tools and --disable-tool) replace their
configured lists. Grant flags (--read-root, --writable-root,
--network-allow, and --sandbox-env) append to the resolved profile lists, which makes one-off
access convenient without repeating profile defaults. A scalar flag changes
only its corresponding field.