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.| 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. |