Skip to content

Channels

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

Channel Use Case Session ID
CLI Development, personal use Fixed per terminal
Telegram Mobile access, group chats Chat ID
REST API Integration, web apps Caller-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:

Strategy Effect
Per-user Each user has separate conversations
Per-chat Group members share conversation
Per-device Same user has different conversations per device
Fixed Everyone 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)