Inbound chat
Inbound chat lets an external integration (today primarily Slack) drive Toby turns without you typing in the Mac app—for example when someone @mentions the bot in a channel.
Settings live under Toby.app → Settings → Chat (inbound / daemon chat).
Global settings#
| Setting | Purpose |
|---|---|
| Enable inbound chat | Master switch. Off by default. |
| Active integration | Which connected integration owns inbound (for example Slack), or None |
| Persona for inbound turns | Persona used for headless turns, or (default) for your default persona |
These values are stored in ~/.toby/config.json under chatInbound.*.
The background service must be running (Toby.app normally keeps it up). Inbound status also appears in daemon status (/api/daemon/status) and in the app’s server status UI (the status-dot control in the sidebar footer).
Per-integration requirements#
Global enable is not enough. The active integration must:
- Be connected under Integrations
- Support inbound (plugin capability, for example Slack’s
inbound run) - Have any extra credentials inbound needs (often different from chat OAuth)
Slack example#
Slack chat tools can use user OAuth, but @mentions need a bot token and app-level token, Socket Mode, and the right scopes. Full steps: Slack → Inbound @mentions.
The Set up Slack wizard guides app creation, checks bot and Socket Mode credentials, enables inbound with your chosen persona, and offers a DM or @mention test. You can finish without the message test, with verification marked incomplete.
Typical flow:
- Settings → Chat — enable inbound, set Active integration to Slack, pick a persona.
- Settings → Integrations → Slack — set Bot Token, App Token (and related fields that appear when inbound targets Slack).
- Ensure the Slack app has Socket Mode and event subscriptions as described in the Slack guide.
Troubleshooting startup#
If inbound status shows an error, check its detail in the app’s server status
control. Slack needs both Bot Token (xoxb-…) and App Token (xapp-…);
connecting Slack with OAuth alone does not supply the Socket Mode app token. Add
the missing credentials under Settings → Integrations → Slack, then reload
inbound settings or restart the background service. A startup failure is reported
as an error rather than a connected listener.
Behavior notes#
- Inbound turns use the same core chat pipeline as the Mac app (tools, memory, skills), under the chosen persona.
- Turning inbound off stops listening; it does not disconnect the integration or delete credentials.
- Only one active inbound integration is selected globally at a time.
- Sessions: external threads and DMs map to Toby chat sessions so follow-ups keep context. In Slack, that means one session per channel thread, and one session per 1:1 DM with the bot (not a new session on every message). See Chat surfaces → How conversations map to Toby sessions.
Related#
- Chat surfaces — tools vs inbound product overview
- Configuration overview
- Slack — OAuth vs inbound tokens
- Local APIs — daemon status fields for inbound