Orquestração multi-agente sobre OpenClaw — clique em qualquer componente para expandir
Define o pipeline de agentes em YAML. O OpenClaw não sabe o que é um workflow.yml — é 100% conceito do Antfarm.
O que contém:
{{task}}, {{skill_name}}id: skill-create
steps:
- id: research
agent: researcher
input: |
Research requirements for: {{task}}
Reply with:
STATUS: done
SKILL_NAME: nome-da-skill
expects: "STATUS: done"
on_fail:
escalate_to: human
Relação com OpenClaw: O workflow.yml é interpretado pelo Antfarm CLI, que traduz cada step em cron jobs e sessões do OpenClaw. O gateway nunca vê o YAML.
Cada agente do Antfarm tem 3 arquivos Markdown — o formato é do OpenClaw, mas o conteúdo é escrito pelo Antfarm.
Quando o Antfarm instala: copia esses arquivos para o workspace do agente no OpenClaw (~/.openclaw/workspaces/workflows/). A partir daí, o OpenClaw os trata como qualquer outro workspace file — injeta no prompt do LLM.
O LLM vê: o conteúdo como parte do system prompt. Não sabe que veio do Antfarm.
Banco de dados exclusivo do Antfarm. NÃO é o SQLite de memória/embeddings do OpenClaw. São bancos completamente separados.
~/.openclaw/antfarm/antfarm.db ← ANTFARM (runs, steps, context) ~/.openclaw/memory/<id>.sqlite ← OPENCLAW (embeddings, busca semântica) NÃO se falam. São sistemas independentes.
Tabelas do antfarm.db:
Context JSON: acumula KEY:VALUE de cada step completado. Quando o step 2 precisa de {{skill_name}}, o Antfarm busca no context do run.
O Antfarm NÃO roda processos próprios. Ele registra cron jobs no OpenClaw que fazem polling a cada 5 min.
FASE 1 — PEEK (barata, ~2s) ┌─────────────────────────────────────────────┐ │ Cron dispara → OpenClaw spawna sessão │ │ Agente executa: step peek│ │ Resultado: NO_WORK → para. HAS_WORK → fase 2│ └─────────────────────────────────────────────┘ FASE 2 — CLAIM + TRABALHO (completa, ~1-5 min) ┌─────────────────────────────────────────────┐ │ Agente executa: step claim │ │ Recebe: {"stepId":"...", "input":"..."} │ │ Trabalha (sessão fresh, sem memória) │ │ Executa: step complete │ │ Output com KEY: VALUE → salvo no antfarm.db │ └─────────────────────────────────────────────┘
⚠️ Cada peek consome 1 chamada de API porque spawna uma sessão LLM. Com 3 agentes a cada 5 min = ~36 chamadas/hora. Crons devem ser deletados após workflow completar.
Quem faz o quê:
openclaw cron addstep peek/claim/complete roda dentro da sessãoWeb server próprio do Antfarm. NÃO é a Control UI do OpenClaw (que roda na :18789).
Acesso remoto: ssh -f -N -L 3333:127.0.0.1:3333 user@host → http://localhost:3333
Stack: Vanilla JS + HTML, zero dependências. Lê direto do antfarm.db.
Como dados fluem entre agentes que nunca se comunicam diretamente. Cada sessão é 100% isolada.
Step 1 (Pesquisador) output: Step 2 (Desenvolvedor) input:
──────────────────────── ─────────────────────────
STATUS: done SKILL_NAME: {{skill_name}}
SKILL_NAME: youtube-summary → SCOPE: {{scope}}
SCOPE: extrair legendas... TOOLS_NEEDED: {{tools_needed}}
TOOLS_NEEDED: exec, read ...
┌───────────────────────┐
│ antfarm.db │
│ runs.context (JSON) │
│ Acumula tudo │
└───────────────────────┘
1. Agente 1 termina → output com KEY: VALUE
2. Antfarm parseia as linhas KEY: VALUE do output
3. Salva no campo "context" do run no SQLite
4. Quando agente 2 é ativado, Antfarm substitui
{{key}} no input do step pelo valor do context
O OpenClaw não participa desse handoff. É 100% lógica do Antfarm CLI. O OpenClaw só spawna as sessões — não sabe que existe um "pipeline".
Agendador de jobs built-in no gateway. O Antfarm registra crons de polling aqui.
openclaw cron add --name "job" --agent <id> \ --every 5m --session isolated \ --timeout-seconds 600 --message "prompt" openclaw cron list # Ver jobs ativos openclaw cron delete --id X # Remover job openclaw cron run --id X # Forçar execução
Como funciona:
~/.openclaw/cron/jobs.json--session isolated = sessão descartável (sem histórico)O LLM não sabe que crons existem — ele só recebe uma sessão nova com um prompt. Não sabe se veio de cron, WhatsApp ou CLI.
Sessões isoladas que o Antfarm spawna para cada step do workflow. JSONL append-only.
Formato: ~/.openclaw/agents/<id>/sessions/<key>.jsonl Cada agente do Antfarm roda em sessão isolada: - Sem memória de sessões anteriores - Sem acesso a outros agentes - Input vem do Antfarm (via cron prompt) - Output é capturado pelo Antfarm (KEY: VALUE) dmScope (isolamento): main → todos DMs na mesma sessão per-peer → isolado por sender per-channel-peer → isolado por canal + sender (recomendado)
Maintenance:
daily (reset às 4h), idle (após N min), manualrotateBytes: "10mb" — arquivo novo quando grandepruneAfter: "7d" — remove sessions velhasO Antfarm provisiona workspace files para cada agente no OpenClaw. O formato é do OpenClaw — o conteúdo é do Antfarm.
~/.openclaw/workspaces/workflows/<workflow-id>/<agent-id>/ ├── AGENTS.md # Regras operacionais (alta prioridade no prompt) ├── SOUL.md # Personalidade, tom, idioma └── IDENTITY.md # Nome e role Composição do system prompt: PI Core (base) → AGENTS.md → SOUL.md → Skills → Memory → Tool defs O OpenClaw monta tudo como um prompt gigante e envia ao LLM. O LLM "é" o agente porque leu essas instruções.
Isolamento total: cada agente tem workspace, auth e sessions próprios. Um não vê o outro.