PTENES
MÓDULO 1.1

🧭 Mapa mental — Claude Code vs Codex

La misma carrera, distintas reglas de pista. Antes de instalar cualquier cosa, alinea el vocabulario y la anatomía de los dos agentes.

6
Temas
30
Minutos
Básico
Nivel
Teoría
Tipo

🎯Lo que obtienes en este módulo

Salir de aquí sabiendo qué significa cada parte (CLAUDE.md, AGENTS.md, skills, sub-agents, MCP) en cada runtime. Nunca más te perderás al leer la documentación de uno sin tener una referencia mental del otro.

Contenido detallado

1

🤖 Qué es un coding agent (y qué NO es)

Un agente de programación es un LLM que ejecuta un loop autónomo: lee código, planifica una acción, edita archivos, ejecuta comandos en el terminal, observa el resultado y decide el siguiente paso — todo sin que tengas que indicarle cada movimiento. No es autocompletar ni un chatbot. Es un colaborador iterativo.

✓ Es un coding agent

  • ✓Ejecuta la tarea de principio a fin (leer, planificar, actuar, revisar)
  • ✓Tiene acceso a tools (shell, edición de archivos, web, MCP)
  • ✓Mantén el contexto de la sesión e itera
  • ✓Puedes delegar en subagentes especializados
  • ✓Ejecuta hooks de eventos (PreToolUse, Stop, etc.)

✗ No es un coding agent

  • ✗Autocompletado (Copilot inline): sugiere una línea
  • ✗Chatbot puro (ChatGPT estándar) — sin tools
  • ✗Linter/formatter — regla estática
  • ✗Expansor de fragmentos: plantilla fija
  • ✗Code search — solo consulta, no actúa

🔬El loop ReAct (Reason + Act)

Es el motor de cualquier coding agent. Se ejecuta en ciclos cortos:

1. Observa — lee el mensaje, las herramientas disponibles y el contexto
2. Think — ¿cuál es la siguiente acción que más te acerca al objetivo?
3. Act — ejecuta la acción (read file, run bash, edit, etc.)
4. Observa — resultado de la acción. Volver al paso 2 o detenerse.

Conceptos clave

Bucle ReAct
Razonar + actuar de forma iterativa
Uso de herramientas
Bash, Edit, Read, Web, MCP
Permisos
Permitir/denegar/preguntar por herramienta
Hooks
Eventos del harness
2

📘 CLAUDE.md vs AGENTS.md — el «system prompt del proyecto»

Los dos agentes leen un archivo markdown en la raíz del proyecto en inicio de cada sesión y se inyectan en el system prompt. Misma función, dos nombres:

Aspecto
Claude Code
Codex
Archivo en la raíz
CLAUDE.md
AGENTS.md
Versión global
~/.claude/CLAUDE.md
~/.codex/AGENTS.md
Versión por carpeta
✓ Sí, concatenado
✓ Sí, similar
Inyección dinámica (backtick-bang)
✓ Compatible
✗ No es compatible
Tamaño ideal
~2-3 KB
~1-2 KB (más conservador)

💡Consejo práctico

Mantén el CLAUDE.md/AGENTS.md enfocado en 3 cosas:

  • Comandos de build/test/lint en la parte superior (formato literal para copiar)
  • Convenciones de código que no sean obvias (no repetir lo que el linter ya impone)
  • Enlaces a documentación interna detallada (ADRs, runbooks)

Conceptos clave

Jerarquía
Global → proyecto → subdirectorio
Concatenación
Todo entra en el system prompt
Precedencia
Lo específico prevalece sobre lo genérico
Tamaño
Cuidado con la inflación
3

📁 .claude/ vs .codex/ vs .agents/ — la anatomía

Carpeta oculta del proyecto donde reside la personalización del agente. Claude usa una sola carpeta. Codex usa dos carpetas con responsabilidades separadas. Esta es la diferencia estructural más importante:

Claude Code — una sola carpeta

.claude/
├── CLAUDE.md            ← também pode ficar na raiz
├── settings.json        ← permissões, modelo, env, hooks
├── settings.local.json  ← override local (.gitignore)
├── agents/              ← sub-agents em Markdown
│   ├── code-reviewer.md
│   └── doc-writer.md
├── skills/              ← skills auto-invocáveis
│   └── my-skill/
│       ├── SKILL.md
│       ├── scripts/
│       └── references/
├── commands/            ← slash commands
│   └── review.md
└── hooks/               ← scripts de evento

Codex — dos carpetas, responsabilidades distintas

.codex/                  ← config específica do Codex
├── config.toml          ← settings em TOML
├── agents/              ← sub-agents em TOML
│   ├── code-reviewer.toml
│   └── doc-writer.toml
└── commands/            ← slash commands específicos

.agents/                 ← spec ABERTA (compartilhada)
└── skills/
    └── my-skill/
        ├── SKILL.md
        ├── agents/openai.yaml  ← sidecar Codex
        ├── scripts/
        └── references/

AGENTS.md                ← na raiz, system prompt do projeto

⚠️Trampa #1 de la migración

Quien viene de Claude coloca la skill en .codex/skills/ pensando que es el equivalente directo de .claude/skills/. Se equivoca. La skill de Codex está en .agents/skills/ — porque .agents/ es la convención de la spec abierta Agent Skills, y Codex la respeta.

Conceptos clave

Carpeta oculta
. al inicio = oculta
Convención
Nombre correcto, carpeta correcta
Separación config × ext
.codex vs .agents
Gitignore parcial
Hacer commit de la skill, ignorar lo local
4

🧩 Skills — el concepto común, con pequeñas diferencias

Skill es una "competencia empaquetada": carpeta con SKILL.md + frontmatter YAML + cuerpo Markdown + carpetas convencionales. Ambos runtimes implementan el estándar Agent Skills (agentskills.io), así que el núcleo es portable. En qué difieren:

Los 4 pilares que SIEMPRE coinciden

1
Nombre del archivo SKILL.md — siempre
2
Campos del frontmatter name e description en YAML
3
Cuerpo en Markdown estándar
4
Convención de carpetas scripts/, references/, assets/

SKILL.md mínimo

---
name: minha-skill
description: Úsala cuando necesites procesar X. Triggers comunes: "procesa X", "limpia Y".
---

# Minha Skill

Instrucciones en markdown que explican cómo ejecutar la tarea.

Puede hacer referencia a archivos relativos: consulta `references/exemplo.md` para más detalles.

🔷 Claude Code agrega

  • • allowed-tools en el frontmatter
  • • disable-model-invocation (opt-in explícito)
  • • Inyección dinámica con `!comando` (backtick-bang)
  • • Invocación automática por descripción
  • • Slash: /nome-skill

🟣 Codex agrega

  • • Sidecar agents/openai.yaml (branding, MCP)
  • • Límite oculto de ~8K caracteres en la description
  • • Sin inyección dinámica nativa (usar prosa como alternativa)
  • • Invocación automática por descripción (también)
  • • Dollar: $nome-skill

🦜Es exactamente aquí donde entra polyskill

Escribes UNA skill en el formato portable. polyskill genera dos versiones: una con las particularidades de Claude y otra con las de Codex (incluidos el sidecar y el ajuste de description). Consulta la Ruta 5 para los detalles.

Conceptos clave

SKILL.md
Archivo canónico
Frontmatter YAML
name + description
Coincidencia semántica
Activación por descripción
Sidecar
Metadatos específicos
5

👥 Sub-agents — dos filosofías opuestas

Un subagente es un "persona especializada" que el agente principal puede delegar tareas. Aquí está la diferencia más engañosa entre Claude Code y Codex — afecta a casi todos los que migran:

🔷

Claude Code — invocación automática

Formato Markdown en .claude/agents/. El agente principal LEE la descripción y decide por sí solo si delega.

Escribes una description rica en disparadores ("Úsala de forma proactiva cuando..."), y Claude, como agente principal, detecta el sub-agent cuando el contexto coincide. Puede ejecutar varios en paralelo mediante la herramienta Task.

🟣

Codex — invocación explícita

Formato TOML en .codex/agents/. TIENES que mencionarlo por su nombre en el prompt.

Description te ayuda a recordar, pero no se activa automáticamente. «Usa el agent code-reviewer para revisar X» — sin eso, no se ejecuta. Desventaja: más predecible, menos ergonómico.

🚨El error #1 de quienes migran de Claude a Codex

Copia el sub-agent, tradúcelo a TOML y espera que se active solo como en Claude. No se activa. Pasas horas pensando "está fallando"; no es así. Codex requiere invocación explícita por diseño.

Conceptos clave

Auto-dispatch
Claude lee la descripción y decide
Explicit call
Codex exige un nombre
Aislamiento
Contexto separado
Paralelismo
Varios simultáneos
6

🔌 MCP — el protocolo que ambos hablan

Model Context Protocol (MCP) es el denominador común de la pila. Patrón abierto para conectar LLM a herramientas externas (Slack, Gmail, GitHub, base de datos). El servidor MCP se ejecuta como un proceso independiente: Claude y Codex hablan el mismo protocolo.

La arquitectura MCP

┌──────────────┐ ┌──────────────┐
│ Claude Code │────┐ │ MCP Server │
└──────────────┘ │ │ (slack-api) │
├──→ │ │
┌──────────────┐ │ │ Expone tools │
│ Codex CLI │────┘ │ via stdio │
└──────────────┘ └──────────────┘
Los dos clients consumen el MISMO server.
El server es independiente y se declara en la config del cliente.

🔷 Declaración en Claude Code

// .mcp.json
{
  "mcpServers": {
    "slack": {
      "command": "npx",
      "args": ["-y", "@mcp/slack"],
      "env": { "TOKEN": "$SLACK_TOKEN" }
    }
  }
}

🟣 Declaración en Codex

# config.toml
[mcp_servers.slack]
command = "npx"
args = ["-y", "@mcp/slack"]

[mcp_servers.slack.env]
TOKEN = "${SLACK_TOKEN}"

💡La buena noticia

¿Configuraste un MCP server una vez? Los dos runtimes pueden usarlo. Solo cambia el formato de declaración (JSON×TOML). Server, env, herramientas expuestas: todo igual. Es la parte de la pila que MÁS sobrevive entre runtimes.

Conceptos clave

Estándar abierto
MCP es una especificación, no es propietario
Server independiente
Proceso separado
stdio vs HTTP
Dos transports
mcp__server__tool
Naming convention

🎯Resumen del módulo

✓
Agente de programación = ciclo ReAct — no es autocompletado ni chatbot. Es un colaborador iterativo.
✓
CLAUDE.md ≡ AGENTS.md — misma función, dos nombres. Jerarquía global → proyecto → subdirectorio.
✓
.claude/ una carpeta; .codex/ + .agents/ dos — Codex separa la configuración propietaria de la spec abierta.
✓
Skills = SKILL.md + YAML + body — 4 pilares comunes; el resto es específico del runtime.
✓
Subagentes: Claude los invoca automáticamente, Codex exige el nombre — error #1 de la migración.
✓
MCP es el denominador común — el server es independiente, solo cambia la declaración.

Siguiente módulo:

1.2 — Por qué usar ambos juntos (complementariedad, redundancia, tool-agnostic)