Painel administrativo web para orquestração de agentes Claude Code com suporte a execução de tarefas, agendamento cron, pipelines sequenciais e terminal com streaming em tempo real via WebSocket.
149 lines
6.0 KiB
Markdown
149 lines
6.0 KiB
Markdown
# Agents Orchestrator
|
|
|
|
Painel administrativo web para orquestração de agentes [Claude Code](https://docs.anthropic.com/en/docs/claude-code). Crie, configure e execute múltiplos agentes com diferentes personalidades, modelos e diretórios de trabalho — tudo a partir de uma interface visual.
|
|
|
|
## Funcionalidades
|
|
|
|
- **Gerenciamento de agentes** — Crie agentes com nome, system prompt, modelo (Sonnet/Opus/Haiku), diretório de trabalho e tags. Ative, desative, edite ou exclua a qualquer momento.
|
|
- **Execução de tarefas** — Execute tarefas sob demanda em qualquer agente ativo. Templates rápidos incluídos (detecção de bugs, revisão OWASP, refatoração, testes, documentação, performance).
|
|
- **Terminal em tempo real** — Acompanhe a saída dos agentes via WebSocket com streaming chunk-a-chunk. Indicador de status de conexão e filtro por execução.
|
|
- **Agendamento cron** — Agende tarefas recorrentes com expressões cron. Presets incluídos (horário, diário, semanal, mensal).
|
|
- **Pipelines** — Encadeie múltiplos agentes em fluxos sequenciais. A saída de cada passo alimenta o próximo via template `{{input}}`. Ideal para fluxos como "analisar → corrigir → testar".
|
|
- **Dashboard** — Visão geral com métricas (agentes, execuções ativas, agendamentos), atividade recente e status do sistema.
|
|
- **Exportação** — Exporte a configuração completa de qualquer agente em JSON.
|
|
|
|
## Pré-requisitos
|
|
|
|
- **Node.js** 18+
|
|
- **Claude Code CLI** instalado e autenticado (`claude` disponível no PATH)
|
|
|
|
## Instalação
|
|
|
|
```bash
|
|
git clone <repo-url>
|
|
cd agents-orchestrator
|
|
npm install
|
|
```
|
|
|
|
## Uso
|
|
|
|
```bash
|
|
# Produção
|
|
npm start
|
|
|
|
# Desenvolvimento (hot reload)
|
|
npm run dev
|
|
```
|
|
|
|
Acesse **http://localhost:3000** no navegador. A porta pode ser alterada via variável de ambiente `PORT`.
|
|
|
|
## Como funciona
|
|
|
|
### Criando um agente
|
|
|
|
1. Clique em **Novo Agente** no header ou na seção Agentes
|
|
2. Configure nome, system prompt, modelo e diretório de trabalho
|
|
3. Salve — o agente aparecerá como card na listagem
|
|
|
|
### Executando uma tarefa
|
|
|
|
1. No card do agente, clique em **Executar**
|
|
2. Descreva a tarefa ou use um template rápido
|
|
3. Opcionalmente adicione instruções extras
|
|
4. A execução inicia e o terminal abre automaticamente com streaming da saída
|
|
|
|
### Criando um pipeline
|
|
|
|
1. Vá em **Pipelines** → **Novo Pipeline**
|
|
2. Adicione pelo menos 2 passos, selecionando um agente para cada
|
|
3. Opcionalmente defina um template de input usando `{{input}}` para referenciar a saída do passo anterior
|
|
4. Execute o pipeline fornecendo o input inicial
|
|
|
|
### Agendando uma tarefa
|
|
|
|
1. Vá em **Agendamentos** → **Novo Agendamento**
|
|
2. Selecione o agente, descreva a tarefa e defina a expressão cron
|
|
3. A tarefa será executada automaticamente nos horários configurados
|
|
|
|
## Arquitetura
|
|
|
|
```
|
|
server.js Express + WebSocket na mesma porta
|
|
src/
|
|
routes/api.js API REST (/api/*)
|
|
agents/
|
|
manager.js CRUD + orquestração de agentes
|
|
executor.js Spawna o CLI claude como child_process
|
|
scheduler.js Agendamento cron (in-memory)
|
|
pipeline.js Execução sequencial de steps
|
|
store/db.js Persistência em JSON (data/*.json)
|
|
public/
|
|
index.html SPA single-page
|
|
css/styles.css Estilos (Inter, JetBrains Mono, Lucide)
|
|
js/
|
|
app.js Controlador principal + WebSocket client
|
|
api.js Client HTTP para a API
|
|
components/ UI por seção (dashboard, agents, tasks, etc.)
|
|
data/
|
|
agents.json Agentes cadastrados
|
|
tasks.json Templates de tarefas
|
|
pipelines.json Pipelines configurados
|
|
```
|
|
|
|
O executor invoca o binário `claude` com `--output-format stream-json`, parseia o stdout linha a linha e transmite os chunks via WebSocket para o frontend em tempo real.
|
|
|
|
## API REST
|
|
|
|
| Método | Endpoint | Descrição |
|
|
|--------|----------|-----------|
|
|
| `GET` | `/api/agents` | Listar agentes |
|
|
| `POST` | `/api/agents` | Criar agente |
|
|
| `GET` | `/api/agents/:id` | Obter agente |
|
|
| `PUT` | `/api/agents/:id` | Atualizar agente |
|
|
| `DELETE` | `/api/agents/:id` | Excluir agente |
|
|
| `POST` | `/api/agents/:id/execute` | Executar tarefa no agente |
|
|
| `POST` | `/api/agents/:id/cancel/:executionId` | Cancelar execução |
|
|
| `GET` | `/api/agents/:id/export` | Exportar agente (JSON) |
|
|
| `GET` | `/api/tasks` | Listar tarefas |
|
|
| `POST` | `/api/tasks` | Criar tarefa |
|
|
| `PUT` | `/api/tasks/:id` | Atualizar tarefa |
|
|
| `DELETE` | `/api/tasks/:id` | Excluir tarefa |
|
|
| `GET` | `/api/schedules` | Listar agendamentos |
|
|
| `POST` | `/api/schedules` | Criar agendamento |
|
|
| `DELETE` | `/api/schedules/:taskId` | Remover agendamento |
|
|
| `GET` | `/api/pipelines` | Listar pipelines |
|
|
| `POST` | `/api/pipelines` | Criar pipeline |
|
|
| `GET` | `/api/pipelines/:id` | Obter pipeline |
|
|
| `PUT` | `/api/pipelines/:id` | Atualizar pipeline |
|
|
| `DELETE` | `/api/pipelines/:id` | Excluir pipeline |
|
|
| `POST` | `/api/pipelines/:id/execute` | Executar pipeline |
|
|
| `POST` | `/api/pipelines/:id/cancel` | Cancelar pipeline |
|
|
| `GET` | `/api/system/status` | Status geral do sistema |
|
|
| `GET` | `/api/executions/active` | Execuções em andamento |
|
|
|
|
## Eventos WebSocket
|
|
|
|
O servidor envia eventos tipados via WebSocket que o frontend renderiza no terminal:
|
|
|
|
| Evento | Descrição |
|
|
|--------|-----------|
|
|
| `execution_output` | Chunk de texto da saída do agente |
|
|
| `execution_complete` | Execução finalizada com resultado |
|
|
| `execution_error` | Erro durante execução |
|
|
| `pipeline_step_start` | Início de um passo do pipeline |
|
|
| `pipeline_step_complete` | Passo do pipeline concluído |
|
|
| `pipeline_complete` | Pipeline finalizado |
|
|
| `pipeline_error` | Erro em um passo do pipeline |
|
|
|
|
## Stack
|
|
|
|
- **Backend**: Node.js, Express, WebSocket (ws), node-cron, uuid
|
|
- **Frontend**: HTML, CSS, JavaScript vanilla (sem framework, sem bundler)
|
|
- **Ícones**: Lucide
|
|
- **Fontes**: Inter (UI), JetBrains Mono (código/terminal)
|
|
- **Persistência**: Arquivos JSON em disco
|
|
|
|
## Licença
|
|
|
|
MIT
|