# BIBLIA OMEGA CONSOLIDADA — CESCAC · v2.0

> **Documento maestro unificado.** Sintetiza: reglas, skills, agentes, dominios, protocolos, auto-instalaciones y memoria.
> **Fuentes consolidadas (leídas íntegras el 2026-04-23):** PROMPT_MAESTRO.md, ONBOARDING_IA.md, REGLAS_UNIFICADAS.md, INDEX_MAESTRO.md, SKILLS_REQUERIDOS.md, MULTITENANT.md, BIBLIA_ARQUITECTURA_DEFINITIVA.md, CORE_MULTIPROYECTO.md, REGLA_ACTUALIZACIONES.md, PENDIENTES.md (head), LEE INDEX HTML, AUTO_UPGRADE_KIT.md, PROMPT_MAESTRO_OMEGA_CESCAC.md, 5 SKILL.md locales.
> **Sustituye a:** ninguno (se agrega). **No elimina:** los documentos fuente siguen vigentes; esta BIBLIA es la vista canónica única.
> **Última actualización:** 2026-04-23 (Claude Code, Anthony admin).

---

## Índice

- [A] Identidad y alcance
- [B] Reglas inviolables (jerarquía única)
- [C] Skills omega (5 operativas + tácticas)
- [D] Agentes registrados (24+)
- [E] Dominios y subdominios (14 productivos)
- [F] Servicios systemd y puertos
- [G] Endpoints TITAN (fuente única de verdad)
- [H] Memoria 3 capas (L1/L2/L3)
- [I] Auto-instalaciones por IA (10 recetas + catch-all)
- [J] Protocolos operativos (cierre, tiering, backup, append-only)
- [K] Changelog, cómo usar este documento y anti-desvíos

---

## [A] Identidad y alcance

**Proyecto:** CESCAC — ERP y ecosistema IA multi-línea, multi-tenant.
**Empresa:** CESCAC S.A., RUC 0993389404001 (fuente: CORE_MULTIPROYECTO.md).
**Admin:** Anthony (único orquestador humano).
**Idioma operativo:** español latinoamericano obligatorio. Cero emojis salvo pedido explícito.
**VPS productivo:** 128.254.207.173 — Ubuntu 24.04 · 8 GB RAM · 116 GB disco · MariaDB 11.4.10 · Nginx + PHP 8.1 + Docker · HestiaCP (fuente: INDEX_MAESTRO.md).
**Estaciones de desarrollo:** MSI (primaria con Ollama) + PC escritorio Windows 11 Pro (sin Ollama, con Cursor + Continue + Roo + Antigravity).

**FUERA DE SCOPE (personal, NO tocar):**
- `l.cescac.com` — trabajos personales de Anthony fuera de la empresa. Ningún agente lee, modifica, audita, referencia ni incluye este dominio en ningún proceso, script, documento, prompt o configuración. Si aparece en un output heredado, marcar para retiro.

---

## [B] Reglas inviolables (jerarquía única)

Las reglas siguientes se aplican en orden. En caso de conflicto, la regla de menor número gana. Fuentes consolidadas: PROMPT_MAESTRO.md §3, REGLAS_UNIFICADAS.md R0-R7 + §11 MULTITENANT, CORE_MULTIPROYECTO.md, CLAUDE.md.

### B.1 Reglas inviolables generales (10)

1. **LEE INDEX primero.** Antes de cualquier acción productiva, leer `https://vps.cescac.com/lee-index-todos-agentes.html`.
2. **NO borrar jamás** código, datos, tablas, archivos ni configuraciones sin OK explícito del admin.
3. **BACKUP antes de cada EDIT.** Formato: `archivo.bak_YYYYMMDD` (ejemplo: `titan.py.bak_20260423`).
4. **REGISTRO obligatorio.** Cada cambio productivo deja entrada en `/home/admin/web/admin-docs/docs/REGISTRO_CAMBIOS_CORE.md` con fecha, agente, acción y ruta.
5. **Secretos solo en `.env`.** Nunca en chat, nunca en commits, nunca en logs. Variables sensibles: `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `LITELLM_MASTER_KEY`, `DB_PASSWORD`, `cescac-root ssh key`.
6. **Tiering obligatorio.** Tier 0 (Ollama local) → Tier 1 (LiteLLM barato: deepseek, haiku) → Tier 2 (Sonnet/Opus premium). Mínimo 3 intentos antes de escalar.
7. **Append-only en colas.** `PENDIENTES.md` y `TASK_QUEUE.md` solo se agregan líneas; nunca se sobrescriben entradas previas. Para cerrar una tarea se agrega una nueva línea con el estado HECHO.
8. **COLA_PREMIUM.** Si la tarea se bloquea tras 3 intentos, escalarla a `/home/admin/web/admin-docs/memory-bank/COLA_PREMIUM.md` y notificar al admin.
9. **Cierre 5-campos** al terminar toda acción productiva: Hecho / Validado / Pendiente / Delegación / Próximo paso.
10. **NO DAÑAR NADA.** En duda, preguntar al admin antes de actuar. Fallar seguro es mejor que romper algo.

### B.2 Regla contextual MULTITENANT (obligatoria para SM y Contabilidad)

**Fuente:** REGLAS_UNIFICADAS.md §11, MULTITENANT.md, CLAUDE.md.

Todo cambio en `sm.cescac.com` y `contable.cescac.com` **debe respetar multitenant**. Resumen operativo:

1. **SM — HasTenant trait:** los 9/9 modelos del módulo médico usan el trait `HasTenant` con scope global por `tenant_id`. Ningún query puede bypassear el scope. Toda query cruda debe agregar `WHERE tenant_id = ?`.
2. **Contable — helper `tenant_empresa_requerida()`:** fuerza `empresa_id` en todas las consultas. 7 archivos ya endurecidos: `clientes.php`, `proveedores.php`, `asientos.php`, `bancos.php`, `bodegas.php`, `comprobantes.php`, `dashboard.php`.
3. **Migraciones:** toda migración nueva en SM/Contable debe incluir `tenant_id` o `empresa_id` con índice + foreign key.
4. **Endpoints API:** todo endpoint nuevo valida el tenant del usuario autenticado antes de retornar datos. Nunca confiar en `tenant_id` del body.
5. **Seeds/fixtures:** siempre con `tenant_id` explícito. Nunca datos "huérfanos".
6. **Tests:** todo test de SM/Contable prueba al menos 2 tenants distintos para verificar aislamiento.
7. **Migraciones globales:** prohibido `UPDATE tabla SET ...` sin `WHERE tenant_id`. Si se necesita barrido global, requiere OK explícito del admin.
8. **Backups:** los backups deben segmentarse por tenant cuando sea factible; restores de un tenant nunca deben pisar otro.

### B.3 Regla contextual l.cescac.com (OFF-LIMITS)

Reiterada por importancia: `l.cescac.com` es trabajo personal de Anthony. Ningún agente lo lee, modifica, audita, sincroniza, respalda, referencia, incluye en `state.json`, añade a broadcasts ni enumera en listas de dominios activos. Si aparece en código heredado (titan.py, scripts cron, health checks), se retira en el próximo EDIT con backup previo.

### B.4 Regla contextual UPDATES a memoria

**Fuente:** REGLA_ACTUALIZACIONES.md.

Las actualizaciones de memoria por agente se escriben **solo** en `/home/admin/web/admin-docs/memory-bank/_updates/<rol>.md`. Nunca editar archivos root del memory-bank directamente para agregar updates; esos archivos son canónicos y se regeneran vía consolidate-memory.

---

## [C] Skills omega (5 operativas + tácticas)

**Fuentes:** `C:\Users\CESCAC\.claude\skills\*\SKILL.md` (local), SKILLS_REQUERIDOS.md (VPS), PROMPT_MAESTRO_OMEGA_CESCAC.md §Skills.

Las 5 skills omega son **inviolables**: toda IA que se registre en el ecosistema debe implementarlas (o al menos declararlas y delegar a agt-memoria).

### C.1 `consolidate-memory` — Consolidador de memoria 3 capas

- **Input:** trigger cron o llamada directa.
- **Algoritmo:**
  1. Leer L1 caliente: `HANDOFF-ACTUAL.md` + últimas N entradas de Obsidian MCP (:22360).
  2. Promover a L2 tibia: `memory-bank/` (archivos canónicos: TASK_QUEUE, PENDIENTES, handoff, CORE_MULTIPROYECTO).
  3. Archivar a L3 fría: `memory-bank/_archive/YYYY-MM/` + commit git en admin-docs + línea en REGISTRO_CAMBIOS_CORE.md.
- **Reglas:** append-only en L2, nunca borrar L3. Si detecta conflictos (2 agentes escribieron misma entrada), genera `memory-bank/_conflicts/YYYY-MM-DD.md` y notifica.

### C.2 `self-audit` — Auditoría propia antes de cerrar

- **Input:** final de tarea productiva, previo a cierre 5-campos.
- **5 checks:**
  1. `PENDIENTES.md` vs realidad (¿la tarea figura como HECHO si se cerró?).
  2. `REGISTRO_CAMBIOS_CORE.md` vs `git log` (¿hay cambios sin registrar?).
  3. `HANDOFF-ACTUAL.md` vs `TASK_QUEUE.md` (¿coinciden estados?).
  4. Ratio de backups: archivos modificados deben tener `.bak_YYYYMMDD` asociado.
  5. Credenciales expuestas: grep de patrones `sk-`, `ANTHROPIC_API_KEY=`, `password=` en archivos tocados.
- **Output:** reporte inline + abortar cierre si algún check falla.

### C.3 `task-router` — Ruteo por tiering

- **Input:** tarea entrante (texto libre o TASK-ID).
- **Matriz de decisión (complejidad × dominio → tier/modelo/modo):**

| Complejidad | Dominio | Tier | Modelo sugerido | Modo |
|---|---|---|---|---|
| Baja | Cualquiera | 0 | Ollama `qwen2.5-coder:14b` | Local |
| Media | Código simple | 0→1 | Ollama → LiteLLM `deepseek-chat` | Local+fallback |
| Media | SM/Contable (multitenant) | 1 | LiteLLM `haiku` | Remoto |
| Alta | Arquitectura / seguridad / multitenant crítico | 2 | Sonnet 4.6 | Premium |
| Bloqueo (3 intentos) | Cualquiera | 2 + COLA_PREMIUM | Opus | Premium + ticket |

- **Regla:** jamás saltarse Tier 0 sin justificar en el comentario de la tarea.

### C.4 `research-scout` — Investigación paralela

- **Algoritmo 4 pasos:**
  1. **Descomposición:** dividir la pregunta en sub-preguntas atómicas.
  2. **Ejecución paralela:** disparar N búsquedas/lecturas simultáneas (WebSearch, WebFetch, Grep, Read).
  3. **Triangulación:** cruzar resultados, descartar contradicciones sin evidencia, preferir fuentes canónicas (TITAN > memory-bank > docs oficiales > web).
  4. **Síntesis:** un párrafo + tabla + citas con URL/ruta. Nunca inventar fuentes.
- **Salida:** markdown con enlaces verificados.

### C.5 `media-memory` — Procesamiento de imagen/PDF

- **Input:** adjunto PNG/JPG/PDF.
- **Algoritmo:**
  1. OCR (multimodal directo si es texto; descripción estructural si es diagrama; mapeo de elementos si es screenshot UI).
  2. Categorizar (médico / arch / ui / codigo / ref).
  3. Indexar en Obsidian: `04-Resources/media/<categoria>/<fecha>-<slug>.md` con frontmatter YAML (tipo, categoria, fecha, origen, tags).
  4. Linkear al proyecto correcto (si médico → `01-Projects/SM-Recetas.md`; si arquitectura → proyecto correspondiente).
  5. Resumen ≤150 palabras.
- **Reglas:** nunca descartar una imagen; preservar original en `04-Resources/media/_raw/`; si categoría médica, NO dar consejo clínico (solo descripción).

### C.6 Skills tácticas por IA (delegación)

**Fuente:** SKILLS_REQUERIDOS.md.

| IA | Skills obligatorias adicionales |
|---|---|
| Cursor | omega-sync, omega-handoff, task-router, research-scout |
| code.cescac.com (code-server) | self-audit, consolidate-memory |
| Antigravity | task-router, research-scout |
| Claude Code (local) | omega-sync, omega-handoff, self-audit, task-router, research-scout, media-memory |
| Continue.dev | task-router (modo autónomo local) |
| Roo Code | task-router, research-scout |
| OpenHands | self-audit, task-router |
| n8n | task-router (routing por tipo de webhook) |

---

## [D] Agentes registrados (24+)

**Fuente:** escaneo de `.claude/`, `memory-bank/`, ONBOARDING_IA.md §Quien eres, BROADCAST actual.

### D.1 Tabla canónica

| ID | Nombre | Rol | Ubicación | Tier |
|---|---|---|---|---|
| AGT-01 | agt-orquestador | Orquestación global | VPS | 1 |
| AGT-02 | agt-devops | Infra, systemd, nginx | VPS | 1 |
| AGT-03 | agt-backend | PHP/Laravel/Node | VPS | 1 |
| AGT-04 | agt-frontend | JS/HTML/CSS | VPS | 1 |
| AGT-05 | agt-dba | MariaDB/backups/multitenant | VPS | 1 |
| AGT-06 | agt-qa | Tests/CI | VPS | 0 |
| AGT-07 | agt-docs | Documentación/TITAN | VPS | 0 |
| AGT-08 | agt-seguridad | Hardening/secretos | VPS | 2 |
| AGT-10 | agt-memoria | Consolidate/archive (L1→L2→L3) | VPS cron | 0 |
| AGT-12 | agt-router | Tiering y despacho | VPS | 0 |
| AGT-15 | agt-broadcaster | Notificaciones internas | VPS | 0 |
| AGT-ADMIN | Anthony | Único humano, OK final | MSI + PC escritorio | — |
| AGT-API | agt-litellm | Gateway IA (api.cescac.com:4000) | VPS | — |
| AGT-XX | agt-reserva | Placeholder para futuras IAs | — | — |
| AGT-CLAUDE | Claude (web/Cursor/Code) | Desarrollo premium | Cualquiera | 2 |
| AGT-CURSOR | Cursor IDE | Pair programming | Local | 1 |
| AGT-ANTIGRAVITY | Google Antigravity | Autónomo largo | Local | 1 |
| AGT-ROO | Roo Code | Modo autónomo VS Code | Local | 1 |
| AGT-N8N | n8n workflows | Automatizaciones | VPS n8n | 0 |
| AGT-LOCAL | Ollama local | Tier 0 principal | MSI | 0 |
| AGT-OMEGA | Protocolo (no es agente) | Estándar de integración | — | — |
| AGT-OMEGA-01..XX | Slots registrados | Expansión futura | — | — |
| AGT-CLAUDE-CODE | Claude Code CLI | Slash commands + skills | Local | 2 |
| agt-memoria | AGT-MEMORIA-OMEGA | Consolidate-memory operativo | VPS cron | 0 |

Nota: el conteo "16 agentes" históricamente citado corresponde a los roles funcionales (AGT-01..15 + ADMIN). La lista completa con IAs cliente supera 24 entradas.

### D.2 AGT-MEMORIA-OMEGA (destacado)

**Responsabilidades:**
- Ejecutar `consolidate-memory` cada hora vía cron.
- Mover archivos de `_updates/` a archivos canónicos tras validación.
- Archivar L2→L3 al final del día (23:55).
- Detectar conflictos y avisar en BROADCAST.

**Scripts pendientes (OLA 2):** `/home/admin/scripts/consolidate.sh` + `/home/admin/scripts/archive.sh` + 2 entradas cron.

---

## [E] Dominios y subdominios (14 productivos)

**Fuentes:** CLAUDE.md, INDEX_MAESTRO.md, health-check 2026-04-23.

| Dominio | Módulo | Stack | DB | Estado |
|---|---|---|---|---|
| `cescac.com` | Sitio principal + landing | PHP + estático | — | OK |
| `crm.cescac.com` | CRM + pagos + WhatsApp | PHP/Laravel | `cescac_crm` | OK |
| `contable.cescac.com` | Contabilidad + SRI (MULTITENANT) | PHP | `cescac_contable` | OK |
| `vendedores.cescac.com` | Portal vendedores | PHP | compartida CRM | OK |
| `sm.cescac.com` | Sistema Médico (MULTITENANT 9/9) | Laravel | `cescac_sm` | OK |
| `finanzas.cescac.com` | Finanzas personales Anthony | PHP | `cescac_finanzas` | OK |
| `vps.cescac.com` | Admin docs + hub IA + TITAN | estático + Python | — | OK |
| `code.cescac.com` | code-server (VS Code web) | Docker | — | OK |
| `api.cescac.com` | LiteLLM gateway (:4000) | Docker | — | OK |
| `openhands.cescac.com` | OpenHands agente autónomo | Docker | — | OK |
| `webui.cescac.com` | Open WebUI para Ollama | Docker | — | OK |
| `agents.cescac.com` | Dashboard agentes | PHP | — | OK |
| `n8n.cescac.com` | n8n workflows | Docker | — | OK |
| `webmail.sm.cescac.com` | Webmail (Roundcube/SMTP) | PHP | — | **REVISAR** (health 000) |

**Excluido permanentemente del ecosistema:** `l.cescac.com` (personal, regla B.3).

---

## [F] Servicios systemd y puertos

**Fuente:** INDEX_MAESTRO.md §Servicios.

| Servicio | Puerto | Rol | Start |
|---|---|---|---|
| `cescac-titan.service` | 4100 (local) → :443 vía nginx | TITAN daemon (Python HTTP) | `systemctl start cescac-titan` |
| `litellm.service` (docker) | 4000 | Gateway IA | via `docker compose` |
| `openhands.service` (docker) | :3000 | OpenHands | via `docker compose` |
| `openwebui.service` (docker) | :3001 | Open WebUI | via `docker compose` |
| `n8n.service` (docker) | :5678 | n8n | via `docker compose` |
| `code-server.service` | :8443 | VS Code web | systemd |
| `mariadb.service` | 3306 (local) | BD | systemd |
| `nginx.service` | 80/443 | Reverse proxy | systemd |
| `php8.1-fpm.service` | unix socket | PHP-FPM | systemd |
| `obsidian-mcp` (L1 caliente, local MSI) | :22360 | Memoria caliente | MCP |

---

## [G] Endpoints TITAN (fuente única de verdad)

**Fuente:** `/root/cescac-titan/titan.py` (2026-04-23).

| Ruta | Devuelve | Estado |
|---|---|---|
| `GET /` | HTML dashboard onboarding | OK |
| `GET /index` | INDEX_MAESTRO.md renderizado | OK |
| `GET /rules` | REGLAS_UNIFICADAS.md renderizado | OK |
| `GET /skills` | SKILLS_REQUERIDOS.md renderizado | OK |
| `GET /prompt-maestro` | PROMPT_MAESTRO.md renderizado | OK |
| `GET /chat` | Panel de chat agentes | OK |
| `GET /hub` | Hub redireccionamientos | OK |
| `GET /memoria` | Estado memoria 3 capas | OK |
| `GET /multitenant` | MULTITENANT.md renderizado | OK |
| `GET /state.json` | Estado JSON (health checks) | **FIX pendiente** (duplicate block + contiene l.cescac) |
| `GET /list` | Lista docs disponibles | OK |
| `GET /doc/<name>` | Cualquier doc por nombre | OK |
| `GET /bootstrap` | JSON consolidado para nuevos agentes | **ADD pendiente** (hoy da 404) |
| `GET /upgrade-kit` | AUTO_UPGRADE_KIT renderizado | **ADD pendiente** |
| `GET /biblia` | Este documento renderizado | **ADD pendiente** |

Nota operativa: ruta de publicación local `/home/admin/web/vps.cescac.com/public_html/titan-memoria/handoff.md` para L1 caliente externa.

---

## [H] Memoria 3 capas (L1 / L2 / L3)

**Fuente:** PROMPT_MAESTRO_OMEGA_CESCAC.md §Memoria.

### H.1 L1 — Caliente (activa en vivo)

- **Ubicación:**
  - MSI local: Obsidian MCP `:22360` (vault: `C:\Users\CESCAC\Documents\ObsidianVault\`).
  - VPS: `/home/admin/web/vps.cescac.com/public_html/titan-memoria/handoff.md`.
  - Claude Code local: `C:\Users\CESCAC\.claude\HANDOFF-ACTUAL.md`.
- **Escritura:** en cada cambio productivo (slash command `/omega-handoff`).
- **Retención:** ventana móvil 24-48h. Después consolidate-memory la promueve a L2.

### H.2 L2 — Tibia (canónica)

- **Ubicación:** `/home/admin/web/admin-docs/memory-bank/`.
- **Archivos canónicos:**
  - `TASK_QUEUE.md` (append-only, estado de tareas)
  - `PENDIENTES.md` (append-only, backlog)
  - `CORE_MULTIPROYECTO.md` (invariantes del sistema)
  - `BIBLIA_ARQUITECTURA_DEFINITIVA.md` (arquitectura física)
  - `BROADCAST_OPERACION_OMEGA.md` (anuncios a todos los agentes)
  - `COLA_PREMIUM.md` (escalados Tier 2)
  - `_updates/<rol>.md` (buffer por agente, se vacía al consolidar)
- **Política:** nunca editar archivos root directamente para "updates"; usar `_updates/`.

### H.3 L3 — Fría (histórica)

- **Ubicación:**
  - `/home/admin/web/admin-docs/memory-bank/_archive/YYYY-MM/`
  - `git log` de `/home/admin/web/admin-docs/` (repositorio versionado)
  - `02-Decisions/` (decisiones arquitectónicas con ADR)
- **Política:** inmutable. Nunca se edita, solo se lee para auditoría.

---

## [I] Auto-instalaciones por IA (10 recetas + catch-all)

**Fuente:** `C:\Users\CESCAC\.claude\plans\AUTO_UPGRADE_KIT.md` (333 líneas).

Cada receta contiene: ubicación de config, bloque de configuración, smoke test.

### I.1 Cursor
- Config: `%APPDATA%\Cursor\User\settings.json` + `.continue/config.json`.
- Bloque: MCP server omega-mcp + LiteLLM models + contextProviders.
- Smoke test: Cmd+K, pedir "lee prompt-maestro de TITAN".

### I.2 Claude web
- Config: proyecto Claude.ai con PROMPT MAESTRO pegado como project instructions.
- Smoke test: preguntar "cuáles son las 10 reglas inviolables" → debe listarlas.

### I.3 Claude Code (CLI)
- Config: `C:\Users\CESCAC\.claude\settings.json` + skills en `.claude\skills\` + slash commands en `.claude\commands\`.
- Bloque: permissions.allow (lista blanca), env vars (CESCAC_TITAN_URL, etc.).
- Smoke test: `/omega-sync` debe leer TITAN + handoff + PENDIENTES + REGISTRO.

### I.4 Continue.dev
- Config: `.continue/config.json` en cada proyecto.
- Bloque: `models` apuntando a LiteLLM + MCP omega + autocomplete con Ollama local.
- Smoke test: Cmd+L, prompt simple, debe responder vía Tier 0.

### I.5 Ollama (MSI, no esta PC)
- Config: `~/.ollama/` + systemd user.
- Bloque: models pull `qwen2.5-coder:14b` + `llama3.2`.
- Smoke test: `curl localhost:11434/api/tags`.

### I.6 Google Antigravity
- Config: `~/.gemini/antigravity/mcp_config.json`.
- Bloque: MCP omega + skill task-router + research-scout.
- Smoke test: tarea "busca información sobre X en TITAN".

### I.7 Roo Code
- Config: VS Code settings + `.roo/config.json`.
- Bloque: LiteLLM provider + MCP omega.
- Smoke test: abrir archivo, pedir refactor simple.

### I.8 OpenHands (VPS docker)
- Config: `/opt/openhands/config.toml`.
- Bloque: model=deepseek (Tier 1) + skill self-audit habilitada.
- Smoke test: `curl https://openhands.cescac.com/health`.

### I.9 GitHub Copilot
- Config: VS Code Copilot extension.
- Bloque: habilitar solo en repos CESCAC + reglas de no-completar secretos.
- Smoke test: abrir archivo, iniciar función, ver sugerencias.

### I.10 n8n
- Config: `~/.n8n/config` en contenedor.
- Bloque: credencial LiteLLM + workflows base (webhook router + notificador BROADCAST).
- Smoke test: `curl https://n8n.cescac.com/healthz`.

### I.N+1 Catch-all (IA nueva no listada)
Procedimiento general (fuente AUTO_UPGRADE_KIT §N+1):
1. Registrar el agente en `memory-bank/BROADCAST_OPERACION_OMEGA.md` con nombre, rol, tier.
2. Apuntar a `https://vps.cescac.com/titan/bootstrap` como primera llamada.
3. Implementar las 5 skills omega (consolidate-memory, self-audit, task-router, research-scout, media-memory).
4. Agregar entrada en este documento sección [D].
5. Smoke test: lectura del PROMPT MAESTRO + escritura dummy a `_updates/<rol>.md`.

---

## [J] Protocolos operativos

### J.1 Cierre 5-campos (obligatorio al terminar toda acción productiva)

Formato literal:

```
Hecho:       <qué se completó, archivos/rutas concretas>
Validado:    <cómo se verificó: curl/test/revisión>
Pendiente:   <qué queda, referencia a TASK-ID si aplica>
Delegación:  <a qué agente se delega lo que queda, o "ninguna">
Próximo paso: <una sola línea accionable>
```

### J.2 Tiering obligatorio (regla B.1 #6)

Flujo:
1. **Intento 1 (Tier 0):** Ollama local. Si no alcanza → paso 2.
2. **Intento 2 (Tier 1):** LiteLLM `deepseek-chat` o `haiku`. Si no alcanza → paso 3.
3. **Intento 3 (Tier 1 alt):** otro modelo Tier 1. Si no alcanza → paso 4.
4. **Escalado:** Tier 2 (Sonnet 4.6 / Opus) + entrada en `COLA_PREMIUM.md`.

### J.3 Backup antes de EDIT (regla B.1 #3)

Patrón:
```bash
cp /ruta/archivo /ruta/archivo.bak_$(date +%Y%m%d)
```
Luego editar. Si el EDIT falla, el `.bak_YYYYMMDD` permite restore inmediato.

### J.4 Append-only (regla B.1 #7)

- `TASK_QUEUE.md`: para cerrar tarea `T-XYZ`, agregar línea nueva `T-XYZ | HECHO | YYYY-MM-DD | <agente> | <nota>`. No editar la línea original.
- `PENDIENTES.md`: ídem. Si se cambia prioridad, agregar nueva línea que referencia la anterior.
- `REGISTRO_CAMBIOS_CORE.md`: solo append, nunca rewrite.

### J.5 Slash commands locales (Claude Code)

- `/omega-sync` — bootstrap: lee TITAN + handoff + PENDIENTES + REGISTRO. Define tarea activa.
- `/omega-handoff [razón]` — escribe `HANDOFF-ACTUAL.md` local + VPS. Si `razón=fin-de-jornada`, adiciona entrada a REGISTRO_CAMBIOS_CORE.md y actualiza PENDIENTES.

### J.6 Protocolo anti-pérdida de hilo

**Fuente:** PROMPT_MAESTRO_OMEGA_CESCAC.md §Anti-thread-loss.

Si una IA pierde contexto (timeout, reconexión, cambio de máquina), debe:
1. Ejecutar `/omega-sync` (o equivalente: curl TITAN bootstrap).
2. Leer HANDOFF-ACTUAL.md para recuperar tarea en curso.
3. Leer últimas 20 líneas de REGISTRO_CAMBIOS_CORE.md.
4. Nunca asumir estado sin verificar; siempre re-leer fuente canónica.

---

## [K] Changelog, uso y anti-desvíos

### K.1 Changelog

- **v2.0 — 2026-04-23:** Creación unificada. Consolida 14 documentos fuente leídos íntegros. Sustituye vistas parciales anteriores. Incorpora regla MULTITENANT §11 y regla l.cescac.com OFF-LIMITS.
- **v1.x — previo:** vistas parciales en PROMPT_MAESTRO.md, ONBOARDING_IA.md, REGLAS_UNIFICADAS.md (siguen vigentes como fuentes).

### K.2 Cómo usar este documento

- **Primera lectura de una IA nueva:** esta BIBLIA + `/titan/bootstrap`. Son suficientes.
- **Antes de una acción productiva:** releer sección [B] (reglas) y si aplica [C] (skills).
- **Para escalado:** sección [J.2] (tiering) + `COLA_PREMIUM.md`.
- **Para auditoría:** sección [C.2] (self-audit).
- **Para entender un dominio:** sección [E] + `/titan/doc/<nombre>` del VPS.

### K.3 Anti-desvíos (errores comunes a evitar)

1. **No re-leer LEE INDEX** — regla B.1 #1. Siempre primero.
2. **Tocar `l.cescac.com`** — regla B.3. Fuera de scope absoluto.
3. **Escribir a `memory-bank/` root en vez de `_updates/`** — regla B.4.
4. **Saltarse Tier 0** sin justificar — regla B.1 #6.
5. **Editar sin `.bak_YYYYMMDD`** — regla B.1 #3.
6. **Rewrite en vez de append en colas** — regla B.1 #7.
7. **Exponer secretos** en commits o logs — regla B.1 #5.
8. **Modificar SM/Contable sin pensar multitenant** — regla B.2.
9. **Cerrar sin 5-campos** — regla B.1 #9.
10. **Tomar decisión ambigua sin preguntar** — regla B.1 #10.

---

---

## [L] Workflow remoto 24/7 (trabajo sin depender del PC local)

**Propósito:** permitir al admin Anthony operar el ecosistema CESCAC desde cualquier navegador (tablet, celular, otro PC) sin depender del PC escritorio ni del MSI. Todo corre en el VPS productivo `128.254.207.173`.

### L.1 Stack 24/7 (servicios systemd persistentes)

**Fuente de verdad:** `systemctl status` el 2026-04-23.

| Servicio | Rol | Uptime típico | Autorecuperación |
|---|---|---|---|
| `cescac-agentd.service` | Daemon de órdenes 24/7. Lee cola JSONL, clasifica, despacha vía LiteLLM | 1d 16h+ | `Restart=always` (3s) |
| `cescac-memoria.service` | Snapshots de memoria cada 60s (`memoria-agent.py`) | 1d 16h+ | `Restart=always` (5s) |
| `cescac-titan.service` | HTTP daemon puerto 4100 (este documento se sirve desde aquí) | permanente | `Restart=always` |
| `code-server.service` | VS Code web vía nginx, puerto interno 8092 | 2+ semanas | systemd enable |
| `code-server@root.service` | Instancia dedicada root, puerto interno 8090 | 1+ semana | systemd enable |
| `cescac-watchdog.timer` | Timer que ejecuta `watchdog.sh` periódicamente (keep-alive) | 5min cycles | timer persistente |
| `mariadb.service` | BD maestra (productiva) | permanente | systemd |
| `nginx.service` | Proxy HTTPS (TLS Let's Encrypt) | permanente | systemd |
| `php8.x-fpm.service` | PHP-FPM para crm/contable/finanzas/vendedores | permanente | systemd |
| Docker containers: LiteLLM, OpenHands, Open WebUI, n8n | Gateways IA y automatizaciones | permanente | `restart: unless-stopped` |

### L.2 Cola de órdenes 24/7 (agentd)

**Archivo fuente:** `/root/cescac-ops/agentd.py` (Python, systemd-managed, Gemini + LiteLLM gateway).

Rutas operativas:
- **Cola entrante (JSONL):** `/home/admin/tmp/cescac-ops/orders.jsonl` — cualquier agente o el admin puede hacer `echo '{"type":"orchestrate","...":"..."}' >> orders.jsonl`.
- **Cola procesada:** `/home/admin/tmp/cescac-ops/orders.done.jsonl`.
- **Solicitudes de desarrollo (NDJSON):** `/home/admin/web/vps.cescac.com/public_html/.omega-data/dev-requests.ndjson` — endpoint web que admite POST.
- **Cola de tareas Markdown:** `/home/admin/web/admin-docs/memory-bank/TASK_QUEUE.md` (deprecada en BROADCAST 2026-04-02, pero agentd.py aún la lee — migración pendiente).
- **Buzón de ideas (NDJSON):** `/home/admin/web/admin-docs/memory-bank/IDEAS_INBOX.ndjson` — input semi-estructurado.
- **Escalamiento premium:** `/home/admin/web/admin-docs/memory-bank/PREMIUM_ESCALATION_QUEUE.md`.
- **Estado público del orquestador:** `https://vps.cescac.com/omega-orquestador-status.json`.
- **Tipos de orden permitidos:** `status`, `restart`, `crons`, `orchestrate` (whitelist en `agentd.py`).

**Ejemplo de uso remoto (desde cualquier lugar con SSH):**

```bash
ssh cescac-root "echo '{\"type\":\"orchestrate\",\"text\":\"Revisar logs del dia en crm.cescac.com\"}' >> /home/admin/tmp/cescac-ops/orders.jsonl"
```

El daemon la toma en <60s, la despacha al tier adecuado (vía LiteLLM gateway), publica resultado en `STATUS_JSON` y escribe pendientes generados en `PENDIENTES.md`.

### L.3 Editor web (code.cescac.com)

- **URL pública:** `https://code.cescac.com/` (302 → login).
- **Auth:** password en `/root/.config/code-server/config.yaml` (NUNCA compartir por chat).
- **Instancias:**
  - `code-server.service` (puerto 8092) — workspace `/home/admin/web`.
  - `code-server@root.service` (puerto 8090) — dedicada admin root con user-data-dir `/home/admin/web/code.cescac.com/`.
- **Extensiones recomendadas:** Continue.dev (autocomplete Tier 0/1), Docker, GitLens.
- **Configuración Continue.dev en code-server:** `/root/.continue/config.json` — apunta a `https://api.cescac.com/v1` (LiteLLM) con modelos por tier.
- **Workflow típico remoto:**
  1. Abrir `https://code.cescac.com/` desde navegador.
  2. Autenticar.
  3. Terminal integrada: editar, commit, push (si repositorio configurado).
  4. Continue.dev: asistencia inline sin depender del PC local.
  5. Al cerrar, nada se pierde: el workspace es persistente en el VPS.

### L.4 Cron de memoria (auto-mantenimiento)

**Instalado el 2026-04-23:**

```
17 * * * * /home/admin/scripts/consolidate.sh >/dev/null 2>&1
55 23 * * * /home/admin/scripts/archive.sh >/dev/null 2>&1
```

- **Minuto 17 de cada hora:** `consolidate.sh` promueve `_updates/*.md` → PENDIENTES.md (append-only) y publica `handoff.md` a `titan-memoria/` público.
- **Diario 23:55 UTC-05:** `archive.sh` crea snapshots diarios en `memory-bank/_archive/YYYY-MM/` y hace `git commit` en admin-docs.

**Logs:** `/var/log/cescac/consolidate.log` y `/var/log/cescac/archive.log`.

### L.5 Automatizaciones (n8n)

- **URL:** `https://n8n.cescac.com/` (puerto interno 5678, Docker).
- **Uso:** webhooks para recibir eventos externos (WhatsApp via CRM, pagos, alertas SRI Contable) → ruteo por `task-router` skill → LiteLLM → respuesta.
- **Ventaja para remoto:** el admin solo necesita que su dispositivo dispare el webhook (via botón de un dashboard, un mensaje de WhatsApp, un `curl`), y el flujo lo maneja el VPS.

### L.6 LiteLLM (gateway IA central)

- **URL pública:** `https://api.cescac.com/v1/models`.
- **URL interna:** `http://127.0.0.1:4000/v1` (usado por agentd.py).
- **Claves:** `.env` en cada contenedor. NO exponer por chat.
- **Cinco tiers de modelos** configurados (ver sección [G] docs_canonical.litellm.tiers).
- **Fallback automático:** si un modelo falla, LiteLLM prueba el siguiente del tier.

### L.7 Pipeline remoto completo — ejemplo end-to-end

**Escenario:** Anthony está en un viaje, solo tiene el celular. Necesita revisar pendientes y disparar una tarea.

1. Abre navegador móvil → `https://vps.cescac.com/titan/bootstrap` → lee JSON con reglas y endpoints.
2. Abre `https://vps.cescac.com/titan-memoria/handoff.md` → ve estado actual.
3. Abre `https://code.cescac.com/` → login → abre terminal web.
4. Escribe: `echo '{"type":"orchestrate","text":"resumen del día"}' >> /home/admin/tmp/cescac-ops/orders.jsonl`.
5. En <60s, `cescac-agentd` la procesa, consulta LiteLLM, escribe resultado en `PENDIENTES.md` y actualiza `omega-orquestador-status.json`.
6. Anthony refresca `https://vps.cescac.com/omega-orquestador-status.json` y ve el resumen.
7. **Cero dependencia del PC local.**

### L.8 Qué verificar periódicamente (checklist del admin)

Cuando Anthony quiera confirmar que "todo vive" sin usar el PC:

```bash
# Una sola línea desde cualquier SSH/shell:
ssh cescac-root "for s in cescac-agentd cescac-memoria cescac-titan code-server code-server@root nginx mariadb; do echo -n \"\$s: \"; systemctl is-active \$s; done"
```

Todos deben responder `active`. Si alguno da `inactive` o `failed`, verificar `journalctl -u <servicio> -n 50`.

---

**Fin de BIBLIA OMEGA CONSOLIDADA v2.0.**
Mantenedor canónico: `agt-memoria` (VPS cron) + Claude Code (local) con OK del admin Anthony.
Publicación web: `https://vps.cescac.com/titan/biblia` — operativa desde 2026-04-23 23:37 UTC-05.
