Modelo de 6 capas (L0–L5) — conocimiento que sube por destilación e instancia hacia abajo como idea-file
openclaw-kb es un repo git L0 que contiene contenido L3 y se publica como parte de L4). El conocimiento que genera un agente no muere con la sesión: cada capa destila, curatea y persiste lo que produce la inferior, hasta volverse distribuible y consumible por cualquier sistema.
kb-contract.json SemVer'dlearning|decision|insight + dedupe · classifier diferidowany-core (engine genérico) y openclaw-kb (contenido) unidos por kb-contract.json SemVer'd. Habilita Phase 2 multi-tenant sin re-arquitectura.learning|decision|insight AND (b) classifier novelty > τ OR (c) flag humano. Floor (tag+dedupe) siempre funciona; classifier es enhancement con fail-into-floor. Nunca fail-open.<3 rollbacks L3 / 90 días AND ≥1 audit publicado / trimestre. Ambos deben cumplirse — no se promueve por ambición.0002-addendum-deferred-commitments.md.Modelo de dos repos de código (openclaw-core + openclaw-wany) sobre una sola KB (openclaw-kb) con namespace wany/ embebido en L3 — input para wo-1287 (blueprint de plataforma distribuible).
graph TB
subgraph User["Usuario"]
Browser["Browser
Google OAuth"]
TGUser["Telegram
grupo personal + bot"]
end
subgraph Core["openclaw-core (repo 1)"]
direction TB
Dashboard["Dashboard
Next.js · :7001"]
Antfarm["AntFarm
WO orchestrator"]
Agents["Agents
SOULs + skills + workflows"]
Vault["secrets-vault
age-encrypted"]
TGRouter["Telegram router
topic ↔ workspace"]
subgraph CoreKB["KB del sistema (una sola, unificada)"]
direction TB
KBL1["L1 · Ejecución
antfarm/output/wo-NNNN/"]
KBL2["L2 · Operativa
memory/ · .learnings/atoms/"]
KBL3["L3 · Estratégica
openclaw-kb/wiki/ · decisions/ · raw/
(incluye namespace wany/ tag origin:wany)"]
KBL4["L4 · Distribución
@openclaw/* npm · MCP · idea-files"]
end
end
subgraph Wany["openclaw-wany (repo 2) — sin KB propia"]
direction TB
Viewer["Viewer
Express · :3700"]
Pipelines["Pipelines
providers.yaml"]
Ingest["Ingest scripts
escriben a openclaw-kb/raw/wany/"]
end
subgraph Ext["External"]
LLM["LLM providers
Anthropic · OpenRouter · Google AI · OpenAI"]
GoogleOAuth["Google OAuth
client per-instance"]
TGAPI["Telegram Bot API"]
Tailscale["Tailscale Funnel
(opcional)"]
end
Browser -->|OAuth| GoogleOAuth
Browser -->|HTTPS| Dashboard
TGUser --> TGAPI
TGAPI --> TGRouter
TGRouter --> Antfarm
Dashboard --> Antfarm
Dashboard --> KBL2
Dashboard --> KBL3
Dashboard --> Vault
Dashboard -->|HTTP API + per-instance token| Viewer
Antfarm --> Agents
Antfarm -->|escribe outputs| KBL1
Agents --> LLM
Agents -->|leen + escriben| KBL2
KBL1 -->|destila atoms| KBL2
KBL2 -->|promote validated| KBL3
KBL3 -->|publish| KBL4
Pipelines --> Ingest
Ingest -->|escribe sub-tree wany/| KBL3
KBL3 -->|HTTP API read| Viewer
Viewer -->|read-only HTTP| Dashboard
Tailscale -.->|Funnel opt-in| Dashboard
graph TB
subgraph Mac["macOS local (1 instancia = 1 usuario)"]
direction TB
subgraph Svc["launchd services"]
DashSvc["ai.openclaw.dashboard
port 7001 · next start"]
KBSvc["ai.openclaw.openclaw-kb
port 3700 · node server.js"]
AntCron["ai.openclaw.antfarm-cron
tick 60s"]
Guardian["ai.openclaw.antfarm-guardian"]
TGSvc["ai.openclaw.telegram-router"]
end
subgraph Data["~/.openclaw (per-instance data)"]
WO["antfarm/work-orders/
*.json"]
Locks["antfarm/.locks/"]
Secrets["secrets/
age-encrypted"]
Learn[".learnings/
atoms"]
Mem["memory/
MEMORY.md + *.md"]
end
subgraph Repos["~/development-env (portable code)"]
CoreR["openclaw-core/
dashboard + antfarm + agentes"]
WanyR["openclaw-wany/
viewer + pipelines"]
KBR["openclaw-kb/
wiki + decisions + raw
(incluye sub-tree wany/)"]
end
Brew["Homebrew deps
node · ffmpeg · whisper · age · gh"]
end
DashSvc --> CoreR
KBSvc --> WanyR
AntCron --> WO
AntCron --> Locks
DashSvc --> Secrets
DashSvc --> Mem
AntCron --> Learn
Brew -.-> Svc
sequenceDiagram autonumber actor U as Usuario participant W as openclaw-cli wizard participant FS as ~/.openclaw participant L as launchd participant V as secrets-vault participant T as smoke test U->>W: brew install openclaw (o npx create-openclaw) W->>U: chequeo deps (node · age · gh · ffmpeg) W->>U: ¿Anthropic key? · ¿OpenRouter? · ¿Google AI? · ¿OpenAI? U->>W: BYO keys W->>U: ¿Google OAuth client (Cloud Console steps)? U->>W: client_id + client_secret W->>U: ¿BotFather token + chat_id grupo + topic_id? U->>W: token + ids W->>V: encrypt + store secrets W->>FS: scaffold antfarm/ memory/ .learnings/ secrets/ W->>L: render plists con paths absolutos del usuario W->>L: bootstrap dashboard + viewer + antfarm-cron + tg-router W->>T: curl :7001/health · :3700/wany · ping a TG T-->>W: all green W->>U: dashboard listo en http://localhost:7001
graph BT
subgraph L0["L0 · Código"]
Code["git repos · commits"]
end
subgraph L1["L1 · Ejecución"]
WOrun["WO output
antfarm/output/wo-NNNN/"]
Logs["agent logs"]
end
subgraph L2["L2 · Operativa"]
Atoms[".learnings/atoms/
tagged learning·decision·insight"]
Memory["memory/MEMORY.md
workspace-scoped"]
end
subgraph L3["L3 · Estratégica (KB unificada)"]
Wiki["openclaw-kb/wiki/
(incl. wany/ namespace)"]
ADRs["openclaw-kb/decisions/"]
Raw["openclaw-kb/raw/
(incl. wany/ pipelines)"]
end
subgraph L4["L4 · Distribución (dual-track)"]
direction LR
subgraph L4code["código compilado"]
Npm["@openclaw/wany-core
npm package"]
MCP["MCP server"]
Public["Viewer público"]
end
subgraph L4spec["idea-files (specs abstractas)"]
Ideas["ideas/
markdown · SemVer · maturity"]
AgentSpecs["agent-specs/
provider-agnostic SOULs"]
end
end
Code -->|diff-to-atom extractor · post-verify hook| WOrun
WOrun -->|floor tag+dedupe · wo-1250 WIP| Atoms
Logs --> Atoms
Atoms -->|human review + promote · brain-commit ritual| Wiki
Atoms -->|human review| ADRs
Memory -->|validated patterns| Wiki
Wiki -->|npm publish · kb-contract.json semver| Npm
ADRs --> Npm
Raw --> Npm
Npm --> MCP
Npm --> Public
Wiki -->|abstrae intención| Ideas
Wiki -->|extrae SOUL/skills| AgentSpecs
Ideas -.->|agente del receptor compila| L4code
Inspirado en Karpathy. Documentado en openclaw-kb/wiki/views/company-as-code/idea-file-*.md (7 docs) y convergente con la tesis de shared context: cuando los agentes son indistinguibles entre Claude, Codex y Gemini, la unidad de valor deja de ser código compilado y pasa a ser la spec abstracta que cualquier agente recompila al stack del receptor.
@openclaw/wany-core npm + MCP — código compilado, ejecutable directo. (b) ideas/ markdown — specs abstractas que el agente del receptor compila a su stack. Hoy solo (a) está implementado.idea_file apuntando a la spec abstracta de la que derivó. Así la implementación local mantiene trazabilidad a la intención original.Tomado de la tesis de shared-context: "Una KB sin historia es estática — el historial de la KB es tan valioso como la KB misma". La promoción no es un evento opaco: es un commit con mensaje que explica el porqué del cambio.
openclaw-kb/ es git. Cada promoción L2→L3 es un commit con mensaje explicando qué se aprendió y por qué califica como verdad oficial. memory/ también versionado — los snapshots brain-commit diarios ya van por este camino.learning|decision|insight). Reemplaza promoción ad-hoc por proceso ritualizado. Compatible con human-in-the-loop como cuello de botella reconocido.maturity: draft|stable|deprecated. Breaking change en una spec dispara recompilación de los contextos que la referenciaban — paralelo al kb-contract.json ya existente para wany-core.openclaw-kb/decisions/ incluyen contexto + alternativas descartadas + responsable, no solo el "qué". El historial git pasa a ser parte de la KB consultable, no metadata invisible.Filosofía sistémica de Bunge (ADR-0002 Addendum 003 · 2026-05-13). Todo sistema concreto se define por Componentes · Entorno · Estructura · Mecanismos. Un nivel sin mecanismo es un postulado, no un sistema. CESM provee el criterio de vivacidad que L0-L5 necesitaba.
Las relaciones no son convenciones: son compromisos arquitectónicos. Prohibido saltar capas — no es estilo, es una afirmación de que el conocimiento sin destilación intermedia no está listo para el nivel superior.
Los mecanismos son lo que hace que el sistema no sea una foto estática. Sin mecanismo, un nivel es un postulado.
| Capa | C | E | S | M | Diagnóstico |
|---|---|---|---|---|---|
| L0 | ✅ | ✅ | ✅ | ✅ | Saludable. Git es el mecanismo nativo. |
| L1 | ✅ | ✅ | ✅ | ✅ | Saludable. AntFarm es su mecanismo central. |
| L2 | ✅ | ✅ | ✅ | ✅ | Saludable. L1→L2 floor + brain-commit como mecanismos. |
| L3 | ✅ | ✅ | ✅ | ✅ | Saludable. Human-in-the-loop reconocido y ritualizado. |
| L4 | ✅ | ✅ | ⚠️ | ⚠️ | Débil. Componentes existen (npm/MCP), pero flujo L3→L4 es manual sin trigger explícito. |
| L5 | ❌ | ❌ | ❌ | ❌ | Sin mecanismo. Correctamente deferred. No se activa hasta criterios binarios. |
| Componente / Flujo | Estado | Descripción |
|---|---|---|
| ADR-0002 (modelo L0–L5) | Hecho | Promovido el 2026-05-04 tras 3 rondas de debate adversarial. Verdad oficial en openclaw-kb/decisions/0002-knowledge-architecture-l0-l5.md. |
| wany-core (npm) | Hecho | Publicado como @openclaw/wany-core. Viewer, build, MCP funcionando. |
| openclaw-kb content | Hecho | Estructura wiki/decisions/raw. Contrato con wany-core definido (kb-contract.json). |
| KB Viewer en Dashboard | Hecho | Puente L2→L3 operativo. Navegación de KB desde el dashboard. |
| Dashboard contracts/instance | En progreso | V3: separación src/contracts/ + src/instance/ en curso. |
| Memory system (L2) | Parcial | Existe para el workspace global. Falta scoping por proyecto y workspace KB. |
| Pipeline L1 → L2 — floor (tag + dedupe) | En progreso | wo-1250 implementa solo el piso determinístico. Outputs taggeados learning|decision|insight generan candidate atoms en L2 (no en L3). |
| Pipeline L1 → L2 — classifier de novedad | Diferido | Enhancement con classifier_version. Fail-into-floor cuando no esté disponible. Trigger: cuando la queue L2 supere los 20 candidatos pendientes. |
| Pipeline L2 → L3 (curation) | Manual | Human-in-the-loop reconocido como recurso limitado. No se automatiza hasta que el flujo L1→L2 produzca volumen sostenido. |
| Captura semántica L0 → L1 | Pendiente | Los cambios de código no alimentan automáticamente la KB de ejecución. |
| External-refs subscription | Diferido | Push-channel para invalidación CVE/breaking-change upstream. Trigger: ≥5 docs L3 con external_refs declarados. |
| Multi-agente (L5) | Deferred | Criterios binarios de entrada: <3 rollbacks manuales L3 en 90 días AND ≥1 audit publicado por trimestre. |
| Idea-files L4 (Karpathy) | Pendiente | 7 docs de research en wany-kb/wiki/views/company-as-code/idea-file-*.md pero ADR-0002 no los cita. Pendiente: addendum a ADR-0002 que reconozca dual-track L4 (npm/MCP + idea-files) y wo-1287 platform-distribution-blueprint. |
| Promoción bidireccional | Parcial | Flujo ascendente (humano destila L1→L2→L3) implementado. Flujo descendente (agente instancia idea-file → implementación) no cableado todavía. |
| Brain-commit ritual quincenal | Pendiente | Hoy hay brain-snapshot diario automático del estado de memoria. Falta sesión humana ritualizada de 20min/2sem para promover learnings con tipado explícito. |
| Agentes como specs provider-agnostic | Pendiente | SOULs y skills hoy acoplados a Claude Code (paths absolutos, tools específicas). Migración a specs reutilizables por Codex/Gemini requiere abstracción de tooling y formato unificado de prompt. |
| Decision-trace en commits | Parcial | Mensajes de commit en openclaw-kb/decisions/ contienen el "qué" pero no siempre alternativas descartadas + responsable. Pendiente: template de commit message para ADRs. |
| Lente CESM — ADR-0002 Addendum 003 | Hecho | Mapeado CESM (Componentes·Entorno·Estructura·Mecanismos) a L0-L5. Diagnóstico: L0-L3 saludables, L4 débil (sin trigger L3→L4), L5 sin mecanismo (correctamente deferred). |
| Trigger L3→L4 (mecanismo de publicación) | Pendiente | Flujo L3→L4 hoy manual y sin trigger explícito. Próxima inversión de alto valor según diagnóstico CESM: define cuándo un ADR es candidato a publicación (track A: npm/MCP; track B: idea-file). |
| Feedback descendente L3→L0 | Pendiente | Cuando un ADR cambia, no hay mecanismo que indique qué código debe actualizarse. Hoy depende de atención humana. Cierra el loop del organismo sistémico. |