agentic-dev-core · contrato de personalidad
Butler Pattern, PM Voice y Visual Mapping explican por qué el repo responde como responde. Pero encima de las tres hay una pregunta anterior: cuando dos capas opinan sobre lo mismo, ¿cuál gana? Hasta agosto de 2026 la respuesta era "la que se repite más veces por turno", y eso no lo había decidido nadie.
Cada capa manda sobre una sola dimensión. Ese es el diseño entero: si dos reclaman la misma, se contradicen, y el desempate acaba siendo mecánico en lugar de deliberado.
| Capa | Dimensión | Dónde vive | Frecuencia |
|---|---|---|---|
| caveman | cuántas palabras | caveman@caveman, nivel full |
cada turno, vía hook |
| AGENTS.md §2manda | qué se dice, granularidad y registro | Butler + PM Voice + Visual Mapping | cada turno, vía hook nuevo |
| OUTPUT STYLE | cómo se ve y qué textura tiene | ~/.claude/CLAUDE.md |
al arrancar sesión |
backticks, tablas, espaciado) y la textura de
las frases (sin guión largo, longitud variable, sin recap final). Si una regla de ahí
cambiara qué se dice, está mal puesta y pertenece a §2.
UserPromptSubmit, mientras §2 se lee una vez al arrancar y
se diluye conforme crece el contexto. Ganaba la capa más repetida, no la que tenía razón.
Por eso PM Voice se evaporaba en sesiones largas y caveman nunca.
Ticket ficticio APEX-233, checkout con pago dividido entre dos tarjetas. Mismo
trabajo, misma información. Solo cambia cómo llega.
Ocho ajustes. Ninguno inventa una estrategia nueva: todos eliminan una contradicción que ya estaba escrita en dos sitios a la vez.
§2 abre con la tabla vinculante de arriba. Antes ninguna de las tres fuentes decía cuál mandaba, así que la pregunta no tenía respuesta escrita.
De topic — fragment a topic: fragment. La instrucción
mandaba usar el carácter que la regla global prohibía, y ninguna corrección
gana contra su propio ejemplo canónico.
101 en AGENTS.md y 42 en docs/ai-personality.md. El modelo
imita la densidad tipográfica que ve en sus propias instrucciones.
Obligaba a abrir cada respuesta con una frase de enganche distinta. Teatro fabricado, y contradecía el rasgo anti-theatre que la propia doc de personalidad reclamaba.
.agents/hooks/personality-reinject.mjs devuelve el contrato de §2 en
cada turno por unos 30 tokens, con un adapter fino por harness
(.claude/settings.json, .opencode/plugins/,
.codex/hooks.json). Arregla la asimetría mecánica, no la redacción.
Nota explícita en §2: AGENTS.md y los SKILL.md son prosa
densa para parseo automático. No se imita su tipografía en el chat.
El one-liner corre en modo --all, que instala el plugin y encima
registra hooks propios. Ahora se recomienda --no-hooks.
Rutas inexistentes de caveman y de los hooks, y una descripción del fichero global que listaba preferencias que nunca contuvo. Nueva sección 3.7 para la capa OUTPUT STYLE.