Channels¶
Channels are how you talk to your assistant — WhatsApp, Slack, or a terminal UI. They're pluggable; built-ins cover the common platforms, and you can add more (Telegram, Discord, etc.) via plugins.
Multi-Channel Sync¶
All channels see the same messages. Send from WhatsApp, the response also shows up in Slack and the TUI. So you can:
- Start a conversation on your phone (WhatsApp) and continue at your desk (TUI or Slack)
- Watch agent activity from any connected platform
- Use whichever channel is convenient
Outbound messages route through a single broadcast bus. Each channel maps its platform-specific identifiers (WhatsApp phone numbers, Slack channel IDs) to a canonical group ID, so the agent sees one conversation no matter which channels are connected.
Built-in: WhatsApp¶
The primary channel for most users. Uses neonize (whatsmeow Python bindings).
Setup:
uv sync --extra whatsapp # Install WhatsApp dependencies
uv run pynchy-whatsapp-auth # Scan QR code to link your phone
Features:
- Group and self-chat support
- Typing indicators and read receipts
- Streaming responses (updates in-place as the agent types)
- Media messages (images, documents)
Notes:
- WhatsApp linked devices expire after ~30 days of inactivity — re-run auth if disconnected
- The admin channel is typically your WhatsApp self-chat (private messages to yourself)
Built-in: Slack¶
Connects via Slack's Socket Mode using the Bolt library. Maps Slack channels and DMs to Pynchy groups.
Setup:
- Create a Slack app with Socket Mode enabled
- Add bot token and app token to
config.toml:
- Install dependencies:
Features:
- Channel and DM support
- Slack Assistant API panel integration
- Streaming message updates (edits messages in-place)
- Markdown formatting
Built-in: TUI¶
A terminal UI built with Textual. Connects to Pynchy's HTTP/SSE server — no external service needed.
Usage:
The TUI is always available — no config or extra dependencies required.
Enabling and Disabling Channels¶
Channels activate automatically once their dependencies are installed and configured. To turn one off:
If a channel's dependencies aren't installed or its config section is missing, it's silently skipped at startup.
Default Channel¶
The default channel picks which platform creates the admin channel on first run:
Want to customize this? Write your own channel plugin — see the Plugin Authoring Guide. Have an idea but don't want to build it? Open a feature request.