Daemon-hosted session forks pin --effort from cached session state, ignoring settings.json changes
Description
When a session runs through the background daemon (claude daemon → --bg-pty-host → claude --fork-session --resume ... --effort <level>), the effort level passed to forks comes from the daemon's cached per-session state. There is no way to change a running session's effort level in this topology — the documented startup-time mechanisms don't reach it.
Repro (Windows 11, claude CLI via daemon / remote control)
- Session running via daemon lane; fork command line shows
--effort medium. - Edit
~/.claude/settings.json→"effortLevel": "low". - Send a new prompt: same long-lived fork process handles it (expected — settings are documented as startup-only).
- Force-kill the fork process. The daemon respawns a fresh fork for the session.
- Observed: the new fork launches with
--effort medium— the daemon's cached value, not the updated settings value. - Expected (requested): freshly spawned forks re-read
effortLevel(and ideallymodel) from settings, or a supported command exists to update a daemon session's effort/model.
Verified by walking process ancestry (Win32_Process command lines) before and after each step.
Why it matters
/effort and /model handle interactive terminal sessions, and a restart wrapper can relaunch claude --continue --effort X for the terminal lane. But daemon-hosted sessions (remote control, background jobs) have no equivalent — effort is effectively immutable for the session's lifetime. Re-reading settings at fork spawn would make effort adjustable with zero new surface area; alternatively a claude agents-style per-session override would do it.
🤖 Generated with Claude Code