What problem does it solve? Adding a tool that must wait for a human answer (approval, intercom, ask) before the model can continue requires a full round-trip pattern: an event out, a command back, and a Notify to wake the awaiting future. Without guidance, developers wire only half the pattern and the tool silently returns an error string instead of blocking, or the session wedges after a restart. ## Core Features & Use Cases - Five-piece blocking pattern: Pending struct with State map, event/command protocol pair, async request function with tokio::select on notify vs cancel, command handler, and tool-loop dispatch in run_turn. - Frontend wiring for TUI and web: Priority key handlers and modal rendering in the TUI, CoreEvent/CoreCommand union cases and reducer state in the web app, with field-name matching rules to avoid silent hangs. - Restart-resume correctness: Detects trailing unanswered tool_calls after a core restart and re-presents the prompt or synthesizes a result so sessions never wedge. - Use Case: You want to add a new confirmation tool that asks the user before deleting files. Follow the pattern to add the pending state, emit the request event, handle the reply command, and wire the TUI and web prompts. ## Quick Start Add a new blocking tool to the core that asks the user for confirmation and waits for their reply before continuing the agent loop.