🚀 Proyectos
Seis proyectos paso a paso sobre un sistema real (el diagnóstico del 2026-09-14 de esta máquina): migrar el primer proyecto, llevar MCP y hooks entre Claude y Codex, curar la memoria, conectar un tercer ejecutor, aislar un workspace de cliente — y cerrar con la mentalidad que hace que todo esto perdure. Cada proyecto tiene objetivo, comandos, criterio de aceptación y riesgos.
Léelo del centro hacia afuera: el núcleo portátil es uno solo; los cuatro ejecutores (Claude, Codex, dsh local, openpcbotv3) leen el mismo AGENTS.md y context/ y devuelven trabajo en forma de handoff. Cambiar de modelo no mueve el centro.
Mapa de la ruta
🚀 Primer proyecto real
Fase 0 y Fase 2 del plan
🔌 MCP y hooks
Las herramientas viajan, los eventos no
🗃️ Memoria curada
El agente propone, tú apruebas
🐳 Tercer ejecutor
dsh-sandbox y modelo local
👥 Workspace de cliente
Venn, alcance y canarios
🧭 La mentalidad
Todo esto es iterativo
Contenido detallado
🚀 Proyecto 1: migrar tu primer proyecto real
Las Fases 0 y 2 del plan de migración aplicadas a un proyecto de verdad: elegir el piloto entre los 13 proyectos en los que Codex ya confía pero donde entra "a ciegas", crear el AGENTS.md global, hacer la limpieza, correr los cinco scripts y probarlo con readback en los dos runtimes.
El diagnóstico encontró 55 proyectos marcados como trusted en Codex; 13 de ellos tienen CLAUDE.md pero ningún AGENTS.md (wifi, portal, inemapro-mono, timesmkt2, timesmkt3, inemacert, promoavatar2, skool-roast, imkt4, iccmonit, ATIA, claude-session-kit, agentes-fronteiros). En esos, cada sesión de Codex empieza desde cero.
El piloto correcto es pequeño, se usa todas las semanas y tiene CLAUDE.md propio — así el readback mide algo real, no un ejemplo de juguete.
Trusted en Codex, proyecto "a ciegas", orden por uso, tarea representativa.
La Fase 0: correr adapt-instructions.sh ~/.claude, revisar las 71 líneas portables, guardar ~/.codex/AGENTS.md y dejar el CLAUDE.md global empezando con @AGENTS.md más las 7 líneas de residuo.
Sin base global, reglas como el autor del commit y dónde están las keys no llegan a Codex en ningún proyecto.
Instrucción global vs por proyecto, @AGENTS.md, residuo Claude, .proposto.md.
Archivos como el CLAUDE.md de ruflo (1.391 líneas) o el de timesmkt2 (427) se convierten en ruido en cualquier runtime. Las reglas estables quedan en el AGENTS.md; decisiones, fuentes y runbooks van a context/.
Migrar en crudo solo transporta ruido. La limpieza es el paso que el texto fuente llama "Marie Kondo para tus carpetas".
Archivar por defecto, traer de vuelta solo cuando haga falta, instrucción corta y contexto separado.
La secuencia del kit aplicada al piloto: diagnóstico, inventario, adaptación de las instrucciones, núcleo portable sin sobrescribir nada y la skill session-handoff portada vía polyskill.
Cada script es reversible y produce evidencia; saltarse uno de ellos es exactamente donde la migración se vuelve "intuición".
Orden fijo, salida en relatorios/, backup al lado, drift cero.
readback-test.sh <projeto> both abre una sesión nueva en Claude y en Codex y pregunta objetivo, regla con fuente, última decisión, próxima acción y conflictos. La respuesta cruda queda en relatorios/.
Es la única prueba de que el agente encontró, leyó, entendió y usó el contexto — que el archivo exista no cuenta.
Sesión nueva, cita AGENTS.md / tasks / handoffs, pasó / falló / no ejecutado.
Criterios del plan: readback aprobado en los dos runtimes, drift cero, el clon aislado pasa el check.sh, setup de Claude intacto. Todo registrado en tasks/current.md y handoffs/latest.md.
El handoff es lo que permite que la próxima sesión — en cualquier runtime — continúe desde el punto correcto sin releer JSONL.
Criterio de terminado verificable, handoff con checks ejecutados, próxima acción exacta.
🔌 Proyecto 2: MCP y hooks entre Claude y Codex
Las herramientas viajan, los eventos no. Claude tiene magnific y metricool registrados; Codex tiene cero MCP. Los hooks de SessionStart no existen en Codex. Este proyecto registra lo que se puede, traduce lo que no se puede y destraba las 15 skills marcadas como "adaptador".
El ~/.claude.json tiene magnific y metricool globales, más klingai (wifi) y cerebro-vip (2cerebrox) por proyecto. El config.toml de Codex no tiene ningún bloque [mcp_servers].
MCP da acceso a herramientas y datos; no migra historial ni resuelve memoria. Saber exactamente qué ve cada runtime evita esperar de Codex algo que no tiene.
MCP global vs por proyecto, .mcp.json, config.toml, alcance de cuenta.
Registrar el servidor en Codex apuntando a la misma key que ya vive en ~/projetos/openpcbotv2/.env, cargada en runtime — nunca pegada en el config ni en el repo.
El Prompt A es explícito: traducir MCP conservando el alcance de cuenta y la referencia de credencial, sin copiar el valor.
Referencia vs valor, cargar en runtime, secretos fuera de lo portable.
Las 15 skills clasificadas como "adaptador" (avatar-heygen-nei, heygen-cli, heygen-mcp, espiona-ads, ugc-seedance25, website-intelligence, comfy-relay y las 8 printing-press) solo funcionan en Codex después de que el MCP correspondiente esté registrado.
El bloqueo real de la portabilidad es MCP, no el formato del SKILL.md — 72 de las 89 skills migran sin tocar nada.
Reutilizable vs adaptador, dependencia de herramienta, portar después del MCP.
Claude dispara 2 hooks en SessionStart (context-mode, fable-mindset). El ~/.codex/hooks.json conoce PostToolUse y Stop (usados por impeccable), pero no tiene evento de inicio de sesión.
Nunca asumas que hooks con nombre parecido tienen la misma semántica. La lógica reutilizable va a un script común; cada evento nativo se valida por separado.
Evento, payload, trust hash, script común + disparador nativo.
El hook que inyecta la "regla de ritmo" en Claude no tiene equivalente en Codex; la solución portable es transformar el playbook en una sección del AGENTS.md global, leída por instrucción.
Cuando el mecanismo nativo no existe, el contenido igual puede viajar — como Markdown común. Lo mismo vale para silver-platter.
Nativo → texto, instrucción en vez de inyección, residuo de Claude.
Los 7 subagentes de Claude (conselho, advogado-do-diabo, analista-neutro, diretor-ecossistema…) no tienen equivalente 1:1 en Codex. Cada rol se vuelve una skill con prompt propio — el mismo diseño que openpcbotv3 usa en agents/ y personalidades/.
El rol es contenido; la orquestación es mecanismo. El contenido es portable, el mecanismo queda fuera del núcleo durable.
Skill de rol, prompt de persona, orquestación fuera del núcleo.
🗃️ Proyecto 3: memoria curada
El agente propone, tú apruebas. La memoria de Claude (869 archivos, 227 carpetas) es materia prima sin aprobación; el vault de openpcbotv3 (MEMORY.md y USER.md) ya tiene el flujo correcto. Este proyecto convierte el vault en el resumen global de hechos que Claude, Codex y dsh leen.
Los archivos en ~/.claude/projects/*/memory fueron escritos por el modelo, sin revisión humana, y ningún otro runtime los ve. Copiarlos en masa transporta los errores junto con los aciertos.
El plan es claro: promover hecho por hecho, deliberadamente, cuando se toque el proyecto — nunca copia en masa.
Memoria nativa vs fuente, promoción deliberada, evidencia en bruto separada.
En ~/vault/, el bot v3 mantiene MEMORY.md y USER.md curados: él propone entradas y tú las apruebas por Telegram. USER.md entra en todos los prompts del bot.
Es el único lugar de la máquina con hechos personales aprobados por un humano — exactamente lo que el Prompt B llama "promover hechos verificados".
Vault curado, resumen global, hecho verificado con aprobación.
El agente clasifica la frase (semántica o episódica), propone la entrada, y solo /memoria aprovar <id> la graba en el vault. Las preguntas nunca se convierten en hechos.
Separa hecho de preferencia, hipótesis y decisión en la entrada — el problema que la Ruta 1 llamó "¿cuál de las versiones es la correcta?".
Propuesta, aprobación humana, semántico vs episódico, dedupe.
La consolidación nocturna del v3 detecta contradicciones por fecha y marca la entrada antigua con superseded_by. La antigua sale del contexto, pero sigue en la base de datos.
Es la regla de conflicto del plan en la práctica: la procedencia y la decisión aceptada vencen al timestamp, y nada se pierde por error.
Contradicción por fecha, ocultar vs borrar, backup antes de la ronda.
El v3 ya inyecta USER.md en todos los prompts. Claude y Codex hacen lo mismo por una instrucción de lectura en el AGENTS.md global; el dsh, vía la skill de prime. Un hecho personal, una fuente, tres ejecutores.
Criterio de aceptación del sistema: en una sesión nueva, cada runtime cita USER.md como fuente de un hecho personal.
Fuente única, lectura por instrucción, sin auto-load, readback con fuente.
6.859 sesiones de Claude (2,3 GB) y 209 de Codex (601 MB) son historial, no fuente. Con handoff/prime funcionando, las sesiones de más de 90 días pueden archivarse.
Solo después de que el ciclo esté en pie: el handoff sustituye la dependencia de los JSONL, no al revés.
Historial vs fuente, archivar por defecto, orden de operaciones.
🐳 Proyecto 4: tercer ejecutor
El dsh-sandbox (DeepSeek en contenedor) ya lleva 12 días corriendo en esta máquina, con 3 skills copiadas a mano y sin capa de contexto. Este proyecto lo transforma en ejecutor de segunda línea: mismo núcleo, skills generadas por la fuente canónica, y seguridad preservada.
@deepseek-ai/dsh en Docker, panel en 127.0.0.1:9080. ./dsh local monta ~/projetos y usa solo Ollama; remoto usa OpenRouter sin proyectos; remoto-projetos exige escribir CONFIRMO.
Es un tercer runtime real, con un harness más débil — el caso en que el texto fuente dice que vale la pena cuidar el propio harness.
Contenedor, proveedor intercambiable, montaje atado al proveedor, modelo local.
formato-curso-v2, formato-curso-v5 y capa-inema fueron copiadas a ~/projetos/dsh-skills. Cuando el original en formato-curso-inema cambia, la copia no lo sigue.
Con cuatro consumidores de skills (Claude 117, Codex 27, dsh 3, openpcbotv3 16), sin fuente canónica cada uno diverge por su cuenta.
Drift, fuente canónica, cuatro consumidores, copia generada vs manual.
El dsh acepta el mismo SKILL.md de Claude, así que el destino nuevo copia dist/claude/<skill> a ~/projetos/dsh-skills/<skill> y el drift check pasa a cubrir los 4 destinos (claude, codex, dsh, v3).
Las 3 copias manuales de hoy pasan a ser generadas — el criterio de aceptación es drift sin DRIFT en todos los destinos.
Adaptador de destino, mismo formato, drift en 4 lugares.
El dsh escanea $DSH_HOME/skills, pero no lee AGENTS.md por sí solo. Una skill de prime le indica leer AGENTS.md, context/ y handoffs/latest.md del proyecto montado en modo local.
Los nombres de archivo son convención; ningún runtime los carga automáticamente. Quien no tiene mecanismo nativo obtiene la lectura por medio de una skill.
Prime como skill, puentes de ruta en work/, lectura explícita.
~/projetos tiene 269 archivos de secretos (incluye wifi/.env y openpcbotv2/.env). Montar eso con un proveedor remoto enviaría todo hacia afuera; por eso montaje y proveedor van atados y el dsh se niega a exponer la red.
Seguridad del plan: readback en el dsh solo en modo local. La carpeta es organización; permiso, montaje y credencial son lo que impone el acceso.
Modos exclusivos, network_mode host, versión congelada, túnel SSH.
Readback en el dsh desde el panel, con las mismas 5 preguntas. El criterio es citar AGENTS.md, tasks y handoffs — no la calidad de la redacción. Un modelo local rinde menos; eso es un límite del modelo, no de la portabilidad.
Comparar en modo remoto antes de concluir que la estructura falló. Las skills escritas para Claude pueden quedarse cortas en un modelo pequeño.
Criterio de aceptación ajustado, límite del modelo vs límite de la estructura, comparación controlada.
👥 Proyecto 5: workspace de cliente
Venn, alcance y canarios. Dos clientes imaginarios (North Star y Harbor): lo que tienen en común va al centro; lo que es exclusivo queda en un repo privado por cliente, con snapshot de contexto fechado. El add-on de cliente del Prompt B, paso a paso — y la prueba que demuestra el aislamiento.
Descubre qué tienen en común los dos clientes (patrones de entrega, skills, procesos), centraliza esa parte y mantén carpetas específicas solo para lo que es exclusivo de cada uno.
Cuanto mayor es el área del medio, más reutilizable es el sistema — y menos reescribes por cliente.
Compartido vs exclusivo, template genérico, área común grande.
Cada proyecto de cliente recibe su repositorio privado (o una frontera equivalente) y comienza con un snapshot aprobado de contexto que registra ID del cliente, fuente, fecha y regla de refresh. Las fuentes de otro cliente se rechazan.
Una carpeta llamada "harbor" describe organización; solo el permiso de repo, el montaje y la credencial imponen el acceso.
Frontera impuesta, snapshot fechado, client ID, refresh deliberado.
Hechos, credenciales, registros y logs de cliente nunca entran en el CLAUDE.md/AGENTS.md global ni en el vault personal. El trabajo mixto corre en pilotos separados, con raíces separadas.
La memoria universal filtra contexto de un cliente a otro sin que nadie se dé cuenta — es el error más caro del modelo agnóstico.
Alcance global vs de cliente, raíces separadas, pilotos separados.
El bloque "Client workspace" que se agrega al Prompt B: un cliente nombrado, un piloto, patrones genéricos reutilizados, verificación de acceso al repo, montajes, conectores, permisos de retrieval y backups.
Empieza en MODE: audit, como todo: el agente devuelve árbol, dueños y pruebas antes de tocar cualquier archivo.
CLIENT_SCOPE, audit primero, verificación de acceso, un cliente a la vez.
Planta un dato falso y único en el cliente A; pídelo en una sesión del cliente B. Si aparece, el backend filtró. Si el modelo "se niega educadamente", eso no prueba nada sobre el backend.
Sin canario solo tienes la palabra del modelo. Un enforcement no verificado debe etiquetarse como tal.
Canario, dato sintético, prueba de backend, etiqueta "no verificado".
La plantilla solo pasa al segundo cliente cuando el primero aprobó en standalone, readback y canario. Para varios clientes, el add-on se repite con un ID específico cada vez.
Un dueño y un worktree por cambio concurrente; una carpeta compartida no es un lock y el worktree no impone aislamiento por cliente.
Piloto aprobado, un ID por ronda, worktree ≠ aislamiento.
🧭 Proyecto 6: la mentalidad
Todo esto es iterativo. Cada cambio mejora un modelo y rompe otro; los modelos cerrados pueden dejar de necesitar skills; pasas a administrar contexto, estado, herramientas, procesos y validación — no prompts. Cierra con el changelog de fallas y qué hacer mañana.
Una edición en una skill puede dejarla mejor para Claude y peor para Codex o para un modelo local. No existe una versión final; existe la versión probada hoy.
Sin readback y drift por runtime, no descubres la regresión hasta el día en que la necesitas.
Iteración, regresión cruzada, prueba por runtime.
Rutas de descubrimiento, formatos de config, eventos de hook y permisos cambian de versión en versión. Los prompts mandan verificar el comportamiento instalado con --help y la documentación oficial, nunca inventar un comando de import.
El Codex CLI 0.154 no tiene import; la app sí. Ese tipo de detalle solo aparece cuando miras.
Verificar antes de convertir, doc oficial, versión instalada.
Si los modelos cerrados se entrenan con tus conversaciones y absorben las capacidades, muchas skills se vuelven innecesarias. Los modelos locales probablemente seguirán dependiendo de ellas.
Construir agnóstico no es apostar contra nadie: es mantener la estructura funcionando mientras cambia lo que cada proveedor exige.
Capacidad absorbida, skill como muleta temporal, estructura que sobrevive.
El cambio de trabajo: en vez de coleccionar prompts, mantienes contexto, estado actual, herramientas registradas, procesos escritos y criterios de validación. El prompt se vuelve consecuencia.
Es lo que el segundo texto fuente llama pasar de la filosofía al proceso: AUDITAR → ORGANIZAR → FUENTE DE LA VERDAD → ADAPTAR → PROBAR → HANDOFF.
Gestión de agentes, seis verbos del proceso, prompt como derivado.
FALHAS.md: fecha, qué se rompió, la menor corrección posible, y si fue un problema de prompt o de infra. El kit ya tiene dos líneas reales: el sandbox bwrap forzado y el conteo equivocado del audit.
Después de unas diez líneas el patrón aparece — y dejas de reconstruir cosas que solo necesitaban una protección.
Menor corrección, prompt vs infra, patrón en diez líneas.
El resumen del curso en una frase y la próxima acción concreta: Fase 0 con adapt-instructions.sh ~/.claude, guardar el AGENTS.md global y correr el primer readback en un proyecto real.
Un curso que termina sin una próxima acción exacta se vuelve teoría. El handoff también vale para ti.
Ejecutores sobre capa portátil, próxima acción exacta, el menor paso restante.