clanker-agent/packages/pi-channels
2026-03-09 14:37:59 -07:00
..
src fix loading 2026-03-09 14:37:59 -07:00
CHANGELOG.md move pi-mono into companion-cloud as apps/companion-os 2026-03-07 09:22:50 -08:00
LICENSE move pi-mono into companion-cloud as apps/companion-os 2026-03-07 09:22:50 -08:00
package.json move pi-mono into companion-cloud as apps/companion-os 2026-03-07 09:22:50 -08:00
README.md move pi-mono into companion-cloud as apps/companion-os 2026-03-07 09:22:50 -08:00

@e9n/pi-channels

Two-way channel extension for pi — route messages between agents and Telegram, Slack, webhooks, or custom adapters.

Features

  • Telegram adapter — bidirectional via Bot API; polling, voice/audio transcription, allowedChatIds filtering
  • Slack adapter — bidirectional via Socket Mode + Web API
  • Webhook adapter — outgoing HTTP POST to any URL
  • Chat bridge — incoming messages are routed to the agent as prompts; responses sent back automatically; persistent (RPC) or stateless mode
  • Event APIchannel:send, channel:receive, channel:register for inter-extension messaging
  • Custom adapters — register at runtime via channel:register event

Settings

Add to ~/.pi/agent/settings.json or .pi/settings.json:

{
  "pi-channels": {
    "adapters": {
      "telegram": {
        "type": "telegram",
        "botToken": "env:TELEGRAM_BOT_TOKEN",
        "polling": true
      },
      "alerts": {
        "type": "webhook",
        "headers": { "Authorization": "env:WEBHOOK_SECRET" }
      }
    },
    "routes": {
      "ops": { "adapter": "telegram", "recipient": "-100987654321" }
    },
    "bridge": {
      "enabled": false
    }
  }
}

Use "env:VAR_NAME" to reference environment variables. Project settings override global ones.

Adapter types

Type Direction Key config
telegram bidirectional botToken, polling, parseMode, allowedChatIds, transcription
slack bidirectional botToken, appToken
webhook outgoing method, headers

Bridge settings

Key Default Description
enabled false Enable on startup (also: --chat-bridge flag or /chat-bridge on)
sessionMode "persistent" "persistent" = RPC subprocess with conversation memory; "stateless" = isolated per message
sessionRules [] Per-sender mode overrides: [{ "match": "telegram:-100*", "mode": "stateless" }]
idleTimeoutMinutes 30 Kill idle persistent sessions after N minutes
maxQueuePerSender 5 Max queued messages per sender
timeoutMs 300000 Per-prompt timeout (ms)
maxConcurrent 2 Max senders processed in parallel
typingIndicators true Send typing indicators while processing

Tool: notify

Action Required params Description
send adapter, text Send a message via an adapter name or route alias
list Show configured adapters and routes
test adapter Send a test ping

Commands

Command Description
/chat-bridge Show bridge status (sessions, queue, active prompts)
/chat-bridge on Start the chat bridge
/chat-bridge off Stop the chat bridge

Install

pi install npm:@e9n/pi-channels

License

MIT