A message written to the CLI's inbox socket while the session sits in a Stop hook is accepted and dropped (verified: delivered while idle on a Monitor, lost during a guard hold). So the guard now keeps logs/<sid>.hold for the hold's duration; /message checks it first and, when present, leaves the text in logs/<sid>.inbox/ (delivered: "hold"); the hook polls that mailbox every poll, ends the hold at once and relays the text in its block reason between <<<USER MESSAGE>>> fences, saying what is still running and to end the turn again so the hold resumes. The viewer shows the guard's plain feedback as a compact "held" tag (ThreadItem kind "held", amber, the hold spelled out in the label) and a relayed message as the user's own turn. Guard lines go to logs/<sid>.guard.log next to the run log (a hook's stderr never reaches it); STOP_GUARD_STATE_DIR = LOG_DIR in the run env. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
359 KiB
359 KiB