Help us improve
Share bugs, ideas, or general feedback.
From omni
Guides connecting AI agents to Omni channels like WhatsApp, Telegram, Discord, Slack using providers, reply filters, routing, and testing via bash CLI.
npx claudepluginhub automagik-dev/omni --plugin omniHow this skill is triggered — by the user, by Claude, or both
Slash command
/omni:omni-agent-setupThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Step-by-step guide to route messages from any Omni channel (WhatsApp, Telegram, Discord, Slack) to an AI agent backend.
Manages AI/agent providers via omni CLI: list/get details, create (genie, claude-code, a2a, ag-ui, agno, openclaw, webhook schemas), update/delete, health tests, Agno resources.
Guides setup of messaging channels (WhatsApp, Telegram, Discord, iMessage, Slack) for external access to Claude Code agents via plugin installs. Shows exact commands, prerequisites, and relaunch steps.
Initializes agentchannels stack conversationally: validates Anthropic API key, selects/configures Claude agent/environment/vaults, sets up Slack bot, writes to .env after all validations.
Share bugs, ideas, or general feedback.
Step-by-step guide to route messages from any Omni channel (WhatsApp, Telegram, Discord, Slack) to an AI agent backend.
Channel (WhatsApp/Telegram/...)
→ Instance (connected account)
→ Reply Filter (when to activate agent)
→ Route Resolver (which agent handles this chat/user)
→ Provider (how to talk to the agent backend)
→ Agent processes message
→ Agent replies via omni send
| Schema | Backend | Use Case |
|---|---|---|
genie | Claude Code team inbox | Fire-and-forget to genie agents. Agent replies via omni send. |
claude-code | Claude Code SDK | Native SDK integration. Runs agents in isolated sessions. |
agno | AgnoOS platform | Self-hosted or cloud Agno agents. |
openclaw | WebSocket gateway | Real-time WebSocket agent communication. |
webhook | Any HTTP endpoint | Generic REST/webhook backends. |
a2a | Agent-to-Agent | One Omni agent calling another Omni agent. |
omni providers create \
--name "Genie Team" \
--schema genie \
--schema-config '{
"agentName": "omni",
"targetAgent": "team-lead",
"teamName": "genie"
}' \
--json
agentName: identity of this provider when writing to inbox (appears as sender)targetAgent: which agent inbox to deliver to (e.g. team-lead, ideias)teamName: Claude Code team name (default: genie)omni providers create \
--name "My Project Agent" \
--schema claude-code \
--project-path /home/user/myproject \
--max-turns 10 \
--permission-mode acceptEdits \
--model claude-sonnet-4-20250514 \
--json
omni providers create \
--name "Support Agent" \
--schema agno \
--base-url https://api.agno.com \
--api-key sk_xxx \
--schema-config '{"agentId": "support-bot"}' \
--json
omni providers create \
--name "Custom Backend" \
--schema webhook \
--schema-config '{
"url": "https://api.example.com/webhook",
"method": "POST",
"headers": {"Authorization": "Bearer xxx"},
"waitForResponse": true,
"timeoutMs": 30000
}' \
--json
omni providers create \
--name "Sofia Gateway" \
--schema openclaw \
--base-url ws://127.0.0.1:18789 \
--default-agent-id sofia \
--json
Save the returned provider ID for the next step.
# List existing instances
omni instances list --json | jq '.[] | {id, name, channelType, status}'
# Or create a new one
omni instances create --channel telegram --name "My Telegram Bot" --json
omni instances create --channel whatsapp --name "My WhatsApp" --json
For WhatsApp, scan the QR code:
omni instances qr <instance-id> --watch
omni instances update <instance-id> \
--agent-provider <provider-id> \
--json
Optional settings:
omni instances update <instance-id> \
--agent-provider <provider-id> \
--session-strategy per_chat \
--stream true \
--prefix-sender-name true \
--json
--session-strategy: per_chat (one session per conversation) or per_user (one per person)--stream: enable streaming responses--prefix-sender-name: prepend sender name to messages (useful in groups)Controls when the agent responds.
# Reply to everything (DMs + groups)
omni instances update <instance-id> \
--reply-filter-mode all \
--json
# Reply only to DMs, mentions, and replies
omni instances update <instance-id> \
--reply-filter-mode filtered \
--on-dm true \
--on-mention true \
--on-reply true \
--json
# Reply only when name patterns match (groups)
omni instances update <instance-id> \
--reply-filter-mode filtered \
--on-mention true \
--name-patterns "@bot,hey bot" \
--json
Override the instance default for specific chats or users:
# Route a specific chat to a different agent
omni routes create \
--instance <instance-id> \
--scope chat \
--chat <chat-id> \
--provider <other-provider-id> \
--agent <agent-id> \
--label "VIP Support" \
--priority 10 \
--json
# Route all conversations from a person
omni routes create \
--instance <instance-id> \
--scope user \
--person <person-id> \
--provider <provider-id> \
--agent <agent-id> \
--json
# Test which route resolves for a chat
omni routes test --instance <instance-id> --chat <chat-id> --json
Route priority: chat route > user route > instance default.
# Test provider health
omni providers test <provider-id> --json
# Send a test message to yourself
omni send --to <your-number-or-chat> \
--text "Testing agent setup" \
--instance <instance-id>
# Check events to see if message was routed
omni events list --instance <instance-id> --type message.received --limit 5 --json
# Check agent task events
omni events list --type agent.task.completed --limit 5 --json
End-to-end setup for a genie agent on Telegram:
# 1. Create provider
PROVIDER=$(omni providers create \
--name "Genie Team Lead" \
--schema genie \
--schema-config '{"agentName":"omni-telegram","targetAgent":"team-lead","teamName":"genie"}' \
--json | jq -r '.id')
# 2. Assign to existing Telegram instance
omni instances update <telegram-instance-id> \
--agent-provider $PROVIDER \
--json
# 3. Reply to DMs only
omni instances update <telegram-instance-id> \
--reply-filter-mode filtered \
--on-dm true \
--json
# 4. Test
omni providers test $PROVIDER --json
Messages flow: Telegram → Omni → ~/.claude/teams/genie/inboxes/team-lead.json → Agent reads from inbox → Agent replies via omni send.
| Symptom | Check |
|---|---|
| Agent not responding | omni providers test <id> — is provider healthy? |
| Agent responds to everything | Check reply filter: omni instances get <id> --json | jq '.agentReplyFilter' |
| Wrong agent answers | Check routes: omni routes test --instance <id> --chat <chat-id> |
| Messages not arriving | Check events: omni events list --instance <id> --type message.received --limit 5 |
| Provider create fails | Verify schema-config JSON matches the schema requirements |
omni send.schema-config will be rejected.--gate for LLM-based filtering.--json + jq for automation-safe parsing in agent workflows.