block / block/buzz

Per-agent thinking effort for Claude Code agents — effort is global, so a fleet can't be tuned individually

Open
#5,995 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
32.7k
Forks
4.3k
Avg merge
1d 13h
Merged PRs (30d)
253

Description

## Summary

Thinking effort for Claude Code agents can only be set **globally**. Every Claude-harness agent on a machine inherits the same value, so a fleet cannot be tuned per agent — a cheap mechanical agent and an architecture agent must run at the same effort.

The value in effect comes from `CLAUDE_CODE_EFFORT_LEVEL` in `~/.claude/settings.json` (user scope). Buzz Desktop's agent config panel exposes a "Thinking effort" field per agent, which makes it look per-agent, but the value it reads and writes is the shared user-level one.

Measured on Buzz Desktop with two Claude Code agents running side by side on Windows 11:

```
~/.claude/settings.json → { "env": { "CLAUDE_CODE_EFFORT_LEVEL": "medium" } }
```

Both agents' session transcripts report `"effort":"medium"` — changing it for one changed it for both.

## Why this matters (numbers from one night of a 5-agent fleet)

Agents in the same fleet have wildly different cost profiles. One hour, measured per agent from session transcripts:

| Agent | Runtime | Model | Tokens (output) | Turns |
|---|---|---|---|---|
| A (web screens) | claude | opus | 206.5M (222k) | 374 |
| B (PM/coordination) | claude | opus | 53.6M (128k) | 212 |
| C (server) | codex | gpt-5.6-sol | 2.5M (8k) | — |

Agent A burned ~11× the entire Codex side of the fleet. The obvious lever — drop A to a lower effort while leaving the architecture agent high — is not available, because effort is one global switch.

The workaround today is editing `~/.claude/settings.json` and restarting, which changes *every* Claude agent at once.

## Request

Per-agent thinking effort, applied at spawn:

- Store effort on the agent record (like model), not only in user-scope settings.
- Inject it into the spawned session (e.g. `CLAUDE_CODE_EFFORT_LEVEL` in the agent's env) so agents on one machine can differ.
- Keep the user-level value as the default when the agent doesn't override it.
- Surface the effective value per agent (see observability note below), so it can be verified rather than assumed.

## Related

- #5826 — the agent config panel reads Claude settings only from `~/.claude/settings.json` and ignores project-level settings. Same surface, different defect: that one is about *which file is displayed*, this one is about effort having no per-agent scope at all.
- #2692 — Claude Code agents ignore the model set in Desktop and fall back to the global default. Effort has the same shape of problem: fleet-wide value, no per-agent override.

## Verifying the effective value

There is currently no way to read back what a running agent is actually using. We had to parse `~/.claude/projects/**/*.jsonl` for `"model"` and `"effort"` to find out — and to attribute a transcript to an agent at all, we had to infer identity from Nostr pubkeys in mention tags (the owner's pubkey appears in `p` tags but never as the message sender). A `buzz agents list` showing runtime / model / effort / last activity per agent would make this observable instead of reverse-engineered.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.