Skip to content

Channels

Channels are the interfaces through which users interact with Maestro. Write your agent logic once, deploy to multiple platforms.

ChannelUse CaseSession ID
CLIDevelopment, personal useFixed per terminal
TelegramMobile access, group chatsChat ID
REST APIIntegration, web appsCaller-provided

Best for: Development, testing, personal assistant use

Terminal window
npm run cli

Features:

  • Interactive REPL interface
  • Streaming responses
  • Built-in commands (/help, /clear, /cost)
  • Colored output

Session ID is fixed to the terminal, so you get conversation continuity.

With Docker Compose, you can run all channels simultaneously:

Terminal window
docker compose up -d

This starts:

  • Telegram bot
  • REST API on port 3000

All channels share the same:

  • Agent configurations
  • Memory (SQLite)
  • Tools
  • Orchestrator

Streaming (SSE):

Terminal window
curl -X POST http://localhost:3000/chat \
-H "Content-Type: application/json" \
-d '{"message": "Hello", "sessionId": "user-123"}'

Non-streaming:

Terminal window
curl -X POST http://localhost:3000/chat \
-H "Content-Type: application/json" \
-d '{"message": "Hello", "sessionId": "user-123", "stream": false}'
Terminal window
curl http://localhost:3000/chat/user-123
Terminal window
curl http://localhost:3000/agents

Channels implement a simple interface:

interface Channel {
// Start receiving messages
start(): Promise<void>;
// Stop the channel
stop(): Promise<void>;
}

A channel:

  1. Receives messages from its platform
  2. Transforms to the common format
  3. Calls the orchestrator
  4. Returns the response in platform format

How you generate session IDs affects conversation isolation:

StrategyEffect
Per-userEach user has separate conversations
Per-chatGroup members share conversation
Per-deviceSame user has different conversations per device
FixedEveryone shares one conversation

Choose based on your use case:

  • Personal assistant: Per-user or per-device
  • Team bot: Per-chat
  • Demo: Fixed
  • Telegram: Uses Telegram’s authentication
  • CLI: Local access only
  • API: No built-in auth (add middleware for production)