OpenClaw

Arquitectura de Conocimiento ADR-0002 · 2026-05-04

Modelo de 6 capas (L0–L5) — conocimiento que sube por destilación e instancia hacia abajo como idea-file

Tesis central: conocimiento que sube, no que se replica. Layers are roles, not artifacts — un mismo artefacto puede participar en múltiples capas (ej: 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.

Escaleras de Abstracción — L0 a L5

L5
Colaboración Multi-agente — DEFERRED · criterios binarios
Interoperabilidad con agentes de terceros. Entry gates: <3 manual rollbacks L3 en 90 días AND ≥1 audit/trimestre publicado.
trust model federated KB shared context
↕ no planificado
L4
Distribución
Conocimiento empaquetado, versionado y consumible por sistemas externos
npm package MCP server viewer público API REST
↕ publicación versionada · kb-contract.json SemVer'd
L3
KB Estratégica
Conocimiento curado, persistente — decisiones, arquitectura, patrones validados
wiki/ decisions/ (ADRs) raw/ kb-contract.json
↕ human-in-the-loop · promoción manual a verdad oficial
L2
KB Operativa
Contexto por workspace · memorias de proyecto · learnings por sesión
dashboard memory/*.md .learnings/ project context workspace KB
↕ floor: tag learning|decision|insight + dedupe · classifier diferido
L1
KB de Ejecución
Outputs de agentes · research · artefactos de runs — efímeros hasta ser destilados
antfarm/output/ work-orders run artifacts agent logs
↕ captura semántica de cambios en código
L0
Código / Artifacts
Repositorios, git history, builds — materia prima sin estructura semántica propia
git repos source code packages builds

Componentes del Sistema

L4 · Distribución
wany-core
Engine publicado en npm — no conoce OpenClaw, es genérico
  • Viewer / Express server
  • Build pipeline (md → structured)
  • MCP server integrado
  • API REST pública
  • Interfaces genéricas versionadas
L3 · KB Estratégica
openclaw-kb
Solo contenido — markdown curado, sin lógica de negocio
  • wiki/ — documentación estructurada
  • decisions/ — ADRs y trade-offs
  • raw/ — investigación, notas
  • kb-contract.json — contrato con engine
  • Una sola dep: @openclaw/wany-core
L2 · KB Operativa
dashboard
Centro de control — observabilidad, contexto, coordinación humano-agente
  • src/contracts/ — interfaces genéricas
  • src/instance/ — config OpenClaw
  • KB viewer embebido (L3)
  • Workspace memory manager
  • WO status feed en tiempo real
L1 · KB de Ejecución
antfarm
Orquestador de agentes — Work Orders, workers, cron, guardrails
  • work-orders/*.json — estado persistente
  • antfarm-worker.sh — ejecutor de fases
  • wo-ops.js — CLI de control
  • launchd — cron cada 60s
  • output/ — artefactos por WO
L2 · KB Operativa
memory system
Memoria persistente por workspace y proyecto — sobrevive entre sesiones
  • MEMORY.md — índice de memorias
  • project_*.md — contexto por proyecto
  • feedback_*.md — preferencias del usuario
  • .learnings/ — aprendizajes de WOs
  • Workspace-scoped, no global
L0 · Código
repos
Fuente de verdad técnica — git como historia de decisiones de bajo nivel
  • matiasdevbot/* — todos privados
  • Commits atómicos post-verify
  • main → prod (no UAT)
  • Hooks de seguridad pre-push

Flujos de Conocimiento — cómo sube la información

L0 L1
Un agente recibe una tarea sobre el código. Lee repos, ejecuta tests, produce outputs estructurados.
Ej: WO de análisis produce `/antfarm/output/wo-1250/analysis.md`
L1 L2
Al completar una WO, un pipeline extrae aprendizajes y los persiste en la memoria operativa del workspace.
Ej: output de WO → `.learnings/wo-1250-pattern.md` visible en dashboard
L2 L3
El humano revisa learnings operativos y promueve los validados a la KB estratégica. Proceso semi-automático con aprobación.
Ej: patrón recurrente → `openclaw-kb/wiki/antfarm-patterns.md`
L3 L4
La KB estratégica es servida por wany-core como npm package, MCP server y viewer. Consumible por cualquier sistema.
Ej: `import { KBClient } from '@openclaw/wany-core'` desde otro proyecto

Compromisos arquitectónicos load-bearing

L3 ↔ L4
Plataforma vs Contenido
wany-core (engine genérico) y openclaw-kb (contenido) unidos por kb-contract.json SemVer'd. Habilita Phase 2 multi-tenant sin re-arquitectura.
L2 → L3
Human-in-the-loop
La promoción a verdad oficial requiere aprobación humana. Reconocido como recurso limitado — el sistema se diseña asumiendo que el humano es el cuello de botella.
L1 → L2
Promotion Criterion
(a) tag 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.
L5
Deferral con criterios binarios
Entry gates objetivos: <3 rollbacks L3 / 90 días AND ≥1 audit publicado / trimestre. Ambos deben cumplirse — no se promueve por ambición.
global
Local-first
L4 es la única superficie pública. Datos sensibles no salen sin decisión explícita. Sandbox por defecto, paranoia by design.
deferred · 11
Trigger-gated commitments
11 refinamientos del debate adversarial (citation-graph GC, build-only mirror, classifier versioning…) no se construyen ahora. Cada uno tiene una condición observable que dispara su priorización. Ver 0002-addendum-deferred-commitments.md.

Diagramas — Visualización del Sistema

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

a) Componentes — Core ↔ Wany ↔ External

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

b) Deployment — macOS local con launchd

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

c) Onboarding wizard — primer arranque

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
  

d) Data flow L0 → L4 — destilación con hooks actuales

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

Paradigma idea-file — distribuir intención, no implementación

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.

L4 · distribución
Idea-file dual-track
L4 publica dos formatos: (a) @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.
L3 ↔ agentes
Agentes como specs
SOULs y skills se escriben como intención + decisiones abiertas + output esperado, no como prompts acoplados a Claude Code. Un agente "code-reviewer" debería instanciarse igual en Claude o Codex sin cambios.
L2 → L3
Promoción bidireccional
Humano destila hacia arriba (raw → wiki → strategic). Agente instancia hacia abajo (idea-file → implementación concreta). Hoy solo el flujo ascendente está cableado.
L4 · marketplace
Variaciones por discusión, no por fork
Las contribuciones a un idea-file viajan como issues/discussions documentadas como variaciones conocidas, no como PRs de código. Un fork es una rama divergente; una variación es un caso de uso explícito.
L3 · referencia
Idea-files como L4 source
Cada ADR/runbook concreto en L3 puede declarar campo idea_file apuntando a la spec abstracta de la que derivó. Así la implementación local mantiene trazabilidad a la intención original.
decisión pendiente
Reframe ADR-0002 L4
ADR-0002 actual define L4 solo como npm/MCP. Pendiente: addendum que reconoce idea-files como segundo formato de distribución, con criterios para cuándo usar cada uno (código si la implementación es genérica; spec si requiere adaptación al contexto).

Versionado, git y brain-commit — la KB como organismo evolutivo

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.

L1 → L4
git como infra de KB
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.
L2 → L3
Brain-commit ritual quincenal
Sesión de 20min cada 2 semanas: revisar WOs completadas, extraer learnings no obvios, promover a memoria con tipado explícito de capa (learning|decision|insight). Reemplaza promoción ad-hoc por proceso ritualizado. Compatible con human-in-the-loop como cuello de botella reconocido.
L3 ↔ L4
Specs versionadas con SemVer
Cada idea-file y cada agente-spec lleva versión SemVer + 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.
L0 → L1
Diff-to-atom hook
Cada commit en repos de código emite un atom L1 con el diff resumido + decisiones inferidas. Cierra el gap "captura semántica L0→L1" que hoy es manual. Pendiente como enhancement post wo-1250.
L2 ↔ L3
Decision trace en commits
Mensajes de commit a 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.
L5 · deferido
Threaded responses multi-agente
Cuando se active L5 (≥1 audit/trim + <3 rollbacks/90d), las respuestas de múltiples agentes a la misma decisión viajan como replies versionados, no como overwrites. Conflict resolution explícito por capa de permisos. Diseño deferido — no se construye hasta entry gates.

Estado actual vs. Visión

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.