Como criar um agent AIOX do zero: config.yaml, persona, capabilities, validation

Tutorial executável: como construir um agent AIOX do zero, passando pelos 4 tipos de executor, config.yaml, persona, capabilities, agent authority e validação local. Padrão observado em 50+ squads que ajudamos a montar na AIOX.

Por Publicado em 10 min de leitura

Principais conclusões

  1. 01Agent AIOX tem 4 tipos de executor (Agent, Worker, Specialist, Operator). Cada um tem authority, accountability e canal de invocação distintos.
  2. 02config.yaml é o contrato do squad: pack, entry_agent, agents, capabilities, artifact_contracts. Sem ele válido, o squad não sincroniza com Claude Code, Gemini ou Cursor.
  3. 03Persona em .md define decision framework. Voice DNA em workspace/people/{slug}/ injeta tom de pessoa real durante geração de conteúdo.
  4. 04Agent authority é exclusiva e bloqueada por hooks: @devops empurra código, @db-sage migra schema, @architect decide arquitetura. Outros agents propõem; não executam.
  5. 05Em 50+ squads observados na AIOX, 3 anti-patterns matam o agent: persona vazia, capability sem task definition, e bypass de authority via hook.

Tutorial executável: como construir um agent AIOX do zero, passando pelos 4 tipos de executor, config.yaml, persona, capabilities, agent authority e validação local. Padrão observado em 50+ squads que ajudamos a montar na AIOX.

O que é um agent AIOX (e por que não é só mais um "AI assistant")?

Agent não é bot. Não é assistant. Não é "AI helper".

Agent AIOX é uma entidade com authority, accountability e contrato de execução. Tem nome, persona, capabilities declaradas e um config.yaml que serve de fonte de verdade. Quando um agent age, há decisão atribuída a ele. Quando algo dá errado, há responsável claro.

Esse é o ponto que LangChain, CrewAI e AutoGen não resolvem por design. LangChain dá building blocks (chains, tools, memory). CrewAI orquestra crews multi-agent. AutoGen estrutura conversas entre agents. Nenhum dos três governa quem decide o quê.

AIOX encara o problema pela governança. Cada agent tem authority exclusiva: @devops empurra código, @db-sage migra schema, @architect decide arquitetura. Cada squad tem 4 tipos de executor. Cada artefato tem owner squad. Cada decisão fica rastreável.

Em 7.500+ sessões Claude Code que rodamos na AIOX, vimos um padrão claro. Agents sem authority delegada viram bots: respondem, mas ninguém sabe quem aprovou. Agents com authority, accountability e contrato viram squad: respondem, decidem e ficam auditáveis.

A diferença prática? Bots quebram em produção quando o volume cresce. Squads escalam.

Quais são os 4 tipos de executor — e qual o seu agent precisa ser?

AIOX define 4 tipos de executor. A escolha não é cosmética: define a authority, o canal de invocação e o nível de autonomia do agent.

Agent (executor primário). Invocado direto pelo usuário via slash command (/squad-name ou *command). Tem persona completa, decision framework próprio e pode delegar para outros executors. Exemplos: geo-chief, copy-chief, architect.

Worker (executor de tarefa). Invocado por chiefs via Agent tool. Não responde direto ao usuário. Executa uma task específica do squad e retorna artefato. Exemplo: geo-writer, chamado só pelo geo-chief.

Specialist (executor especializado). Worker com domain expertise concentrada. Tipicamente um por squad, foco em uma área crítica. Exemplo: db-sage para schema design e migrações.

Operator (executor humano). Slot reservado para operação humana. Quando o workflow exige decisão de pessoa real (sign-off, approval), o operator entra. Identidade resolvida via slot abstrato ({steward}, {accountable}) ou via slug do registry de pessoas.

Como decidir qual usar? Pergunta de filtro: o usuário invoca este agent direto, ou só através de outro agent?

Se direto, é Agent. Se sempre via chief ou orchestrator, é Worker ou Specialist. Se a decisão exige humano em loop, é Operator.

Em 50+ squads que ajudamos a montar na AIOX, o erro mais comum foi tratar tudo como Agent. Resultado: 12 slash commands no Claude Code, namespace poluído, usuário perdido. Reduzir para 1 entry agent + N workers internos cortou ruído e melhorou discoverability.

Como estruturar o config.yaml do squad?

config.yaml é o contrato. Sem ele válido, o squad não sincroniza com Claude Code, com Gemini, com Cursor. Não vira slash command. Não aparece no registry.

Estrutura mínima:

pack:
  name: meu-squad
  version: 1.0.0
  description: "O que esse squad faz em uma frase."
  icon: "🎯"

slash_prefix: "/meu-squad"
entry_agent: meu-squad-chief

agents:
  - id: meu-squad-chief
    methodology: orchestrator
    specialty: "Coordenação multi-agente do domínio X"
    tier: orchestrator
  - id: meu-squad-worker
    methodology: pipeline-executor
    specialty: "Executor pesado da pipeline"
    tier: worker

capabilities:
  - id: cap-1
    description: "Executa missão Y"
    activation: "*missao-y"

activation:
  shortcuts:
    - command: "*help"
      description: "Show numbered commands"

artifact_contracts:
  - artifact: missao-report
    template_path: "templates/missao-report.template.md"
    lifecycle_states: [PLACEHOLDER, DRAFT, POPULATED, APPROVED]

bu_mapping:
  - aiox
  - allfluence

supported_modes:
  - CRIAR
  - EXECUTAR

Cinco campos importam mais que os outros: pack.name, entry_agent, agents[], capabilities[], artifact_contracts[].

Sem entry_agent declarado, o IDE sync não publica skill /meu-squad no Claude Code. Workers internos continuam invocáveis por chiefs, mas o usuário final perde o entry point.

bu_mapping declara para quais negócios o squad atende (aiox, allfluence, academia-lendaria, bilhon, ou múltiplos). artifact_contracts lista o que o squad produz e onde os templates vivem. Sem isso, validators marcam o squad como incompleto.

Como organizar a estrutura de diretórios do squad?

Squads AIOX seguem layout fixo. Validators rodam contra esse layout. Sair dele quebra o sync.

Layout canônico:

squads/meu-squad/
  config.yaml              # Contrato (obrigatório)
  agents/                  # Personas .md (uma por agent)
    meu-squad-chief.md
    meu-squad-worker.md
  tasks/                   # Protocolo executável .md (uma por capability)
    missao-y.md
  workflows/               # Sequências .yaml (compõe tasks)
    full-mission.yaml
  templates/               # Output templates
    missao-report.template.md
  data/                    # Knowledge base, registries, blacklists
  checklists/              # Critérios de validação
  scripts/                 # CLI determinísticos opcionais

Quatro regras inegociáveis sobre o layout. Filenames em kebab-case (não snake_case, não PascalCase). Filename do agent bate com o id declarado em config.yaml. Templates terminam em .template.md ou .template.yaml para o validator distinguir output gerado de template canônico. Scripts em scripts/ rodam sem dependências externas (sem npm install no escopo do squad).

KISS aplica aqui. Arquivos ficam flat dentro de cada subdir. Sem subpasta capabilities/{name}/ agrupando arquivos por capability. Sem aninhamento desnecessário. Quando alguém propõe estrutura, a regra vale: cite falha real, mostre alternativa cheaper, mensure benefício, faça teste de 24h. A maioria das propostas de estrutura não sobrevive ao teste.

A razão é prática. Em 50+ squads montados, dirs aninhados quebram navegação humana, validators precisam scan recursivo, e o ganho de organização é zero quando há menos de 5 arquivos no nível. Flat é default. Estrutura só entra com evidência de ganho mensurável. ADR-018 da AIOX documenta o caso: padrão capabilities/ foi proposto, implementado e rejeitado depois que dois squads provaram que aninhar arquivos gerou mais complexidade que valor.

Como escrever a persona do agent?

Persona vive em squads/meu-squad/agents/meu-squad-chief.md. Filename é kebab-case e bate com o id declarado em config.yaml.

A estrutura é YAML embedded em Markdown. Os blocos canônicos:

agent:
  name: meu-squad-chief
  id: meu-squad-chief
  title: "Squad Orchestrator"
  whenToUse: "Use para [missão específica do domínio]"

persona:
  role: "Como o agent se identifica"
  style: "Adjetivos sobre tom (decisive, methodical, etc.)"
  identity: "Frase em primeira pessoa que o agent adota"
  focus: "O que o agent prioriza em cada interação"

commands:
  - "*help — Show numbered commands"
  - "*missao-y {input} — Executa missão Y"

core_principles:
  - DELEGATE_ALWAYS: "Como o agent decide delegar"
  - VETO_RULES: "O que faz o agent parar"

handoff_to:
  - agent: "@devops"
    when: "Push, PR, deploy"
    contract: "Format do handoff"

completion_criteria:
  - "O que conta como missão completa"

Voice DNA opcional via referência a workspace/people/{slug}/voice-dna.yaml. Quando ativado, o agent adota o tom de uma pessoa real (Alan no AIOX, Pedro no AIOX, Thiago no Hormozi). O writer Phase 3 lê o voice DNA e injeta como system prompt addendum durante a geração.

Persona vazia é o anti-pattern mais frequente. Agent declarado em config.yaml com .md de duas linhas vira shell sem decision framework. Quando invocado, responde genérico. O agent existe no filesystem mas não opera.

Como definir capabilities e activation shortcuts?

Capability é o que o agent faz. Activation shortcut é como ele é invocado.

Em config.yaml:

capabilities:
  - id: cap-research
    description: "Pesquisa keyword + competidores + gaps"
    activation: "*research"
    inputs:
      - keyword: string
      - lang: string
    outputs:
      - research-dossier: yaml
  - id: cap-generate
    description: "Gera artigo from keyword"
    activation: "*generate {keyword}"
    inputs:
      - keyword: string
    outputs:
      - draft: markdown
      - draft-payload: json

activation:
  shortcuts:
    - command: "*help"
      description: "Show numbered commands"
    - command: "*status"
      description: "Show current mission state"

Cada capability deve ser invocável via shortcut. Cada shortcut aponta para uma capability ou para um comando interno do agent.

Capability sem task definition em tasks/{name}.md é o segundo anti-pattern mais comum. O agent declara que faz X, mas não tem o protocolo executável documentado. Quando outro chief delega, não há contrato. Quando o usuário invoca, o agent improvisa. Resultado: drift entre o que o squad promete e o que entrega.

Regra prática: toda capability não trivial deve ter task file tasks/{capability-name}.md com Entrada, Saida, Pre-condicoes, Post-condicoes, Checklist e Performance. Validator local (npm run validate:squad-structure) checa esse contrato.

Como conectar o agent a tasks e workflows?

Tasks são o protocolo executável. Workflows são a sequência.

Task file (squads/meu-squad/tasks/missao-y.md):

---
task: missaoY()
responsavel: meu-squad-chief
responsavel_type: Agent
executor: meu-squad-worker
atomic_layer: Organism
domain: Estrategico
Entrada:
  - nome: input_path
    tipo: string
    obrigatorio: true
Saida:
  - nome: output_report
    tipo: markdown
    path: outputs/meu-squad/{slug}/report.md
Pre-condicoes:
  - "Input file exists"
Post-condicoes:
  - "Report file written"
Checklist:
  - "Step 1 done"
  - "Step 2 done"
---

Workflow file (squads/meu-squad/workflows/full-mission.yaml):

name: full-mission
description: "Pipeline completa da missão Y"
phases:
  - id: P1
    name: "Research"
    task: "tasks/research.md"
    executor: "meu-squad-worker"
  - id: P2
    name: "Synthesis"
    task: "tasks/synthesize.md"
    executor: "meu-squad-chief"
    inputs_from_previous: true

Tasks são átomos. Workflows compõem átomos em sequência. Agents executam. Chiefs orquestram.

A regra de ouro do AIOX: uma task validada é lei. Implementação muda, executor muda, mas a Entrada, Saida, Pre-condicoes e Post-condicoes ficam estáveis. Isso permite trocar Agent por Worker por Operator sem reescrever workflow.

Como aplicar agent authority e validar o squad?

Agent authority é não-negociável no AIOX. Definida em .claude/rules/agent-authority.md:

AuthorityAgent exclusivo
git push, PR, release, deploy@devops
Database migrations, RLS, schema@db-sage
Architecture decisions@architect
Quality sign-off@qa
Story creation@sm
Story validation@po

Outros agents propõem; não executam. @dev escreve código mas chama @devops para empurrar. @db-sage desenha migration mas só executa em produção via @devops. Constitution Article II bloqueia violações via gates de hook.

Por que importa? Sem authority delegada, o agent assume tudo. Em produção, isso vira: agent rodou migration sem peer review, deploy sem QA, push sem PR. Um único agent com authority demais quebra três princípios constitucionais ao mesmo tempo.

Validação local antes de declarar squad pronto:

npm run validate:squads              # config.yaml structure
npm run validate:squad-structure     # dirs + artifact_contracts
npm run validate:reconciliation      # cross-ref registry/hooks/workflows
npm run doctor                       # full health check

Se algum falhar, o squad não vai pra registry. Se o squad não vai pra registry, IDE sync não publica skill. Sem skill publicada, usuário não consegue invocar. Toda validação que falha localmente vai falhar no CI também — paridade local-CI é princípio operacional do hub.

*sync-ecosystem reconcilia config.yaml × squads/aiox-squad/data/ecosystem-registry.yaml × hooks. Drift silencioso (squad existe mas registry não sabe) é o terceiro anti-pattern mais frequente. Roda *sync-ecosystem como último passo de cada criação.

Onde os agents falham — 3 anti-patterns observados em 50+ squads na AIOX

Em 50+ squads que ajudamos a montar, vimos 3 padrões de falha que se repetem.

Anti-pattern 1: Persona vazia. Agent declarado em config.yaml. Arquivo .md de duas linhas. Sem decision framework, sem core principles, sem handoffs. Quando invocado, o agent responde genérico. Quando outro chief delega, não há contrato. O sintoma: usuário invoca o agent e recebe resposta que poderia vir de qualquer LLM sem framework. A correção: persona mínima exige agent, persona, commands, core_principles e handoff_to. Sem esses cinco blocos, o agent não tem identidade própria.

Anti-pattern 2: Capability sem task definition. Agent declara capability *research mas tasks/research.md não existe. Outro chief tenta delegar, não acha protocolo, improvisa. Em 7.500+ sessões Claude Code, vimos esse padrão custar 30-50% de retrabalho em squads complexos. A correção: toda capability não trivial tem task file com Entrada/Saida/Pre-condicoes/Post-condicoes formalizadas. Validator local checa via npm run validate:squad-structure.

Anti-pattern 3: Bypass de authority. Agent não-@devops tenta git push. Agent não-@db-sage tenta migration. Hooks bloqueiam (enforce-git-push-authority.sh, enforce-migration-authority.sh), mas o sintoma aparece como "comando travado por hook desconhecido". A correção: o agent deveria ter delegado via handoff, não tentado executar direto. Constitution Article II é o gate. Quando o hook bloqueia, o agent está pedindo authority que não tem.

A regra geral: agent é entidade com escopo limitado, não LLM com prompt grande. Quando o agent tenta fazer tudo, vira assistente glorificado. Quando o agent delega para quem tem authority, vira squad operacional.

Próximo passo: rode *sync-ecosystem no seu squad recém-criado, confirme que apareceu no registry, e invoque via slash command para validar end-to-end.

#aiox #agent #ai-orchestration #framework #claude-code #tutorial #agent-authority

Perguntas frequentes

Preciso de framework para criar agents AI?
Não obrigatoriamente. Mas sem framework você reinventa decision-making, error handling e governance a cada projeto. Em 7.500+ sessões Claude Code observadas na AIOX, esse padrão custa 30-50% de retrabalho em squads complexos. AIOX é uma das opções; LangChain, CrewAI e AutoGen são outras com escopo distinto.
Qual a diferença entre agent AIOX e LangChain ou CrewAI?
LangChain é biblioteca de building blocks para LLM apps. CrewAI é orchestrator de multi-agent flows. AIOX é framework de governança: 8 layers, agent authority, story-driven, constitution-bound. Não competem entre si, resolvem problemas diferentes. AIOX não substitui LangChain; pode usar LangChain dentro de tasks AIOX.
O que muda se eu não declarar entry_agent no config.yaml?
O IDE sync não publica skill /squad-name no Claude Code. Workers internos continuam invocáveis por chiefs via Agent tool, mas o usuário final perde o entry point. Para o agent ficar acessível via slash command, entry_agent é obrigatório.
Como validar que o squad está funcionando?
Quatro comandos cobrem 95% dos casos: npm run validate:squads (config.yaml structure), npm run validate:squad-structure (dirs + artifact_contracts), npm run validate:reconciliation (cross-ref registry), npm run doctor (full health check). Sem essas checagens, drift acumula silenciosamente entre o que o squad promete e o que entrega.
Posso usar o mesmo squad em múltiplos negócios?
Sim. Squads em squads/{name}/ são business-agnostic por design. Workspace data isola contexto via L0-L4 per business. Slot abstrato como {steward} e {accountable} resolve identity at runtime, lendo o registry de pessoas. bu_mapping em config.yaml declara quais negócios o squad atende.

Sobre o autor

Alan Nicolas

Co-Founder & Extraction Architect

Filósofo-construtor, fundador da Academia Lendária e co-fundador da AIOX. Trabalha na interseção entre IA aplicada, extração de conhecimento, sistemas operacionais e criação de movimentos.

  • 7.500+ sessões Claude Code
  • US$28K+ investidos em desenvolvimento com IA
  • 20 trilhões de tokens processados
  • Fundador da Academia Lendária
  • Criador do framework AIOX