Persistencia
Qué guarda MadoHub, dónde lo guarda y cómo.
MadoHub conserva el estado de su espacio de trabajo en disco para que todo se restaure cuando vuelva a abrir la app. Todos los datos persistentes del espacio de trabajo se almacenan localmente en su máquina.
Ubicación de almacenamiento
Todos los archivos se guardan en ~/.madohub/:
~/.madohub/
├── canvas-state.json # Estado completo del lienzo
├── config.json # Configuración de la app
├── chat-history.json # Historial de mensajes del chat
├── memory-policies.json # Políticas de inserción automática de memoria
├── templates/
│ └── <slug>.json # Una por cada plantilla de espacio de trabajo guardada
├── flows/
│ └── <id>.json # Uno por cada flow guardado
├── logs/
│ └── madohub.log # Registros de la aplicación
├── notifications/ # Marcadores de finalización del hook Stop
└── orchestrator/ # Estado del modo orquestadorQué se guarda
Estado del lienzo (canvas-state.json)
| Datos | Detalles |
|---|---|
| Tiles | Tipo, posición, tamaño, z-index, rutas de archivo, directorio de trabajo |
| Frames | Rutas de espacios de trabajo, colores, posiciones |
| Viewport | Desplazamiento de paneo (X/Y) y nivel de zoom |
| Connections | Todas las conexiones de enrutamiento con su configuración de trigger/transform |
| Settings | Proveedor de API, clave, modelo; estado de los hooks de notificación |
| Max z-index | Para el orden de apilado de nuevos tiles |
| Dismissed sessions | Sesiones tmux ocultas |
Configuración de la app (config.json)
| Datos | Detalles |
|---|---|
| Hooks state | Si los hooks de notificación de Claude Code están habilitados |
| Workspaces (heredado, inactivo) | El esquema de configuración todavía define una lista de directorios de proyecto registrados y un ID de espacio de trabajo activo, pero ninguna ruta de código del frontend llama a las funciones de guardado/carga correspondientes, así que están muertos. El concepto vigente para el estado por proyecto son los frames, almacenados en canvas-state.json. |
Cómo funciona el guardado
- Auto-save: Se activa con cualquier cambio en el lienzo, la conexión o la configuración.
- Debounced: Retraso de 500ms para agrupar cambios rápidos.
- Atomic writes: Los datos se escriben primero en un archivo hermano único (
<name>.tmp.<pid>.<seq>) y luego se renombra a su ubicación final. Esto evita la corrupción si la app falla a mitad de la escritura. - Recuperación de corrupción: Si un archivo no se puede analizar como JSON al cargarlo, sus bytes se ponen en cuarentena en un archivo hermano con nombre basado en contenido
<name>.corrupt.<hash>(estable entre reinicios), y la carga recurre a los valores por defecto en lugar de fallar.
Qué NO se guarda
- Contenido de sesiones de terminal (la salida PTY es efímera)
- Contenidos del portapapeles