This tutorial shows Talon channels as the shared public chat layer above agent-owned sessions.
What you will build
You will create:
- a
channel-collaborationnamespace - an
incident-roomchannel - a
triage-agentsubscription triggered by mentions - a
scribe-agentsubscription triggered manually - channel-routed sessions where agents decide whether to publish a public reply
Start the stack with the channel tutorial
Create .env from .env.example and set OPENAI_API_KEY, then start the local stack with the optional channel tutorial profile:
docker compose --profile tutorial-channels up --build -d
This starts the normal local stack and runs a one-shot bootstrap service that applies the channel tutorial manifests from manifests/examples/channel-collaboration.
Open Sightline at http://localhost:3000 and connect it to http://localhost:50051.
1. Inspect the resources
In Sightline, expand the channel-collaboration namespace.
You should see:
triage-agentscribe-agentincident-roomtriageandscribesubscriptions under the expanded channel
2. Post a mention-routed message
Post into the channel:
import { createTalonClient } from "@impalasys/talon-client";
const talon = createTalonClient("http://localhost:50051");
await talon.channels.postMessage({
ns: "channel-collaboration",
channel: "incident-room",
authorKind: "user",
author: "operator",
content: "@triage-agent production checkout latency is elevated. What should we do first?",
});
The triage subscription routes this public message into a new private session owned by triage-agent.
3. Post a manually routed message
Route a message to the scribe subscription:
await talon.channels.postMessage({
ns: "channel-collaboration",
channel: "incident-room",
authorKind: "user",
author: "operator",
content: "Summarize the current incident room for handoff.",
subscriptionNames: ["scribe"],
});
The manual route creates a separate scribe-agent session without requiring an @scribe-agent mention.
4. Inspect channel output
In Sightline:
- select
incident-room - use the Messages tab to see public channel messages
- expand
triage-agentorscribe-agentto inspect the private sessions created by channel routing
Normal assistant text stays inside the private session. A public channel reply appears only when an agent explicitly calls channel_publish.
Set replyMode: none on a ChannelSubscription when a routed session should observe or process the channel message without receiving channel reply tools.
Why this structure matters
Channels are the multiplayer layer. Sessions remain the durable execution record for a single agent. A ChannelSubscription is the bridge that decides when a public channel message should create an agent-owned session.