Channels

A channel supplies work to an agent and returns the answer. A work queue, a NATS request subject and an HTTP listener are channels today; a caller in the same process would be a channel too.

The fisk serve command hosts an agent behind the channels. The queued-jobs channel polls a work queue. The prompts channel answers a request on a NATS subject. The Slack channel answers people who mention a bot in a thread. The web channel answers a browser over HTTP. The agent loop is the same in each case and does not see the difference.

fisk serve also hosts endpoints that produce no work. Serving tools answers another agent’s tool call directly, running one tool. It starts no agent loop, so the behavior on this page does not apply to it.

Note

Queued jobs, prompts from other agents, Slack and the web listener are the channels that ship today.

Channels and fisk serve are available since Version0.0.5.

Channel capabilities

Channels differ in what they can offer a run:

CapabilityDescription
Streamingwhether a caller sees output as it is produced
Elicitationwhether a run can ask a person a question mid-run
Follow-up turnswhether a conversation continues after the first answer
Caller identitywhat the channel reports about the caller

What each shipped channel offers:

ChannelStreamingElicitationFollow-up turnsCaller identity
Queued jobsnononounverified sender field
a2a promptsyesoptionalyesunverified sender field
Slacknoyesyesthe Slack user who spoke
Webyesyesyesnobody is authenticated

No caller waits for a queued job, so that channel does not stream output and does not take a second turn.

A web turn ends on any question it asks, since the page that would answer is reading the response. The answer arrives on the page’s next request.

The prompts channel sends output to the caller as the worker produces it. It returns a conversation token with every prompt it accepts. Send that token on a later request to continue the conversation.

To let a run ask the caller a question, set expose.agent.a2a.prompts.elicit. Leave it unset and the agent asks nobody.

Confirmation-gated tools

An agent with nobody to ask still offers every tool to the model, including the confirmation-gated ones. The model can call one. The confirm gate then refuses the call and tells the model why.

Where to go next

  • Serving: the serve command and the settings every channel shares
  • Queued jobs: take whole units of work from a Choria work queue
  • Slack: answer people in a Slack workspace, one thread being one conversation
  • Web: answer a browser over HTTP, one thread being one conversation
  • Serving tools: serve this agent's tools to other agents over NATS
  • Answering prompts: take prompts from other agents and stream the run back to them