ODD en cada runtime
ODD en cada runtime
Objetivos
- Explicar cómo llega el texto del protocolo a cada agente.
- Identificar qué cambia entre runtimes.
- Entender el régimen especial de Pi y Gentle Shell.
- Distinguir entre paridad de texto y paridad de comportamiento.
Una fuente, muchas proyecciones
El bloque ## Implementation Routing se renderiza desde internal/components/agentguidance/routing.go y se proyecta a cada adaptador.
flowchart TD
A["capabilitymanifest<br/>datos de rutas"] --> B["routing.go<br/>RenderRouting"]
B --> C["Bloque agent-routing en el archivo<br/>de sistema del adaptador"]
B --> D["agent.gentle-orchestrator.prompt<br/>en opencode.json"]
B --> E["Módulo agent-routing.md<br/>para plantillas Jinja"]
B --> F["routing/pi.md<br/>en el contrato de proveedor"]
C --> G["Adaptadores estándar"]
D --> H["OpenCode y Kilocode"]
E --> I["Adaptadores con plantillas"]
F --> J["gentle-pi lo espeja"]
gentle-ai install y gentle-ai sync proyectan las mismas reglas canónicas. El refresco es idempotente: la proyección gestionada se reemplaza sin duplicarse.
El orquestador de cada agente se ensambla por separado a partir de secciones compartidas, en internal/assets/skills/_shared/odd-orchestrator-sections.md. Cada archivo en internal/assets/<agente>/orchestrator.md referencia esas secciones.
Qué cambia entre runtimes
RDD: un conjunto cerrado
var receiptDrivenDevelopmentAgents = []AgentID{
AgentClaudeCode,
AgentCodex,
AgentOpenCode,
AgentPi,
}
Es la única fuente de verdad para esa puerta, según su propio comentario, y una prueba de paridad falla si se desincroniza. Todos los demás runtimes reciben el mismo protocolo ODD con verificación ordinaria.
| Elemento del texto | Con RDD | Sin RDD |
|---|---|---|
| Paso 7 | Candidato de revisión nativa | ”Verification covers a work-unit commit or a PR slice” |
| Commit de alto riesgo | Para que la revisión nativa lo tome solo | Para que la verificación lo tome solo |
| Delegación por acción | Incluye actores de revisión | Incluye actores de verificación |
| Sección del interruptor | Presente | Ausente |
| Comprobaciones | review assess y transiciones | Según la verificación proporcional |
Delegación: depende del cliente
docs/agents.md describe la capacidad de cada uno:
| Agente | ID | Mecanismo |
|---|---|---|
| Claude Code | claude-code | Subagentes Task, MCP, skills, hooks |
| OpenCode | opencode | Subagentes task nativos, plugins de revisión |
| Codex | codex | Multiagente nativo cuando está disponible, con respaldo en solitario |
| Cursor | cursor | Subagentes nativos, reglas, skills y MCP |
| VS Code Copilot | vscode-copilot | runSubagent, instrucciones de usuario |
| Gemini CLI | gemini-cli | Agentes nativos experimentales |
| Kilo Code | kilocode | Configuración compatible con OpenCode |
| Windsurf | windsurf | Skills nativos, reglas globales y MCP |
| Antigravity | antigravity | Agentes personalizados y Mission Control |
| Kimi Code | kimi | Agentes personalizados, skills y MCP |
| Qwen Code | qwen-code | Subagentes nativos, skills y MCP |
| Kiro IDE | kiro-ide | Agentes nativos, steering, skills y MCP |
| OpenClaw | openclaw | Instrucciones de espacio de trabajo, skills y MCP global |
| Trae | trae-ide | Reglas de usuario, skills y MCP |
| GitHub Copilot CLI | github-copilot-cli | Instrucciones de usuario, skills y MCP |
| Pi | pi | Runtime del paquete Gentle Shell |
| Hermes | hermes | Workers efímeros con delegate_task |
| Conductor | conductor | Hereda la configuración de Claude Code: solo detección y catálogo |
El README habla de 17 agentes, y la tabla de docs/agents.md suma 18 filas al contar a Conductor, que solo se detecta y se cataloga.
La documentación aclara que la disponibilidad nativa no da permiso para escrituras adicionales. Un cliente sin delegación hace trabajo más pequeño inline, con la forma reducida de verificación del capítulo 13.
Hermes: workers efímeros
Hermes tiene su propio skill, hermes-ephemeral-delegation. Cada delegate_task crea un contexto nuevo sin memoria de la conversación, así que se le entrega una misión autónoma. La salida del worker se considera un autoinforme: las escrituras, pruebas, URL e IDs se comprueban antes de darlas por buenas.
Kiro: sin sdd-*
docs/kiro.md tiene una sección ODD Execution Model: el orquestador permanece en el archivo de steering, trabaja inline y delega a subagentes nativos solo por motivo con nombre. Gentle AI ya no enruta trabajo por .kiro/specs/.
Pi y Gentle Shell: un régimen aparte
Pi es el único caso cuya propiedad cambia:
Gentle AI configures Pi support, but the separate Gentle Shell (
gentle-pi) package owns Pi’s runtime prompts, persona, model assignments, delegation, and ODD behavior.
docs/pi.md
| Componente | Dueño | Propósito |
|---|---|---|
gentle-pi (Gentle Shell) | Paquete aparte | Arnés de Pi, guía ODD, persona, modelos, skills, delegación |
gentle-engram | Paquete aparte | Memoria de sesión y herramientas de Engram |
pi-web-access, pi-btw | Paquetes aparte | Acceso web y flujo complementario |
Gentle AI no escribe en el prompt de sistema de Pi. Publica el bloque renderizado como routing/pi.md en el contrato de proveedor, para que gentle-pi lo espeje.
Las diferencias del texto de Pi
Sus pasos difieren del canónico. Estos son los agregados más visibles:
| Elemento | En Pi |
|---|---|
| Lista visible | Paso 5 crea o reconstruye una lista todo desde las tareas conciliadas |
| Enrutamiento | Por los Mechanisms del orquestador |
| Pruebas | Detalla stdout y stderr exactos, y entradas rechazadas que dejan intactos datos y contadores |
| Fase visible | Etiqueta exploring, implementing, checking, deciding inferida de la actividad |
| Herramienta adicional | gentle_odd_phase, para fases que las herramientas no muestran: authorizing, researching, deciding, closing |
| Detalle | orchestrator-delegation.md y orchestrator-memory.md |
gentle_odd_phase se llama solo cuando la fase de la sesión principal cambia de verdad, nunca por llamada ni desde un subagente.
Paridad de comportamiento
El proyecto hace una distinción importante:
Updating Gentle AI’s shared renderer does not establish Pi parity; parity requires observing the same file, memory, update, and resume behavior in Pi, not merely matching prompt text.
docs/usage.md
Las pruebas contra la desviación
Mantener esto alineado en 17 agentes requiere pruebas específicas. El repositorio tiene, por ejemplo:
| Prueba o archivo | Qué protege |
|---|---|
routing_test.go, routing_golden_test.go | El texto renderizado por agente |
rdd_gating_test.go | Que solo los runtimes con RDD reciban sus cláusulas |
orchestrator_parity_test.go | La paridad entre orquestadores |
orchestrator_drift_ratchet_test.go | Que no aumente la desviación |
language_contract_test.go | El contrato de idioma de los artefactos |
e2e/organicruntime/organic_runtime_test.go | Un agente real con el binario real |
El contrato de idioma
Una regla que afecta directamente a quienes trabajan en español:
- La persona activa controla solo la conversación directa.
- Los artefactos técnicos generados son en inglés por defecto, sea cual sea la persona o el idioma de conversación. Esto incluye tareas, comentarios de código, textos de interfaz, pruebas y fixtures.
- Si se piden en otro idioma, se usa un registro neutro o profesional, salvo instrucción contraria.
- Los comentarios públicos siguen el idioma del contexto de destino.
- Al delegar, se reenvía este contrato.
Por otra parte, las especificaciones citan tus palabras textualmente en tu idioma: un documento de feature en inglés puede tener citas en español. Los documentos reales del repositorio lo muestran.
Personas
La persona afecta al tono de la conversación, no al protocolo.
| Persona | ID | Descripción |
|---|---|---|
| Gentleman | gentleman | Mentor orientado a enseñar, que cuestiona malas prácticas y explica el porqué |
| Neutral | neutral | La misma filosofía, sin lenguaje regional |
| Custom | custom | Mantiene tu configuración sin gestionar, y no inyecta una persona |
Actividad
Si tienes Gentle AI instalado en tu agente, abre el archivo donde quedó el bloque gestionado. Búscalo con ## Implementation Routing y comprueba:
- ¿Incluye la sección Receipt-driven development is user-owned? ¿Coincide con la lista cerrada?
- ¿Qué dice el paso 7 sobre el candidato?
- ¿Cuáles son los valores numéricos del Mapping trigger?
Autoevaluación
-
¿Qué runtimes reciben RDD?
- A. Todos los que tienen subagentes
- B. Los 17 soportados
- C. Claude Code, Codex, OpenCode y Pi
- D. Solo Claude Code
-
¿Quién es dueño del comportamiento de ODD en Pi?
- A. Gentle Shell (
gentle-pi) - B. El binario
gentle-ai - C. Engram
- D. El archivo
opencode.json
- A. Gentle Shell (
-
¿Qué establece la paridad con Pi según la documentación?
- A. Que el texto del prompt coincida
- B. Una ejecución de
gentle-ai sync - C. Observar el mismo comportamiento de archivo, memoria, actualización y reanudación
- D. Que pasen las pruebas de Go
-
Un agente conversa en español. ¿En qué idioma escribe por defecto los comentarios de código?
- A. En español
- B. En el idioma del usuario más reciente
- C. En el que defina la persona
- D. En inglés, salvo que se pida otro
Respuestas
- C. Es el conjunto cerrado de
internal/model/rdd.go. - A.
docs/pi.mdlo indica de forma explícita. - C. Coincidir en el texto no basta.
- D. Es el contrato de idioma, y la persona solo afecta a la conversación.
Lista de control
- Sé dónde se genera el texto y cómo llega a mi agente.
- Sé si mi runtime recibe RDD.
- Conozco la frontera entre Gentle AI y Gentle Shell.
- Entiendo el contrato de idioma de los artefactos.
Fuentes
internal/components/agentguidance/routing.go, internal/model/rdd.go, docs/trigger-rules.md, docs/agents.md, docs/pi.md, docs/kiro.md, docs/usage.md, internal/assets/skills/_shared/odd-orchestrator-sections.md, internal/assets/skills/hermes-ephemeral-delegation/SKILL.md.