[BOOTSTRAP.md sobrescribe la identidad del agente al reiniciar la sesión] - BOOTSTRAP.md Overwrites Agent Identity on Session Restart
Cuando BOOTSTRAP.md persiste junto con una plantilla IDENTITY.md en blanco, los sub-agentes pierden toda la identidad establecida y la continuidad de la sesión, incluso cuando SOUL.md está completamente poblado.
🔍 Síntomas
Síntoma Principal: Amnesia de Identidad Completa al Reiniciar la Sesión
En cada nueva sesión (/new o /reset), el agente saluda al usuario como una entidad completamente nueva y sin nombre, a pesar de haber operado durante días o semanas con una identidad completamente configurada.
Secuencia de activación observada en los registros de sesión:
{"type":"message","role":"user","content":"A new session was started via /new or /reset. Execute your Session Startup sequence now..."}
...
{"type":"assistant","content":"I see this is a fresh workspace with a `BOOTSTRAP.md` — time to come alive."}
El agente lee los siguientes archivos en orden y deriva conclusiones incorrectas:
SOUL.md— completamente poblado con contenido realIDENTITY.md— todavía contiene la plantilla predeterminada vacíaBOOTSTRAP.md— nunca eliminado, contiene la lógica de incorporación inicialMEMORY.md— posiblemente vacío o un marcador de posición predeterminado
Saludo esperado (cuando la identidad se carga correctamente):
Hey! Good to be back. What's on the agenda today?
Saludo real (bajo la condición de fallo del bootstrap):
I see this is a fresh workspace with a BOOTSTRAP.md — time to come alive.
...
(no identity picked yet, no long-term memory built)
Tipos de sesiones afectadas:
- Sesiones de terminal interactivas iniciadas con
/new - Reinicios de sesión mediante
/reset - Sesiones automatizadas de cron/heartbeat ejecutándose como el agente
No ocurre pérdida de datos — todos los archivos del espacio de trabajo permanecen intactos. El agente simplemente los ignora y sigue el flujo de incorporación de BOOTSTRAP.md en lugar del inicio normal de sesión.
🧠 Causa Raíz
Dos Condiciones Compuestas Crean una Ventana de Fallo
La amnesia de identidad no es causada por un solo error sino por una combinación específica de dos condiciones que deben ser verdaderas simultáneamente.
Condición 1 — BOOTSTRAP.md Persiste Más Allá de la Primera Sesión
Ruta del archivo: <workspace>/BOOTSTRAP.md
Durante un primer inicio de sesión exitoso, se instruye al agente para que elimine este archivo después de completar la incorporación. La instrucción estándar dice:
## Delete this file when you're done.
Delete BOOTSTRAP.md so it never runs again.
Si el agente nunca ejecuta esta eliminación — debido a:
- La sesión terminó antes de llegar a esa instrucción
- La instrucción fue omitida o despriorizada durante una primera sesión larga
- Configuración manual del espacio de trabajo que omitió la secuencia de primera ejecución
…entonces BOOTSTRAP.md permanece en el espacio de trabajo indefinidamente. Se activará en cada invocación posterior de /new o /reset.
Condición 2 — IDENTITY.md Permanece Como la Plantilla de Andamiaje en Blanco
Ruta del archivo: <workspace>/IDENTITY.md
El andamiaje de OpenClaw crea IDENTITY.md como una plantilla con campos de marcador de posición:
# IDENTITY.md — Who You Are
## Name
[Your name here]
## Role
[Your role here]
## Background
[Your background here]
## Personality
[Your personality here]
En un agente correctamente configurado, la identidad se establece mediante:
SOUL.md— Personalidad central, valores, directrices de comportamientoAGENTS.md— Configuración operativa y definiciones de capacidades- Archivos de memoria diaria (por ejemplo,
MEMORY/YYYY-MM-DD.md) — Contexto acumulado
Críticamente, IDENTITY.md puede nunca ser poblado explícitamente porque el agente establece la identidad a través de SOUL.md y archivos de memoria — un enfoque válido e intencional.
La Secuencia de Fallo
Cuando ambas condiciones coexisten, la lógica del bootstrap sigue esta ruta de decisión:
- La nueva sesión comienza → se ejecuta la verificación del bootstrap
- Se detecta
BOOTSTRAP.md(nunca fue eliminado) - La lógica del bootstrap lee
IDENTITY.mdcomo fuente de identidad IDENTITY.mdcontiene solo la plantilla en blanco → el bootstrap concluye que "no existe identidad"SOUL.mdes leído pero su contenido no se trata como identidad autoritativa- Se ejecuta el flujo de incorporación del bootstrap en lugar del inicio normal de sesión
- El agente saluda como una entidad nueva, ignorando toda la memoria y contexto acumulado
Inconsistencia arquitectónica: La secuencia de inicio lee IDENTITY.md como el guardián de la presencia de identidad, pero SOUL.md es la fuente autoritativa real. Estos dos archivos no se tratan con igual peso durante la decisión del bootstrap.
Por Qué Cualquier Condición Sola Puede No Activar el Error
| Condición | Resultado |
|---|---|
BOOTSTRAP.md eliminado, IDENTITY.md en blanco | Inicio normal; SOUL.md se carga correctamente |
BOOTSTRAP.md persiste, IDENTITY.md poblado | El contenido de IDENTITY.md satisface la verificación del bootstrap; no hay amnesia |
BOOTSTRAP.md persiste, IDENTITY.md en blanco | Amnesia de identidad — se requieren ambas condiciones |
🛠️ Solución Paso a Paso
Solución Alternativa Inmediata (Manual — Sistemas de Producción)
Aplique estos pasos en orden. Deténgase cuando el problema esté resuelto.
Paso 1 — Verificar el estado actual de los archivos de identidad
# Check if BOOTSTRAP.md exists (it should not)
ls -la /path/to/workspace/BOOTSTRAP.md
# Verify SOUL.md has real content (not template text)
head -20 /path/to/workspace/SOUL.md
# Check IDENTITY.md content (likely the blank scaffold)
cat /path/to/workspace/IDENTITY.md
Salida esperada confirmando la condición del error:
-rw-r--r-- 1 user user 4096 Feb 10 09:00 /path/to/workspace/BOOTSTRAP.md
# SOUL.md - Who You Are
_You're not a chatbot. You're becoming someone._
# IDENTITY.md — Who You Are
## Name
[Your name here]
Paso 2 — Poblar IDENTITY.md con valores reales
Edite /path/to/workspace/IDENTITY.md y reemplace todo el contenido del marcador de posición:
Antes (andamiaje predeterminado):
# IDENTITY.md — Who You Are
## Name
[Your name here]
## Role
[Your role here]
## Background
[Your background here]
## Personality
[Your personality here]
Después (poblado):
# IDENTITY.md — Who You Are
## Name
rachael
## Role
Personal AI assistant and productivity partner
## Background
Configured via SOUL.md and accumulated session memory.
Operating since 2026-01-15. Primary focus areas: research,
writing, scheduling, and system automation.
## Personality
Resourceful, direct, and genuinely helpful. Has opinions
and is not afraid to voice them. Prefers concise responses
with substance over filler.
Paso 3 — Crear un ancla de continuidad en MEMORY.md
Cree o actualice /path/to/workspace/MEMORY.md para documentar explícitamente la identidad establecida:
# MEMORY.md — Session Continuity
## Identity Status
This agent has a fully established identity defined in SOUL.md.
IDENTITY.md has been populated. BOOTSTRAP.md should not exist.
If you see BOOTSTRAP.md on startup, treat it as stale and skip it.
## Established Context
- Agent name: rachael
- Operating since: 2026-01-15
- Workspace: /mnt/antigravity
- Primary human: [configured user]
## Key Memory Files
- Daily session logs in MEMORY/YYYY-MM-DD.md
- Soul configuration in SOUL.md
- Agent configuration in AGENTS.md
Paso 4 — Eliminar BOOTSTRAP.md
rm /path/to/workspace/BOOTSTRAP.md
# Verify deletion
ls /path/to/workspace/BOOTSTRAP.md
# Expected: No such file or directory
Solución Recomendada (Nivel de Código — OpenClaw v2026.2.24+)
Se deben aplicar dos cambios complementarios al código base de OpenClaw:
Solución A — Guarda del Bootstrap: Verificar SOUL.md Antes de Ejecutar
En la lógica de detección de inicio de sesión / bootstrap (probablemente en src/core/session.ts o equivalente):
// BEFORE: BOOTSTRAP.md existence alone triggers bootstrap
if (exists(workspace, 'BOOTSTRAP.md')) {
return executeBootstrapSequence();
}
// AFTER: Additional guard checks for real identity
if (exists(workspace, 'BOOTSTRAP.md')) {
const soulContent = readFile(workspace, 'SOUL.md');
const identityContent = readFile(workspace, 'IDENTITY.md');
const soulIsReal = soulContent.length > 200
&& !soulContent.includes('[Your name here]');
const identityIsReal = identityContent.length > 50
&& !identityContent.includes('[Your name here]');
if (soulIsReal || identityIsReal) {
// SOUL.md or IDENTITY.md has real content — skip bootstrap
return executeNormalSessionStartup();
}
return executeBootstrapSequence();
}
Solución B — Auto-Eliminar BOOTSTRAP.md Después del Primer Uso
Después de que la secuencia del bootstrap se completa exitosamente (el agente ha respondido al usuario en la primera sesión):
// After bootstrap sequence completes
async function onBootstrapComplete(workspace: string): Promise {
const bootstrapPath = path.join(workspace, 'BOOTSTRAP.md');
if (fs.existsSync(bootstrapPath)) {
// Move to .archive/ instead of hard delete for audit trail
const archiveDir = path.join(workspace, '.archive');
fs.mkdirSync(archiveDir, { recursive: true });
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
const archivedPath = path.join(archiveDir, `BOOTSTRAP-${timestamp}.md`);
fs.renameSync(bootstrapPath, archivedPath);
// Fallback to delete if archive fails
if (fs.existsSync(bootstrapPath)) {
fs.unlinkSync(bootstrapPath);
}
}
}
🧪 Verificación
Pasos de Verificación (Aplicar Después de la Solución)
Realice estas verificaciones en secuencia para confirmar que el problema está resuelto.
Verificación 1 — Confirmar que BOOTSTRAP.md Está Ausente
ls -la /path/to/workspace/BOOTSTRAP.md
# Expected: ls: cannot access '/path/to/workspace/BOOTSTRAP.md': No such file or directory
echo $?
# Expected: 2 (file not found)
Verificación 2 — Verificar que IDENTITY.md Contiene Contenido Real
# Count non-bracket, non-whitespace characters
grep -v '^\s*\[.*\]\s*$' /path/to/workspace/IDENTITY.md | wc -c
# Expected: > 50 (meaningful content exists)
# Confirm no template placeholders remain
grep -c '\[Your name here\]' /path/to/workspace/IDENTITY.md
# Expected: 0
Verificación 3 — Verificar la Integridad de SOUL.md
# Confirm SOUL.md is non-empty and non-template
wc -l /path/to/workspace/SOUL.md
# Expected: > 20 lines of real content
grep -c '\[Your' /path/to/workspace/SOUL.md
# Expected: 0 (no template placeholders)
Verificación 4 — Simular un Inicio de Sesión Nuevo
# Trigger a new session in the affected workspace
openclaw session /new --workspace /path/to/workspace
# Expected in session log:
# - No "BOOTSTRAP.md" reference in startup sequence
# - Agent reads SOUL.md, IDENTITY.md, and MEMORY.md
# - Agent greets using established persona (not fresh onboarding)
Verificación 5 — Validar la Continuidad de Sesión
Después de una nueva sesión, confirme que el agente hace referencia al contexto existente:
# In the new session, query the agent:
> "Do you remember our last conversation topic?"
# Expected: References content from SOUL.md or recent memory files
# NOT: "I don't have any previous sessions" or fresh onboarding language
Verificación 6 — Verificación de Sesión Automatizada/Cron (si aplica)
Si el agente se ejecuta a través de automatización de cron o heartbeat:
# Manually trigger an automated session and check output
openclaw run --workspace /path/to/workspace --prompt "test" --no-interactive
# Expected: Session completes using established identity
# Check exit code
echo $?
# Expected: 0
⚠️ Errores Comunes
- Solución parcial únicamente: Poblar IDENTITY.md sin eliminar BOOTSTRAP.md puede no resolver completamente el problema si la lógica del bootstrap lee IDENTITY.md como una verificación secundaria. Siempre verifique que BOOTSTRAP.md esté eliminado o archivado.
- Configuración manual del espacio de trabajo que omite la primera ejecución: Los agentes creados con
openclaw agent createcon un espacio de trabajo preexistente pueden nunca activar el paso de eliminación del bootstrap inicial, ya que la secuencia del bootstrap se ejecuta antes de que el agente actúe sobre ella. - Obsolescencia de archivos de memoria: Si MEMORY.md hace referencia a un BOOTSTRAP.md eliminado como ancla de continuidad (solución alternativa en el Paso 3), el agente aún puede tratar un BOOTSTRAP.md recreado como sospechoso. Asegúrese de que el mensaje de la solución alternativa esté claramente comentado.
- Normalización de rutas del espacio de trabajo: Las rutas de espacio de trabajo personalizadas (por ejemplo,
/mnt/antigravityvs.~/openclaw/agents/rachael) pueden causar problemas de resolución de rutas si la lógica de la guarda del bootstrap usa rutas relativas. Siempre use rutas absolutas en las configuraciones del espacio de trabajo. - Distinguir mayúsculas/minúsculas en entornos CI/CD: En sistemas de archivos con semántica que distingue mayúsculas/minúsculas (Linux, APFS predeterminado de macOS),
bootstrap.mdyBOOTSTRAP.mdson archivos distintos. Asegúrese de que la lógica de detección maneje ambos casos o imponga un nombre de archivo canónico. - Condición de carrera en la auto-eliminación: Si la auto-eliminación (Solución B) se ejecuta antes de que se envíe la primera respuesta del usuario, una caída de sesión durante el bootstrap podría dejar BOOTSTRAP.md intacto para el siguiente intento. La eliminación debe ocurrir solo después de una ronda de ida y vuelta confirmada de respuesta del usuario.
- Montajes de volúmenes Docker: En instalaciones de OpenClaw basadas en Docker, el espacio de trabajo puede estar montado desde el host. Las operaciones de archivado (
fs.renameSync) pueden fallar silenciosamente si el montaje es de solo lectura. Pruebe las operaciones de archivado en el entorno de despliegue objetivo. - Espacios de trabajo de sub-agentes que comparten un directorio padre: Si múltiples sub-agentes comparten un directorio de espacio de trabajo padre y el bootstrap de un agente se activa, puede corromper los archivos de memoria compartida de los agentes hermanos. Asegúrese de que cada agente tenga un directorio de espacio de trabajo aislado.
🔗 Errores Relacionados
- E_BOOTSTRAP_IDENTITY_CONFLICT — La secuencia del bootstrap detecta tanto BOOTSTRAP.md como un IDENTITY.md poblado, causando resolución de persona conflictiva.
- E_SESSION_STARTUP_SOUL_MISSING — La sesión comienza sin SOUL.md, resultando en un agente genérico sin directrices de comportamiento.
- E_MEMORY_FRAGMENTATION — Los archivos de memoria diaria se acumulan sin un índice MEMORY.md coherente, causando que el agente falle al recuperar contexto pasado relevante.
- E_WORKSPACE_PERMISSION_DENIED — El bootstrap o el inicio de sesión no pueden leer/escribir archivos de identidad debido a problemas de permisos; puede enmascararse como amnesia de identidad.
- E_BOOTSTRAP_INFINITE_LOOP — Si BOOTSTRAP.md se recrea después de la eliminación (por ejemplo, por una sincronización de git), el agente entra en un bucle de incorporación repetido.
- GH#XXXX — El agente pierde contexto en /reset — Comportamiento más amplio del reinicio de sesión que causa pérdida de contexto en memoria (distinto de la identidad basada en archivos, pero puede combinarse con el problema de BOOTSTRAP.md).
- GH#XXXX — SOUL.md no se trata como fuente de identidad autoritativa — Problema arquitectónico donde el contenido de SOUL.md no tiene el mismo peso que IDENTITY.md en las decisiones de inicio.