| name | stnl_project_agent_specializer |
| description | Descobre, materializa, revisa, atualiza e remove o conjunto minimo util de agents especializados de um repo alvo ja preparado por stnl_project_context ou, em greenfield, por stnl_project_foundation. |
STNL Project Agent Specializer
Missão
Ler a base documental consolidada de um repo alvo já preparado por stnl_project_context ou, em greenfield, por stnl_project_foundation, construir um modelo factual intermediário normalizado e materializar, com validação e repair controlado, o conjunto mínimo útil de agents locais no runtime indicado por target.
Esta skill também revisa, atualiza e deleta artifacts locais obsoletos no output gerenciado do target quando forem parte do conjunto gerenciado, mantendo o orchestrator alinhado ao conjunto real de agents presentes e sem referências quebradas para artifacts de agent inexistentes.
Esta skill é um utilitário global. Ela não é um agent do workflow do projeto alvo.
Quando usar
- quando o repo alvo já passou por
stnl_project_context ou, em greenfield, por stnl_project_foundation, e precisa do primeiro conjunto de agents especializados
- quando o output de agents do
target não existe, está incompleto, está em drift, ou contém artifacts gerenciados stale
- quando os docs do projeto evoluíram e os agents locais precisam refletir novos boundaries, stacks, comandos, superfícies ou ferramentas
- quando o
orchestrator local precisa voltar a refletir apenas os agents realmente materializados
- quando for preciso revisar ferramentas concedidas na metadata operacional
tools, remover excesso de privilégio e eliminar drift factual ou estrutural
Quando não usar
- antes de executar
stnl_project_context no repo alvo, ou stnl_project_foundation quando o repo ainda for greenfield/inception
- para inventar especialistas, workflows, boundaries ou integrações sem evidência suficiente
- para alterar os base agents canônicos, seu contrato, seus status, seus gates ou o versionamento do Sentinel
- para materializar
agent-contract-shape, agent-specialization-quality-gate ou status-gates no repo alvo na v1
- para criar GitHub Actions, arquivos em
.github/workflows/, ou qualquer automação confundida com workflow de agents
- para acoplar o conjunto especializado a um projeto específico de referência em vez do repo alvo atual
Pré-condições
- o workspace atual já é o repo alvo da especialização
stnl_project_context já rodou anteriormente no repo alvo, ou stnl_project_foundation já materializou uma fundação greenfield séria
- existe base documental mínima séria em
docs/**, especialmente docs/INDEX.md, docs/TBDS.md quando existir, docs/core/*, e os recortes de docs/units/* ou docs/features/* relevantes
- a base documental é suficiente para entender com honestidade as camadas reais ou declaradas do projeto, os principais boundaries e o shape mínimo do workflow local
- existe permissão para criar, atualizar e deletar artifacts gerenciados no output do
target escolhido e, se necessário, limpar referências gerenciadas obsoletas desse mesmo runtime
Inputs esperados no repo alvo
docs/** como source of truth principal, com prioridade especial para o material consolidado por stnl_project_context ou, em greenfield, por stnl_project_foundation
docs/core/TESTING.md, quando existir, como referência principal da matriz local de harness/checks para validation-eval-designer e validation-runner; quando a base vier de stnl_project_context, pode representar realidade factual observada, e quando a base vier de stnl_project_foundation, deve ser lido como estratégia declarada, expectativa de validação ou baseline documental até evidência observada na codebase
target opcional, com suporte mínimo a vscode e codex; quando omitido, usar vscode para preservar compatibilidade com o comportamento atual
- artifacts gerenciados já existentes no output do
target, quando existirem, para revisão de drift, coerência operacional, metadata e stale artifacts
- a codebase do repo alvo apenas quando os docs precisarem de confirmação, complemento ou desempate factual
- manifests de stack, scripts, testes, configs e entrypoints reais quando forem necessários para especializar comandos, provas, boundaries ou superfícies
allowed_models opcional quando o uso da skill quiser restringir ou ordenar a escolha de model dos agents especializados; quando houver mais de um item, tratar a ordem como mais forte/mais capaz primeiro e mais econômico/objetivo por último, salvo override explícito
model_policy opcional e avançado para governar a preferência de model por agent, role fina ou defaults de compatibilidade:
reasoning_default
coding_default
execution_default
agents
roles
Source of truth e ordem de evidência
Usar esta ordem de precedência no repo alvo:
docs/**, especialmente o kit consolidado por stnl_project_context ou, em greenfield, por stnl_project_foundation
- referências canônicas da skill e templates/base agents canônicos
- codebase do repo alvo, apenas quando necessário para validar ou completar entendimento
web, apenas como apoio para especializar stack, integrações, frameworks, padrões ou contexto técnico externo atual
web nunca substitui evidência factual do projeto alvo
Regras complementares:
docs/** descreve a verdade documental do projeto alvo; artifacts gerenciados de agents descrevem a materialização operacional local do target e não substituem essa verdade documental
- o Sentinel não usa storage persistente externo para agents; o único estado persistente permitido é durable documentation em canonical docs under
docs/**
- nenhum agent Sentinel, template gerenciado ou reference agent pode criar, atualizar, depender, autorizar ou mencionar storage externo de fatos fora de
docs/**, incluindo caminhos externos de memória de repo ou canais persistentes equivalentes
- estado de feature deve ser tratado como
Feature CONTEXT em docs/features/<feature>/CONTEXT.md; documentação compartilhada deve ser tratada como shared canonical docs em docs/core/*, docs/TBDS.md, docs/INDEX.md e superfícies canônicas equivalentes já existentes
- vocabulário de materialização deve usar durable documentation, canonical docs under
docs/**, Feature CONTEXT, shared canonical docs e documentation targets; não introduzir contrato paralelo de memória
- quando a base vier de
stnl_project_foundation, preservar nos agents a diferenca entre declarado, observado, hipotese e TBD; nao transformar contrato esperado em implementacao existente
docs/core/TESTING.md, quando existir, é a referência primária para comandos canônicos, paths manuais aceitos, pré-requisitos e limites de harness dos agents de validação; tratar como factual observado quando a base vier de stnl_project_context, e como estratégia declarada quando a base vier de stnl_project_foundation até confirmação na codebase
- se docs e codebase conflitarem de modo material, não escolher por preferência nem por conveniência; nomear o conflito e bloquear quando ele impedir especialização honesta
- em conflito material envolvendo base de
stnl_project_foundation, seguir rota canônica: se a direção ainda for documental, encaminhar para stnl_project_foundation MODE=REFINE; se a autoridade estiver migrando para a codebase, encaminhar para stnl_project_foundation MODE=HANDOFF e depois para stnl_project_context quando aplicável
- na dúvida sobre qual fonte deve prevalecer, bloquear a especialização; esta skill não arbitra conflito estrutural entre docs fundacionais e codebase nascente por conta própria
- usar
web só depois da leitura séria do projeto e apenas quando contexto externo atual realmente mudar a qualidade da especialização
- o quality gate pós-geração valida contra o modelo factual intermediário e as referências já mapeadas; ele não é licença para um scan amplo novo por inércia
Regra de handoffs efêmeros de rodada
EXECUTION BRIEF, VALIDATION PACK e EXECUTION PACKAGE são handoffs operacionais de rodada. A skill deve preservar essa regra em todo specialized gerado:
- não criar nem exigir
execution_brief.md, validation_pack.md ou execution_package.md;
- não conceder
edit para planner, validation-eval-designer ou execution-package-designer por causa desses handoffs;
- não descrever esses handoffs como materializados quando não foram escritos por um workflow autorizado distinto;
- validar handoff de preparação apenas quando recebido do owner correto na rodada atual ou reenviado pelo
orchestrator;
- impedir busca em
workspaceStorage, chat-session-resources, content.txt, scratchpad ou paths temporários de runtime como fonte Sentinel;
- quando um consumidor downstream perder, não receber ou invalidar um handoff, ele deve retornar
HANDOFF_MISSING, HANDOFF_INVALID, REQUEST_REPLAY_FROM_ORCHESTRATOR ou REQUEST_REGEN_FROM_OWNER ao orchestrator, sem inventar conteúdo, reabrir escopo ou buscar arquivo temporário.
O orchestrator é o único dono da continuidade entre handoffs efêmeros: ele reenvia o handoff se ainda estiver no contexto, chama novamente o owner anterior para regenerar, volta um gate, ou bloqueia se a SPEC canônica não for suficiente.
Escopo operacional
- descobrir quais agents locais fazem sentido para o repo alvo
- construir um modelo factual intermediário normalizado antes de gerar qualquer specialized
- materializar apenas os agents necessários no output final do
target
- revisar e atualizar agents já existentes no output final do
target
- deletar artifacts gerenciados obsoletos no output final do
target quando estiverem stale, órfãos ou incoerentes com o conjunto decidido
- manter o
orchestrator alinhado ao conjunto real de agents materializados
- garantir que nenhum agent materializado continue referenciando artifact de agent inexistente no mesmo
target
- garantir shape operacional coerente com o
target em cada agent especializado do repo alvo
- aplicar um quality gate pós-geração separado do framing da geração
- reparar apenas os arquivos sinalizados pelo gate e revalidar antes de concluir
Agents canônicos que esta skill sabe gerir
coder-backend
coder-frontend
coder-ios
designer
execution-package-designer
finalizer
orchestrator
planner
reviewer
resync
validation-eval-designer
validation-runner
Role classes canônicas que a skill deve impor
Antes de especializar qualquer agent, a skill deve classificá-lo em uma role class canônica:
router: orchestrator
planning: planner
proof-design: validation-eval-designer
execution-package-design: execution-package-designer
executor: coder-backend, coder-frontend, coder-ios
design-contributor: designer
semantic-review: reviewer
proof-execution: validation-runner
closure: finalizer
sync: resync
Para cada role class, a skill deve impor no mínimo:
- tools permitidas
- tools proibidas
- classe de leitura permitida
- budget operacional padrão
- regras anti-role-drift
- tipos de output esperados
Regras:
- especialização local pode restringir mais, nunca relaxar os invariantes centrais da role class
- a inteligência executável pertence a
execution-package-design; coders continuam especialistas por stack/projeto, mas executam pacotes explícitos
- o custo principal de execução pertence aos coders dentro do pacote autorizado; broad discovery não é custo normal do coder
router e planning devem ficar deliberadamente mais fracos que os executors em leitura e ferramentas
proof-execution, closure e sync não podem compensar gaps upstream com rediscovery amplo
Referências canônicas que esta skill usa, mas não materializa no repo alvo na v1
agent-contract-shape
agent-specialization-quality-gate
execution-lifecycle
status-gates
Contrato obrigatório do bundle interno:
- antes de ler qualquer base agent, template ou contrato interno da skill, ler primeiro
reference/MANIFEST.md
- usar somente os paths explícitos listados em
reference/MANIFEST.md e necessários para a rodada
- não descobrir base agents, templates ou contratos internos por busca ampla, regex, glob, inspeção de árvore ou scan textual
- não usar fallback em
templates/**, skills/**, ~/.agents/**, filesystem externo ou qualquer cópia fora do bundle instalado da própria skill
- se
reference/MANIFEST.md estiver ausente, bloquear com BLOCKED_REFERENCE_BUNDLE_MISSING
- se qualquer arquivo obrigatório listado em
reference/MANIFEST.md estiver ausente, bloquear com BLOCKED_REFERENCE_BUNDLE_MISSING
- o bloqueio deve reportar a skill
stnl_project_agent_specializer, o arquivo ausente e a ação sugerida: node sentinel.mjs install e node sentinel.mjs doctor
- nunca reconstruir, adivinhar, simplificar ou procurar substituto para base agent, template ou contrato interno ausente
Referências internas esperadas devem vir do manifest instalado, incluindo:
- base agents canônicos em
reference/agents/
- template Codex em
reference/templates/codex/AGENTS.md
- template Codex de runtime config em
reference/templates/codex/config.toml
- contratos de agent em
reference/docs/agents/
- contratos de workflow em
reference/docs/workflow/
Contrato de target
target define o runtime operacional para o qual a skill vai materializar artifacts no repo alvo.
Targets suportados:
vscode: comportamento compatível com a v1 atual; materializa agents em .github/agents/*.agent.md
codex: materializa agents em .codex/agents/*.toml, materializa .codex/config.toml e materializa também AGENTS.md na raiz do repo alvo
Regras:
- quando
target for omitido, usar vscode
target sempre pertence ao repo alvo, nunca ao repo Sentinel Protocol
- o repo Sentinel Protocol mantém somente source of truth e templates internos; ele não é local válido para artifacts finais de nenhum target
- a semântica dos agents é target-agnostic e deve preservar missão, ownership, gates, role class, sequencing, status, handoffs e política de tools
- a semântica dos agents é target-agnostic também para terminal handoff: nenhum
target (vscode ou codex) pode relaxar executor READY/BLOCKED, consumer-side rejection de handoff inválido, runner apenas com artifact validável, ou finalizer com ledger explícito de DONE e resync
- a serialização final varia por target, mas a geração deve sempre partir dos templates internos da skill e das referências canônicas
vscode usa o shape Markdown com frontmatter operacional em .github/agents/*.agent.md
codex usa arquivos TOML em .codex/agents/*.toml com o shape próprio de custom agent do Codex, não como espelho do frontmatter endurecido de vscode
- o shape mínimo obrigatório Sentinel para custom agent TOML
codex contém:
name
description
model
model_reasoning_effort
sandbox_mode
developer_instructions
model é obrigatório em todo custom agent Codex gerenciado; herdar modelo da sessão, picker ou default implícito do runtime não é aceitável para artifacts Sentinel materializados
model_reasoning_effort é obrigatório em todo custom agent Codex gerenciado e deve ser derivado da criticidade da role class
sandbox_mode é campo opcional documentado do runtime Codex; por política Sentinel, todo custom agent Codex materializado deve serializar sandbox_mode
sandbox_mode deve ser derivado da role class e da capability real do agent:
read-only para agents que apenas leem, analisam, roteiam, revisam ou desenham
workspace-write para agents que precisam editar ou executar comandos locais
workspace-write só libera a capacidade técnica mínima exigida pelo papel; não autoriza absorver responsabilidade fora da role
validation-runner usa workspace-write por necessidade de execução local de checks, mas suas developer_instructions continuam proibindo edição, fix, redesign de prova, replanning ou closure
finalizer e resync usam workspace-write porque o contrato atual permite edit para durable documentation em canonical docs under docs/**
tools, agents, target, base_agent_version, specialization_revision, managed_artifact e reading_scope_class não fazem parte do shape mínimo obrigatório nativo de codex
- qualquer campo adicional em
.codex/agents/*.toml só pode ser emitido quando for opcional, compatível com a configuração suportada pelo runtime Codex e explicitamente separado do shape mínimo nativo
- se o Sentinel preservar metadata própria para
codex, essa metadata é convenção interna opcional do protocolo, nunca requisito nativo do runtime Codex, e deve ser omitida quando houver risco de incompatibilidade com o runtime
codex usa também AGENTS.md como instrução de workspace do runtime Codex
AGENTS.md do target codex deve nascer do template interno reference/templates/codex/AGENTS.md; nunca criar ou manter um AGENTS.md final no repo Sentinel como source paralela
.codex/config.toml do target codex deve nascer do template interno reference/templates/codex/config.toml; nunca criar ou manter uma .codex/config.toml final no repo Sentinel como source paralela
.codex/config.toml deve preservar [agents].max_depth = 1; essa profundidade é limite controlado para permitir subagents diretos do root/main somente quando explicitamente autorizados pelo humano (orchestrator e owners sibling/root-level mediados pelo root/main após ROUTE_PACKET) e bloquear nested owner threads abaixo do orchestrator, não autorização para spawn automático ou ampliação arbitrária da cadeia de roteamento
- referências internas entre agents devem usar o identificador lógico do agent e ser serializadas no formato físico do
target; não fixar .agent.md quando target=codex
- target desconhecido deve bloquear a materialização antes de qualquer escrita
Contrato de roteamento Codex
Quando target=codex, a semântica de handoff Sentinel é runtime-native:
- The main/root Codex session is the human-visible workspace entrypoint for Sentinel-governed work and must not spawn custom subagents automatically.
- Skill/workflow requests are not subagent authorization.
Use stnl_spec_manager, Use stnl_project_context, or Use stnl_project_agent_specializer means run that skill/workflow from root/main unless the human also explicitly requests a custom subagent by exact agent name.
- Custom subagents may be spawned only when the human explicitly requests a custom agent by exact name, such as
Use orchestrator, Use planner, Use coder-frontend, Use validation-runner, or another materialized .codex/agents/*.toml name.
- The
orchestrator custom subagent is the Sentinel routing controller only inside Explicit Subagent Invocation Mode and owns gate routing and specialist handoffs when explicitly requested.
- When the human explicitly requests
Use orchestrator, routing is parent-mediated: the orchestrator must return a compact ROUTE_PACKET naming the next canonical owner and must not spawn downstream Sentinel owners directly.
- In Explicit Subagent Invocation Mode, the root/main session is the only spawn executor for Sentinel owners; it validates the
ROUTE_PACKET, spawns the named owner as a native custom subagent by exact custom agent name, waits for the compact owner result, and returns to orchestrator for the next routing decision.
- The orchestrator must decide only among materialized Codex agents by exact custom agent name and must not absorb implementation, validation, review, package design, finalization responsibilities, or downstream owner execution.
- Direct root-to-owner spawning is not the default Sentinel-governed path and is reserved for explicit human requests for a specific custom subagent or non-Sentinel use.
- In Codex target, Sentinel handoff means native Codex custom subagent spawning by exact custom agent name after explicit human authorization.
- Full-history fork inheritance is not a Sentinel requirement; the handoff must not depend on full-history fork.
- If a full-history fork is refused, the flow may continue only when the runtime still creates a native agent thread for the explicitly requested custom subagent.
- The root/main payload to
orchestrator must be a minimal, task-scoped routing payload containing only task, repo, SPEC path when applicable, mode, objective, active decisions, and instruction to read applicable AGENTS.md, developer instructions, Sentinel docs/templates, and allowed repository docs/codebase.
- The durable Sentinel contract must live in
AGENTS.md, .codex/agents/*.toml, Sentinel source docs/templates, and allowed repo documentation/codebase, not in a full contract pasted into the prompt.
- The parent must wait for the subagent result before deciding the next gate.
ROUTE_PACKET must be compact: STATUS: ROUTE_READY | BLOCKED | TERMINAL, CURRENT_GATE, NEXT_OWNER, REASON, PAYLOAD, and BLOCKER only when real.
ROUTE_PACKET must not include full artifacts, full contracts, SPEC/checklist/logs/diffs, or broad transcript history; if a rich current-round handoff is needed, return a compact handoff summary or identifier, not a required file path.
- If the orchestrator tries to spawn a downstream Sentinel owner directly in Codex visual mode, that is a contract violation.
- If root/main chooses a Sentinel owner without a valid
ROUTE_PACKET or explicit human request for that exact custom agent name, that is a contract violation.
- If a requested task cannot be performed safely without a custom subagent and none was explicitly authorized, stop with
SUBAGENT_AUTH_REQUIRED; include the needed agent, short reason, and the minimum prompt preserving objective/context so the human can rerun with Use <agent>.
- Do not use
SUBAGENT_AUTH_REQUIRED for tasks a Sentinel skill/workflow can execute safely in root/main.
- Never emulate handoff with
codex exec, codex, shell, subprocesses, scripts, local CLI calls, or local continuation of another Sentinel role.
- Never pass the full Sentinel contract in the prompt as fallback, never call orchestrator without fork by pasting the full contract into a normal prompt, never claim that prompt replay preserves native handoff by name, and never continue locally as if acting as
orchestrator.
- If explicit subagent authorization exists but native custom-agent spawning cannot create the requested agent thread, or if
orchestrator is absent when explicitly requested, root/main cannot spawn the owner named in a valid ROUTE_PACKET, depth/config blocks routing, or the named custom owner agent is unavailable, stop with ROUTING_RUNTIME_BLOCKED.
ROUTING_RUNTIME_BLOCKED must include attempted owner, current gate, missing runtime capability or config, and minimum DEV action needed.
- Non-orchestrator agents must not spawn downstream Sentinel agents.
- Non-orchestrator agents must return their owned artifact/status/formal handoff signal to root/main; root/main returns to
orchestrator for the next route decision.
- Any phrase like "handoff to X" in a non-orchestrator agent means "return a formal handoff signal for root/main-mediated orchestrator routing", not direct spawning.
- Quality guardrails remain skills/constraints and must not become routeable agents.
- Codex
AGENTS.md Local Notes must stay compact and stable. They may include target repo shape, docs entrypoints, command/gap notes, and local constraints, but must not duplicate the Sentinel contract, SPEC contents, checklists, logs, diffs, or large artifacts.
Compact Agent Return Contract
Todo agent Sentinel materializado deve retornar ao parent/root/orchestrator somente o mínimo necessário para decidir o próximo gate.
Formato default de retorno:
STATUS: DONE | BLOCKED | PARTIAL | FAILED
OWNER: <agent-name>
GATE: <current gate or next gate>
FILES_CHANGED: <paths or none>
NEXT_OWNER: <agent-name or none>
VALIDATIONS: <command: pass/fail/not-run + short reason>
BLOCKER: <only if real blocker>
NOTES: <max 3 short bullets>
Regras globais:
- return only the minimum needed for the parent to decide the next gate
- Do not repeat the full Sentinel contract
- Do not paste full SPEC, checklist, logs, or diffs
- não repetir contrato Sentinel completo, prompt do usuário inteiro, SPEC, checklist, docs, logs, diff ou artifact completo no retorno textual
- quando um artifact rico existir em arquivo durável, return durable artifact path only for files actually written by an authorized role, plus compact summary; quando for
EXECUTION BRIEF, VALIDATION PACK ou EXECUTION PACKAGE, return compact handoff summary/status without requiring a path
- command output completo só aparece quando falhou e apenas no trecho mínimo necessário para diagnóstico
- Expand only on blocker, failure, critical validation evidence, or explicit human request
- root/main e
orchestrator devem manter a main chat focused on routing/status deltas
- o contrato compacto limita a superfície textual ao parent/chat; não reduz a qualidade nem a completude dos artifacts que precisam ser escritos no repo
- finalizer pode ser um pouco mais completo que outros papéis, mas ainda deve ser closure compacta com status, files changed, validations, qa coverage/manual gaps e next state
Contrato operacional de model e effort
Todo agent gerenciado materializado pela skill deve receber model operacional explícito.
Regras comuns:
- nunca entregar agent gerenciado sem
model
- nunca tratar texto em
developer_instructions como substituto do campo operacional model
model_policy é override opcional avançado; ausência de model_policy não impede materialização quando allowed_models, target e role class bastam para resolver a escolha
- se
allowed_models existir, todo model materializado deve vir dessa lista
- se
allowed_models trouxer um único modelo, usar esse modelo em todos os agents e ajustar apenas model_reasoning_effort em codex conforme a role
- se
allowed_models trouxer múltiplos modelos, interpretar a ordem como mais forte/mais capaz primeiro e mais econômico/objetivo por último, salvo model_policy explícita compatível
- não inventar nomes de modelos fora de
allowed_models nem hardcodar modelos comerciais específicos na skill
- se nem
allowed_models nem model_policy fornecerem base concreta suficiente para serializar model, bloquear com falta de input de resolução de modelo; não omitir model e não herdar picker/default implícito
Resolução default sem model_policy:
router, planning, proof-design, execution-package-design e semantic-review usam o modelo mais forte disponível dentro de allowed_models
executor e design-contributor podem usar modelo mais econômico quando a role e o pacote forem objetivos; com lista ordenada, usar o último modelo seguro da lista
proof-execution, closure e sync podem usar modelo mais econômico quando a função for objetiva e o contrato estiver delimitado
- quando a lista tiver apenas um modelo, todos usam esse modelo
- quando a lista tiver múltiplos modelos mas a diferença de capacidade não estiver clara pela ordem fornecida, bloquear em vez de adivinhar ranking
Effort por target:
codex deve serializar model_reasoning_effort em todo .codex/agents/*.toml gerenciado
- effort Codex default por role class:
high: router, planning, proof-design, execution-package-design, semantic-review
medium: executor, design-contributor
low: proof-execution, closure, sync
vscode e GitHub custom agents devem serializar model no frontmatter .agent.md
vscode e GitHub custom agents não devem serializar reasoning_effort, thinking_effort, model_reasoning_effort ou equivalente no frontmatter; qualquer guidance de effort para esse target deve ser texto não operacional e apenas quando necessário
- base agents canônicos fonte em
templates/agents/*.agent.md devem ficar com no máximo 28.000 caracteres antes de qualquer especialização local
.agent.md gerenciado para VS Code/GitHub continua respeitando o limite documentado de 30.000 caracteres no prompt Markdown do agent; se a especialização não couber, bloquear ou reduzir conteúdo local especializável, nunca remover blocos protocol-fixed ou hardening obrigatório
handoffs em VS Code/GitHub é suporte opcional futuro; não implementar por default sem uso Sentinel claro e gate seguro
hooks não devem ser gerados por default; se algum dia forem mencionados, devem permanecer opt-in explícito porque executam comandos
- marcas gerenciadas de
codex devem preferir comentário/header TOML, como # Sentinel managed artifact: true, em vez de campo runtime desconhecido; se essa marca não puder ser preservada com segurança, registrar follow-up e não improvisar chave operacional
Consistency without legacy propagation
Seguir o padrão do projeto não significa copiar dívida técnica.
Todo specialized deve preservar contratos, comportamento público, interoperabilidade, schema, APIs, rotas, fluxos e compatibilidade. Código novo deve usar a melhor prática segura compatível com a versão atual da stack, framework e bibliotecas já usadas no projeto.
Padrões existentes só devem ser seguidos quando forem:
- contrato real
- interoperabilidade necessária
- decisão arquitetural documentada
- requisito explícito do pacote de execução
- consistência local necessária para não quebrar comportamento
Padrões claramente ruins, frágeis, duplicados, inseguros, acidentais ou legados não devem ser propagados em código novo apenas porque existem no repo.
Essa política não autoriza:
- refactor amplo
- reescrita arquitetural
- troca de stack
- modernização oportunista fora do escopo
- quebra de contrato público
- alteração de schema/API sem autorização
- mudança de comportamento não solicitada
Aplicação por role:
orchestrator: impedir que a rodada vire refactor oportunista, rotear/fatiar quando a solução correta exigir mudança maior, e não tratar legado acidental como source of truth
planner: diferenciar contrato real, padrão intencional e legado acidental; nunca planejar "faça igual ao arquivo X" sem qualificar se aquilo é contrato ou referência
validation-eval-designer: validar comportamento e contrato sem exigir copiar desordem existente; identificar falta de harness ou decisão para melhorar sem quebrar
execution-package-designer: declarar OWNED_PATHS, contratos preservados e limites contra refactor amplo; permitir implementação local melhor quando segura; bloquear quando a melhoria correta exigir escopo maior
coder-backend, coder-frontend, coder-ios: executar apenas o pacote autorizado, escrever código novo com boa prática compatível com a stack atual, não copiar dívida técnica sem necessidade, e bloquear quando a solução segura exigir path ou contrato fora do pacote
validation-runner: provar contrato, build, test, lint e typecheck conforme disponível; não transformar preferência estética em falha; apontar dívida nova óbvia quando afetar qualidade ou contrato
reviewer: reprovar propagação desnecessária de dívida técnica e refactor amplo escondido; separar blocker real de preferência estética
finalizer: registrar follow-up quando a solução ideal exigir refactor fora do escopo; não transformar dívida descoberta em alteração escondida
resync: atualizar docs apenas quando houver decisão real consolidada; não documentar acidente local como novo padrão canônico
Princípios
- especializar por evidência, não por simetria
- materializar o conjunto mínimo útil, não o conjunto máximo possível
- preservar o contrato canônico dos base agents
- preservar a role class canônica de cada base agent
- tratar o shape operacional do
target como source of truth do artifact especializado
- aplicar least privilege em tools, leitura e execução
- preferir disciplina operacional a flexibilidade quando houver conflito
- materializar disciplina de superfície curta por default, não narrativa operacional
- preservar artifacts ricos no fluxo interno sem despejá-los no chat principal
- revisar o sistema de agents como um conjunto coerente, não como arquivos isolados
- preferir atualização de agent existente válido a recriação cega
- deletar stale artifacts gerenciados quando eles deixarem o sistema incoerente
- separar descoberta factual, geração, validação e repair
- bloquear em vez de inventar quando a base factual não sustentar a decisão
Modelo factual intermediário obrigatório
Antes de gerar ou revisar specializeds, a skill deve construir um modelo factual intermediário normalizado a partir de docs/**.
Esse modelo pode ser transitório e não precisa virar artifact persistido no repo alvo, mas a etapa é obrigatória. A geração e o quality gate devem operar sobre ele, não sobre improviso textual.
O modelo intermediário deve capturar, no mínimo:
- superfícies reais do sistema
- boundaries, ownerships e integrações relevantes
- stack, runtime, harness, comandos e entrypoints sustentados por evidência
- presença ou ausência de front-end, back-end, design/UI, validação estruturada e necessidade de
resync
- TBDs, exceções documentadas, padrões locais, exemplos de projeto e checks manuais presentes nas docs
- evidência de onde cada afirmação veio, com paths de docs e, quando necessário, referências complementares da codebase
- quais agents do conjunto canônico cada fato realmente impacta
Forma mínima sugerida por claim do modelo:
claim
class
evidence_refs
scope
affected_agents
confidence
notes
Regras:
- cada afirmação relevante que for parar nos specializeds deve poder ser rastreada a uma entrada do modelo factual intermediário
- o modelo deve preservar semântica e escopo, não só resumir por conveniência
- quando uma informação for fraca, local, condicional ou aberta, o modelo deve carregar essa fraqueza explicitamente
- se a skill não conseguir classificar honestamente um ponto importante, bloquear ou rebaixar a força da linguagem em vez de promover inferência
Classes factuais e política anti-overclaim
Toda afirmação operacional ou contextual relevante deve ser classificada em uma destas classes factuais antes de entrar nos specializeds:
confirmed_fact
- fato confirmado ou regra global sustentada por evidência forte nas docs
scoped_pattern
- padrão local, contextual ou limitado a boundary, camada, fluxo, feature, unidade, runtime ou recorte específico
project_example
- exemplo ilustrativo do projeto, útil para orientar leitura ou decisão, mas não normativo
open_tbd
- TBD, pergunta aberta, decisão pendente ou ponto sem fechamento factual
documented_exception
- exceção documentada que limita, qualifica ou invalida uma regra mais ampla em contexto específico
manual_check
- instrução de checagem manual nas docs, condição de verificação ou ponto que não pode virar afirmação factual fechada sem conferência
Regras operacionais:
project_example nunca pode virar regra global
scoped_pattern nunca pode ser promovido a convenção global sem evidência adicional forte
open_tbd deve preservar seu conteúdo semântico específico; não pode virar texto genérico esvaziado
documented_exception não pode desaparecer quando for relevante para um agent impactado
manual_check deve permanecer claramente marcado como checagem, não como fato já provado
- linguagem absoluta como
all, always, must, the project uses, the project never, the standard is ou equivalentes só pode ser usada quando a classificação e a evidência sustentarem esse grau de certeza
- na dúvida, rebaixar a linguagem para pattern, example, open question ou check-docs
Modelo de materialização local
- output canônico depende de
target
vscode: output de agents em .github/agents/*.agent.md
codex: output de agents em .codex/agents/*.toml, runtime config em .codex/config.toml e output complementar em AGENTS.md
- naming lógico: preservar o ID canônico do base agent, derivado do basename físico do arquivo, nunca o display label nem nome humanizado
- naming físico:
vscode: <agent>.agent.md
codex: <agent>.toml
- identidade operacional em
vscode: basename do arquivo sem .agent.md == frontmatter.name == referência em orchestrator.agents
- em
vscode, frontmatter.name é ID lógico canônico operacional em kebab-case; nunca usar title-case, display label ou versão humanizada nesse campo
- nos templates fonte
templates/agents/*.agent.md e no bundle instalado reference/agents/*.agent.md, frontmatter.name também deve ser exatamente o basename sem .agent.md; labels humanos pertencem somente ao heading Markdown, descrição ou corpo
- não renomear o agent para outro papel só porque o projeto é diferente
- manter a parte fixa do protocolo, os status canônicos, o ownership dos gates e o papel central de cada base agent
- usar
agent-contract-shape como referência de governança do shape especializado
- tratar o artifact final como shape normalizado canônico vigente, não como "base agent + remendos históricos"
- para
vscode, manter frontmatter operacional especializado compatível com o contrato canônico e com a materialização local:
name
description
target
tools
agents no orchestrator
model
base_agent_version
specialization_revision
managed_artifact: true
- para
codex, preservar o shape Sentinel obrigatório adotado para o runtime:
name
description
model
model_reasoning_effort
sandbox_mode
developer_instructions
- para
codex, o shape Sentinel materializado adiciona obrigatoriamente model, model_reasoning_effort e sandbox_mode como campos suportados pelo runtime e obrigatórios por política Sentinel
- em
codex, developer_instructions é o lugar obrigatório para carregar a missão especializada, role class, ownership, gates, sequencing, handoffs, disciplina de superfície, limites de leitura e regras operacionais derivadas dos base agents e do modelo factual intermediário
- em
vscode, specialization_revision começa em 1 na primeira materialização gerenciada do repo alvo
- em
vscode, managed_artifact: true é a marca de overwrite seguro e da deleção segura de artifacts gerenciados
- em
vscode, managed_artifact: true também significa que update é reconstrução gerenciada a partir do template/base agent canônico atual, não patch incremental do corpo antigo
- em
codex, qualquer marca de gerenciamento do Sentinel é convenção interna opcional e não faz parte do shape mínimo obrigatório do runtime; se for serializada, deve ser compatível com Codex e claramente distinguida de requisito nativo
- em
codex, comentário/header gerenciado equivalente como # Sentinel managed artifact: true tem a mesma força: o TOML deve ser re-renderizado a partir do base agent/template atual, preservando somente inputs locais permitidos pelo contrato
- quando fizer sentido, preservar
reading_scope_class somente como hint compatível com o contrato base; nunca usá-lo para expandir a classe permitida
- em
vscode, tools no frontmatter operacional é obrigatório nos agents especializados materializados e é a source of truth operacional
- em
codex, tools não é obrigatório nem deve ser serializado no TOML controlado; a política de tools e least privilege deve ser preservada semanticamente em developer_instructions e em sandbox_mode
## Tools no corpo deve ser removido por default quando tools existir como metadata operacional suportada pelo target
## Tools só pode permanecer por ordem humana explícita e com justificativa humana clara
- mesmo quando
## Tools permanecer como exceção explícita, ele nunca pode ser tratado como source of truth, requisito operacional, critério de validação ou base para drift detection
- todo specialized
vscode materializado deve conter name, description, target, tools, base_agent_version, specialization_revision e managed_artifact: true
- todo specialized
vscode materializado deve conter model
- nenhum specialized
vscode materializado deve conter reasoning_effort, thinking_effort, model_reasoning_effort ou equivalente no frontmatter operacional
- todo specialized
vscode materializado deve serializar name a partir da mesma fonte de verdade usada para o nome físico do arquivo; exemplo: .github/agents/planner.agent.md deve conter name: planner
- o
orchestrator em vscode deve conter adicionalmente agents
agents no frontmatter operacional é reservado ao orchestrator em vscode e deve listar apenas os frontmatter.name canônicos dos subagents realmente materializados no output de agents do mesmo target
- em
codex, agents não é campo obrigatório do TOML do orchestrator; o conjunto de subagents e o roteamento devem aparecer em developer_instructions e no AGENTS.md gerado, salvo suporte explícito do runtime para campo equivalente opcional
- em
codex, o AGENTS.md deve explicitar que a main/root Codex session é a human-visible workspace entrypoint, não spawna custom subagents automaticamente, trata Use stnl_* como skill/workflow no root/main e só cria custom subagent quando o humano pedir por exact custom agent name; não depende de full-history fork, envia somente payload mínimo/task-scoped quando houver autorização explícita, bloqueia com SUBAGENT_AUTH_REQUIRED quando a tarefa exigir subagent sem autorização explícita, e bloqueia emulação de handoff por prompt com contrato completo, codex exec, shell, subprocesso, script, local CLI call ou continuação local
- em
codex, o orchestrator deve explicitar em developer_instructions que é o routing controller do fluxo Sentinel no Codex somente quando explicitamente invocado, é route decision owner e não spawn executor dos downstream owners em Codex visual mode, retorna ROUTE_PACKET compacto para root/main, never use codex exec, never use shell/subprocess/script/local continuation to simulate handoff, never accept full Sentinel contract prompt replay as native handoff, never absorb downstream Sentinel roles locally, reporta ROUTING_RUNTIME_BLOCKED quando há autorização explícita mas a runtime não cria a agent thread nativa necessária, quando root/main não consegue spawnar o owner nomeado no ROUTE_PACKET, em limitação de runtime/UI/depth ou agente ausente, e não absorve papéis especialistas
- em
codex, todo agent não-orchestrator deve explicitar em developer_instructions: must not spawn downstream Sentinel agents, must not call codex exec for handoff, must not use shell/subprocess/script to perform handoff, return owned artifact/status/formal handoff signal to root/main for parent-mediated orchestrator routing, e que "handoff to X" means a formal signal for root/main-mediated orchestrator routing, not direct spawning
- em
codex, todo .codex/agents/*.toml e o AGENTS.md devem carregar Compact Agent Return Contract, instruindo que subagent returns sejam compactos, gate-oriented, sem despejar contrato/SPEC/checklist/logs/diffs/artifacts completos no chat, e que detalhes expandam somente em blocker, falha, evidência crítica de validação ou pedido humano explícito
model na metadata operacional é obrigatório como string única; lista priorizada só deve ser usada quando o target suportar explicitamente esse shape, houver justificativa operacional clara e todos os itens respeitarem allowed_models
- qualquer campo fora do shape mínimo nativo ou dos campos opcionais suportados e adotados pela política Sentinel do target deve ser tratado como ausente por default e removido na normalização, salvo instrução humana explícita ou compatibilidade opcional comprovada
agent_version deve ser removido da metadata operacional final por default; não faz parte do shape endurecido preservado por esta skill nem do shape mínimo de codex
- se qualquer campo obrigatório faltar no artifact final, a skill ainda não está done
Normalização final do artifact
- ao materializar ou atualizar um specialized, sempre gerar o artifact final no shape canônico vigente do
target
- a entrega esperada é um artifact final normalizado, limpo, operacional e auditável
- não preservar resíduos legados só por inércia, compatibilidade aparente ou herança do base agent
- update também é cleanup: além de corrigir drift factual, a skill deve remover seções redundantes e campos legados fora do contrato vigente
- a normalização também deve preservar
surface discipline, delta-only communication, no operational narration, no artifact dump into main chat, e delegate-first quando o papel exigir isso
- a metadata especializada final normalizada de
vscode contém apenas:
name
description
target
tools
agents no orchestrator
model
base_agent_version
specialization_revision
managed_artifact: true
reading_scope_class apenas quando fizer sentido e continuar compatível com o contrato
- o target
codex final normalizado contém .codex/agents/*.toml, .codex/config.toml e AGENTS.md
- o custom agent TOML final normalizado de
codex contém obrigatoriamente:
name
description
model
model_reasoning_effort
sandbox_mode
developer_instructions
sandbox_mode é obrigatório por política Sentinel no TOML Codex final, não por fazer parte do shape mínimo nativo Codex
.codex/config.toml final normalizado deve ser gerado a partir do template interno, conter comentário gerenciado, conter [agents], conter max_threads = 6 e conter exatamente max_depth = 1
- o custom agent TOML final normalizado de
codex pode conter campos opcionais adicionais somente quando forem suportados pelo runtime e não confundidos com requisito nativo mínimo
- convenções internas opcionais do Sentinel em
codex, quando existirem, devem ser claramente classificadas como internas e removíveis sem quebrar o custom agent TOML mínimo
- qualquer campo fora do shape do target deve ser tratado como legado residual e removido durante a normalização, salvo instrução humana explícita ou compatibilidade opcional comprovada
- em
vscode, o corpo especializado final deve preservar headings e seções canônicas do base agent, inclusive ## Handoff, sem variantes frouxas de naming ou shape
- em
codex, developer_instructions deve preservar a semântica operacional dessas seções e deve preservar headings Markdown quando eles forem marcadores protocol-fixed exigidos por gate
- antes de escrever qualquer artifact final, aplicar normalização protocol-fixed limitada ao marcador
Consistency without legacy propagation: se a fonte trouxer uma linha isolada Consistency without legacy propagation:, reparar essa linha para ## Consistency without legacy propagation; se o heading canônico já existir, remover somente essa linha legada com : para não duplicar o marcador
- a normalização protocol-fixed não pode reescrever o bloco inteiro, não pode alterar
model, model_reasoning_effort, sandbox_mode, não pode adicionar campos TOML e não pode mexer em metadata operacional fora do marcador fixo
- o artifact final normalizado deve conter exatamente uma ocorrência de
## Consistency without legacy propagation e zero ocorrências da linha legada Consistency without legacy propagation:
- a normalização final deve eliminar duplicação entre source of truth operacional do target e texto legado residual
Atualização canônica de artifacts gerenciados
Agents materializados são artifacts gerenciados, não documentos locais autoritativos do contrato Sentinel.
Quando um artifact existente indicar managed_artifact: true em vscode ou marca gerenciada equivalente em codex:
- gerar primeiro a versão esperada do artifact a partir do template/base agent canônico atual, contrato protocol-fixed atual, modelo factual intermediário atual e especialização local permitida
- comparar o artifact existente contra essa versão esperada antes de concluir; existência do arquivo ou coerência do conjunto de nomes nunca significa que o artifact está atualizado
- reconstruir o artifact final a partir do template/base agent canônico atual listado em
reference/MANIFEST.md
- reaplicar a especialização factual local apenas pelos slots permitidos e pelo modelo factual intermediário vigente
- preservar somente slots locais explicitamente permitidos; diferenças fora desses slots em protocol-fixed, base contract, tools, role, status, handoff, compact return, routing, guardrails ou runtime hardening devem ser substituídas pelo contrato canônico vigente
- quando a diferença existente for somente em slot local permitido, preservar o conteúdo local depois de revalidar contra role class, target shape e blocos protocol-fixed atuais
- quando houver edição manual fora de slot permitido, reportar como drift manual descartado ou bloquear por autoria ambígua; nunca reportar
already current
- protocol-fixed sections do template/base agent canônico vencem sempre sobre o corpo antigo materializado
- corpo operacional, status, gates, handoffs, role class, reading scope, compact return contract e hardening de runtime devem refletir o template atual
- bump de
base_agent_version, specialization_revision, model ou metadata nunca é update suficiente quando o corpo canônico mudou
- nunca preservar parágrafos antigos por diffs aproximados, conveniência ou tentativa de patch parcial
- nunca entregar artifact híbrido com contrato antigo e contrato novo misturados
- retornar
already current somente quando a comparação final provar que nenhum arquivo gerenciado mudou e que todos os snippets protocol-fixed do template/base agent atual aparecem no artifact final do target
Áreas de customização local:
- preservar somente conteúdo que a própria skill tenha emitido dentro de slot explicitamente permitido, como
## Project specialization em agents VS Code/GitHub ou Local Notes compactas em AGENTS.md Codex
- customização local preservada deve ser revalidada contra role class, protocol-fixed sections, status e target shape atuais
- edição manual fora de slot permitido não é input canônico; para artifact gerenciado, a skill deve sobrescrever durante a reconstrução e reportar no output que drift manual fora de slot permitido foi descartado, salvo se a edição tornar a autoria/gerenciamento ambíguos
- se o arquivo existente não tiver marca gerenciada suficiente, tiver autoria ambígua, ou não for possível distinguir customização permitida de contrato manual concorrente, bloquear com conflito em vez de sobrescrever silenciosamente
- se houver conflito entre customização local permitida e template/base agent atual, o template/base agent vence e a customização deve ser removida ou rebaixada no relatório
Critério prático: depois de qualquer update gerenciado, comparar o artifact final contra o template/base agent atual e falhar o quality gate se status antigos, headings antigos, handoffs obsoletos ou blocos protocol-fixed antigos sobreviverem fora de slots permitidos.
Blocos protocol-fixed non-compressible
Os blocos abaixo são parte fixa do protocolo, não são conteúdo local do projeto e não podem ser resumidos, removidos, enfraquecidos, reescritos do zero prático ou substituídos por paráfrase incompleta durante a especialização:
- executor terminal handoff contract, incluindo
Terminal handoff contract, No other terminal handoff is valid, exigência de status terminal explícito READY ou BLOCKED, evidência real de mudança aplicada para READY, e rejeição de handoff ausente, implícito, ambíguo, intermediário, narrativo, log operacional, promessa ou diff parcial
- executor partial-edit blocking, incluindo
Partial-edit blocking, BLOCKED obrigatório quando houve edição parcial sem conclusão segura, motivo objetivo, arquivos tocados, parcialidade restante, e decisão inspectable/reusable-or-discard/reexecute
- executor invalid terminal forms, incluindo
Invalid terminal forms
- orchestrator consumer-side rejection, incluindo
EXECUTOR_HANDOFF_INVALID, rejeição forte de handoff ausente, implícito, ambíguo, intermediário, narrativo, log operacional, promessa, diff parcial ou READY sem evidência aplicada, e bloqueio da rodada sem chamar validation-runner
- validation-runner entry evidence gate, incluindo
Entry evidence gate, exigência de valid executor READY handoff com evidência aplicada, e preservação de que output inválido não é validation target
- finalizer closure ledger, incluindo
closure ledger, DONE: yes ou DONE: no, racional da decisão de DONE, resync: yes ou resync: no, racional da decisão de resync, delta factual quando resync for necessário, e Invalid closure forms
- separação explícita entre status terminal do finalizer (
READY/BLOCKED) e verdict do runner (PASS/PARTIAL/FAIL/BLOCKED), preservando o verdict como input e sem transformar DONE em obrigatório; obrigatória é a decisão explícita DONE: yes ou DONE: no
- consistency without legacy propagation, incluindo
Consistency without legacy propagation, Do not copy fragile, duplicated, insecure, accidental, or legacy project patterns into new code just because they exist. e This policy does not authorize broad refactors
Estratégia obrigatória de especialização:
- a skill pode especializar stack, paths, docs, models, TBDs, targets, constraints locais, comandos canônicos, owners e leitura local
- a skill não pode reescrever do zero prático os blocos protocol-fixed nem compactá-los para "equivalentes" genéricos
- a materialização deve copiar o bloco fixo do template/base agent ou preservá-lo semanticamente de forma verificável pelos marcadores obrigatórios acima
- em
vscode, os marcadores protocol-fixed devem permanecer no corpo final do agent materializado
- em
codex, os marcadores protocol-fixed devem permanecer em developer_instructions
- o marcador
Consistency without legacy propagation deve permanecer como heading canônico exato ## Consistency without legacy propagation; nunca substituir por Consistency without legacy propagation:, título solto, bullet, resumo ou heading de outro nível
- se a fonte instalada ou artifact gerenciado existente trouxer a variante legada
Consistency without legacy propagation:, a geração deve reparar somente esse marcador para ## Consistency without legacy propagation antes da validação final
- o repair automático desse marcador é permitido antes do gate porque é normalização protocol-fixed por construção; o gate continua obrigatório e deve falhar se o artifact final ainda contiver a variante com
: ou contiver zero/mais de uma ocorrência do heading canônico
- a propagação protocol-fixed deve ser validada comparando template/base agent canônico,
reference/agents/*.agent.md instalado e artifact final materializado do target; se a fonte contém um bloco protocol-fixed e o artifact final não contém as frases sentinela correspondentes, a rodada deve falhar
- se um invariant protocol-fixed obrigatório não couber no formato final, a skill deve bloquear a materialização antes de escrever ou reparar imediatamente o artifact e revalidar; nunca entregar agent fraco com hardening resumido
- se uma regra local do projeto entrar em tensão com bloco protocol-fixed, a regra local perde; se a tensão impedir materialização honesta, bloquear em vez de relaxar o protocolo
O quality gate final deve validar os artifacts materializados finais contra esses invariantes protocol-fixed. Validar só frontmatter, shape, model, tools, ausência de TODO ou referências a agents ausentes não basta.
Política de allowed_models e model_policy
- a skill aceita uma entrada opcional
allowed_models; quando presente, ela é a lista autorizada e ordenada de modelos que podem ser materializados
- a skill aceita uma entrada opcional
model_policy granular e compatível como override avançado, não como requisito diário
- chaves novas aceitas:
agents: mapa por agent lógico, por exemplo coder-backend
roles: mapa por role fina, por exemplo specialist_executor, proof_execution, closure
- chaves legadas continuam aceitas:
reasoning_default
coding_default
execution_default
- se
allowed_models for fornecido, toda escolha de model para specializeds deve ficar restrita a essa lista
- a skill não pode materializar
model fora de allowed_models
- se
model_policy for fornecido, ele tem precedência sobre heurística implícita, mas nunca substitui a obrigação de serializar o campo final model
- precedência de resolução:
model_policy.agents[agent_name]
model_policy.roles[fine_role]
- defaults de compatibilidade por perfil
- heurística conservadora somente quando não houver policy explícita
- role fina sugerida:
round_coordinator: orchestrator
cut_planning: planner
proof_design: validation-eval-designer
execution_package_design: execution-package-designer
specialist_executor: coder-backend, coder-frontend, coder-ios
ux_direction: designer
semantic_review: reviewer
proof_execution: validation-runner
closure: finalizer
sync: resync
- defaults de compatibilidade:
reasoning_default: orchestrator, planner, validation-eval-designer, execution-package-designer, reviewer, e designer quando materializado como contributor de direção UX/design
coding_default: coder-backend, coder-frontend, coder-ios
execution_default: validation-runner, finalizer, resync
- se
model_policy indicar valor fora de allowed_models, a skill deve bloquear ou escolher alternativa segura explicitando isso no output
- quando só
allowed_models existir, aplicar a política interna por role class:
- roles de orquestração, planejamento, proof design, package design e review usam o primeiro modelo da lista ordenada
- coders e funções objetivas podem usar o último modelo seguro da lista ordenada quando a role permitir
- validation-runner, finalizer e resync podem usar o último modelo seguro quando o trabalho estiver objetivamente delimitado
- se
allowed_models tiver apenas um modelo, todos os agents usam esse modelo
- se não existir
allowed_models nem model_policy com valores concretos de modelo, bloquear a materialização e reportar falta de input de resolução; não omitir model e não deixar o runtime usar picker/default implícito
- não afirmar que um modelo é "o melhor" sem policy explícita ou ordenação fornecida
- não inventar ranking universal, fallback complexo, matriz excessiva por provider ou policy especulativa de modelos
- lista priorizada de
model só deve ser usada quando o target suportar explicitamente esse shape, houver justificativa operacional real, ordem explícita e todos os itens estiverem contidos em allowed_models quando essa entrada existir
Procedimento operacional
- Validar as pré-condições e confirmar que o repo alvo realmente já passou por
stnl_project_context ou, em greenfield, por stnl_project_foundation.
- Resolver
target; se omitido, assumir vscode; se for desconhecido, bloquear antes de escrever.
- Fazer discovery sério de
docs/**, com prioridade para docs/INDEX.md, docs/core/*, docs/TBDS.md quando existir, e os units ou features relevantes.
- Construir o modelo factual intermediário normalizado, classificando claims, escopo, evidência e agents impactados.
- Classificar cada agent canônico em sua role class e carregar os invariantes obrigatórios dessa classe antes de gerar qualquer specialized.
- Ler primeiro
reference/MANIFEST.md; depois ler apenas os templates/base agents canônicos, os templates reference/templates/codex/AGENTS.md e reference/templates/codex/config.toml quando target=codex, e as referências agent-contract-shape, agent-specialization-quality-gate, execution-lifecycle e status-gates que estiverem listados no manifest e forem necessários para a rodada.
- Revisar o output atual do
target, classificando cada artifact local como:
managed and current
managed but drifted
managed but obsolete
unmanaged / ambiguous
- Decidir o conjunto alvo mínimo e coerente de agents para o repo usando o modelo factual intermediário, não completude estética.
- Resolver o
model operacional de cada agent, aplicando model_policy quando existir, respeitando allowed_models quando essa entrada existir, e bloqueando se não houver base concreta para serializar model.
- Gerar ou atualizar os specializeds necessários a partir do modelo factual intermediário e dos invariantes da role class, com metadata operacional coerente e shape final normalizado para o
target; antes de escrever o artifact final, aplicar a normalização protocol-fixed limitada que preserva ## Consistency without legacy propagation e repara somente a variante legada com :.
- Quando
target=codex, gerar ou atualizar .codex/config.toml a partir do template interno e gerar ou atualizar AGENTS.md do repo alvo a partir do template interno e do conjunto final de agents materializados.
- Deletar artifacts gerenciados obsoletos e qualquer referência local quebrada deixada por eles.
- Reescrever ou ajustar o
orchestrator por último, para que ele reflita apenas o conjunto final realmente materializado e respeite o budget de router.
- Executar um quality gate pós-geração separado do framing da geração.
- Se o gate retornar
NEEDS_FIX, reparar somente os arquivos sinalizados, reexecutar o gate e concluir apenas quando o conjunto estiver consistentemente validado ou honestamente bloqueado.
Discovery sério de docs/**
O discovery deve ser suficiente para montar o modelo factual intermediário sem virar scan amplo por inércia.
Leitura mínima esperada:
docs/INDEX.md
docs/core/* relevantes para boundaries, stack, runtime, regras e testing
docs/TBDS.md quando existir
docs/units/* e docs/features/* apenas nos recortes que realmente alimentam a decisão do conjunto de agents ou a especialização dos artifacts
Durante o discovery:
- mapear fatos confirmados, padrões locais, exemplos, TBDs, exceções e checks manuais
- quando
validation-eval-designer ou validation-runner entrarem no conjunto, ler docs/core/TESTING.md se ele existir e mapear comandos canônicos, suites, manual paths aceitos, confiança do harness, gaps e pré-requisitos para o modelo factual intermediário, qualificando a força semântica pelo tipo de base (stnl_project_context: observado/factual; stnl_project_foundation: declarado/estratégico até observação)
- mapear, quando houver evidência suficiente, quais surfaces ou change classes do projeto costumam ativar trilhas condicionais de
security, performance, migration/schema ou observability/release safety
- preservar path e contexto de cada evidência importante
- não diluir um TBD específico em resumo genérico
- não apagar exceção documentada que qualifica uma regra
- não promover um exemplo ou padrão local a convenção do projeto sem sustentação forte
Heurística para decidir quais agents gerar
Decidir por evidência factual do projeto alvo, não por completude estética.
Espinha dorsal mínima
Se a especialização puder prosseguir honestamente, o conjunto local normalmente precisa de uma espinha dorsal coerente:
orchestrator
planner
finalizer
Adicionar resync quando o projeto mantém shared canonical docs fora da feature e essa sync local fizer sentido.
- em repos já preparados por
stnl_project_context, resync costuma fazer sentido, mas ainda depende de evidência real de documentação canônica viva e recorrente fora do fluxo imediato da feature
- em repos greenfield preparados por
stnl_project_foundation, resync não é default e não deve ser materializado só porque docs/** existe
- em base
stnl_project_foundation, só materializar resync quando houver evidência concreta de shared canonical docs contínuas cross-feature/cross-round, com necessidade real de factual sync fora da feature e updates documentais transversais previsíveis
- em base
stnl_project_foundation, não considerar sinal suficiente por si só: existência de docs/core/*, existência de docs/TBDS.md, organização inicial de features/units, ou simples possibilidade futura de drift
- se o projeto ainda estiver em bootstrap documental, inception inicial ou fundação pouco estabilizada, não materializar
resync
- na dúvida, não materializar
resync; ausência desse agent nesse estágio não é falha do conjunto local
Agents por superfície real
- materializar
coder-backend quando houver APIs, serviços, domínio, persistência, jobs, integrações, auth, runtime server-side ou equivalentes
- não materializar
coder-backend quando o projeto for genuinamente sem camada server-side relevante
- materializar
coder-frontend apenas quando houver front-end web, web app, browser client UI, pages, screens, design system, ou outra superfície client-side tradicional real
- não materializar
coder-frontend em projetos sem front-end
- materializar
coder-ios apenas quando houver boundary nativo iOS real no workflow local, centrado em Swift e SwiftUI, com superfície materializada em navegação do app, state/view models, async/await, networking, persistência local, integrações do app, ou testes iOS
- tratar
UIKit interop como evidência complementar para coder-ios, não como centro default do papel; ele só entra quando o repo já o materializa ou quando o cut exigir compatibilidade real
- não materializar
coder-ios em projetos sem app iOS nativo real, e não presumir que todo mobile pertence a coder-frontend
Guardrails por superfície ativa
Depois de decidir o conjunto final de agents, montar uma lista de stack quality guardrails ativas a partir da superfície real do repo e dos agents materializados. Essa lista deve ser aplicada antes de serializar qualquer artifact final, tanto para vscode quanto para codex.
Regras:
- manter
stnl_frontend_quality quando houver front-end web/browser, UI client-side, design system, componentes, telas ou coder-frontend materializado
- manter
stnl_backend_quality quando houver API, serviços, domínio, jobs, integrações, auth, runtime server-side ou coder-backend materializado
- manter
stnl_backend_sql_quality quando houver persistência, data access, query, ORM, NoSQL, cache, migrations, transaction, indexes ou package/cut que toque essa superfície
- manter
stnl_mobile_ios_swift_quality somente quando houver superfície nativa iOS real reconhecida no repo, centrada em Swift/SwiftUI/UIKit, ou quando coder-ios for materializado
- se não houver superfície nativa iOS reconhecida e
coder-ios não for materializado, remover stnl_mobile_ios_swift_quality dos agents finais especializados; notas como "native iOS is out of scope" podem permanecer, mas a guardrail iOS não pode aparecer como lente ativa, opção de ativação, proof obligation, review ou closure
- a remoção é local ao artifact especializado final do repo alvo; não remover
stnl_mobile_ios_swift_quality dos templates/base agents canônicos nem das skills fonte oficiais
- se houver superfície iOS real ou
coder-ios materializado, preservar a guardrail iOS e não podar referências necessárias ao workflow nativo iOS
- aplicar o mesmo pruning aos corpos Markdown de
.github/agents/*.agent.md, às developer_instructions de .codex/agents/*.toml, ao AGENTS.md Codex quando ele listar agents, e a qualquer lista operacional do orchestrator
Política de materialização de designer
Classificar designer em um destes níveis:
REQUIRED
- materializar obrigatoriamente quando
Tipo: APP
- materializar obrigatoriamente quando houver evidência de design system próprio, UI library compartilhada, tokens, catálogo de componentes, múltiplos apps frontend, ou quando a superfície visual principal do produto fizer parte relevante do boundary do repo
DEFAULT
- materializar por padrão quando
Tipo: FE
- materializar por padrão quando
Tipo: FS com frontend relevante
- só excluir em
DEFAULT se houver evidência explícita de que a UI é meramente utilitária, sem complexidade de fluxo, sem componentização relevante, e sem preocupação recorrente com responsividade, acessibilidade ou consistência visual
ON_DEMAND
- não materializar por padrão quando
Tipo: BE
- não materializar por padrão quando o frontend for incidental, técnico ou residual
- nesses casos,
designer só entra por gatilho explícito no cut ou no workflow local:
- mudança de fluxo
- componente novo ou reutilizável
- estado de tela complexo
- responsividade
- acessibilidade
- inconsistência visual
- dúvida de UX
Regra de desempate:
- em projeto
APP ou FE, na ausência de evidência forte para excluir, preferir DEFAULT => materializar
Exemplos canônicos
Tipo: APP com navegação, componentes próprios e superfície visual principal do produto -> REQUIRED
- a UI pertence estruturalmente ao boundary do repo; materializar
designer no projeto é obrigatório
Tipo: FE com múltiplas telas, componentes reutilizáveis e fluxo de usuário relevante -> DEFAULT
- materializar por padrão; a existência do agent no projeto não depende de gatilho excepcional
Tipo: FE administrativo simples, com UI utilitária e baixo risco de UX -> DEFAULT
- excluir só com evidência explícita de baixa complexidade visual, baixa variabilidade de estados e ausência de preocupação recorrente com acessibilidade, responsividade ou consistência visual
Tipo: FS com backend dominante, mas frontend relevante no produto -> DEFAULT
- backend forte não elimina a necessidade recorrente de direção de UI quando o frontend tem papel real no boundary
Tipo: BE sem UI real no repo -> ON_DEMAND
- não materializar por padrão quando a camada visual não pertence ao boundary do projeto
- repo técnico com dashboard residual, tela incidental ou interface apenas operacional ->
ON_DEMAND
- materializar apenas se o cut exigir fluxo, componente, estado complexo, acessibilidade, responsividade, inconsistência visual ou dúvida real de UX
Nota operacional:
- materializar
designer no projeto não implica acioná-lo em todo round
- em classificações
DEFAULT, ausência de evidência forte para excluir não é justificativa válida para omissão
Agents de validação
Tratar validation-eval-designer e validation-runner como um par por padrão.
Materializar o par quando houver evidência de pelo menos um destes sinais:
- harness ou testes relevantes
- necessidade recorrente de provar comportamento, contrato, UX ou integração
- risco suficiente para exigir desenho explícito de validação antes de executar
- fluxo local em que a distinção entre desenhar prova e executar prova faz sentido operacional
Evitar materializar só um deles sem justificativa forte e explicitada.
Se o projeto for tão simples que a separação de design de validação e run de validação não se sustente por evidência, não inventar versões cosméticas desses agents. Nesses casos, bloquear ou reduzir o conjunto com justificativa factual clara, sem deixar handoffs quebrados.
Agent de pacote de execução
Materializar execution-package-designer sempre que o conjunto local materializar qualquer coder (coder-backend, coder-frontend ou coder-ios) junto com validation-eval-designer.
Esse agent ocupa a etapa canônica entre validation-eval-designer e os coders. Ele:
- recebe
EXECUTION BRIEF e VALIDATION PACK
- produz
EXECUTION PACKAGE
- suporta 1..N work packages
- não coordena coders
- não chama agents
- não implementa
- não substitui o
orchestrator
Não materializar execution-package-designer como ornamento quando o conjunto local não tiver coders executores. Se coders existirem sem package designer, o conjunto fica incoerente porque obriga coders baratos a reinterpretar arquitetura, boundaries e proof.
Agent de review semântico
Materializar reviewer quando o workflow local se beneficia de review técnico cut-scoped além da proof do runner, especialmente em mudanças estruturais, boundary-sensitive, refactors relevantes, impacto transversal ou alteração importante de contratos internos.
O reviewer não substitui validation-runner, não substitui finalizer e não deve ser inventado como ornamento para cuts triviais.
Trilhas condicionais de risco
A skill deve preservar, nos specializeds materializados, o suporte a trilhas condicionais de security, performance, migration/schema e observability/release safety sem criar novos agents obrigatórios nem novos status.
Regras:
- reconhecer e propagar uma trilha apenas quando o cut ou o contexto local evidenciar risco material correspondente
- não universalizar essas trilhas para todo cut e não inflar o workflow com review ou proof decorativos
- fazer o
orchestrator explicitar a trilha ativa no handoff e no desenho da rodada, sem transformar o router em analista pesado ou executor dessa trilha
- fazer o
validation-eval-designer converter a trilha ativa em obrigações cut-scoped de prova dentro do VALIDATION PACK, sem virar registry genérico de risco
- fazer o
reviewer verificar se risco estrutural material dessas trilhas foi ignorado, sem transformá-lo em especialista dedicado nem em substituto do runner
- preservar o ownership atual de
VALIDATION PACK, validation-runner e reviewer
Gate condicional de harness por risco
A skill deve materializar de forma explícita a diferença entre falta de testes em mudança simples/local e falta de testes em mudança com risco relevante.
Regras:
- mudança simples, local e de baixo acoplamento pode seguir sem testes novos quando build, lint, smoke, manual path ou outra evidência leve realmente bastarem para o cut
- ausência de specs existentes, sozinha, não bloqueia automaticamente um cut simples/local
- quando o cut tocar superfície de risco relevante, a suficiência do harness deixa de ser mera limitação de evidência e vira gate pré-execução do DEV
- tratar como superfície de risco relevante, no mínimo:
- lógica de negócio
- state, store, sinais ou estado derivado
- services, facades, repositories ou data access
- guards, resolvers ou interceptors
- contratos compartilhados ou libs compartilhadas
- autenticação, autorização, segurança, PIN, token ou sessão
- fluxos assíncronos ou multi-step
- comportamento com risco de regressão transversal entre apps ou módulos
- nesses casos, ausência de testes relevantes existentes ou de outro harness minimamente confiável para a superfície tocada deve gerar
NEEDS_DEV_DECISION_HARNESS
- build, lint, smoke ou evidência manual podem continuar documentados no
VALIDATION PACK, mas não bastam sozinhos para marcar o cut como execution-ready quando a prova crítica da superfície de risco continua sem cobertura mínima
- quando o gate ocorrer, o specialized final deve deixar explícitas apenas estas saídas legítimas do DEV:
- criar testes focados na SPEC agora
- aceitar seguir sem testes novos, assumindo conscientemente evidência parcial
- reduzir o corte para uma parte validável com o harness atual
- após a decisão do DEV, o fluxo deve voltar ao owner canônico do artifact afetado antes de qualquer approval ou execução
- se o DEV escolher testes focados e o boundary do cut permanecer materialmente o mesmo, o specialized deve voltar ao
validation-eval-designer para atualizar o VALIDATION PACK; se a decisão alterar materialmente o cut, deve voltar primeiro ao planner para atualizar o EXECUTION BRIEF e só depois ao validation-eval-designer
- se o DEV escolher evidência parcial explícita, o specialized deve voltar ao
validation-eval-designer para registrar no VALIDATION PACK a limitação aceita, a prova faltante, a evidência substituta, o risco residual e que a escolha foi decisão explícita do DEV
- se o DEV escolher reduzir o cut, o specialized deve invalidar readiness ou approval derivados do cut anterior, voltar obrigatoriamente ao
planner para recortar o novo cut e depois regenerar o VALIDATION PACK
- "testes focados na SPEC" significa cobrir apenas a touch surface alterada e os fluxos críticos prometidos pela SPEC; nunca significa planejar ou montar a suíte inteira do projeto
Regra de coerência sistêmica
Não omitir um agent se essa omissão deixar outros agents com referências quebradas ou exigir distorção do contrato canônico para compensar.
Antes de remover um agent canônico do conjunto local:
- procurar referências ao artifact desse agent nos demais specializeds do mesmo
target
- remover ou adaptar essas referências de forma coerente com o papel do agent restante
- se a remoção exigir redefinir o protocolo local ou inventar um substituto não ancorado, não remover
Como revisar e atualizar agents existentes
- revisar o conteúdo atual dos artifacts gerenciados do
target contra:
docs/**
- o modelo factual intermediário
- templates/base agents canônicos
agent-contract-shape
agent-specialization-quality-gate
status-gates
- atualizar quando houver drift em:
- stack ou frameworks reais
- boundaries e superfícies do projeto
- comandos, scripts ou harness local
- matriz local de harness/checks registrada em
docs/core/TESTING.md, com força factual condicionada à origem da base documental
- expectativas de validação
- TBDs, exceções, padrões locais e escopo factual
- campos operacionais suportados pelo target, como
target, tools, agents e model em vscode, ou developer_instructions em codex
- headings canônicos, inclusive
## Handoff
- handoffs ou referências a agents presentes ou ausentes
- ao revisar artifacts gerenciados existentes, normalizar o shape final e remover resíduos legados, mesmo quando o drift factual for pequeno
- remover
## Tools do corpo por default quando tools já existir na metadata operacional suportada pelo target, salvo exceção humana explícita e justificada
- remover campos legados não canônicos da metadata operacional final, incluindo
agent_version, salvo instrução humana explícita em sentido contrário
- para artifact gerenciado válido, atualizar por reconstrução integral do artifact final a partir do template/base agent canônico atual e da especialização factual local permitida; o artifact antigo serve apenas para metadata compatível, slots permitidos e detecção de drift/conflito
- não usar patch parcial do corpo antigo como estratégia de update de artifact gerenciado
- qualquer divergência de protocol-fixed section, status, heading, handoff, compact return contract, role class ou runtime hardening exige reconstrução canônica, mesmo quando o drift factual local for pequeno
- ao alterar materialmente um agent gerenciado em
vscode, incrementar specialization_revision; em codex, só incrementar metadata equivalente se ela existir como convenção interna opcional compatível
Política para artifacts locais existentes
- se o arquivo já estiver no output gerenciado do
target, tiver shape compatível e indicar managed_artifact: true ou marca gerenciada equivalente, tratar como artifact gerenciado e reconstruir com overwrite seguro a partir do template/base agent canônico atual
- se o arquivo existir mas estiver ambíguo, sem metadata suficiente, ou com sinais fortes de autoria humana fora do fluxo gerenciado, não sobrescrever cegamente
- se um artifact local não gerenciado conflitar com o conjunto que a skill precisa manter, bloquear e explicitar o conflito em vez de apagar ou substituir silenciosamente
Quando deletar
Deletar apenas quando houver evidência suficiente de que o artifact local gerenciado se tornou obsoleto.
Casos típicos:
- o projeto não possui mais a superfície que justificava aquele agent
- o agent local ficou fora do conjunto mínimo útil decidido por evidência
- o agent local referencia um fluxo ou outro artifact de agent que deixou de existir e isso não é mais justificável
- há duplicação de responsabilidade sem base factual
- o
orchestrator aponta para um agent que não deve mais existir
Regras: