Advanced Configuration
The AI Peon plugin provides advanced configuration options accessible via Window > Preferences > AI Peon > Peon Advanced Configuration.

Per-Agent Model Selection
Different agents can use different models to optimize for cost, speed, or capability:
| Agent | Purpose | Recommended Model Type |
|---|---|---|
| PO (Jon) | Coordinating the agent team and clarifying requirements | Strong conversational and reasoning models (e.g., Sonnet) |
| Dev (default) | Implementing the plan / code generation | Reasoning-capable models (e.g., Sonnet) |
| Plan | Creating task plans and strategies | Reasoning-capable models (e.g., Opus) |
| Review | Reviewing plan, code and docs (Da Dok) | Strong reasoning models (e.g., Opus) |
| Search | Finding relevant context and information | Fast, smaller models (e.g., Haiku) |
| Compact | Conversation compression for context management | Fast, smaller models (e.g., Haiku) |
How It Works
- The Dev agent is the default and has no section on this page: its complete settings — Provider Type, URL, API Key, Model, Think (Default), Temperature and Extra body (JSON) — live in the Default for all agents group on the main Peon Configuration page, which is the only editor of those settings. The Dev model is your primary coding model (the base model).
- Every slot on this page — PO, Plan, Review, Search and Compact — leaves its Model field empty to inherit the base model; pick a model from the dropdown (or type one) to override only that agent. Leave the slot's URL or API Key field empty to inherit it from the base configuration — those fields show only the agent's own override.
- The dropdown is filled from your provider's model list, fetched once per connection (the agent's effective URL/key). Click Refresh to reload the list — Refresh uses the values currently typed in the page's fields, no Apply needed (Apply/OK is what saves them). A failed refresh keeps the previous one. A model you have already configured stays in the field even if it is missing from the fetched list — typed models are never added to the dropdown.
Existing installations start with an empty PO slot, which inherits the base configuration. If Jon was previously controlled through the Plan slot, configure the PO slot once after upgrading. The Review slot is new: it used to share the Plan slot, so if the review agent ran on a model set in the Plan slot, copy those values into the Review slot once after upgrading — an empty Review slot inherits the base configuration, not the Plan one.
Temperature Settings
Every built-in agent — PO (Jon), Dev, Plan, Review, Search and Compact — has its own Temperature field. There is no shared default and no value is inherited between agents. The Dev agent's field lives on the main Peon Configuration page (Temperature in the Default for all agents group) — this page has no Dev section.
- Empty means unset: Peon omits
temperatureand lets the provider or model choose its default. This is important for GPT-5 and o-series models, which reject non-default temperature values. - Search and Compact now send nothing unless their own value is set (previously they implicitly sent
0.3and0.2). To keep the old values, enter them once in the corresponding fields. - Enter a number to send that value for this agent. The field is plain text so provider-specific values are not restricted to an artificial slider range.
- An invalid value is saved but ignored when requests are built; Peon logs a warning and omits
temperature. - A top-level
temperaturein Extra body (JSON) wins over the Temperature field and is sent only once.
Per-Agent Think
Thinking/reasoning is sent per request, so each agent resolves its own value for its provider and model. This solves mixed setups — for example planning with GPT (reasoning.effort=high) while implementing with DeepSeek through an OpenAI-compatible gateway that rejects reasoning.effort.
Every override agent on this page — PO (Jon), Plan, Review, Search and Compact — has its own Think field, and every custom agent sets the same via the think field in its AGENT.md frontmatter. The Dev agent is the default: its Think value is the Think (Default) field on the main Peon Configuration page.
The only inheritance is the default: an agent with an empty Think field inherits the Think (Default) value from the main Peon Configuration page. An agent's own value always wins — an explicit off included. Empty agent and empty default → unset, nothing is sent.
The Think field takes a single value whose form depends on the base provider:
| Provider | Think field | Values |
|---|---|---|
| OpenAI family | dropdown | high / medium / low / minimal (reasoning.effort) |
| Claude (Anthropic) | dropdown | enabled / adaptive (extended thinking) |
| Ollama | editable dropdown | empty / true / false — the think flag |
| LM Studio | free text | any value — sent as the custom reasoning body property |
- Empty — unset: nothing is sent and the model decides (for Ollama the
thinkfield is omitted entirely). - Off token (
false/off/no/nein/none, case-insensitive) — interpreted only by Ollama (sendsthink:false). On the string providers (OpenAI family, LM Studio) it is just a value and is sent verbatim (reasoning.effort=false,reasoning=off). On Anthropic it means off — nothing is sent. - Generic on (
true) — Anthropic: the built-in model mapping picks the concrete value for your model. OpenAI family and LM Studio: sent verbatim astrue. - Concrete value — used verbatim.
The Ollama checkbox is gone
The old on/off checkbox is replaced by the dropdown, and a previously off checkbox now reads as empty = unset — the model thinks by default again. To explicitly turn thinking off, select false.
Built-in model mapping
Only Anthropic still resolves the generic on (true) — using its built-in table (the thinking/ANTHROPIC resource under the core plugin):
opus-4-8/opus-4-7/mythos→adaptive; other Claude models →enabled.
Provider support:
- OpenAI family (OpenAI, OpenAI-official / Azure, GitHub Models, GitHub Copilot) —
reasoning.effort; empty = nothing sent, any other value is sent verbatim (incl.noneandfalse). - Ollama — the
thinkflag: off sendsthink:false, on sendsthink:true, unset omits. - Anthropic — extended thinking (
enabled/adaptive); off = nothing sent. - LM Studio — the custom
reasoningbody property. - Google Gemini / Mistral — no per-request think support; the Think field is hidden and no think value is sent.
Send thinking back
Resend model thinking (main Peon Configuration page) is a separate global transport switch. It is independent of the per-agent Think value.
Extra Body / Prompt Caching
Each agent's section has an Extra body (JSON) field: raw JSON merged into that agent's request body. The Dev agent's extra body lives on the main Peon Configuration page (Extra body (JSON) in the Default for all agents group); there the field is hidden when the base provider does not support an extra body — hidden ≠ deleted: the stored JSON survives the switch and is never removed by it. This is also where prompt caching is configured — Peon no longer enables caching by itself, so no cache is sent until you configure one (a deliberate clean break, no silent default, no migration).
Examples
Three paste-ready examples sit under the field (shown only for providers that support an extra body):
| Example | Body | Effect |
|---|---|---|
| GPT | {"prompt_cache_key": "llmpeon"} | Azure-OpenAI explicit prompt-caching key. On other OpenAI-compatible endpoints the top-level field is ignored (harmless). |
| Claude | {"cache_control": {"type": "ephemeral"}} | The ephemeral cache marker — effective for Claude behind OpenAI-compatible gateways (LiteLLM & co.) that forward the field. |
| llama.cpp | {"chat_template_kwargs": {"enable_thinking": false}} | Disables thinking/reasoning in llama.cpp models. |
GPT-5* agents get a default per-agent cache key peon-ai-<agent>; override it in the JSON body.
Click the example button to insert it into the field (it replaces the current content). Hover a button for a description. The body is sent per request for OpenAI-family providers and baked in at build time for Anthropic.
Cache hits are visible in the chat's token header: ↑ sent ↓ received ⇄ cache-read — the ⇄ counter accumulates tokens served from the prompt cache (cache writes are shown in the header's tooltip).
No cache by default
Since the clean break, the provider no longer injects cache_control (Claude) or the native Anthropic cache flags on its own. If you want prompt caching, paste the matching example for your provider.
Note for direct Anthropic API users: native system/tool caching (
cache_controlinside the system/tool blocks) is a build-time flag Peon no longer sets, and it cannot be re-enabled through the top-level extra body. Direct Claude API users therefore lose automatic prompt caching; thecache_controlexample works for Claude behind an OpenAI-compatible gateway instead.
Tool allowlist
Every agent slot on this page — PO (Jon), Plan, Review and Search — has a Tools field that restricts which tools that agent may call. The Dev agent's field is the Tools field in the Default for all agents group on the main Peon Configuration page, and the Compact slot deliberately has no field — it never calls tools.
The field is a comma-separated list of tool names or prefixes (matched with Java startsWith), using the same allowlist semantics as the custom agents' tools frontmatter — one mechanism for every agent type:
- Prefix /
*/ exact:eclipseenables everyeclipse*tool,*enables all, an exact name enables just that tool. A trailing*on any token is an optional wildcard suffix — the same meaning in allow and deny tokens:eclipse*≡eclipse(prefix match);*alone stays the All-Token. !negation (allow-then-deny): a!prefix removes tools after the allowlist is applied, and the exclusion always wins (eclipse, !eclipseWriteFilekeeps theeclipse*family except the write tool). A list of negations only means all tools minus the exclusions (!debugJava*= everything except the debug family).- Empty = all tools.
- Bare
!(no prefix) is a validation error: Peon refuses to save and leaves the field unchanged.
The field applies to all tools — built-in and MCP — and is the intersection with the agent's own class filter: the UI can only restrict, never add, so Review still cannot write even with *. Click Preview active tools… to see the exact read-only list of active tools for the value you have typed (no Apply needed) — built-in plus MCP names, already intersected with the class filter.
Debug Mode
When enabled, logs all requests and responses to the Eclipse console.
Use cases:
- Troubleshooting connection issues
- Understanding what context is being sent to the model
- Debugging prompt template issues if you create an issue
Query Parameters
Add custom query parameters to API requests (format: key=value,key2=value2):
Example: stream=false,timeout=30
Useful for:
- Provider-specific options not exposed in the UI
- Testing different API behaviors
- Adding custom headers through query strings
Header Parameters
Add custom HTTP headers to requests (format: key=value,key2=value2):
Example: X-Custom-Header=myvalue,Authorization=Bearer token123
Useful for:
- Custom authentication requirements
- Provider-specific features via headers
- Adding tracking or debugging information
Max Output Tokens
Controls the maximum number of tokens in model responses (0 = disable limit): langchain4j and some LLMs default to 1024 -- if you have odd behaviors increase this.
| Setting | Effect |
|---|---|
| Low values (1024) | Short, concise responses; faster generation - may break |
| Recommended low (2048) | Have a short value, limits also the think budget where possible |
| Default nowerdays (4000) | Usually a a good default or with Opus around 8.000 |
| Disabled (0) | Provider's default limit applies - often around 2.048 |
Troubleshooting
Models Not Being Used by Agents
Restart Eclipse after changing preferences
