Channels and routing
Fased routes replies back to the surface that produced the inbound message. The model does not choose a channel. Routing is deterministic and comes from host configuration, peer bindings, and session-key rules. For normal setup, open Agents, select the Agent, then use Agent > Channels. That page writes the common channel account and route settings for the selected Agent. Advancedbindings remain available for multi-Agent or
role/peer-specific routing.
Key terms
- channel
whatsapp,telegram,discord,slack,signal,imessage,webchat, and plugin channels
- accountId
- a channel-specific account instance when the provider supports it
- agentId
- the selected agent workspace and session store
- sessionKey
- the concurrency and context bucket for the conversation
Session-key shapes
Direct messages usually collapse into the agent’s main session:agent:<agentId>:<mainKey>- default example:
agent:main:main
- groups:
agent:<agentId>:<channel>:group:<id> - channels or rooms:
agent:<agentId>:<channel>:channel:<id>
- Slack and Discord:
:thread:<threadId> - Telegram forum topics:
:topic:<topicId>
agent:main:telegram:group:-1001234567890:topic:42agent:main:discord:channel:123456:thread:987654
How agent selection works
Routing chooses one agent for each inbound message. Matching order:- exact peer match from
bindings - parent peer match for thread inheritance
- Discord guild + roles match
- Discord guild match
- Slack team match
- account match
- channel match
- default agent
- workspace
- session store
- tools and policy
- model defaults
Broadcast groups
Broadcast groups are the exception to the one-agent rule. They let multiple agents run for the same eligible inbound message. Example:Config overview
Main pieces:agents.listbindingsbroadcast
bindings only when you need matching by peer, account, team, guild, role, or
thread inheritance.
Example:
Session storage
By default, session state lives under:~/.fased/agents/<agentId>/sessions/sessions.json
session.store and {agentId} templating.
WebChat behavior
WebChat attaches to a selected agent and usually uses that agent’s main session. That makes it useful as a unified operator view into an agent that may also be talking on other channels. WebChat can also create named local sessions and schedule tasks with Schedule this. Those tasks use the same scheduler-backed records as/task new
from Telegram/Discord/etc.
Channel command controls
Channel chats can switch Agents, create named sessions, and create/cancel tasks without giving the Channel ownership over those objects:/task list is a compact operational view: plan, delivery target, next run,
and last result. /task show <id> expands the task policy, budget, delivery,
run counters, and evaluator state. /task run <id> now returns the immediate
run outcome and points to /task show for details. /task resume <id> re-runs
preflight; if a required API key, provider, channel, wallet policy, or skill
setup is still missing, the task stays blocked and the reply shows the setup
target.
For cheap-first task wording, Fased stores a planner/evaluator policy and
injects the human-readable escalation cue itself. Users should describe the
desired behavior in normal language; raw model, memory, skill, budget, and stop
flags remain available for advanced control.
Reply context
When the provider supports it, inbound messages can include:ReplyToIdReplyToBodyReplyToSender