{"version":"2.1.200","anchor":"observer-agents-gradual-rollout","canonical_anchor":"observer-agents-gradual-rollout","heading":"Observer Agents [Gradual Rollout]","tier":null,"area":null,"scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.200\/e\/observer-agents-gradual-rollout","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.200","markdown":"### Observer Agents [Gradual Rollout]\n\n**What**\n\nA background observer agent can now be paired with any running subagent. The observer receives read-only activity digests of the observed agent's turns and can report back via the new `ObserverReport` tool. It never participates in the task directly \u2014 its only output channel is the report tool.\n\n**Details**\n\n- Declared in an agent definition with two new fields: `observer` (the agent type to spawn as observer) and `observerMessage` (supplemental postamble to append to each digest)\n- The observer receives digests wrapped in `<agentName-activity>` tags after each of the observed agent's turns\n- Observers report via `ObserverReport` with a concise message; the observed agent receives it as a one-way meta message\n- The system enforces no chaining: an observer cannot itself declare an observer\n- Observer agents start fresh mid-task if their context is lost (with a note indicating the restart)\n- Controlled by three gates: `CLAUDE_CODE_EXPERIMENTAL_OBSERVER_AGENTS` env var, `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` env var (disables), and `tengu_observer_agents_enabled` feature flag (default true)\n- Permission gate runs at arm time and on each delivery \u2014 if denied, the pairing is retired\n\n**Status**\n\nFeature-flagged \u2014 requires `CLAUDE_CODE_EXPERIMENTAL_OBSERVER_AGENTS=1` to enable.\n\n**Evidence**\n\nObserver spawn system (search for `\"[agentObserver] arm-time permission denied\"`, `\"observer-gate-\"`, `\"ObserverReport\"`) \u2014 `fWn()` at ~line 351131 checks all three gates\n\n- Flag `tengu_observer_agents_enabled`: Not enough to say (read for one account on one subscription tier against v2.1.200; this account: no value returned, anonymous baseline: no value returned, compiled default: on) These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release."}