Skip to content
GETTING STARTED

Connecting a Channel

Add Telegram, Discord, Slack, Voice, or any other channel adapter. Every channel uses the same interface contract and runs through the same PGE loop.

Cognithor ships with 18 channel adapters. They are transports, not brains — every one of them hands inbound messages to the same Gateway, which runs the same PGE loop, and sends responses back through the same channel. The brain is on your hardware; the channel just decides where you type.

This page covers the setup pattern all channels share, then lists the specifics for the three channels most people start with: Telegram, Discord, and Voice.

The pattern

Every channel enable looks the same:

/channel enable <name>

...or edit ~/.jarvis/config.yaml and add an entry under channels. The slash command is the fast path from inside a running daemon; the config file is the durable path.

After enabling, the channel asks for whatever credentials it needs (bot token, OAuth URL, device pairing code, etc.), stores them in the vault under secrets/channel-<name>, and starts listening. Incoming messages arrive in the Gateway within a second or two.

Channels respect the same Gatekeeper rules as everything else. A Telegram user sending "delete my config" gets the same RED refusal that a CLI user would get. Channels do not bypass the risk classifier — they cannot, by design.

Telegram

Fastest to set up, works on phone and desktop, supports attachments (images, audio, voice notes).

  1. Open a chat with BotFather and run /newbot
  2. Pick a display name and a username ending in bot
  3. BotFather returns a token like 123456:ABC-DEF...
  4. In Cognithor: /channel enable telegram, paste the token
  5. Open the bot in Telegram, send /start, and you are in

Attachments work out of the box. Send a screenshot and ask "what is this error?" — the channel forwards the image to the vision model (llava by default), which describes it, and the Planner treats the description as input.

Voice notes transcribe via whisper.cpp. The first voice message is slower because whisper loads; every subsequent one is fast.

Approval flow: if the Gatekeeper classifies a call as ORANGE (needs user approval), Cognithor sends an approval prompt in the chat. Reply y to approve, n to decline. The approval state is per-user; nobody else can green-light your tool calls.

Discord

Multi-user, good for shared assistants in a server.

  1. Create a bot at the Discord Developer Portal — New Application → Bot → Add Bot
  2. Under Privileged Gateway Intents, enable Message Content Intent
  3. Copy the bot token
  4. In Cognithor: /channel enable discord, paste the token
  5. Generate an invite URL with the bot scope and the permissions you want (usually Send Messages, Attach Files, Use Slash Commands), and invite the bot to your server

Multi-user state: Cognithor keeps per-user memory tiers. Two people in the same channel have separate chat histories. You can force-share by setting discord.share_memory: true in config, but the default is per-user isolation.

Ignore other bots: Discord channels ignore messages from bot accounts by default. Override with discord.respond_to_bots: true if you actually want bot-to-bot flows.

Voice (local STT + TTS)

Voice is a channel like any other, but everything runs on your machine. No cloud voice service, no latency round-trip.

  1. /channel enable voice
  2. Cognithor probes for whisper.cpp (STT) and piper (TTS). If either is missing, it prints install instructions.
  3. Press and hold the hotkey (default: Ctrl+Space), speak, release. Whisper transcribes, the PGE loop runs, piper speaks the response.

First run is slow because the models load. Subsequent runs are 300–800 ms from hotkey release to audio output on modern hardware.

No wake word. Voice is push-to-talk on purpose — a wake word means a microphone that is always listening, and always-listening microphones are not local-first in the way that matters. You can disable the hotkey entirely and only use voice via an explicit toggle.

Full channel list

Channel Category Setup
cli Local Always on
telegram Messaging Bot token
discord Messaging Bot token + intents
slack Messaging OAuth app
whatsapp Messaging Twilio / Meta Cloud API
signal Messaging signal-cli pairing
matrix Messaging Homeserver URL + access token
irc Messaging Server + nickname
mattermost Messaging Webhook + bot token
teams Messaging Bot Framework registration
google-chat Messaging Service account
feishu Messaging App credentials
imessage Messaging macOS only, AppleScript bridge
twitch Messaging OAuth token
webui Web Bundled with daemon
voice Local whisper + piper
vision Channel extension llava or qwen3-vl
webhook Generic HTTP POST endpoint

Each channel has its own reference page in the channel reference. Setup specifics live there; the pattern on this page covers 90% of what you will need.

What's next