Integração Slack
Conecte o aidaemon ao seu workspace Slack via Socket Mode para mensagens em tempo real.
Binários Pré-compilados
Se você instalou via script de uma linha ou Homebrew, o suporte ao Slack já está incluído. Basta configurar o
config.toml abaixo. A feature flag é necessária apenas ao compilar a partir do código-fonte.Criar um App Slack
- Acesse api.slack.com/apps e clique em Create New App
- Escolha From scratch, nomeie (ex.: "aidaemon") e selecione seu workspace
- Em Socket Mode, habilite e gere um App-Level Token com o escopo
connections:write— este é seuapp_token(xapp-...) - Em OAuth & Permissions, adicione estes Bot Token Scopes:
channels:read— listar membros em canais públicoschat:write— enviar mensagensfiles:read— baixar arquivos enviados por usuáriosfiles:write— enviar arquivos para o Slackgroups:read— listar membros em canais privados (necessário para resolver nomes de usuário em canais privados)im:read— ler metadados de DM (necessário para transferências de arquivo em mensagens diretas)reactions:write— adicionar reações de status (ampulheta durante processamento)users:read— resolver informações de usuário
- Em Event Subscriptions, habilite eventos e inscreva-se em:
message.channels— mensagens em canais públicosmessage.groups— mensagens em canais privadosmessage.im— mensagens diretas
- Em App Home, role até Show Tabs e habilite a Messages Tab. Marque "Allow users to send Slash commands and messages from the messages tab" — sem isso, os usuários não podem enviar DM ao bot.
- Instale o app no seu workspace — copie o Bot User OAuth Token (
xoxb-...)
Configuração
config.toml
[slack]
enabled = true
app_token = "xapp-1-..."
bot_token = "xoxb-..."
allowed_user_ids = ["U123456789"]
use_threads = true| Key | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Habilitar o canal Slack |
app_token | string | — | Token de Nível de App para Socket Mode (xapp-...). Suporta "keychain" e ${ENV}. |
bot_token | string | — | Token OAuth de Usuário Bot (xoxb-...). Suporta "keychain" e ${ENV}. |
allowed_user_ids | array | [] | IDs de usuários do Slack permitidos para interagir. Vazio = sem restrição. |
use_threads | bool | true | Responder em threads por padrão. Cada thread tem seu próprio contexto de sessão. |
Encontrar Seu ID de Usuário do Slack
Clique no seu perfil no Slack, depois clique em More → Copy member ID. O formato é U seguido de caracteres alfanuméricos (ex.: U0123ABCDEF).
Funcionalidades
- Socket Mode — conexão WebSocket em tempo real, sem URL público necessário
- Respostas em threads — conversas em threads configuráveis com contexto de sessão por thread
- Transferência de arquivos — envie e receba arquivos pelo Slack
- Aprovações Block Kit — botões interativos para aprovação de comandos de terminal
- Comandos slash — mesmos comandos do Telegram (
/cost,/model,/tasks, etc.) - Reações de status — emoji de ampulheta durante processamento, removido ao completar
- Conversão Markdown — markdown padrão convertido automaticamente para formato mrkdwn do Slack
- Fragmentação de mensagens — respostas longas divididas para respeitar o limite de 39KB do Slack
- Reconexão automática — backoff exponencial em falha de conexão (5s → 60s máximo)
Modelo de Sessão
Sessões do Slack são identificadas por canal e thread:
- Mensagem de canal:
slack:{channel_id} - Mensagem de thread:
slack:{channel_id}:{thread_ts}(quandouse_threadsestá habilitado)
Cada sessão mantém seu próprio histórico de conversa, memória de trabalho e contexto de fatos.
Controle de Acesso
Se
allowed_user_ids estiver vazio, qualquer pessoa no workspace que possa enviar mensagens ao bot pode interagir com ele. Sempre defina isso em produção.