Channels

A channel supplies work to an agent and returns the answer. A work queue and a NATS request subject are channels today; an HTTP listener or a caller in the same process would be channels 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 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 and Slack 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

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

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 covers the fisk serve command and the settings every channel shares
  • Queued jobs covers the asyncjobs channel: submitting work, reading answers, and its own configuration
  • Answering prompts covers taking prompts from other agents and streaming the run back to them
  • Slack covers answering people in a Slack workspace, where a thread is a conversation
  • Serving tools covers offering this agent’s tools to other agents without running an agent loop