Chat Transports

Huskies can be controlled via bot commands in any of five transports. Only one external transport can be active at a time. The web UI is always available regardless.

Configuration: Copy the relevant example file to .huskies/bot.toml and fill in your credentials. The file is gitignored. Restart huskies after changes.

Web UI

The built-in web interface is always available at http://localhost:<port>. No configuration required. It provides:

  • Pipeline board showing all work items and their stages
  • Agent status panel with live output streaming
  • Chat interface for running commands and talking to Claude
  • Coverage and cost dashboards

No bot.toml is required for the web UI. If no transport is configured, huskies runs in web-only mode.

Matrix

Matrix uses the Matrix Client-Server API with long-polling sync. No public webhook URL is required — the bot connects outbound to your homeserver.

Setup

  1. Register a Matrix account for the bot on your homeserver (e.g. @huskies:example.com).
  2. Invite the bot account to the rooms you want it to monitor.
  3. Copy the example config and fill in your credentials:
    cp .huskies/bot.toml.matrix.example .huskies/bot.toml

bot.toml fields

KeyDescription
homeserverYour Matrix homeserver URL (e.g. https://matrix.example.com).
usernameBot account Matrix ID (e.g. @huskies:example.com).
passwordBot account password.
room_idsList of room IDs to listen in (e.g. ["!roomid:example.com"]).
allowed_usersMatrix IDs allowed to interact. Empty list means nobody — always set this.
ambient_roomsRooms where the bot responds to all messages (not just addressed ones). Updated automatically by ambient on/off.

Slack

Slack uses event subscriptions over a webhook. You'll need a public HTTPS URL pointing to your huskies server.

Setup

  1. Create a Slack App at api.slack.com/apps.
  2. Add OAuth scopes: chat:write, chat:update.
  3. Subscribe to bot events: message.channels, message.groups, message.im.
  4. Install the app to your workspace and copy the bot token.
  5. Set your webhook URL in Event Subscriptions: https://your-server/webhook/slack
  6. Copy the example config:
    cp .huskies/bot.toml.slack.example .huskies/bot.toml

bot.toml fields

KeyDescription
slack_bot_tokenOAuth bot token starting with xoxb-.
slack_signing_secretSigning secret from the app's Basic Information page.
slack_channel_idsList of channel IDs to listen in (e.g. ["C01ABCDEF"]).

WhatsApp (Meta Cloud API)

Connects huskies to WhatsApp Business via the Meta Cloud API. Requires a Meta Business account and a public webhook URL.

Setup

  1. Create a Meta Business App at developers.facebook.com.
  2. Add the WhatsApp product and get a Phone Number ID.
  3. Generate a permanent access token.
  4. Register your webhook URL in Meta's dashboard: https://your-server/webhook/whatsapp
  5. Copy the example config:
    cp .huskies/bot.toml.whatsapp-meta.example .huskies/bot.toml

bot.toml fields

KeyDescription
whatsapp_providerSet to "meta" for the Meta Cloud API.
whatsapp_phone_number_idPhone Number ID from the Meta dashboard.
whatsapp_access_tokenPermanent access token.
whatsapp_verify_tokenWebhook verify token — must match what you set in Meta's dashboard.
whatsapp_allowed_phonesOptional. List of phone numbers allowed to interact (e.g. ["+15551234567"]). When absent, all numbers are allowed.
whatsapp_notification_templateOptional. Name of the approved Meta message template for out-of-window notifications (default: "pipeline_notification").

WhatsApp (Twilio)

An alternative WhatsApp integration using Twilio's WhatsApp API. Requires a Twilio account.

cp .huskies/bot.toml.whatsapp-twilio.example .huskies/bot.toml

Set whatsapp_provider = "twilio" and fill in your Twilio account SID, auth token, and phone numbers. The webhook URL is the same: https://your-server/webhook/whatsapp.

Discord

Connects huskies to Discord using the Discord Gateway WebSocket. No public webhook URL required — the bot connects outbound.

Setup

  1. Create a Discord Application at discord.com/developers/applications.
  2. Go to Bot, create a bot, and copy the token.
  3. Enable Message Content Intent under Privileged Gateway Intents.
  4. Go to OAuth2 → URL Generator, select the bot scope with permissions: Send Messages, Read Message History, Manage Messages.
  5. Use the generated URL to invite the bot to your server.
  6. Right-click target channels → Copy Channel ID (requires Developer Mode enabled in Discord settings).
  7. Copy the example config:
    cp .huskies/bot.toml.discord.example .huskies/bot.toml

bot.toml fields

KeyDescription
discord_bot_tokenBot token from the Discord developer portal.
discord_channel_idsList of channel IDs to listen in (e.g. ["123456789012345678"]).
discord_allowed_usersOptional. Discord user IDs allowed to interact. When absent, all users in configured channels can interact.

Gateway: aggregated notifications

When using huskies --gateway, you can configure the gateway bot to receive notifications from all registered projects in a single room. Events are prefixed with [project-name].

No additional transport is required — the gateway aggregated stream works with any of the transports above. Configure the gateway's .huskies/bot.toml with your transport credentials and set aggregated_notifications_enabled = true (the default). See Configuration → Gateway aggregated stream for the full reference.

No per-project changes needed: Adding a new project to projects.toml does not require editing per-project bot configs — the gateway picks it up automatically.