April 21, 2026 • Versión: 2026.2.24

[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 real
  • IDENTITY.md — todavía contiene la plantilla predeterminada vacía
  • BOOTSTRAP.md — nunca eliminado, contiene la lógica de incorporación inicial
  • MEMORY.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 comportamiento
  • AGENTS.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:

  1. La nueva sesión comienza → se ejecuta la verificación del bootstrap
  2. Se detecta BOOTSTRAP.md (nunca fue eliminado)
  3. La lógica del bootstrap lee IDENTITY.md como fuente de identidad
  4. IDENTITY.md contiene solo la plantilla en blanco → el bootstrap concluye que "no existe identidad"
  5. SOUL.md es leído pero su contenido no se trata como identidad autoritativa
  6. Se ejecuta el flujo de incorporación del bootstrap en lugar del inicio normal de sesión
  7. 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ónResultado
BOOTSTRAP.md eliminado, IDENTITY.md en blancoInicio normal; SOUL.md se carga correctamente
BOOTSTRAP.md persiste, IDENTITY.md pobladoEl contenido de IDENTITY.md satisface la verificación del bootstrap; no hay amnesia
BOOTSTRAP.md persiste, IDENTITY.md en blancoAmnesia 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 create con 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/antigravity vs. ~/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.md y BOOTSTRAP.md son 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.

Evidencia y fuentes

Esta guía de solución de problemas fue sintetizada automáticamente por la tubería de inteligencia de FixClaw a partir de las discusiones de la comunidad.