codex-run — déclencher Codex sur worktree

VérifiéPrudence

Déclenche Codex CLI dans une git worktree pour implémenter un prompt préparé, évalue la livraison (note 0-10) et s'arrête pour le gate.

Spar Skills Guide Bot
DeveloppementIntermédiaire
1026/07/2026
Claude Code
#codex-cli#git-worktree#autonomous-editing#quality-gate#delegation-workflow

Recommandé pour

Notre avis

Lance Codex CLI dans une git worktree dédiée pour implémenter un prompt/spécification préparé, évalue le résultat avec une note (0–10) et s'arrête pour revue humaine.

Points forts

  • Exécution isolée dans une worktree, protégeant la branche principale.
  • Évaluation automatique avec notation et seuil de qualité.
  • Automatisation d'un flux de délégation reproductible.

Limites

  • Nécessite la préparation d'une worktree et d'un prompt en amont.
  • Le seuil de note ≥9 peut rejeter des sorties acceptables mais imparfaites.
  • Ne planifie ni ne merge – une décision humaine est toujours requise.
Quand l'utiliser

Quand vous avez un prompt ou une spécification prête et voulez une exécution automatisée avec évaluation avant revue humaine.

Quand l'éviter

Pour planifier, merger ou interagir en continu avec Codex – cette skill est conçue pour une exécution autonome unique avec portail.

Analyse de sécurité

Prudence
Score qualité85/100

The skill instructs to spawn an external AI agent that autonomously edits code and runs commands in a designated worktree. While it includes safety checks (ensuring not running on main checkout) and output capture, the autonomous nature with --full-auto and workspace-write poses risks if misused or if the prompt contains harmful instructions. It does not involve exfiltration or destruction beyond the scope of the worktree, but the capability is powerful and requires caution.

Points d'attention
  • Launches an autonomous AI coding agent with workspace-write and full-auto, potentially modifying files and executing commands within the worktree.
  • Uses Bash to run codex exec, which could be exploited if malicious prompts are fed or the worktree is misidentified.
  • Bypasses git-repo-check with --skip-git-repo-check.

Exemples

Execute Codex on worktree with spec
Roda o codex na worktree feature-foo para implementar a spec em .dw/spec/foo/codex-prompt.md
Implement task from TASK.md
Manda o codex implementar a tarefa TASK.md na worktree bugfix-bar
Fire Codex with prompt in worktree
Dispara o Codex com o prompt PROMPT.md na worktree do novo endpoint

name: codex-run description: "Dispara o Codex CLI (codex exec) DENTRO de uma git worktree para implementar um prompt/spec já preparado, com edição autônoma, saída em streaming e captura estruturada; depois AVALIA a entrega (nota 0–10) e PARA para o gate. Use SEMPRE que o usuário disser 'roda o codex na worktree X', 'manda o codex implementar Y', 'executa o codex-prompt/o prompt', 'dispara o Codex' — em QUALQUER projeto. NÃO use para planejar nem para mergear (decisão do dono, após o gate)." allowed-tools:

  • Bash
  • Read
  • AskUserQuestion

codex-run — disparar o Codex na worktree certa, avaliar a entrega, parar para o gate

Skill agnóstica (qualquer repo/projeto) para o passo "rodar o Codex" de um fluxo de delegação: existe uma git worktree com um prompt/spec já preparado → esta skill dispara codex exec lá dentro (streaming, não-bloqueante) → avalia a entrega com nota 0–10 → escala em caso de falha → para para o gate (o merge é decisão do dono). Existe porque rodar o Codex à mão é repetitivo e arrisca: rodar na worktree errada, travar sem TTY, e esquecer de aferir a qualidade antes de mergear.

Dual-use: executa edição autônoma (--sandbox workspace-write --full-auto). Confirme a worktree certa e o escopo antes de disparar.

REGRA (hard) — nunca no thread/checkout principal

codex-run roda numa git worktree dedicada (off main). NUNCA dispare o codex exec no checkout principal do repo (a árvore raiz no branch primário, ex.: ~/code/<projeto> em main) — o Codex edita de forma autônoma e isso corromperia o trabalho ativo / a árvore que o dono usa. Se o diretório alvo for o checkout principal ABORTE (BLOCKED) e oriente: crie/uso uma worktree primeiro (git worktree add ../<projeto>-<slug> -b <branch> main). Verificação obrigatória antes de rodar: git worktree list → o alvo é uma worktree secundária (não a marcada como principal) E o cwd do codex exec é essa worktree.

Pré-flight (falhar cedo > rodar no lugar errado)

  1. codex --version responde (CLI + credenciais). Se faltar → BLOCKED.
  2. git worktree list — confirme a worktree alvo e que não é o checkout principal (a árvore do branch primário, ex. ~/code/<projeto>). O Codex edita ali; rodar no principal corromperia o trabalho ativo.
  3. Existe um prompt/spec (o que o Codex receberá). Convenções comuns: .dw/spec/<slug>/codex-prompt.md (dev-workflow), PROMPT.md, TASK.md, ou um caminho que o dono indicar. Leia-o — é o escopo/fence/gate.

Onde rodar — escolha do VEÍCULO (a thread principal NUNCA roda inline)

A thread principal orquestra; a execução vai p/ um destes (ver [[orquestrador-nao-executor]]):

  • Workflow (PREFERIDO) — quando há pipeline (codex implementa → avalia 0–10 → gate em fan-out). Um agente de workflow roda o codex exec (rede OK, comprovado). Aparece em /workflows + paraleliza. Estruture em fases/agentes separados: [agente que roda codex][agentes do gate].
  • Agent único (subagent) — disparo avulso de UM codex, sem fan-out de gate (ou gate à parte). Mais leve; background; retorna o relatório. Não aparece em /workflows.
  • Bash em background — só fallback (sem harness de workflow/agent). Precisa de rede → sandbox do Bash desabilitado p/ o codex alcançar a API.

Nesting (importante): o agente que roda o codex exec não deve spawnar outros subagentes (limite de aninhamento; Workflow aninha só 1 nível). O gate é outra fase/agente do workflow — nunca um sub-spawn de dentro do agente-codex.

Em qualquer veículo, valem: REGRA hard (worktree dedicada), captura detalhada, nota 0–10 (aceite ≥9) e STOP-para-gate.

Protocolo

  1. Resolver alvo. Worktree + caminho do prompt (do usuário ou inferidos).
  2. Modelo + effort — o parent AVALIA a complexidade e SUGERE/escolhe. Leia o prompt e dimensione; proponha modelo+effort com um one-liner de racional; o dono confirma ou sobrescreve; se ele disser "escolhe você", decida pela heurística.
    • Modelos (forte→leve): gpt-5.5 · gpt-5.3-codex · gpt-5.4 · gpt-5.3-codex-spark · gpt-5.4-mini. Effort: low·medium·high·xhigh.
    • Sinais: nº de tasks; amplitude do fence; superfície sensível (auth/segurança/tenant/migration/financeiro); "fundação/redesign/arquitetural" × "fix mecânico/typo/docs"; E2E/secure-audit no gate.
    • Heurística: Trivial → leve + low/medium; Padrão (<10 tasks, 1 área) → gpt-5.3-codex/gpt-5.4 + medium/high; Complexa/sensível (fundação, multi-pacote, segurança) → gpt-5.5 + high/xhigh. Comece um degrau abaixo do teto e escale se falhar (ver Escalonamento).
  3. Disparar (implementação — padrão). Streaming (--json) p/ acompanhar sem travar; -o captura o relatório final; rode em background (não bloquear o parent):
    cd <WORKTREE> && codex exec --skip-git-repo-check \
      -m <MODEL> --config model_reasoning_effort="<EFFORT>" \
      --sandbox workspace-write --full-auto --json \
      -o <OUT_DIR>/codex-last-message.md \
      "$(cat <PROMPT_PATH>)" </dev/null \
      > <OUT_DIR>/codex-stream.log 2>&1     # <-- log de streaming durável (trilha de auditoria)
    
    • </dev/null SEMPRE (sem TTY trava). --json = eventos parseáveis em streaming; não suprima tudo com 2>/dev/null por padrão. <OUT_DIR>: dir de spec do projeto (ex.: .dw/spec/<slug>/QA/) ou um temp.
    • LOG DE STREAMING = TRILHA DE AUDITORIA (sempre capture): redirecione o stdout do --json p/ um arquivo durável (> <OUT_DIR>/codex-stream.log 2>&1). Esse JSONL grava progressivamente, ao vivo, TUDO o que o codex faz: cada command_execution (comando shell rodado), item.started/completed, agent_message (raciocínio + respostas do codex), tool-calls, e o turn.completed final (com usage/tokens). O -o captura só a mensagem final; o stream captura o PERCURSO inteiro — é a auditoria do que o codex realmente fez.
    • DURABILIDADE (crítico p/ "auditar depois"): o stream-log tem que viver num lugar que sobreviva ao git worktree remove. Se ficar no QA/ da worktree, o cleanup pós-merge apaga e a auditoria some. Escreva num dir fora da worktree — ex.: <REPO_PRINCIPAL>/.dw/codex-audit/<slug>-<run>.log (gitignore) ou ~/.claude/codex-audit/<slug>-<run>.logOU cp o stream-log + o -o p/ fora antes de remover a worktree. O relatório -o enxuto pode até ser commitado na spec (sobrevive no git); o JSONL bruto é grande, mantenha no dir de auditoria durável (não commitar). Ler/auditar depois:
      • comandos rodados: grep -oE '"command":"[^"]*"' <stream-log>
      • raciocínio/respostas do codex: grep '"type":"agent_message"' <stream-log>
      • tokens: grep -oE '"usage":\{[^}]*\}' <stream-log> | tail -1
      • transcript legível: extraia agent_message + command na ordem do arquivo.
    • Detectar "TERMINOU" (NUNCA por pgrep com o caminho da worktree no padrão): o sinal de pronto é {"type":"turn.completed"} no stream-log + a worktree com commit/relatório (git -C <worktree> log, -o preenchido). Um pgrep -f "<worktree-path>" (ou -f "<...>/codex-last-message") AUTO-CASA com o próprio comando que você roda (o caminho está no argv do grep) → falso "rodando" que pode segurar uma entrega PRONTA por horas (e um waiter until ! pgrep ... com esse padrão nunca termina, pois se auto-vê vivo). Em background (run_in_background/Workflow), a notificação de conclusão é o sinal. Se precisar mesmo de pgrep, restrinja a pgrep -af "codex exec" e filtre o /proc/<pid>/cmdline — jamais pgrep do caminho cru. (Lição: o pattern derruba a sessão se usado p/ matar subindo a árvore — ver Disciplina.)
    • GATE PRECISA DE REDE? O --sandbox workspace-write bloqueia rede dos comandos shell do codex — então pnpm install/build/test/E2E falham com EAI_AGAIN. Se o codex-prompt manda rodar o gate (install/test/etc.), troque por --dangerously-bypass-approvals-and-sandbox (sem sandbox + sem approvals = full access, com rede) para o codex rodar o gate e se auto-validar. Justificável porque a REGRA hard garante worktree isolada (off main). Sem rede no gate, o codex só implementa e reporta blockers (aí o gate fica com o parent).
    • Saída DETALHADA por padrão (para o parent direcionar o follow-up): passe --output-schema <schema.json> exigindo um relatório rico — não basta "ok". Schema mínimo:
      { "type":"object","required":["summary","tasks","filesChanged","gate","fenceViolations","uncommitted","blockers","nextSteps"],
        "properties":{
          "summary":{"type":"string"},
          "tasks":{"type":"array","items":{"type":"object","required":["id","status","notes"],
            "properties":{"id":{"type":"string"},"status":{"enum":["done","partial","skipped","failed"]},"notes":{"type":"string"}}}},
          "filesChanged":{"type":"array","items":{"type":"string"}},
          "gate":{"type":"object","properties":{"lint":{"type":"string"},"test":{"type":"string"},"build":{"type":"string"},"e2e":{"type":"string"}}},
          "fenceViolations":{"type":"array","items":{"type":"string"}},
          "uncommitted":{"type":"array","items":{"type":"string"}},
          "blockers":{"type":"array","items":{"type":"string"}},
          "nextSteps":{"type":"array","items":{"type":"string"}} } }
      
      (Garanta que o codex-prompt.md peça "STOP com relatório DETALHADO por task" — schema + prompt se reforçam.)
  4. Modo análise/review (read-only): sem editar → --sandbox read-only, sem --full-auto.
  5. Resume (continuar a sessão anterior na mesma worktree): cd <WORKTREE> && echo "<prompt>" | codex exec --skip-git-repo-check resume --last </dev/null.

Avaliação obrigatória — nota 0–10 (SEMPRE)

Ao terminar, o parent AVALIA a entrega do Codex e dá uma nota de 0 a 10 (10 = conformidade total + entrega completa). Não pule isto — é o sinal que decide gate × escalonamento. Pontue contra o prompt:

  • Conformidade ao escopo/fence (fez o pedido; ficou dentro do allowlist).
  • Gate técnico (lint/test/build/E2E conforme o prompt — verde?).
  • Completude (todas as tasks/itens entregues).
  • Higiene (commitado, sem lixo, nada fora do fence, sem deps proibidas).
  • Qualidade/sem regressão. Bar de aceite: nota ≥9 (decisão do dono). Faixas: ≥9 = aceitável (pronto pro gate humano); 6–8 = FINDINGSescalar p/ chegar a ≥9; <6 = falha → escalar. BLOCKED se a escada esgotar sem atingir 9. Sempre mostre a nota + o racional curto por critério.

Dupla avaliação: auto-gate do Codex (effort MÁX) → re-gate do Claude (compara notas)

O codex não pode corrigir a própria prova sozinho — daí duas camadas. O codex se auto-gateia barato (perto do trabalho) e o Claude audita independente e compara as notas (pega auto-nota inflada).

  1. Auto-gate do Codex (loop, effort MÁXIMO). O codex-prompt DEVE instruir: após implementar, rode o MESMO gate (lint/test/build/E2E/secure-audit conforme o prompt) e dê uma auto-nota 0–10 pela mesma rubrica; corrija e re-rode enquanto a auto-nota <9 ou o gate não estiver verde, com effort máximo (xhigh). Pare ao auto-nota ≥9 + gate verde (ou reporte blockers). O relatório final traz a auto-nota + por critério.
  2. Re-gate do Claude (independente). Quando o codex declara aprovado, o parent re-roda o MESMO gate (fan-out, preferir Workflow → /workflows) e dá a própria nota 0–10 — sem confiar na auto-nota.
  3. Comparar + decidir.
    • Claude ≥9 e gap pequeno vs a auto-nota → PASS (pronto p/ decisão de merge do dono).
    • Claude <9 OU gap grande (codex superestimou) → o re-gate expôs lacunas → reexecutar: devolver os gaps ao codex (effort máximo) e repetir 1→2→3 até convergir (Claude ≥9 e consistente).
    • A nota que vale para o aceite é a do CLAUDE (auditor independente); a auto-nota do codex é sinal + detector de inflação. Sempre registre as duas notas + o gap no Structured Return.

Escalonamento gradual em falha

Se a nota ficou baixa / o gate falhou / o Codex não concluiu, re-rode a MESMA tarefa subindo um degrau — gradual, sem desistir no 1º tropeço nem pular pro topo.

  • Escada (1 por vez): primeiro effort low→medium→high→xhigh; esgotado, suba o modelo um tier e volte o effort a high. Re-rode e reavalie a nota.
  • Continuar × recomeçar: edições parciais coerentes → resume --last (mantém contexto). Worktree quebrada/suja → resete antes (git -C <worktree> reset --hard && git clean -fd) e rode fresco no degrau maior — não empilhe erro sobre erro.
  • Parada: pare ao atingir nota ≥9 (pronto pro gate) OU ao esgotar (modelo mais forte + xhigh ainda abaixo) → BLOCKED com evidência. Anuncie cada degrau; com autonomia, escale sozinho até o teto.

Saída detalhada → direcionar o trabalho depois

A entrega do Codex tem que ser detalhada o bastante para o parent (Claude) decidir o próximo passo — não um "pronto" opaco. Ao terminar:

  • Leia o -o por inteiro (o relatório estruturado) + varra o stream --json; complemente com git -C <worktree> status e git diff --stat para ver o que realmente mudou (não confie só no que o Codex disse).
  • Produza um DIRECIONAMENTO (handoff para o follow-up com o parent): o que o gate deve focar, o que ajustar/refazer, se escalar (nota baixa), o que ficou fora do fence/uncommitted, e os blockers. Esse direcionamento é o que guia o trabalho seguinte — registre-o no Structured Return (Evidence/Artifacts/ Next Step) e na resposta ao dono.
  • Se o relatório do Codex vier raso (sem o detalhe do schema), trate como FINDINGS e peça o detalhe (resume) ou reconstrua o detalhe a partir do diff antes de seguir.

Telemetria (tokens + tempo) — sempre reportar

O codex exec --json emite, no fim, {"type":"turn.completed","usage":{...}} com tokens: input_tokens, cached_input_tokens, output_tokens, reasoning_output_tokens. Extraia do stream:

grep -oE '"usage":\{[^}]*\}' <STREAM_LOG> | tail -1
  • Billável efetivo ≈ (input_tokens − cached_input_tokens) + output_tokens — o input costuma ser ~95%+ cache; reportar só o bruto engana. Mostre os dois (bruto + efetivo).
  • Wall-clock: o turn.completed não traz duração → meça você: envolva o codex exec com /usr/bin/time ou date +%s antes/depois (ou aproxime por stat -c %Y%W/%X do stream). Reporte em minutos.
  • Nº de comandos: grep -c command_execution <STREAM_LOG> (proxy de esforço).
  • Registre tudo no Structured Return → Telemetria. Útil p/ custo, escalonamento e comparar fases de um fan-out.

Disciplina (ao terminar)

  • STOP — não foi mergeado. O Codex implementou na worktree; rode o gate (testes/lint/build + revisão; se o projeto usa dev-workflow: /dw-review + /dw-qa + /dw-secure-audit) antes de qualquer merge.
  • Merge = decisão explícita do dono. Nunca automático aqui.
  • Sinalize trabalho uncommitted ou edição fora do fence.
  • Parar/abortar um codex em andamento: use TaskStop <task_id> (se foi run_in_background/Workflow) OU git worktree remove --force <worktree> (puxa o tapete — o codex fica sem onde escrever e morre). Fallback: kill -9 nos PIDs de pgrep -af "codex exec" que casam o tag da worktree no /proc/<pid>/cmdline. NUNCA suba a árvore de processos (ppid → ppid…) p/ matar "o supervisor": o codex em background é filho da própria sessão Claude (codex ← claude ← bash ← init) → matar os ancestrais derruba a sessão. Os "respawns" aparentes são só os workers node de UM mesmo codex. Ver memória nunca-tree-walk-kill-codex.

Anti-patterns

  • Rodar no checkout principal / sem confirmar a worktree — corrompe o trabalho ativo. (pré-flight 2)
  • Mergear/empurrar dentro da skill — o merge vive fora, após o gate.
  • Pular a nota 0–10 — perde-se o sinal de qualidade/escalonamento.
  • Suprimir todo o output por padrão (ou não capturar o stream num log) — perde-se a auditoria do que o Codex fez.
  • Detectar "terminou" por pgrep do caminho da worktree — auto-casa com o próprio comando → falso "rodando" que segura entregas prontas. Use turn.completed + worktree. (ver §3)
  • Matar codex subindo a árvore de PIDs — derruba a própria sessão Claude. Use TaskStop/worktree remove. (ver Disciplina)
  • --dangerously-bypass-approvals-and-sandbox — só com pedido explícito + ambiente já isolado.

Structured Return

  • Status: PASS (rodou, nota ≥9, parou limpo na worktree certa, pronto pro gate) · FINDINGS (rodou, nota 6–8 ou ressalvas: uncommitted/fora-do-fence/parcial) · BLOCKED (faltou CLI/credencial/worktree/prompt, ou escalonamento esgotado sem atingir 9) · NOT_APPLICABLE (sem worktree+prompt → ainda em planejamento).
  • Score: a nota do CLAUDE (0–10 — vale p/ o aceite, bar ≥9) + a auto-nota do Codex + o gap entre elas; racional por critério (conformidade/gate/completude/higiene/qualidade). Gap grande = sinal de auto-nota inflada.
  • Scope: worktree + branch + prompt usado; modelo + effort + sandbox; degraus de escalonamento percorridos.
  • Evidence: caminho do -o, trecho do stream JSONL, git status/diff da worktree pós-run.
  • Artifacts: arquivos criados/alterados (resumo do diff).
  • Decisions: modelo/effort e por quê; implementação × read-only; continuar × resetar no retry.
  • Risks: fora do fence, uncommitted, gate não rodado, dual-use (edição autônoma).
  • Telemetria: tokens do turn.completed (input/cached/output/reasoning + billável efetivo) + wall-clock + nº de comandos.
  • Next Step: "rodar o gate na worktree; merge é decisão do dono".

Notas

  • codex exec flags-chave: -m, --config model_reasoning_effort=, -s/--sandbox {read-only,workspace-write, danger-full-access}, --full-auto, --skip-git-repo-check, --json, -o/--output-last-message, --output-schema, resume --last. Testado: codex-cli 0.141.0. Sem dependência de projeto específico.
Skills similaires