XII · Streaming & UXExperimental·

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.
  • complementsChannel-Decoupled Agent Core★★Put the agent's reasoning, tools, and session state behind channel-agnostic ports, and make each delivery surface (web, voice, email, Slack, background jobs) an adapter, so one core serves every channel.

Neighbourhood

Click any neighbour to follow the language. Scroll to zoom, drag to pan.