English · Русский · 中文 · Español · Deutsch · Français · Português (BR) · 日本語
# Flock **Rode um time de desenvolvimento com IA do Claude Code no seu servidor e comande-o pelo chat.** Descreva uma funcionalidade no Telegram ou no VK; o time a planeja, constrói em uma branch, testa, revisa e abre um PR — cada chat em seu próprio workspace isolado. [](https://github.com/duckbugio/flock/actions/workflows/ci.yml) [](LICENSE) [](go.mod) [](https://github.com/orgs/duckbugio/packages) Ele roda na sua **assinatura Pro/Max** do Claude (sem cobrança por token) ou em uma chave de API da Anthropic, é distribuído como **imagens Docker pré-construídas** (sem etapa de build) e mantém cada chat em seu próprio workspace isolado em sandbox. ## Início rápido (Docker) ```bash git clone https://github.com/duckbugio/flock cd flock/adapters/telegram cp .env.example .env # fill in the REQUIRED block (4 values) docker compose up -d ``` Isso baixa a imagem pré-construída `ghcr.io/duckbugio/flock-telegram` — sem build, sem Ansible — então é só mandar mensagem para o seu bot. O `.env` mínimo: | Variável | O que é | |---|---| | `TELEGRAM_BOT_TOKEN` | obtido com o [@BotFather](https://t.me/botfather) | | `TELEGRAM_BOT_USERNAME` | o @username do seu bot (sem `@`) | | `ALLOWED_USERS` | IDs de usuário do Telegram, separados por vírgula, com permissão de uso do bot | | `CLAUDE_CODE_OAUTH_TOKEN` | `claude setup-token` (assinatura) — *ou* defina `ANTHROPIC_API_KEY` | Todo o resto em [`.env.example`](adapters/telegram/.env.example) tem valores padrão sensatos. Atualize mais tarde com `docker compose pull && docker compose up -d`. ### Modo secretário do Telegram Ative o modo para o bot no @BotFather e escolha os chats privados acessíveis no Telegram. O proprietário da conta deve constar em `ALLOWED_USERS`. `SECRETARY_MODE=approval` envia um rascunho ao proprietário para enviar ou descartar; `SECRETARY_MODE=auto` responde imediatamente. As respostas usam o provedor e o modelo de IA escolhidos separadamente para o bot (`AI_BACKEND`); o Telegram não escolhe outro modelo. Com Claude, o secretário usa o agente Flock completo, incluindo ferramentas, MCP e uma sessão persistente por chat Business. Defina um limite de gastos no provedor antes de ativar respostas automáticas. [Detalhes em inglês](README.md#telegram-secretary-mode). Por enquanto, o modo secretário só funciona com `AI_BACKEND=claude`; com outros provedores, o bot continua funcionando sem processar mensagens Business. Conceda acesso apenas a chats cujos participantes sejam confiáveis para usar as ferramentas e o MCP do Flock. A aprovação controla apenas a resposta enviada: ferramentas podem agir antes da sua aprovação, e cancelar a execução não desfaz essas ações. > **Região:** hospede em uma **região suportada pela Anthropic** (alguns países, por exemplo, RU/CN, sofrem geobloqueio) — caso contrário, as chamadas ao Claude falham. O **VK** segue o mesmo padrão em [`adapters/vk/`](adapters/vk/), construído sobre o mesmo core e publicado como `ghcr.io/duckbugio/flock-vk`. Ele traz apenas um template de env (sem arquivo compose): `cp .env.example .env`, depois `docker run --env-file .env ghcr.io/duckbugio/flock-vk`. A autenticação do Claude e as configurações do core coincidem com as do Telegram; só mudam as três variáveis de transporte: | Variável | O que é | |---|---| | `VK_BOT_TOKEN` | token de acesso da comunidade (comunidade VK → Gerenciar → Uso da API → token de acesso) | | `VK_GROUP_ID` | o id numérico da sua comunidade (servidor de long-poll + parse de menção) | | `VK_ALLOWED_USERS` | IDs de usuário do VK, separados por vírgula, com permissão de uso do bot | ## Destaques - **A conversa é a fonte da tarefa** — descreva o que você quer no chat e revise o PR que volta; o shell e o editor do agente ficam em sandbox dentro do container. - **Um pipeline de time de desenvolvimento de verdade, não um único prompt** — critérios de aceitação spec-first, gates de build/regressão e um árbitro que quebra loops. - **Multi-transporte** — **Telegram** e **VK** hoje, ambos sobre o mesmo core; uma nova plataforma é um adaptador fino, não um fork. - **Reações a PRs sem webhooks de entrada** — o bot *consulta* (poll) seu host git em busca de novos comentários de revisão e roteia cada um de volta ao chat que abriu o PR. - **Amigável a assinaturas** — autentique-se com um token Pro/Max do Claude (sem custo por token) ou com uma chave de API da Anthropic. ## Como funciona ``` You (in a chat): "implement X across the api + web services" → bot's Claude (Lead) → planner → confirm scope → coder ⇄ tester → PR per repo → reviewer (inline comments) ⇄ coder → arbiter ├ APPROVE → you merge └ ESCALATE → asks you ``` Os cinco subagentes — **planner → coder → tester → reviewer → arbiter** — rodam como subagentes nativos do Claude Code em [`core/agents/`](core/agents/). Uma pergunta simples é apenas respondida; um pedido de build aciona o time. O **arbiter** é quem quebra o loop (ciente de risco, com limite de ciclos) para que os agentes nunca fiquem rodando para sempre. As branches são nomeadas `duck/