Don’t stall the loop for a tool
Chat completions trained us
to wait. You send a prompt.
You block. A blob comes
back. Voice made the lie
obvious: eight seconds of
silence while a function
call returns feels like the
line went dead. The same
stall exists in every agent
UI that disables input until
the tool finishes. Live
systems keep one loop open.
Speech, barge-in, tool
start, tool result, and
cancel are events on that
loop. The model may talk
while work runs. The human
may talk over the model.
Neither waits for a form
submit.
Two harness pieces follow.
First, tools are not the
turn. Fire them, narrate
that you fired them, and
keep the socket readable.
Extended Thinking’s “Let me
check that…” is not
personality. It is a
liveness signal so the
human does not hang up.
Second, barge-in is
cancellation, not a queued
follow-up. If the human
says “not that repo” while
a clone is running, the
clone is the thing that
yields. A second
complete()
racing the first will apply
the correction to a world
that no longer matches.
Destructive work still
needs a gate, and the gate
should sit on the tool, not
in a paragraph of system
prompt. When MCP tools
carry
destructive_hint,
the harness can demand
approval without hoping the
model classifies its own
blast radius. Reviewer
stop: the loop stays
interruptible, background
work has a cancel path, and
anything marked destructive
cannot run on a shrug. Then
ship. “Make the voice sound
smarter” is how a live loop
turns back into a blocking
call with nicer vowels.
Checklist
-
Keep the socket readable
while tools run. Silence
is a failure mode.
-
Treat barge-in as cancel
or redirect, not a second
racing request.
-
Narrate tool start before
the result exists. Liveness
is a product feature.
-
Prove interrupt on a raw
live connection before
wrapping it.
-
Gate destructive tools
from metadata on the tool
object, not from vibes
in the prompt.
-
Reviewer stop: interrupt
works, cancel works,
destructive work asks.
Then ship.
This morning: pick one
agent path that blocks on a
tool. Let the user talk
while it runs. If they
interrupt, cancel the tool.
If the tool can delete,
read a hint on the tool
before you run it.