Skip to main content
LIVE IN YOUR APPS

Your agents, where your team already is.

Bind an agent to a Telegram bot or a Slack workspace. Message it from your phone. Approve sensitive actions with a tap. Keep it running 24/7 on a VPS — no desktop required.

See it in action

A conversation from start to approval.

Illustrative Telegram thread — user message, agent processing, reply, then an inline approval for a sensitive action. No desktop needed. A phone tap is enough.

M
Maya
@maya_actionist_bot
online
Send the Q3 proposal to the Northwind team.
09:41
seen · reading context
Got it — 47 recipients on the Northwind distribution list. Before I send, I need your sign-off on this one.
09:41
Send email to Northwind team
47 recipients · 1 attachment (Q3_Proposal.pdf)
Approve
09:42
tool · send_email · 47 recipients
Done — proposal sent to all 47 contacts. Delivery receipts look clean.
09:42
Approve from anywhere. The inline keyboard appears right in the chat thread. No desktop, no dashboard — a tap is all it takes.
Context is preserved. Approval or denial goes back to the agent immediately. The workflow continues or aborts without losing the conversation thread.
Same on Slack. The approval request uses Block Kit action buttons. Same one-tap flow, same agent-side handling.

In practice

A travel day, approved from a phone.

Dario runs his sales agent on Telegram. On a travel day he handled every approval and query between flights — no laptop, no dashboard.

APPROVED FROM MY PHONE
Dario · Sales — illustrative travel-day log
Morning pipeline briefing (agent DM, Telegram)2 min
Approved: follow-up sequence to 12 Northwind contacts1 min
Denied: outreach draft flagged as too aggressive1 min
Approved: Q3 proposal sent to 6 prospects1 min
Queried: open deal count and next follow-up dates2 min
Approved: meeting summary logged to CRM (4 deals)1 min
Total time on phone~8 min
ILLUSTRATIVE — BASED ON THE CAPABILITIES DOCUMENTED ON THIS PAGE

The idea

A channel is where an agent lives as a bot.

Once an agent has a channel, it answers messages, reports back, and surfaces approval requests in that messaging app — without you ever switching to the Actionist desktop.

Telegram

Each agent gets its own dedicated bot created through @BotFather. Users DM the bot directly; the agent replies in the same thread. Runs on the grammY SDK via Actionist’s Gateway service.
https://cdn.simpleicons.org/slack

Slack

Connect one Slack app per agent, or share a single company-level Slack app across all your agents and route each by its unique @mention-name. Built on Bolt SDK with Socket Mode — no public HTTPS endpoint needed.
Only Telegram and Slack are supported channels today. WhatsApp, email, and Discord are not available on the current release.
Architecture

One bot per agent, or one Slack app for all.

Telegram always gives each agent its own bot. Slack offers a choice: a dedicated bot per agent, or a shared company Slack app where users reach each agent by typing its @mention-name in any channel.

Dedicated bot
You
DM
@maya_bot
Maya agent
Shared Slack app
Team member
@support help me
Team member
@finance approve Q3
Company Slack app
mention routing
Support agent
mention routing
Finance agent

With a shared Slack app, direct messages to the bot still route automatically — no mention required. Only messages in shared channels need the @mention-name prefix; bare channel messages are silently dropped.


Setup

Three steps per platform.

Open Agents in the sidebar, select the agent, and click the Channels tab. Pick your platform and follow the wizard. The connection-target badge at the top tells you whether this agent connects from Local Desktop or Paired VPS.

1
Talk to @BotFather to create a bot
Open Telegram and start a chat with @BotFather. Send /newbot, pick a display name, and choose a unique handle ending in _bot. BotFather replies with a token in the format 123456:ABC-DEF….

Back in Actionist, pick a saved credential from the combobox (recommended) or paste the token into the Bot token field. If you pick a vault credential, a shield icon confirms: “Resolved from your vault at gateway connect. Never stored locally.”
Bot token••••••••••••••••••••••••••vault
Pick a vault credential rather than pasting. Rotating the credential later updates every agent that uses it — no need to re-open each agent’s Channels tab.
2
Restrict who can DM the bot (optional)
Enter comma-separated Telegram user IDs or @usernames in the allowlist field (placeholder: 123456789, @username). Leave the field empty to allow anyone who finds the bot to message it.
Allowlist123456789, @username
An empty allowlist is a security risk if you share the bot’s username publicly. Add your own numeric Telegram user ID before sharing the bot handle with anyone else.
3
Test the connection
Click Connect. The button is disabled until a token or credential is present. Actionist calls getMe with the token to verify it resolves to a real bot. On success: status changes to Connected and shows the bot’s username. On failure: Connection failed with the rejection detail from Telegram. On every subsequent app launch, Actionist reconnects automatically (up to 8 attempts, 1.5 s apart). Bot commands /start, /help, /reset, and /stop are registered at the same time.
Connected as @maya_actionist_bot
Channels — Telegram
Connected · token saved
1
Talk to @BotFather to create a bot
Bot token••••••••••••••••••••••vault
Resolved from your vault at gateway connect. Never stored locally.
2
Restrict who can DM the bot (optional)
Allowlist123456789, @username
3
Test the connection
Connected as @maya_actionist_bot
1
Create a Slack app
Go to api.slack.com/apps and create a new app. You need to:
  1. Enable Socket Mode under Settings — this maintains a persistent outbound WebSocket so no public HTTPS endpoint is needed.
  2. Grant these bot scopes under OAuth and Permissions: chat:write, im:history, channels:history, groups:history.
  3. Copy both tokens: the Bot token (starts xoxb-) and the App-level token (starts xapp-).

Back in Actionist, enter or pick both tokens. Both must come from the same source — either both pasted or both picked from the vault. Mixing is rejected with: “Both the bot token and the app-level token are required — paste both, or pick saved credentials for both.”
Bot token (xoxb-)••••••••••••••••vault
App-level token (xapp-)••••••••••••••••vault
2
Set a mention name (for shared channels)
Enter a short identifier for this agent. Actionist auto-sanitizes to lowercase [a-z0-9_-] as you type.

This is how users route messages to this agent in a shared Slack channel: they type @mention-name do something. The mention name must be unique across every agent sharing the same Slack app — a duplicate produces a validation error on save.
Mention namesupport
Users messaging the bot directly in a DM do not need to use the mention name — direct messages route automatically without any prefix.
3
Validate the tokens
Click Connect. Actionist calls auth.test with the bot token to confirm it is reachable. On success: status shows Connected to [workspace name]. On failure: Connection failed — confirm that Socket Mode is enabled and all four scopes are granted.
Connected to Acme Corp workspace
Channels — Slack
Connected to Acme Corp workspace
1
Create a Slack app
Bot token (xoxb-)••••••••••••••vault
App-level token (xapp-)••••••••••••••vault
2
Set a mention name (for shared channels)
Mention namesupport
supportfinance
3
Validate the tokens
Try it · routing

Watch mention routing in a shared channel.

A shared Slack app routes messages by @mention-name prefix. Messages without a matching mention are silently dropped — they never reach any agent. Pick a message scenario:

#general — shared channel
JL
Jamie L 10:14 AM
@support can you pull the open tickets for Northwind?
routed to support agent
S
Support 10:14 AM
On it — pulling open tickets for Northwind now. Found 3 open, 1 escalated.
The message starts with @support — Actionist matches this to the agent whose mention name is support and forwards the full message text. The agent replies in the same thread.
#general — shared channel
PR
Priya R 11:02 AM
@finance please run the Q3 budget summary
routed to finance agent
F
Finance 11:03 AM
Q3 budget summary running — will post the report here in about 2 minutes.
@finance matches the second agent’s mention name. The same Slack app hosts both agents; the mention prefix determines which one handles the message.
#general — shared channel
TK
Tom K 11:25 AM
Has anyone seen the latest Northwind contract?
silently dropped
No @mention-name prefix — the message is a general team conversation. Actionist ignores it. Neither agent wakes up; no reply is sent. Direct messages to the bot always route without a mention; only shared-channel messages need the prefix.
Control

Manage a running agent from the chat.

Four commands are registered on every Telegram bot at connect time. Send them in the conversation from any device.

/start
Starts the bot and greets you.
/help
Lists available commands.
/reset
Clears the conversation transcript so the agent starts with fresh context. The chat row, agent binding, and Telegram peer link are preserved — only the transcript is rotated. Use this when the agent has drifted after a long session.
/stop
Aborts any in-flight agent work immediately. Conversation context is preserved — your next message continues from the current state.
/reset and /stop are Telegram bot commands registered at connect time. Slack does not have equivalent slash commands.
Both are Telegram bot commands, but they do different things:
  • /reset — clears the agent’s transcript context. The chat row, agent binding, and Telegram peer link are untouched. Use it when the agent has accumulated context from a long session and is no longer behaving as expected.
  • /stop — aborts any work the agent is actively executing right now. Conversation context is preserved; your next message continues normally.
Neither command removes the bot connection or the agent config.
When an agent reaches a sensitive action requiring your sign-off, it pauses and sends you an interactive approval request — right in the chat.
  • On Telegram: the request appears with Approve and Deny buttons rendered as an inline keyboard below the message.
  • On Slack: the same request uses Block Kit action buttons in the message.
Tap the button to respond. The agent receives your decision immediately and either proceeds or aborts — without you opening the desktop app.
Inline approvals work from any device that receives your Telegram or Slack notifications. A phone tap is all that’s needed.
M
Maya
@maya_actionist_bot · online
I need your sign-off before sending.
09:43
Send email to client list
47 recipients · Q3_Report.pdf

Availability

24/7 uptime requires a VPS.

Agents running on Local Desktop stop responding when your machine sleeps. Pair the agent with a Paired VPS runtime to keep bots online around the clock.

A Local Desktop agent’s bots go offline when your computer sleeps or the app closes. For always-on channel bots, assign the agent to a Paired VPS in the Cloud tab before connecting channels.

The Channels tab shows a RuntimeScopeBadge at the top — either Local Desktop or Paired VPS — so you always know which runtime owns the connection.

When an agent is homed to a Paired VPS and you open its Channels tab from the desktop app:
  • The tab is read-only. The wizard fields are replaced by a “Managed on Paired VPS” card.
  • To edit channel settings, open Actionist on the VPS itself.
When you click Connect from the VPS runtime, the status shows “Saved — connecting on your VPS…” while the gateway connects in the background, then updates to “Connected as @username” (Telegram) or “Connected to [workspace]” (Slack).
Channels
Paired VPS
Channel settings for this agent are connected and managed on its Paired VPS. Open Actionist on the VPS to edit these settings.
Channel settings for this agent are connected and managed on its Paired VPS. Open Actionist on the VPS to edit these settings.

Set up cloud runtime

Pair a VPS to keep agents and their channel bots running when the desktop is offline.
Security

Tokens never touch local storage.

When you pick a vault credential instead of pasting a token, Actionist resolves it server-side at connect time. The plaintext token is never written to the agent config or local disk.

Telegram — Step 1
Bot token
telegram-bot-mayavault
Resolved from your vault at gateway connect. Never stored locally.

Unauthorized Telegram users are rejected before any message reaches the agent.

The Slack app maintains a persistent outbound WebSocket — there is no public HTTPS endpoint to expose or protect.

A desktop runtime cannot start bots homed to a VPS, and vice versa. The scope check runs at connect time.

If the vault entry a channel is bound to is later deleted, the credential field shows a stale-binding chip: “Bound credential not found — re-bind required.” Clear the stale binding, pick or paste a valid token, and reconnect.The footer of the Channels tab names the home runtime (Local Desktop or Paired VPS) and confirms that tokens are vault-bound to this agent only.
Under the hood

Five stops from message to reply.

Messaging appYou send a DM or mention in Telegram or Slack.
GatewayActionist’s Gateway service receives the webhook or Socket Mode event.
Allowlist checkThe sender ID is checked against the bot’s allowlist before anything reaches the agent.
Agent runtimeThe message is forwarded to the bound agent, which runs its tools, memory, and skills.
ReplyThe agent’s response (or approval request) is sent back through the same channel.
Best practices

Tips that prevent the common issues.

Use vault credentials, not pasted tokens

Pasting a token stores it in the agent config on disk. Picking a vault credential means the token is resolved server-side at connect time and never written locally. When you rotate the credential in the vault, every agent that references it updates automatically — no need to re-open each agent’s Channels tab.

Credentials vault

How to save, rotate, and manage credentials centrally.
An empty allowlist means anyone who finds the bot’s username can send it messages. Add your own numeric Telegram user ID — and any teammates’ IDs — immediately after connecting, before you share the handle publicly. Values are comma-separated; both numeric IDs and @usernames are accepted.
When a user messages the Slack bot in a DM, the message routes to the agent automatically. In a shared channel, only messages prefixed with @mention-name are routed — bare channel messages are silently dropped. Make sure your team knows to include the mention when they’re not in a DM.
The mention name is auto-sanitized to [a-z0-9_-] as you type. Duplicate names across agents sharing the same Slack app produce a server-side validation error on save. Keep each name distinct: support, finance, research.
Both are Telegram bot commands, but they do different things:
  • /reset — clears the agent’s transcript context. The chat row, agent binding, and Telegram peer link are untouched. Use it when the agent has accumulated context from a long session and is no longer behaving as expected.
  • /stop — aborts any work the agent is actively executing right now. Conversation context is preserved; your next message continues normally.
Neither command removes the bot connection or the agent config.
This error appears when two runtimes are both polling the same bot token — typically the desktop app and a VPS running simultaneously. Telegram only allows one active poller per token.Actionist surfaces the conflict in the Channels tab and retries automatically (30 s, 60 s, 120 s, 300 s, then terminal error). To fix it: disconnect the bot on whichever runtime should not own it, then reconnect on the correct one.
Local Desktop agents stop answering when the machine sleeps or the app closes. Assign the agent to a Paired VPS in the Cloud tab first, then connect its channels from the VPS runtime. The bot runs headlessly, independently of your laptop.
Reference

Limits and defaults.

4,000Telegram message chunk size (effective characters)
4,096Telegram message hard limit (platform)
10,000Text attachment: characters injected
5 MiBPhoto attachment: max size
5 minMessage deduplication window
8Auto-connect startup attempts
1,500 msAuto-connect delay between attempts
30 s → 300 sTelegram conflict retry schedule (then terminal error)
SettingValue
Text attachment: supported types.txt .md .csv .json .html .xml .yaml .yml .toml .ini .cfg .log .env
Photo attachment: photos per messageFirst photo only (passed as base64 for vision)
Required Slack bot scopeschat:write, im:history, channels:history, groups:history
Slack connection modeSocket Mode (persistent outbound WebSocket, no public endpoint)
Long Telegram replies split automatically at 4,000 characters, breaking first at paragraph boundaries, then newlines, then spaces. If Markdown causes a parse error, the service falls back to plain text automatically.
Five minutes

Put your agents on Telegram and Slack today.

Open the Dashboard, pick an agent, and follow the three-step wizard. Five minutes to a bot your team can message from anywhere.

Bot tokens vault-bound to this agent only.
Allowlist gating · Socket Mode · Runtime-scope isolation.

Keep going

Next steps.

Agents

The Channels tab lives inside the agent studio. Configure identity, tools, and approval mode alongside channel bindings.

Credentials vault

Save, rotate, and manage bot tokens centrally so every agent stays current automatically.

Cloud runtime

Pair a VPS to keep channel bots running 24/7 — even when your laptop is closed.

Schedules

Combine a channel with a schedule for agents that report proactively on a recurring cadence.