A cheap, cloneable on/off switch shared between the PlanModeHooks (read
from the run task) and the toggle that flips it (the actor, via
Agent::set_plan_mode). Default is off.
Enforced read-only (D1): while installed, refuse the workspace-mutating tools
and mutating bash/bg. A guardrail, NOT a sandbox (the same FP/FN budget as
plan mode’s bash gate — docs/plan-mode.md §2.4). Stateless: a unit struct.
ROOT-ONLY guard: refuses a bare sleep (a polling wait) issued by the
workflow orchestrator. A worker’s report lands as a Wake only once the
root ENDS its turn, so a sleep blocks the very message it is waiting for.
Mirrors BashRiskHooks — stateless, a unit struct is the whole type.
The workspace-mutating tools blocked in plan mode (D3). Read-only tools
(read/grep/find/ast_search/session_search) and the plan-recording
todo (and the team tools task/peers/message) are deliberately absent.