Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/nullclaw/nullclaw/llms.txt

Use this file to discover all available pages before exploring further.

NullClaw supports 17 messaging channels including Telegram, Discord, Slack, and more. Each channel has specific configuration requirements and access controls.

Channel Structure

Channels are configured in the channels section:
{
  "channels": {
    "cli": true,
    "telegram": {
      "accounts": {
        "main": {
          "bot_token": "YOUR_TELEGRAM_BOT_TOKEN",
          "allow_from": ["123456789"]
        }
      }
    },
    "discord": {
      "accounts": {
        "main": {
          "token": "YOUR_DISCORD_BOT_TOKEN",
          "allow_from": ["user_id_1", "user_id_2"]
        }
      }
    }
  }
}

CLI Channel

channels.cli
boolean
default:"true"
Enable the command-line interface channel. Always available for local interaction.

Telegram Configuration

Basic Setup

{
  "channels": {
    "telegram": {
      "accounts": {
        "main": {
          "bot_token": "1234567890:ABCdefGHIjklMNOpqrsTUVwxyz",
          "allow_from": ["123456789"],
          "group_allow_from": ["group_chat_id"],
          "group_policy": "allowlist",
          "reply_in_private": true,
          "proxy": null
        }
      }
    }
  }
}
channels.telegram.accounts.<name>.bot_token
string
required
Telegram bot token from @BotFather.
channels.telegram.accounts.<name>.allow_from
array
required
List of Telegram user IDs allowed to interact with the bot in private chats. Use @userinfobot to find your user ID.
channels.telegram.accounts.<name>.group_allow_from
array
List of group chat IDs where the bot is allowed to respond.
channels.telegram.accounts.<name>.group_policy
string
default:"allowlist"
Group access policy: allowlist (only respond in listed groups) or mention_only (respond when mentioned).
channels.telegram.accounts.<name>.reply_in_private
boolean
default:"true"
Use reply-to in private (1:1) chats. Groups always use reply-to.
channels.telegram.accounts.<name>.proxy
string
Optional SOCKS5/HTTP proxy URL for Telegram API requests (e.g., socks5://host:port).

Discord Configuration

{
  "channels": {
    "discord": {
      "accounts": {
        "main": {
          "token": "YOUR_DISCORD_BOT_TOKEN",
          "guild_id": "123456789012345678",
          "allow_from": ["user_id_1", "user_id_2"],
          "allow_bots": false,
          "require_mention": false,
          "intents": 37377
        }
      }
    }
  }
}
channels.discord.accounts.<name>.token
string
required
Discord bot token from the Discord Developer Portal.
channels.discord.accounts.<name>.guild_id
string
Optional guild (server) ID to restrict the bot to a specific server.
channels.discord.accounts.<name>.allow_from
array
List of Discord user IDs allowed to interact with the bot.
channels.discord.accounts.<name>.allow_bots
boolean
default:"false"
Allow other bots to trigger this agent.
channels.discord.accounts.<name>.require_mention
boolean
default:"false"
Only respond when the bot is mentioned.
channels.discord.accounts.<name>.intents
number
default:"37377"
Discord gateway intents bitmask (GUILDS | GUILD_MESSAGES | MESSAGE_CONTENT | DIRECT_MESSAGES).

Slack Configuration

{
  "channels": {
    "slack": {
      "accounts": {
        "main": {
          "mode": "socket",
          "bot_token": "xoxb-...",
          "app_token": "xapp-...",
          "signing_secret": "...",
          "allow_from": ["U123456789"],
          "dm_policy": "pairing",
          "group_policy": "mention_only"
        }
      }
    }
  }
}
channels.slack.accounts.<name>.mode
string
default:"socket"
Connection mode: socket (Socket Mode) or http (Events API with webhooks).
channels.slack.accounts.<name>.bot_token
string
required
Slack bot token (starts with xoxb-).
channels.slack.accounts.<name>.app_token
string
App-level token for Socket Mode (starts with xapp-). Required when mode is socket.
channels.slack.accounts.<name>.signing_secret
string
Signing secret for webhook verification. Required when mode is http.
channels.slack.accounts.<name>.dm_policy
string
default:"pairing"
Direct message policy: pairing (require pairing), allowlist (use allow_from), or open (allow all).
channels.slack.accounts.<name>.group_policy
string
default:"mention_only"
Group/channel policy: mention_only (respond when mentioned), allowlist (use allow_from), or open (respond to all).

Multi-Account Support

Most channels support multiple accounts using the accounts object:
{
  "channels": {
    "telegram": {
      "accounts": {
        "main": {
          "bot_token": "token1",
          "allow_from": ["user1"]
        },
        "work": {
          "bot_token": "token2",
          "allow_from": ["user2"]
        }
      }
    }
  }
}
NullClaw will connect to all configured accounts. The account_id field (default: "default") identifies each account.

Access Control

All channels support allowlist-based access control:
  • allow_from — List of user IDs allowed to interact with the bot
  • group_allow_from — List of group/channel IDs where bot can respond
  • group_policy — How to handle group messages (allowlist, mention_only, etc.)
Always configure allow_from to prevent unauthorized access. Empty allowlists typically deny all access.

Supported Channels

NullClaw supports these messaging platforms:
  • CLI — Command-line interface
  • Telegram — Telegram Bot API
  • Discord — Discord gateway
  • Slack — Socket Mode or Events API
  • WhatsApp — WhatsApp Business API
  • Matrix — Matrix protocol
  • Mattermost — Mattermost integration
  • Signal — Signal messenger (via signal-cli)
  • IRC — Internet Relay Chat
  • Email — IMAP/SMTP
  • iMessage — Apple Messages (macOS only)
  • Lark — Lark/Feishu
  • DingTalk — DingTalk
  • LINE — LINE messaging
  • QQ — QQ instant messaging
  • Nostr — Nostr protocol
  • Web — WebSocket channel for browser extensions
See Channels Guide for setup instructions for each platform.