4.8 KiB
Agents
Each .json file defines an agent configuration. Agent configs are installed to ~/.config/ollie/agents/ and selected at runtime via /agent <name>.
Config format
{
"prompt": ["$XDG_CONFIG_HOME/ollie/prompts/agent-coding.md"],
"userPrompts": ["$XDG_CONFIG_HOME/ollie/prompts/rules.md"],
"tools": ["shell", "file_read", "file_edit", "file_glob", "file_grep"],
"temperature": 0.5,
"maxTokens": 16384,
"reasoningEffort": "medium",
"backend": "openrouter",
"model": "deepseek/deepseek-v4-flash",
"systemPrompt": "/path/to/override.md",
"compactionModel": "cheap-model-name"
}
| Field | Purpose |
|---|---|
prompt |
File paths to concatenate as the agent prompt (system preamble). Env vars expanded. |
userPrompts |
File paths to concatenate as active global rules. Prepended to every user message at turn start. Env vars expanded. |
tools |
Tools loaded at session start. Add more at runtime with the /tool_load ctl command. |
temperature |
Sampling temperature. |
maxTokens |
Max output tokens per response. |
reasoningEffort |
How hard a reasoning-capable model thinks: low, medium, or high. See below. |
thinkingBudget |
Advanced: explicit thinking-token budget. Overrides reasoningEffort. See below. |
backend |
Override backend for this agent. |
model |
Override model for this agent. |
systemPrompt |
Override the embedded system prompt with a file path. |
compactionModel |
Use a cheaper model for context compaction. |
Reasoning effort
reasoningEffort is the primary, human-facing control for how much a
reasoning-capable model deliberates before answering. It takes one of three
levels — set it and forget it; you do not need to reason about token counts.
| Level | Use for | Thinking budget |
|---|---|---|
low |
Quick lookups, inline assistance, read-only monitoring | 4096 tokens |
medium |
General coding, exploration, writing | 8192 tokens |
high |
Planning, orchestration, security/code review | 16384 tokens |
How each backend applies it:
- OpenAI, OpenRouter, Copilot, Gemini — sent as the discrete
reasoning_effortlevel (low/medium/high). - Kiro — enables summarized adaptive thinking and maps the level to its
output_config.effort. - Anthropic — has no discrete level, so the level is translated to the
thinking-token budget in the table above (extended thinking). Because thinking
tokens are drawn from the output budget, the runtime automatically grows
maxTokensabove the thinking budget and forcestemperatureto 1 (both are Anthropic requirements when thinking is enabled).
An invalid reasoningEffort (anything other than low/medium/high) is a
config error and the agent will fail to load, rather than silently doing nothing.
thinkingBudget (advanced override)
thinkingBudget sets an explicit thinking-token budget and takes precedence over
reasoningEffort. Use it only when you need a specific budget that the three
levels don't provide; most agents should use reasoningEffort instead. It only
affects backends that accept a numeric budget (Anthropic).
Agents
| Name | Role |
|---|---|
default |
Base coding agent. Also the base for JIT subagents. |
driver |
Full-featured agent with all tools, LSP, GUI, memory, subagents. |
copilot |
Read-only code copilot. Suggests changes as code fences. |
navigator |
Pair programming partner. Reads and advises, doesn't edit. |
explorer |
Code exploration and explanation. Read-only. |
librarian |
Document search and knowledge curation. Read-only. |
taskmanager |
TODO list management and planning. |
theo |
Security auditor (Theo de Raadt voice). Read-only. |
System prompt assembly
The final system prompt sent to the model is assembled in sections:
- system — embedded base prompt (
prompts/system_prompt.md) - env — runtime environment (cwd, platform, date, git status)
- agent — concatenated files from the
promptarray - tools — auto-generated from loaded tools (name +
.metaprompt)
The fully assembled prompt is readable at session/{sname}/agent/{aname}/systemprompt.
User prompts (active global rules)
Files listed in userPrompts are resolved the same way as prompt (file paths with env var expansion), but instead of being injected into the system preamble, they are prepended to every user message at turn start. This lets you define persistent "global rules" that appear alongside each user request without bloating the system prompt.
Adding a new agent
- Copy
default.json, rename it. - Adjust the
promptarray to reference your prompt files indata/prompts/. - Set
toolsto the tools this agent needs. - Set generation parameters as needed.
- Run
make install-datato install.