Let your agent talk to any human
Caspian gives your AI agent one identity that reaches people wherever they already are (email, Slack, Discord, WhatsApp, SMS, X, Telegram, iMessage), all behind a single on_message handler. You write the handler once; Caspian handles every provider's quirks, threading, delivery, and dedup.
New here? Jump straight to the Quickstart and have your agent replying on a real channel in about two minutes.
The one-handler model
Every channel (a Slack thread, an SMS, a WhatsApp chat, an email) arrives at the same handler. You reply with message.reply(), and Caspian sends it back on the right channel, in the right thread, formatted the way that platform expects.
from caspian_sdk import CommClient
client = CommClient() # reads COMM_API_KEY from env / .env
client.connect_email() # one line per channel, no handler changes
@client.on_message
def handle(message):
message.reply(f"You said: {message.text}")
client.listen() # one loop, every channelimport { CommClient } from "caspian-sdk";
const client = new CommClient(); // reads COMM_API_KEY from env / .env
await client.connectEmail(); // one line per channel
client.onMessage(async (message) => {
await message.reply(`You said: ${message.text}`);
});
await client.listen(); // one loop, every channelAdding a channel is another connect_*() call, never new handler code.
Channels
Free channels cost nothing and need no signup. Paid channels run on Caspian's own network and unlock after a one-time sign-in.
How it fits together
- Connections: each channel you connect (an inbox, a Slack app, a bot) is a connection under your project.
- Conversations: inbound messages group into conversations with a stable id, so your agent can key its memory on a thread.
- One handler:
on_messagefires for every connection;reply()routes back to the source channel automatically. - Behavior guides: Caspian can hand your agent per-channel etiquette (Slack threads, WhatsApp's 24-hour window, SMS length) to inject into its system prompt.