Swarm — convenções de código e operação
Onde mora o quê, regra "nunca /tmp ou hermes local", como adicionar tools/agentes/migrations.
Convenções swarm
Origem dessa nota: incidente 2026-05-31. Repo /home/swarm/ não existia (zero .git), 12+ scripts úteis vagando em /tmp/ (some no reboot), arquivos transit no Windows C:\Users\User\hermes\.tmp_*.py. User flagou — corrigido com git init + estrutura organizada + sanitização secrets.
Layout do repo /home/swarm/
/home/swarm/ (git main)
├── .secrets.env ← gitignored, único lugar com credenciais (root 600)
├── .gitignore ← cobre secrets, sessions, kits gerados, node_modules
├── DEPLOY.md ← bootstrap guide
├── README.md
├── config/ ← mirror sanitized de coisas que vivem em /root/.openclaw
│ ├── agents/<nome>/AGENTS.md
│ ├── openclaw.template.json (${ENV} placeholders)
│ ├── systemd/<*.service|*.timer>
│ └── crontab.swarm
├── openclaw/
│ ├── scripts/
│ │ ├── swarm-mcp.mjs ← tools MCP (1700+ linhas)
│ │ ├── cakto/ ← seed_products.py, upload_covers.py, build_session_state.py
│ │ ├── migrations/ ← *.sql numbered
│ │ ├── maintenance/ ← one-shot ops scripts
│ │ ├── campaign_manager_cron.sh
│ │ ├── smoke_tests.sh
│ │ ├── phase1_finalize.sh
│ │ └── CHANGELOG.md
│ └── workspace/ ← runtime: AGENTS/SOUL/USER/MEMORY/HEARTBEAT .md (versionados); pdf/xlsx gerados (ignored)
├── dashboard/ ← Astro SSR + React islands
├── scraper/ ← Playwright reutilizável
├── infra/ ← docker-compose.yml (swarm-db Postgres + dashboard)
└── db/schema.sql ← schema canônico
Regra cardeal — nunca /tmp/, nunca hermes\.tmp_* local-only
/tmp/no VPS some no reboot. Scripts úteis lá = perdidos.C:\Users\User\hermes\.tmp_*.pyno Windows = invisível ao repo. Só serve como transit parabase64 → ssh → /home/swarm/.... Deletar imediatamente após transfer.- Toda mudança operacional vai pro repo. Sem exceção.
Como adicionar tool MCP nova
- Edita
openclaw/scripts/swarm-mcp.mjs, insere bloco antes deconst transport = new StdioServerTransport(). node --checkvalida sintaxe (não pula).- Se precisa env var: adiciona em
.secrets.envE em/root/.openclaw/openclaw.json(mcp.servers.swarm.env). systemctl --user restart openclaw-gatewayrecarrega.- Smoke: invoca via auditor pedindo pra listar a tool por nome.
Como adicionar agente specialist
mkdir -p /root/.openclaw/agents/<nome>/agent- Escreve
AGENTS.mdcom role+regras (idioma pt-BR ok, código en). - Adiciona entrada em
/root/.openclaw/openclaw.json→agents.listcomid,name,workspace,agentDir,model.primary/fallbacks. - Mirror no repo:
cppraconfig/agents/<nome>/AGENTS.md, commit. - Restart gateway.
openclaw agents listconfirma.
Como adicionar migration
openclaw/scripts/migrations/NNN_<descricao>.sql(numerado sequencial)- Aplicar:
docker cp ... && docker exec infra-swarm-db-1 psql -U swarm -d swarm -f /tmp/x.sql - Commit no repo.
Secrets sanitization
- Nunca hardcoded em
.py/.mjsversionado. Sempre viaprocess.env.X/os.environ["X"]. .secrets.envé root 600, gitignored. Backup manual (não via git).openclaw.template.jsonno repo usa"DATABASE_URL": "${DATABASE_URL}"—envsubstno deploy substitui pelo valor real do.secrets.env.
Commits
- Feature-by-feature. Não bolos enormes.
- Mensagem:
<categoria>(<componente>): <o que mudou>+ body com por que. - Categorias:
mcp,agent,dashboard,config,migration,script,sanitize,docs. - Exemplo bom:
mcp(swarm): cakto_upload_image — SPA Bearer+cookies multipart endpoint
Sync entre /root/.openclaw/* e config/ no repo
Mudanças manuais em /root/.openclaw/ (agents, openclaw.json) devem ser refletidas no repo:
# bem manual por enquanto — TODO: cron de drift detection
cp /root/.openclaw/agents/agent-X/agent/AGENTS.md /home/swarm/config/agents/agent-X/AGENTS.md
git add -p && git commit