Pense numa tomada elétrica. O aparelho é o mesmo; muda o adaptador conforme o país.
O princípio (110/220 V, um plugue) não muda — muda o encaixe.
Subagente é igual: o princípio — "delega para um contexto isolado, recebe um resumo" — é universal. O que muda de ambiente para ambiente
é o encaixe: onde o arquivo mora, como se chama o frontmatter, os nomes das ferramentas.
A meta deste módulo é escrever um único .md e plugá-lo em dois runtimes.
↑ Uma fonte .md; cada runtime aplica seu adaptador. A ideia é a mesma — o encaixe muda.
Conteúdo detalhado
🧩 A ideia é maior que a ferramenta
Tudo que você aprendeu até aqui — maestro que delega, janela própria, relatório limpo — descreve um padrão, não um produto. O padrão é: "tarefa grande vira um subprocesso com contexto próprio; só a conclusão volta". Qualquer ferramenta de agente sério precisa de algo assim, porque o problema (contexto que enche, trabalho que se repete) é universal. Por isso o conceito viaja.
🔌 Princípio × encaixe
Separe duas coisas na cabeça. O princípio é o que você delega e por quê. O encaixe é a papelada local — pasta, nome de campo, sintaxe. Trocar de ambiente mexe só no encaixe:
- •Princípio (não muda): isolar contexto · um papel por agente · devolver resumo, não a conversa.
- •Encaixe (muda): onde mora o arquivo · como se chama o frontmatter · nome das ferramentas · quem invoca.
- •Consequência: 80% do seu
.mdé reaproveitável; só a casca precisa de adaptação.
A constatação de que "subagente" é um padrão de arquitetura (delegar a um contexto isolado), e não um recurso exclusivo de um app.
Liberta você de uma ferramenta só. O conhecimento da trilha inteira passa a render em qualquer runtime de agente, presente ou futuro.
Padrão × produto · princípio (estável) × encaixe (local) · portabilidade do conceito.
🟢 Codex CLI: o mesmo, com outro nome
O Codex CLI (o agente de terminal da OpenAI) tem as mesmas peças, só com vocabulário diferente. Onde o Claude Code fala "subagente" e "skill", o Codex fala em prompts e agentes markdown que você guarda numa pasta e invoca. O esqueleto bate: um arquivo de instruções + um gatilho + um conjunto de ferramentas permitidas.
| Conceito | Claude Code | Codex CLI (equivalente) |
|---|---|---|
| Unidade de trabalho delegada | subagente (.md) | prompt/agente markdown |
| Habilidade reutilizável | skill (SKILL.md) | prompt salvo + AGENTS.md |
| Onde mora (projeto) | .claude/agents/ | .codex/prompts/ |
| Onde mora (global) | ~/.claude/agents/ | ~/.codex/prompts/ |
| Memória de projeto | CLAUDE.md | AGENTS.md |
| Como invoca | automático pela description ou @nome | explícito por nome do prompt (ex.: /nome) |
💡 A diferença mais importante
O Claude Code auto-roteia: o maestro lê a description e decide sozinho quando delegar.
O Codex tende a ser mais explícito — você chama o prompt pelo nome. Mesma peça, gatilho diferente: lá a
description é um ímã automático; aqui ela vira mais uma etiqueta para você escolher.
AGENTS.md × CLAUDE.md · auto-roteamento × invocação explícita.♻️ Cross-runtime: a ideia do "polyskill"
Em vez de manter duas cópias (uma pro Claude, uma pro Codex) que divergem com o tempo, você escreve
uma fonte só e "emite" a versão de cada runtime a partir dela. Essa é a ideia de um
polyskill: um .md portável é o molde, e cada ambiente é um
build daquele molde. Uma verdade, vários destinos — o oposto de copiar-e-colar.
📊 Por que vale ter uma fonte só
Duas cópias divergem: você corrige um bug numa, esquece a outra, e em um mês elas se contradizem. Com uma fonte → vários builds, a correção entra uma vez e os dois ambientes herdam. É exatamente o motivo de "contexto limpo" da Trilha 1 aplicado ao seu repositório de skills: menos duplicação, menos deriva.
.md portável que serve de molde; cada runtime é gerado (build) a partir dele.🛠️ Equivalência de ferramentas
As ferramentas têm nomes diferentes, mas as capacidades são as mesmas: ler arquivo, buscar
em texto, listar caminhos, editar, rodar shell. Em vez de citar o nome exato da ferramenta no corpo do seu .md, descreva a
capacidade ("leia os arquivos", "busque por padrão") — assim o mesmo texto funciona nos dois,
porque cada runtime resolve qual ferramenta concreta usar.
| Capacidade | Claude Code | Codex / shell |
|---|---|---|
| Ler um arquivo | Read | cat / leitura de arquivo |
| Buscar em texto | Grep | rg / grep |
| Listar caminhos por padrão | Glob | find / ls |
| Editar arquivo | Edit / Write | patch / escrita no shell |
| Rodar comando | Bash | execução de shell (nativa) |
| Pesquisar na web | WebFetch / WebSearch | ferramenta de web (se habilitada) |
✓ Escreva o corpo assim (portável)
- ✓"Leia os arquivos alterados e entenda a intenção."
- ✓"Busque por chamadas inseguras no código."
- ✓"Não modifique nada — apenas reporte."
✗ Evite amarrar a uma ferramenta
- ✗"Use a tool
Grepcom flag-n…" (só Claude) - ✗"Chame
WebFetchem…" (some no Codex) - ✗Citar nomes exatos no corpo trava a portabilidade.
.md rodar igual nos dois runtimes.⚖️ O que muda × o que não muda
Antes de portar, fixe a fronteira. O princípio — delegar para contexto isolado, um papel por agente, devolver resumo — atravessa qualquer ambiente intacto. O que muda é a casca: nomes de campo, pasta, sintaxe de invocação, ferramentas disponíveis. Saber o que fica firme evita reescrever o que já estava certo.
✓ Não muda (o princípio)
- ✓Delegar a um contexto isolado
- ✓Devolver relatório, não a conversa toda
- ✓Um papel por agente (sem faz-tudo)
- ✓O miolo: papel + passos + saída + limites
✗ Muda (a casca)
- ✗Nome dos campos do frontmatter
- ✗Pasta onde o arquivo mora
- ✗Como o agente é invocado
- ✗Nomes das ferramentas concretas
⚠️ O erro de portabilidade mais comum
Reescrever o miolo achando que cada runtime precisa de um cérebro diferente. Não precisa: o cérebro (papel, passos, saída, limites) é o mesmo. Quem porta bem mexe só na casca e deixa o miolo intacto — assim os dois builds se comportam igual.
🚚 Portar uma skill — e onde param os limites
Portar é um procedimento de três tempos: extrair o miolo, trocar a casca, testar a paridade. Mas portabilidade tem teto: nem tudo cruza o limite. Coisas muito coladas a um runtime — uma MCP exclusiva, um nome de tool específico, um modelo só de um provedor — não viajam e viram uma nota de adaptação.
Extraia o miolo
O que é igual nos dois.
Separe papel + passos + saída + limites do resto. Reescreva qualquer "use a tool X" como capacidade ("leia", "busque"). Esse texto vira a fonte portável.
Troque a casca
O encaixe de cada runtime.
Monte o frontmatter do alvo (Claude: name/description/tools; Codex: prompt + AGENTS.md) e ponha o arquivo na pasta certa do ambiente.
Teste a paridade
Mesma entrada, mesma saída?
Rode a mesma tarefa nos dois e compare. Se o Codex não dispara sozinho, lembre que lá a invocação costuma ser explícita — isso é casca, não bug.
🚧 Os limites (o que não cruza)
- →Ferramenta/MCP exclusiva de um runtime: deixe uma nota "no Codex, troque por shell equivalente".
- →Modelo de um provedor só (ex.: um Opus): no outro ambiente, escolha o modelo de papel correspondente.
- →Auto-roteamento: a
descriptionque dispara sozinha no Claude pode exigir chamada explícita no Codex.
Exemplo real: um agente portável (Claude → Codex)
Aqui está um doc-summarizer.md escrito para ser portável: o frontmatter é a casca
do Claude Code, e o corpo é o miolo agnóstico de ferramenta. Logo depois, a nota de
adaptação mostra o que trocar para rodar o mesmo arquivo no Codex CLI.
--- # CASCA (Claude Code) — troca por runtime
name: doc-summarizer
description: Lê documentos longos e devolve um resumo
curto com os pontos-chave. Use para condensar
arquivos grandes sem encher o contexto.
tools: Read, Grep, Glob # só leitura
model: haiku # barato p/ escanear
---
# MIOLO (portável) — NÃO cita ferramenta por nome
You are a precise document summarizer.
When invoked:
1. Read the target documents and grasp the intent.
2. Search for the key claims, numbers and decisions.
3. Write a summary: 5 bullets, then the source paths.
Output: only the summary. Do not paste raw
content. Do not modify any file.
📝 Nota de adaptação — rodar no Codex CLI
- 1.Pasta: mova o arquivo de
.claude/agents/para.codex/prompts/(ou o global~/.codex/prompts/). - 2.Frontmatter: o Codex não usa
tools:/model:assim — registre o papel e as regras noAGENTS.mddo projeto; o corpo (miolo) fica igual. - 3.Ferramentas: "Read/Grep/Glob" viram
cat/rg/findno shell — o corpo já fala em "read/search", então nada a mudar ali. - 4.Invocação: em vez de auto-disparo pela
description, chame o prompt pelo nome (/doc-summarizer).
🧠 O miolo (viaja inteiro)
- Papel — "a precise document summarizer".
- Passos — ler, buscar, resumir (sem nome de tool).
- Saída — 5 bullets + caminhos.
- Limites — não colar bruto, não editar.
🔌 A casca (troca por runtime)
- Pasta —
.claude/agents↔.codex/prompts. - Config — frontmatter ↔
AGENTS.md. - Tools — nomeadas ↔ shell.
- Gatilho — auto ↔ chamada por nome.
Prompts prontos (copie e cole)
Três prompts para portar e cross-rodar. O padrão é sempre o mesmo: peça para preservar o miolo, adaptar a casca, e deixar uma nota onde a portabilidade acaba.
Pegue este subagente do Claude Code e adapte para o
Codex CLI. Mantenha o corpo (papel/passos/saída) intacto,
troque só a casca: pasta, frontmatter e invocação. No fim,
liste uma "nota de adaptação" com o que não é portável.
Reescreva esta skill como fonte portável: remova nomes
de ferramenta específicos do corpo e descreva a capacidade
("leia", "busque"). Depois emita dois builds — um para
Claude Code, um para Codex — a partir da mesma fonte.
Liste as ferramentas que este .md usa no Claude Code
(Read, Grep, Glob, Bash…) e me dê o equivalente de shell
para o Codex. Aponte quais não têm equivalente direto e
precisam virar nota de adaptação.
Tela simulada: emitir a fonte para 2 runtimes
É assim que um build cross-runtime aparece no terminal: você roda o emissor uma vez sobre a fonte
portável, e ele gera os arquivos de cada ambiente — adaptando a casca, mantendo o miolo. Repare nos dois destinos saindo do
mesmo SKILL.md.
↑ Recriação ilustrativa do terminal (não é screenshot real). Uma fonte entra; dois builds saem com o mesmo miolo e cascas diferentes.
Exercício
Pegue um subagente seu (ou o doc-summarizer.md acima) e porte-o
para o Codex CLI. Entregue dois itens: o arquivo adaptado e uma nota de adaptação com o que
mudou e o que não é portável.
Como fazer
- Extraia o miolo: separe papel + passos + saída + limites; reescreva qualquer nome de tool como capacidade.
- Troque a casca: aponte a nova pasta (
.codex/prompts/), onde vai a config (AGENTS.md) e como invocar. - Liste os limites: aponte ao menos uma coisa que não cruza (MCP, modelo de provedor, auto-roteamento) e o que fazer no lugar.
✅ Critério de verificação — como saber que acertou
A sua entrega passa se atender aos quatro sinais:
- →O miolo ficou intacto — papel/passos/saída idênticos entre os dois.
- →A casca mudou — pasta, config e invocação corretas para o Codex.
- →O corpo não cita ferramenta por nome — fala em "leia/busque", não em
Grep. - →Existe pelo menos uma nota de adaptação nomeando um limite real.
Se você teve que reescrever o miolo para o Codex, provavelmente algo da casca vazou para dentro do corpo — volte e isole.
Exemplo resolvido (uma linha de cada)
Miolo (igual): "you are a precise document summarizer · read → search → 5 bullets + paths". Casca (trocada): arquivo em .codex/prompts/, regras no AGENTS.md, chamado por /doc-summarizer. Nota: "model: haiku não existe no Codex — usar o modelo barato/rápido equivalente do provedor".
✅ Resumo do módulo
AGENTS.md no lugar de CLAUDE.md, invocação explícita..md portável → vários builds; corrige num lugar, vale em todos.Próximo módulo:
4.3 — Comparando modelos por papel. Opus/Sonnet/Haiku × GPT/Codex × outros provedores: qual modelo para cada papel da frota.