Canais e gateway
O gateway é channel-agnóstico: uma abstração Channel (poll/send/allowed) com um bot por agente, sessões persistentes e retomáveis, e go/no-go por chat. okami gatewa…
Modelo do gateway
Cada agente tem um Channel (seu bot) → sessões por chat (histórico injetado como contexto = continuidade) → run_task no workspace do agente. As sessões usam um transcript append-only de 2 camadas (estilo OpenClaw): um mapa pequeno de metadados reescrito atomicamente + um .jsonl em árvore, uma linha por turno. Um crash perde no máximo a última linha — e o restart não perde o contexto.
| canal | estado |
|---|---|
| terminal | TUI de tela cheia + REPL concorrente |
| telegram | DM + grupo + voz (Whisper local → Edge TTS, pt-BR) |
| slack · discord · mattermost | adapters sobre a mesma interface Channel |
| paperclip | control plane que acorda o agente num heartbeat |
Telegram
O token do bot vai no agent.yaml de cada agente (channels.telegram.token); allow_chats restringe quem pode falar. Com o extra voice, áudio recebido é transcrito por Whisper local e a resposta volta em áudio via Edge TTS.
uv sync --extra voice # habilita STT/TTS
okami gateway # sobe um long-poll por agenteSlash commands no chat
/new · /reset limpam a conversa; /stop cancela de verdade (checado a cada passo do harness); /yolo · /normal alternam a auto-aprovação por sessão. Concorrência: uma tarefa por sessão; mensagem nova enquanto ocupado entra na fila.
Paperclip (heartbeat)
O Paperclip é um control plane que acorda o agente num pulso. okami heartbeat faz UMA batida:
GET /api/agents/mee lista as issues atribuídas.- Checkout da issue (409 = de outro agente; nunca repete).
- Monta o contexto e roda no harness (
run_task). PATCHdo status: done · blocked · in_review.
Go/No-Go vira um POST .../interactions (request_confirmation): --mode defer adia ações sensíveis para confirmação humana. As env do Paperclip são injetadas por-run — você não preenche à mão.

