Channels

ScalyClaw connects to seven messaging platforms simultaneously. One memory, one personality, one configuration — across all of them. Each channel is an independent adapter that normalises platform-specific message formats into a shared internal envelope before handing off to the orchestrator.

Overview

All channels share the same orchestrator, memory system, and personality defined in your mind/ files. Per-channel session state is stored in Redis at scalyclaw:session:{channelId} using a Lua-atomic state machine, so a busy Telegram conversation never blocks a simultaneous Discord one.

ChannelTransportFeaturesStatus
Telegram Bot API Text, images, voice, documents, inline buttons Stable
Discord Gateway WebSocket Text, embeds, threads, reactions Stable
Slack Socket Mode WebSocket Text, Block Kit, threads, reactions, slash commands Stable
WhatsApp Meta Cloud API (webhook) Text, images, documents Beta
Signal signald REST bridge Text, attachments Experimental
Teams Azure Bot Framework Text, Adaptive Cards Beta
Web Gateway HTTP REST + WebSocket Full API access, real-time streaming, custom UIs Stable

Telegram

The Telegram adapter uses the official Bot API. You can restrict access to specific Telegram user IDs via the allowlist, and independently control whether direct messages and group messages are accepted.

Setup

  1. Open Telegram and start a chat with @BotFather.
  2. Send /newbot, follow the prompts, and copy the bot token.
  3. In the ScalyClaw dashboard, go to Channels → Telegram.
  4. Paste the token into the Bot Token field and save.
  5. Set DM Policy to allow or allowlist and Group Policy to allow or deny.
  6. Optionally add Telegram user IDs to the Allowlist.

Supported Capabilities

  • Text messages (UTF-8, Markdown V2 formatting)
  • Photo and document uploads — forwarded to the orchestrator as attachments
  • Voice messages — transcribed before processing
  • Inline keyboards returned as button payloads
json
// scalyclaw:config — channels.telegram
{
  "botToken": "1234567890:ABC-your-bot-token-here",
  "allowlist": ["123456789"],       // Telegram user IDs; empty = allow all
  "dmPolicy": "allowlist",           // "allow" | "allowlist"
  "groupPolicy": "deny",             // "allow" | "deny"
  "textChunkLimit": 4096,            // max chars per message
  "mediaMaxMb": 20                   // max media size in MB
}

Discord

The Discord adapter uses the Gateway WebSocket API. You will need to create an application in the Discord Developer Portal and configure the correct gateway intents so ScalyClaw can read message content.

Setup

  1. Go to the Discord Developer Portal and create a new application.
  2. Navigate to the Bot tab, click Add Bot, and copy the bot token.
  3. Under Privileged Gateway Intents, enable Message Content Intent and Server Members Intent.
  4. Use the OAuth2 URL generator to invite the bot to your server with the bot scope and Send Messages, Read Message History, and Add Reactions permissions.
  5. In the ScalyClaw dashboard, go to Channels → Discord and paste the bot token.
  6. Optionally restrict to specific guild IDs or channel IDs.

Supported Capabilities

  • Text messages with Discord Markdown
  • Rich embeds for structured responses
  • Thread creation and participation
  • Reaction-based interactions
json
// scalyclaw:config — channels.discord
{
  "botToken": "your-discord-bot-token-here",
  "allowlist": ["1234567890"],       // guild or channel IDs; empty = allow all
  "textChunkLimit": 2000             // max chars per message
}

Slack

The Slack adapter uses Socket Mode, which means no public webhook URL is required. ScalyClaw connects to Slack over a persistent WebSocket, making it suitable for private or firewalled deployments.

Setup

  1. Go to api.slack.com/apps and create a new app from scratch.
  2. Under Socket Mode, enable it and generate an App-Level Token with the connections:write scope. Copy it.
  3. Under OAuth & Permissions, add the following bot token scopes: chat:write, channels:history, groups:history, im:history, reactions:write, commands.
  4. Install the app to your workspace and copy the Bot User OAuth Token.
  5. Under Event Subscriptions, subscribe to message.channels, message.groups, message.im.
  6. In the ScalyClaw dashboard, paste both tokens into Channels → Slack.

Supported Capabilities

  • Text messages and Block Kit formatting for rich layouts
  • Thread-aware replies — ScalyClaw tracks thread timestamps
  • Emoji reactions for lightweight acknowledgements
  • Slash commands registered at install time
json
// scalyclaw:config — channels.slack
{
  "botToken": "xoxb-your-bot-token-here",   // xoxb-… Bot User OAuth Token
  "appToken": "xapp-your-app-token-here",   // xapp-… Socket Mode App-Level Token
  "textChunkLimit": 3000                   // max chars per message
}

WhatsApp

The WhatsApp adapter uses the Meta Cloud API. Incoming messages arrive via a webhook registered with Meta; ScalyClaw verifies the webhook signature and responds through the same API. No WhatsApp Business App is required — everything goes through Meta's cloud infrastructure.

Setup

  1. Create a Meta Business account and a Meta App at developers.facebook.com.
  2. Add the WhatsApp product to your app and complete business verification.
  3. Under WhatsApp → Configuration, set the Webhook URL to https://your-domain.com/webhook/whatsapp and enter a Verify Token you choose.
  4. Subscribe to the messages webhook field.
  5. Copy the Phone Number ID, Access Token, and Verify Token into the ScalyClaw dashboard under Channels → WhatsApp.

Supported Capabilities

  • Text messages with basic formatting
  • Image and document uploads received as media URLs
  • Read receipts handled automatically
Meta Business Verification

Meta requires business verification before you can send messages to arbitrary phone numbers. During development, you can only message numbers explicitly added as test numbers in the Meta Developer Portal. Production access requires completing Meta's review process, which can take several days.

json
// scalyclaw:config — channels.whatsapp
{
  "phoneNumberId": "1234567890",
  "accessToken": "your-meta-access-token",
  "verifyToken": "your-webhook-verify-token",
  "appSecret": "your-app-secret",          // optional, for signature verification
  "apiVersion": "v21.0",
  "textChunkLimit": 4096                   // max chars per message
}

Signal

Signal does not provide an official bot API. ScalyClaw connects to Signal through signald, an open-source daemon that links a Signal account and exposes a local REST/socket interface. You run signald alongside ScalyClaw and configure the endpoint.

Setup

  1. Install signald by following the signald installation guide.
  2. Register or link a Signal number with signald: signaldctl account register +15555550100
  3. Start the signald daemon. It listens on a Unix socket or a configurable HTTP port.
  4. In the ScalyClaw dashboard, go to Channels → Signal and provide the signald endpoint and your linked phone number.

Supported Capabilities

  • Text messages (end-to-end encrypted, same as native Signal)
  • File and image attachments
  • Group message support (read and reply)
Third-party bridge

signald is an independent open-source project maintained by the community. It is not affiliated with Signal Messenger LLC. Using it may violate Signal's Terms of Service. ScalyClaw does not bundle or maintain signald — you are responsible for running and updating it.

json
// scalyclaw:config — channels.signal
{
  "apiUrl": "http://localhost:9080",  // signald REST URL
  "phoneNumber": "+15555550100",      // linked Signal number
  "pollIntervalMs": 2000,             // polling interval in milliseconds
  "textChunkLimit": 4096              // max chars per message
}

Teams

The Microsoft Teams adapter is built on the Azure Bot Framework. ScalyClaw registers as a bot in Azure, and messages flow through the Bot Framework's activity relay. Responses can use Adaptive Cards for richly structured output.

Setup

  1. In the Azure Portal, create a new Bot Channels Registration resource. Copy the App ID and generate a Client Secret.
  2. Set the messaging endpoint to https://your-domain.com/webhook/teams.
  3. In the Azure portal's Bot resource, open Channels and add the Microsoft Teams channel.
  4. Create a Teams app manifest using App Studio or the Developer Portal and sideload it to your tenant, or publish it through the Teams admin center.
  5. In the ScalyClaw dashboard, go to Channels → Teams and enter the App ID and Client Secret.

Supported Capabilities

  • Text messages with Markdown formatting
  • Adaptive Cards for interactive and structured responses
  • Personal chats and channel mentions
Azure subscription required

The Teams channel requires an active Azure subscription. The Bot Channels Registration resource itself is free, but you need a subscription to create it. Outbound messages from ScalyClaw count against the Bot Framework's standard rate limits.

json
// scalyclaw:config — channels.teams
{
  "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "appPassword": "your-azure-client-secret",  // Azure client secret
  "textChunkLimit": 4096                     // max chars per message
}

Web Gateway

The Web Gateway is the only channel that requires no external service or third-party account. ScalyClaw exposes an HTTP REST endpoint and a WebSocket endpoint directly. It is the fastest way to test the system, build custom UIs, or integrate ScalyClaw into an existing application.

Endpoints

MethodPathDescription
POST/api/messageSend a message and receive the response synchronously
GET/api/historyRetrieve recent conversation history
WebSocket/wsReal-time bidirectional stream — send messages, receive streaming tokens

Setup

  1. In the ScalyClaw dashboard, go to Channels → Web and enable it.
  2. Set the port (default 3000). The gateway starts automatically when the process starts.
  3. Optionally set authType to bearer or basic and provide an authValue to restrict access.

REST Example

bash
# Send a message and get a response
curl -X POST http://localhost:3000/api/message \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-auth-value" \
  -d '{"text": "What is the weather like today?", "channelId": "web-default"}'

WebSocket Example

typescript
const ws = new WebSocket("ws://localhost:3000/ws");

ws.onopen = () => {
  ws.send(JSON.stringify({ text: "Hello, ScalyClaw!", channelId: "web-default" }));
};

ws.onmessage = (event) => {
  const msg = JSON.parse(event.data);
  if (msg.type === "token") process.stdout.write(msg.text);  // streaming token
  if (msg.type === "done")  console.log("\n[done]");
};

Config

json
// scalyclaw:config — gateway (NOT config.channels)
{
  "host": "127.0.0.1",
  "port": 3000,
  "bind": "127.0.0.1",
  "authType": "bearer",            // "none" | "bearer" | "basic"
  "authValue": "your-secret-token", // null to disable auth
  "tls": { "cert": "", "key": "" },
  "cors": ["http://localhost:5173"] // allowed origins for browser clients
}
Tip

The Web Gateway is also what the ScalyClaw dashboard uses internally for its built-in chat widget. You can use the same WebSocket endpoint to embed a chat interface in any web application — no extra server code needed.