[FEATURE] Per-activity effort configuration (conversation vs explore vs plan vs code)
Preflight Checklist
- [x] I have searched existing requests and this feature hasn't been requested yet
- [x] This is a single feature request (not multiple features)
Problem Statement
Not a duplicate of #31579 / #50323 — both key configuration to permission mode. That doesn't solve this. Conversational turns, codebase exploration, and code generation all happen inside default mode, so a per-mode setting can't distinguish them. Setting default to low makes my codegen cheap and bad; setting it to high makes "what does this function do?" cost a fortune.
It is not only about rates. A big budget on a cheap turn actively makes the answer worse: ask a model like Opus "what does this function do?" at high effort and it reasons its way into caveats, alternatives and adjacent refactors I did not ask for, and the one-line answer I wanted ends up buried in the middle of it. Low effort on conversational turns is a quality setting as much as a cost one — a short question should get a short, direct answer, and the effort dial is what decides whether it does.
Why it matters: the largest share of my turns are cheap ones — questions, greps, "where is X". Those don't need the same budget as writing a migration. Right now there's one dial for both, so every session is a compromise between cost and clarity on the cheap turns and quality on the expensive ones.
Proposed Solution
Allow effort to be set per activity type in settings.json, independent of permission mode:
{
"effortByActivity": {
"conversation": "low",
"explore": "low",
"plan": "xhigh",
"code": "high"
}
}
Unset keys fall back to the session effort, so this is additive and the current behaviour is the default.
Why this shape: the model is already classifying turns implicitly — adaptive effort means it decides per step how much work a request warrants. This asks to make that classification configurable rather than opaque, which is also the honest version of what auto does today without telling you.
Alternative Solutions
The subagent workaround doesn't cover it: effort in subagent frontmatter pins execution, but a subagent runs in isolated context and returns a summary. That's fine for self-contained implementation, wrong for planning, where I need the reasoning visible to intervene. And it does nothing for the main session's conversational turns, which is where most of the waste is.
Priority
Medium - Would be very helpful
Feature Category
Configuration and settings
Use Case Example
Example scenario — one session, one repo, and the permission mode never changes from default:
- I open a session on a service I do not know well and ask "where does the retry logic live?" and "what does
reconcileLedgeractually do?" A few greps and a couple of file reads. Cheap turns. - I ask for a plan to move that retry logic behind a queue. This is the turn I want thought through — I read the reasoning and push back on it before any code exists.
- I approve the plan and have it implemented: a migration, a new worker, tests.
- While that runs I ask two more orientation questions in the same session.
Today steps 1 and 4 get whatever budget I picked for steps 2 and 3, because nothing about the mode changed between them. With effortByActivity, steps 1 and 4 run at low, step 2 at xhigh, step 3 at high — I stop paying planning rates to be told where a file is, and step 1 gives me the one-line answer instead of three paragraphs built around it.
Additional Context
_No response_