Bidirectional Impulse Channel
also known as Two-Way Chat, User-and-Agent-Initiated Communication
Let the user inject impulses into the agent and let the agent push messages to the user, both through one channel.
Context
A team is running an agent that does not sit idle between user turns. It might be a personal assistant running a continuous reasoning loop, a monitoring agent watching a system, or any process that has internal activity the user would sometimes want to interrupt or hear about. The user is at a chat or command-line surface, occasionally typing, occasionally absent for hours.
Problem
A pure request-and-response chat interface fits this poorly: the agent has nothing to say when nothing is asked, and the user has no way to inject a correction without phrasing it as a new question for the model to interpret. A pure notification firehose in the other direction is worse, because it trains the user to mute the channel within a day. The team has to choose between an agent that goes silent until prompted and an agent that becomes background noise, with no obvious middle ground.
Forces
- Push hygiene: too many messages train users to ignore the channel.
- Inverse: starvation when the agent waits forever.
- Authority: not every user-typed line should be a command.
Example
A user has asked their personal agent to monitor a slow scientific computation overnight and 'tell me when it's interesting'. Pure request/response would force the user to keep polling; pure push notifications wake them for trivia. They build a bidirectional impulse channel: the agent can send messages at any time, but the user can also reach in mid-run with 'stop watching the temperature, watch the residual'. The agent picks up the impulse on its next tick and changes what it pushes.
Diagram
Solution
Therefore:
A single CLI/chat surface where the user can send sigil-prefixed commands (e.g. `!<verb> ...`) that bypass the model and write directly to memory, while the agent can push messages when salience clears a threshold (insight, stuck focus, contradiction, goal complete). Hygiene rule: at most one unsolicited message per window.
What this pattern forbids. The agent may push at most one unsolicited message per window; user commands beginning with `!` bypass the model entirely.
The smaller patterns that complete this one —
- usesSalience-Triggered Output·— Have the agent emit a message only when an internal salience signal crosses a threshold, not on every cycle.
And the patterns that stand alongside it, or against it —
- complementsStreaming Typed Events★★— Push partial results to the client as typed events as they become available, rather than waiting for the full response.
- complementsEmbodied-Proxy Handoff·— Enable the human to share embodied state (energy, fatigue, environment) so the agent tailors response shape to the actual person rather than to a context-free abstract user.
Neighbourhood
Click any neighbour to follow the language. Scroll to zoom, drag to pan.