docs: introduce Layered Memory Fabric terminology (Sam & Codex)
Replaces public split-brain wording with Layered Memory Fabric, documents the skills/brain/ops planes, and sketches the shared FreeBSD/Linux install contract around PostgreSQL, ZFS/OpenZFS, and platform isolation adapters.\n\nChecks: npx --yes prettier@3 --check touched docs/html; git diff --check --- Build: pass | Tests: FAIL — 1 failed
This commit is contained in:
parent
8855b123ed
commit
faf060e0ce
20 changed files with 208 additions and 118 deletions
44
README.md
44
README.md
|
|
@ -142,7 +142,7 @@ just setup-cms # npm run setup -- --step cms
|
|||
- **Main channel** - Your private channel (self-chat) for admin control; every group is completely isolated.
|
||||
- **Scheduled tasks** - Recurring jobs that run the AI agent and can message you back.
|
||||
- **Jail isolation** - Agents are sandboxed in FreeBSD jails with ZFS snapshots.
|
||||
- **Split-brain memory** - PostgreSQL stores three platform-owned databases by default: `system_skills` for preloaded reference knowledge, `system_brain` for user/agent memory, and `system_ops` for messages, tasks, sessions, routing, and runtime state.
|
||||
- **Layered Memory Fabric** - PostgreSQL stores three platform-owned planes by default: `system_skills` for reviewed skills/reference knowledge, `system_brain` for user/agent memory, and `system_ops` for messages, tasks, sessions, routing, and runtime state. See [`docs/public/architecture/layered-memory-fabric.md`](docs/public/architecture/layered-memory-fabric.md).
|
||||
- **Built-in payments, optional extras** - Stripe ships in core and is ready when configured; other channels and integrations can still be layered through skills.
|
||||
|
||||
## Installation
|
||||
|
|
@ -258,7 +258,7 @@ replace it with `fd-find`. That replacement is the intended FreeBSD baseline.
|
|||
- `docs` — docs and release copy
|
||||
- `cms` — Astro/Strapi publishing work
|
||||
- `git` — local git mirror and upstream sync
|
||||
- `memory` — split-brain and PostgreSQL memory work
|
||||
- `memory` — Layered Memory Fabric and PostgreSQL memory work
|
||||
- `local` — Ollama/offline fallback
|
||||
- `cnc` — CNC machine operation and G-code work
|
||||
|
||||
|
|
@ -278,7 +278,7 @@ List all built-in profiles with:
|
|||
just setup -- --step pi-config --list-profiles
|
||||
```
|
||||
|
||||
The split-brain database path is mandatory. Setup generates or preserves the
|
||||
The Layered Memory Fabric database path is mandatory. Setup generates or preserves the
|
||||
PostgreSQL and Strapi secrets in `.env`, then keeps `SKILLS_DB_URL`,
|
||||
`MEMORY_DB_URL`, and `OPS_DB_URL` aligned with `AGENT_NAME`, subnet, and
|
||||
passwords. The `db` step applies three distinct schema tracks:
|
||||
|
|
@ -440,7 +440,7 @@ Talk to your assistant with the trigger word (default: `@Clawdie`):
|
|||
@Clawdie every Monday at 8am, compile news on AI developments and message me a briefing
|
||||
```
|
||||
|
||||
Run `just doctor` to check system health (runtime, jails, networking, services, DNS resolver probes, TLS certificate expiry, ACME renewal cron, morning-report schedule, and split-brain DB/artifact status). Exit codes: 0 = ok or warnings, 1 = error.
|
||||
Run `just doctor` to check system health (runtime, jails, networking, services, DNS resolver probes, TLS certificate expiry, ACME renewal cron, morning-report schedule, and Layered Memory Fabric DB/artifact status). Exit codes: 0 = ok or warnings, 1 = error.
|
||||
|
||||
### TLS Certificate Lifecycle
|
||||
|
||||
|
|
@ -473,25 +473,25 @@ A short selection — for the full reference (status, structured reports,
|
|||
runtime, sessions, admin actions, free-text routing) see
|
||||
[Operator Commands](docs/public/operate/operator-commands.md).
|
||||
|
||||
| Command | Description | Auth |
|
||||
| ---------------- | -------------------------------------------------------------- | --------- |
|
||||
| `/status` | System summary: jails, ZFS, PF, budget, model | anyone |
|
||||
| `/report` | Structured system + auth report | admin |
|
||||
| `/disk` | Structured ZFS pool + snapshot report | admin |
|
||||
| `/tasks` | Structured controlplane task report | admin |
|
||||
| `/budgetreport` | Structured budget + token analytics | admin |
|
||||
| `/publishreport` | Structured tenant publish/content report | admin |
|
||||
| `/testreport` | Structured build + test status (from wrapper-written JSON) | admin |
|
||||
| `/policy` | Default runtime, per-chat overrides, fallback cooldowns | anyone |
|
||||
| `/usage` | Per-agent token budget breakdown | anyone |
|
||||
| Command | Description | Auth |
|
||||
| ---------------- | ------------------------------------------------------------------------------ | -------- |
|
||||
| `/status` | System summary: jails, ZFS, PF, budget, model | anyone |
|
||||
| `/report` | Structured system + auth report | admin |
|
||||
| `/disk` | Structured ZFS pool + snapshot report | admin |
|
||||
| `/tasks` | Structured controlplane task report | admin |
|
||||
| `/budgetreport` | Structured budget + token analytics | admin |
|
||||
| `/publishreport` | Structured tenant publish/content report | admin |
|
||||
| `/testreport` | Structured build + test status (from wrapper-written JSON) | admin |
|
||||
| `/policy` | Default runtime, per-chat overrides, fallback cooldowns | anyone |
|
||||
| `/usage` | Per-agent token budget breakdown | anyone |
|
||||
| `/clearcooldown` | Clear a [provider fallback](docs/public/operate/provider-fallback.md) cooldown | ops chat |
|
||||
| `/compact` | Compact session (summarize old, keep recent turns) | admin |
|
||||
| `/new` | Hard reset session, start fresh | admin |
|
||||
| `/stop` | Kill running agent mid-response | admin |
|
||||
| `/tts` | Toggle voice replies (on/off/status/default) | admin |
|
||||
| `/activation` | Set trigger mode (always/mention) | admin |
|
||||
| `/whoami` | Show your Telegram identity | anyone |
|
||||
| `/help` | List available commands | anyone |
|
||||
| `/compact` | Compact session (summarize old, keep recent turns) | admin |
|
||||
| `/new` | Hard reset session, start fresh | admin |
|
||||
| `/stop` | Kill running agent mid-response | admin |
|
||||
| `/tts` | Toggle voice replies (on/off/status/default) | admin |
|
||||
| `/activation` | Set trigger mode (always/mention) | admin |
|
||||
| `/whoami` | Show your Telegram identity | anyone |
|
||||
| `/help` | List available commands | anyone |
|
||||
|
||||
The bot also routes **free-text ops phrasings** ("disk usage", "are the
|
||||
tests passing", "task report", etc.) to the matching structured report
|
||||
|
|
|
|||
|
|
@ -180,15 +180,23 @@ Examples:
|
|||
|
||||
Do not derive DB names from `ASSISTANT_NAME`.
|
||||
|
||||
## Split-brain responsibilities
|
||||
## Layered Memory Fabric responsibilities
|
||||
|
||||
Three core data families drive Clawdie's runtime behavior:
|
||||
Three core data planes drive Clawdie's runtime behavior. This is not a
|
||||
"split-brain" design: PostgreSQL remains the common data fabric, while each
|
||||
plane has a clear lifecycle and ownership boundary.
|
||||
|
||||
| Family | Default shared DB | Purpose |
|
||||
|--------|-------------------|---------|
|
||||
| Agent System Skills | `system_skills` | Preloaded read-only skills, install docs, operator workflows |
|
||||
| User / Agent Memory | `system_brain` | Dynamic conversation memory, preferences, compaction summaries |
|
||||
| Operational State | `system_ops` | Messages, tasks, sessions, routing, registered groups |
|
||||
| Plane | Default shared DB | Purpose |
|
||||
| ------ | ----------------- | -------------------------------------------------------------- |
|
||||
| Skills | `system_skills` | Reviewed read-only skills, install docs, operator workflows |
|
||||
| Brain | `system_brain` | Dynamic conversation memory, preferences, compaction summaries |
|
||||
| Ops | `system_ops` | Messages, tasks, sessions, routing, registered groups |
|
||||
|
||||
Embeddings and full-text indexes accelerate recall, but PostgreSQL rows and
|
||||
committed skill artifacts remain the source of truth. On FreeBSD the fabric is
|
||||
usually protected with ZFS datasets and jail-aware service boundaries. On Linux,
|
||||
the same logical database contract can run against host PostgreSQL or a native
|
||||
service/container path, with OpenZFS preferred when available.
|
||||
|
||||
Additional platform service DBs also live in PostgreSQL when enabled:
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ FreeBSD host
|
|||
│ ├── setup.sh / npm run wizard
|
||||
│ ├── rc.d service
|
||||
│ ├── Telegram routing
|
||||
│ ├── split-brain prompt enrichment
|
||||
│ ├── Layered Memory Fabric prompt enrichment
|
||||
│ ├── operator controlplane at ai.<internal_base> (HTTP API port 3100)
|
||||
│ └── Bastille / bastille cmd orchestration
|
||||
├── git jail <subnet>.2 shared Git Service
|
||||
|
|
|
|||
|
|
@ -3,7 +3,9 @@ title: Architecture
|
|||
description: Core runtime layout, isolation model, and deployment shapes.
|
||||
---
|
||||
|
||||
System-level references for how Clawdie is assembled on FreeBSD.
|
||||
System-level references for how Clawdie is assembled. FreeBSD remains the
|
||||
reference implementation; Linux should follow the same platform contracts where
|
||||
it is supported.
|
||||
|
||||
## Runtime shape
|
||||
|
||||
|
|
@ -29,6 +31,7 @@ Shared platform services:
|
|||
- Web Service
|
||||
- Local AI Models
|
||||
|
||||
- [Layered Memory Fabric](./layered-memory-fabric/)
|
||||
- [Deployment models](./deployment-models/)
|
||||
- [Warden model](./warden/)
|
||||
- [Host operator model](./host-operator-model/)
|
||||
|
|
|
|||
61
docs/public/architecture/layered-memory-fabric.md
Normal file
61
docs/public/architecture/layered-memory-fabric.md
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
---
|
||||
title: Layered Memory Fabric
|
||||
description: Clawdie's PostgreSQL-backed skills, brain, and ops data planes across FreeBSD and Linux.
|
||||
---
|
||||
|
||||
# Layered Memory Fabric
|
||||
|
||||
Clawdie's memory model is a **Layered Memory Fabric**: reviewed skills, learned memory, and operational state live in one PostgreSQL-backed data plane with separate lifecycle boundaries.
|
||||
|
||||
This replaces the older promotional phrase "split brain". Split brain is a distributed-systems failure mode; Clawdie's design goal is the opposite: one source of truth with clear ownership.
|
||||
|
||||
## Three planes
|
||||
|
||||
| Plane | Shared database | What belongs there | Source of truth |
|
||||
| ------ | --------------- | ---------------------------------------------------- | ----------------------------------------------- |
|
||||
| Skills | `system_skills` | Reviewed skills, install docs, operator workflows | committed artifacts + PostgreSQL import |
|
||||
| Brain | `system_brain` | User/agent memory, preferences, compaction summaries | PostgreSQL rows + optional vector embeddings |
|
||||
| Ops | `system_ops` | Messages, tasks, sessions, routing, runtime health | PostgreSQL rows and runtime control-plane state |
|
||||
|
||||
Embeddings and full-text indexes improve recall, but they are not the authority. The authoritative record is PostgreSQL plus the committed skill artifacts that seeded it.
|
||||
|
||||
## FreeBSD-first implementation
|
||||
|
||||
The FreeBSD path remains the reference implementation:
|
||||
|
||||
- ZFS datasets protect persistent platform state.
|
||||
- FreeBSD jails isolate workers and optional services.
|
||||
- PostgreSQL runs on the host by default (`DB_RUNTIME=host`) or in the optional Data Service jail (`DB_RUNTIME=jail`).
|
||||
- `system_skills`, `system_brain`, and `system_ops` keep the same names regardless of assistant name or tenant label.
|
||||
|
||||
## Linux-compatible contract
|
||||
|
||||
Linux should implement the same contracts instead of inventing a second product model:
|
||||
|
||||
- PostgreSQL remains the database substrate.
|
||||
- OpenZFS is preferred when available; a plain filesystem fallback can exist for development or small installs.
|
||||
- Linux-native worker isolation should satisfy the same worker contract that FreeBSD jails satisfy.
|
||||
- The installer should select platform adapters, not rename the data model.
|
||||
|
||||
## Installer unification target
|
||||
|
||||
The future install path should emit a common manifest shape on both platforms:
|
||||
|
||||
```json
|
||||
{
|
||||
"platform": "freebsd",
|
||||
"storage": "zfs",
|
||||
"database_runtime": "postgres-host",
|
||||
"isolation_runtime": "freebsd-jail",
|
||||
"databases": ["system_skills", "system_brain", "system_ops"]
|
||||
}
|
||||
```
|
||||
|
||||
Linux can use the same shape with Linux-native adapter values such as `linux-service`, `linux-container`, or `filesystem` where appropriate.
|
||||
|
||||
## Naming rules
|
||||
|
||||
- Use **Layered Memory Fabric** in public/promo copy.
|
||||
- Use **skills / brain / ops planes** in technical docs.
|
||||
- Keep `system_brain` as the database name; that name is intentional.
|
||||
- Avoid "split brain" except when referring to legacy filenames or historical changelog entries.
|
||||
|
|
@ -1,9 +1,13 @@
|
|||
---
|
||||
title: Installation
|
||||
description: Operator install paths for Clawdie on FreeBSD.
|
||||
description: Operator install paths for Clawdie, FreeBSD-first with shared platform contracts.
|
||||
---
|
||||
|
||||
Choose the path that matches your host.
|
||||
Choose the path that matches your host. FreeBSD remains the reference install
|
||||
path; Linux support should follow the same Layered Memory Fabric, PostgreSQL,
|
||||
and storage/isolation contracts rather than becoming a separate product model.
|
||||
See [Layered Memory Fabric](../architecture/layered-memory-fabric/) for the
|
||||
shared data-plane target.
|
||||
|
||||
## ISO install
|
||||
|
||||
|
|
|
|||
|
|
@ -58,13 +58,13 @@ active/queued jails, and the latest control plane report.
|
|||
|
||||
Checks:
|
||||
|
||||
| Check | Method | Fix if failing |
|
||||
| --------------------- | --------------------- | ------------------------- |
|
||||
| hostd reachable | TCP connect to socket | none (can't self-fix) |
|
||||
| Check | Method | Fix if failing |
|
||||
| ---------------------- | ------------------------------ | ------------------------------------------ |
|
||||
| hostd reachable | TCP connect to socket | none (can't self-fix) |
|
||||
| Data Service available | `jls -q name` or host DB probe | `hostd('bastille-start')` when jail-backed |
|
||||
| Git Service running | `jls -q name` | `hostd('bastille-start')` |
|
||||
| Web Service running | `jls -q name` | `hostd('bastille-start')` |
|
||||
| PF enabled | `pfctl -s info` | `hostd('pf-enable')` |
|
||||
| Git Service running | `jls -q name` | `hostd('bastille-start')` |
|
||||
| Web Service running | `jls -q name` | `hostd('bastille-start')` |
|
||||
| PF enabled | `pfctl -s info` | `hostd('pf-enable')` |
|
||||
|
||||
Severity:
|
||||
|
||||
|
|
@ -107,7 +107,7 @@ Reports (in order):
|
|||
- TLS certificate expiry for the public Clawdie and docs certificates
|
||||
- acme.sh renewal cron presence (`ACME_RENEWAL_CRON`)
|
||||
- morning report scheduler state, cron expression, next run, last run, and latest task log
|
||||
- split-brain DB availability and row counts
|
||||
- Layered Memory Fabric DB availability and row counts
|
||||
|
||||
Exit codes:
|
||||
|
||||
|
|
@ -158,14 +158,14 @@ matching Telegram slash command and follows the same `Observed` /
|
|||
`Interpretation` / `Operator Notes` template — see
|
||||
[Structured Reports](./structured-reports/) for the design and the full list.
|
||||
|
||||
| Report | Command | What it answers |
|
||||
| ---------- | ----------------- | --------------------------------------------------- |
|
||||
| System | `/report` | Are services + jails + controlplane healthy? |
|
||||
| Disk | `/disk` | What is consuming ZFS pool space and snapshots? |
|
||||
| Tasks | `/tasks` | What is in the controlplane task queue? |
|
||||
| Budget | `/budgetreport` | Token budgets and burn analytics |
|
||||
| Publish | `/publishreport` | Tenant publish/content state |
|
||||
| Test/Build | `/testreport` | Was the last build/test run green? |
|
||||
| Report | Command | What it answers |
|
||||
| ---------- | ---------------- | ----------------------------------------------- |
|
||||
| System | `/report` | Are services + jails + controlplane healthy? |
|
||||
| Disk | `/disk` | What is consuming ZFS pool space and snapshots? |
|
||||
| Tasks | `/tasks` | What is in the controlplane task queue? |
|
||||
| Budget | `/budgetreport` | Token budgets and burn analytics |
|
||||
| Publish | `/publishreport` | Tenant publish/content state |
|
||||
| Test/Build | `/testreport` | Was the last build/test run green? |
|
||||
|
||||
`/testreport` is fed by `scripts/write-test-build-status.sh`, not by the
|
||||
running process — invoke the wrapper from CI, a hook, or by hand to refresh
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ just doctor
|
|||
- potek javnih TLS certifikatov za Clawdie in dokumentacijo
|
||||
- prisotnost acme.sh obnovitvenega crona (`ACME_RENEWAL_CRON`)
|
||||
- stanje razporejevalnika jutranjega poročila
|
||||
- stanje split-brain podatkovnih baz in uvoženega skills artefakta
|
||||
- stanje Layered Memory Fabric podatkovnih baz in uvoženega skills artefakta
|
||||
|
||||
## Izhodna stanja
|
||||
|
||||
|
|
@ -57,7 +57,7 @@ Od zadnjih sprememb `just doctor` posebej preverja:
|
|||
- ali se javni TLS certifikati približujejo poteku in ali obstaja acme.sh
|
||||
obnovitveni cron
|
||||
|
||||
To pomaga ujeti split-brain DNS napake, tiha odstopanja razporejevalnika in
|
||||
To pomaga ujeti DNS razhajanja, tiha odstopanja razporejevalnika in
|
||||
pozabljene obnove certifikatov, ki jih sam PID procesa ne razkrije.
|
||||
|
||||
## Priporočilo
|
||||
|
|
|
|||
|
|
@ -10,9 +10,10 @@ This folder holds the versioned source set for the `docs.clawdie.si` subdomain.
|
|||
The site explains:
|
||||
|
||||
- Clawdie on FreeBSD
|
||||
- the split-brain model
|
||||
- Agent System Skills built-in local knowledge
|
||||
- User/Agent Memory for user and future-agent memory
|
||||
- the Layered Memory Fabric model
|
||||
- Skills built-in local knowledge
|
||||
- Brain memory for user and future-agent memory
|
||||
- Ops runtime state
|
||||
- the relationship to NanoClaw upstream
|
||||
|
||||
## Layout
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<li><a href="/">Introduction</a></li>
|
||||
<li><a href="/docs/install.html">Installation</a></li>
|
||||
<li><a href="/docs/iso.html">ISO Install</a></li>
|
||||
<li><a href="/docs/split-brain.html">Split Brain</a></li>
|
||||
<li><a href="/docs/split-brain.html">Layered Memory</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
|
|
@ -118,8 +118,8 @@
|
|||
<p>
|
||||
This static HTML page is an archival snapshot and can lag behind the
|
||||
live repository. Use the repo tags, commits, and
|
||||
<code>package.json</code> version as the authoritative current
|
||||
release state.
|
||||
<code>package.json</code> version as the authoritative current release
|
||||
state.
|
||||
</p>
|
||||
|
||||
<div class="divider"></div>
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<li><a href="/">Introduction</a></li>
|
||||
<li><a href="/docs/install.html">Installation</a></li>
|
||||
<li><a href="/docs/iso.html">ISO Install</a></li>
|
||||
<li><a href="/docs/split-brain.html">Split Brain</a></li>
|
||||
<li><a href="/docs/split-brain.html">Layered Memory</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
|
|
@ -203,8 +203,8 @@
|
|||
<h3>Privileged host daemon</h3>
|
||||
<p>
|
||||
<code>hostd</code> runs as root on a Unix socket
|
||||
(<code>/var/run/clawdie-hostd.sock</code>). All privileged
|
||||
host operations —
|
||||
(<code>/var/run/clawdie-hostd.sock</code>). All privileged host
|
||||
operations —
|
||||
<a
|
||||
href="https://bastillebsd.org/"
|
||||
target="_blank"
|
||||
|
|
@ -301,12 +301,12 @@
|
|||
<h3>How IPC actually works</h3>
|
||||
<p>
|
||||
The host daemon (<code>hostd</code>) listens on a Unix socket at
|
||||
<code>/var/run/clawdie-hostd.sock</code>. That same socket
|
||||
path is nullfs-mounted read-write into the jail. A process inside
|
||||
the jail writes to the socket and the host daemon — running as root
|
||||
outside the jail — handles the operation. No network hop. No
|
||||
serialization overhead. The socket inode is literally shared at the
|
||||
kernel level. The same mechanism works for the shared
|
||||
<code>/var/run/clawdie-hostd.sock</code>. That same socket path is
|
||||
nullfs-mounted read-write into the jail. A process inside the jail
|
||||
writes to the socket and the host daemon — running as root outside
|
||||
the jail — handles the operation. No network hop. No serialization
|
||||
overhead. The socket inode is literally shared at the kernel level.
|
||||
The same mechanism works for the shared
|
||||
<code>zroot/pkg-cache</code> dataset: the host mounts it read-only
|
||||
into each jail via nullfs, and <code>bastille pkg install</code>
|
||||
reads packages from the local cache without touching the network.
|
||||
|
|
@ -1110,14 +1110,14 @@
|
|||
<div class="card-grid">
|
||||
<a class="card" href="/docs/split-brain.html">
|
||||
<span class="card-icon">◉</span>
|
||||
<h3>Split Brain</h3>
|
||||
<h3>Layered Memory Fabric</h3>
|
||||
<p>
|
||||
Agent System Skills and User/Agent Memory explained in plain
|
||||
language and technical terms: built-in local knowledge first,
|
||||
user memory later.
|
||||
Skills, Brain, and Ops explained in plain language and technical
|
||||
terms: reviewed local knowledge, learned memory, and runtime
|
||||
state.
|
||||
</p>
|
||||
<span class="card-tag"
|
||||
>Agent System Skills · User/Agent Memory · Local
|
||||
>Skills · Brain · Ops · Local
|
||||
knowledge</span
|
||||
>
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<li><a href="/">Introduction</a></li>
|
||||
<li><a href="/docs/install.html">Installation</a></li>
|
||||
<li><a href="/docs/iso.html" class="active">ISO Install</a></li>
|
||||
<li><a href="/docs/split-brain.html">Split Brain</a></li>
|
||||
<li><a href="/docs/split-brain.html">Layered Memory</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@
|
|||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Split Brain — Clawdie Docs</title>
|
||||
<title>Layered Memory Fabric — Clawdie Docs</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="Split-brain architecture: built-in skills knowledge, user and agent memory, and operational state stored separately in PostgreSQL. Host runtime by default, optional db jail."
|
||||
content="Layered Memory Fabric: reviewed skills knowledge, user and agent memory, and operational state stored in separate PostgreSQL planes. Host runtime by default, optional db jail."
|
||||
/>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link
|
||||
|
|
@ -41,7 +41,7 @@
|
|||
<li><a href="/docs/install.html">Installation</a></li>
|
||||
<li><a href="/docs/iso.html">ISO Install</a></li>
|
||||
<li>
|
||||
<a href="/docs/split-brain.html" class="active">Split Brain</a>
|
||||
<a href="/docs/split-brain.html" class="active">Layered Memory</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
@ -104,27 +104,29 @@
|
|||
<div class="breadcrumb">
|
||||
<a href="/">Home</a><span class="sep">/</span>
|
||||
<a href="/docs/">Docs</a><span class="sep">/</span>
|
||||
Split Brain
|
||||
Layered Memory Fabric
|
||||
</div>
|
||||
|
||||
<div class="page-header">
|
||||
<p class="page-kicker">Core architecture</p>
|
||||
<h1>
|
||||
Split brain: agent-system skills and user/agent memory are separate
|
||||
by design.
|
||||
Layered Memory Fabric: skills, brain, and ops are separate by
|
||||
design.
|
||||
</h1>
|
||||
<p class="subtitle">
|
||||
Separate PostgreSQL lifecycles for built-in knowledge, dynamic
|
||||
memory, and operational state.
|
||||
One PostgreSQL-backed fabric with clear lifecycles for reviewed
|
||||
knowledge, learned memory, and operational state.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Clawdie keeps stable built-in knowledge, dynamic user and agent
|
||||
memory, and operational state in separate PostgreSQL databases. That
|
||||
memory, and operational state in separate PostgreSQL planes. That
|
||||
separation makes each easier to back up, validate, and evolve without
|
||||
conflating factory knowledge, live conversation memory, and runtime
|
||||
bookkeeping.
|
||||
conflating reviewed knowledge, live conversation memory, and runtime
|
||||
bookkeeping. The older "split brain" label is retired because split
|
||||
brain is a failure mode; the product design is one coordinated memory
|
||||
fabric.
|
||||
</p>
|
||||
|
||||
<section>
|
||||
|
|
@ -152,6 +154,13 @@
|
|||
|
||||
<section>
|
||||
<h2>The technical explanation</h2>
|
||||
<p>
|
||||
The fabric has three planes: <code>system_skills</code> for reviewed
|
||||
reference knowledge, <code>system_brain</code> for user and agent
|
||||
memory, and <code>system_ops</code> for runtime state. Embeddings
|
||||
and full-text indexes improve recall, but PostgreSQL rows and the
|
||||
committed skills artifact remain the source of truth.
|
||||
</p>
|
||||
<div class="two-col-grid">
|
||||
<article class="panel">
|
||||
<span class="mini-tag">Agent System Skills</span>
|
||||
|
|
@ -192,7 +201,10 @@
|
|||
<code>system_skills</code>, <code>system_brain</code>, and
|
||||
<code>system_ops</code>. By default they run on host PostgreSQL
|
||||
(<code>DB_RUNTIME=host</code>); an optional db jail remains
|
||||
available when explicitly selected.
|
||||
available when explicitly selected. FreeBSD protects this with ZFS
|
||||
datasets and jail-aware service boundaries; Linux should use the
|
||||
same database contract with Linux-native service/isolation
|
||||
adapters.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -251,16 +263,15 @@ runtime starts; provider auth can be added when ready</code></pre>
|
|||
that depends less on live web-provider setup during installation.
|
||||
</p>
|
||||
<p>
|
||||
Clawdie uses this split deliberately to make first install useful
|
||||
before any production LLM provider is configured, while keeping
|
||||
user memory flexible and runtime state auditable. FreeBSD makes
|
||||
this natural: built-in skills can live in a read-stable versioned
|
||||
database while user memory and ops state follow separate
|
||||
lifecycles.
|
||||
Clawdie uses these layers deliberately to make first install useful
|
||||
before any production LLM provider is configured, while keeping user
|
||||
memory flexible and runtime state auditable. FreeBSD makes this
|
||||
natural: built-in skills can live in a read-stable versioned
|
||||
database while user memory and ops state follow separate lifecycles.
|
||||
</p>
|
||||
<p>
|
||||
Before each jail run, the host queries the local skills database
|
||||
and prepends the top relevant built-in references to the prompt.
|
||||
Before each jail run, the host queries the local skills database and
|
||||
prepends the top relevant built-in references to the prompt.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
|
|
@ -297,9 +308,7 @@ runtime starts; provider auth can be added when ready</code></pre>
|
|||
<tbody>
|
||||
<tr>
|
||||
<td>Built-in knowledge</td>
|
||||
<td>
|
||||
Committed artifact plus refresh/import workflow
|
||||
</td>
|
||||
<td>Committed artifact plus refresh/import workflow</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>User and agent memory</td>
|
||||
|
|
@ -308,8 +317,8 @@ runtime starts; provider auth can be added when ready</code></pre>
|
|||
<tr>
|
||||
<td>Operational state</td>
|
||||
<td>
|
||||
Separate ops database for sessions, tasks, routing, and
|
||||
health bookkeeping
|
||||
Separate ops database for sessions, tasks, routing, and health
|
||||
bookkeeping
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
|
@ -318,7 +327,8 @@ runtime starts; provider auth can be added when ready</code></pre>
|
|||
|
||||
<footer>
|
||||
<div class="footer-left">
|
||||
<a href="https://clawdie.si">Clawdie AI</a> · Split Brain<br />
|
||||
<a href="https://clawdie.si">Clawdie AI</a> · Layered Memory
|
||||
Fabric<br />
|
||||
<a
|
||||
href="https://codeberg.org/Clawdie/Clawdie-AI/src/branch/main/html/docs-clawdie-si/docs/split-brain.html"
|
||||
target="_blank"
|
||||
|
|
@ -330,7 +340,7 @@ runtime starts; provider auth can be added when ready</code></pre>
|
|||
href="https://codeberg.org/Clawdie/Clawdie-AI/src/branch/main/src/split-brain-status.ts"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>Split-brain status</a
|
||||
>Memory fabric status</a
|
||||
><br />
|
||||
<a
|
||||
href="https://osa.smilepowered.org"
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<li><a href="/">Introduction</a></li>
|
||||
<li><a href="/docs/install.html">Installation</a></li>
|
||||
<li><a href="/docs/iso.html">ISO Install</a></li>
|
||||
<li><a href="/docs/split-brain.html">Split Brain</a></li>
|
||||
<li><a href="/docs/split-brain.html">Layered Memory</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<li><a href="/">Introduction</a></li>
|
||||
<li><a href="/docs/install.html">Installation</a></li>
|
||||
<li><a href="/docs/iso.html">ISO Install</a></li>
|
||||
<li><a href="/docs/split-brain.html">Split Brain</a></li>
|
||||
<li><a href="/docs/split-brain.html">Layered Memory</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<li><a href="/">Introduction</a></li>
|
||||
<li><a href="/docs/install.html">Installation</a></li>
|
||||
<li><a href="/docs/iso.html">ISO Install</a></li>
|
||||
<li><a href="/docs/split-brain.html">Split Brain</a></li>
|
||||
<li><a href="/docs/split-brain.html">Layered Memory</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<li><a href="/">Introduction</a></li>
|
||||
<li><a href="/docs/install.html">Installation</a></li>
|
||||
<li><a href="/docs/iso.html">ISO Install</a></li>
|
||||
<li><a href="/docs/split-brain.html">Split Brain</a></li>
|
||||
<li><a href="/docs/split-brain.html">Layered Memory</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<li><a href="/">Introduction</a></li>
|
||||
<li><a href="/docs/install.html">Installation</a></li>
|
||||
<li><a href="/docs/iso.html">ISO Install</a></li>
|
||||
<li><a href="/docs/split-brain.html">Split Brain</a></li>
|
||||
<li><a href="/docs/split-brain.html">Layered Memory</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
<li><a href="/" class="active">Introduction</a></li>
|
||||
<li><a href="/docs/install.html">Installation</a></li>
|
||||
<li><a href="/docs/iso.html">ISO Install</a></li>
|
||||
<li><a href="/docs/split-brain.html">Split Brain</a></li>
|
||||
<li><a href="/docs/split-brain.html">Layered Memory</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
|
|
@ -178,11 +178,12 @@
|
|||
<div class="divider"></div>
|
||||
|
||||
<section>
|
||||
<h2>What split brain means</h2>
|
||||
<h2>Layered Memory Fabric</h2>
|
||||
<p>
|
||||
Split brain is simple: Clawdie keeps agent-system knowledge and user
|
||||
memory in two separate databases. Each has its own lifecycle, backup
|
||||
strategy, and update path.
|
||||
Clawdie keeps reviewed skills, user/agent memory, and operational
|
||||
state in separate PostgreSQL planes. Each has its own lifecycle,
|
||||
backup strategy, and update path, while PostgreSQL remains the
|
||||
common source of truth.
|
||||
</p>
|
||||
|
||||
<div class="two-col-grid">
|
||||
|
|
@ -224,7 +225,8 @@
|
|||
rel="noopener"
|
||||
>ZFS snapshots</a
|
||||
>
|
||||
recommended)
|
||||
recommended; OpenZFS keeps the Linux path consistent where
|
||||
available)
|
||||
</li>
|
||||
<li>Can use production provider keys for embeddings</li>
|
||||
</ul>
|
||||
|
|
@ -243,10 +245,11 @@
|
|||
<div class="info-box">
|
||||
<span class="info-label">Technical version</span>
|
||||
<p>
|
||||
Agent System Skills is a prebuilt vector-backed knowledge package
|
||||
stored locally in the skills database. User/Agent Memory is
|
||||
dynamic user and agent memory with a separate lifecycle,
|
||||
provenance, and update path.
|
||||
The Layered Memory Fabric has three planes: skills
|
||||
(<code>system_skills</code>), brain (<code>system_brain</code>),
|
||||
and ops (<code>system_ops</code>). Embeddings and full-text search
|
||||
improve recall, but PostgreSQL rows and committed artifacts stay
|
||||
authoritative.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -366,7 +369,7 @@
|
|||
<tr>
|
||||
<td>Memory model</td>
|
||||
<td>Generic</td>
|
||||
<td>Split brain: built-in knowledge plus user memory</td>
|
||||
<td>Layered Memory Fabric: skills, brain, and ops planes</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
@ -558,10 +561,10 @@
|
|||
</a>
|
||||
<a class="card" href="/docs/split-brain.html">
|
||||
<span class="card-icon">◉</span>
|
||||
<h3>Split Brain</h3>
|
||||
<h3>Layered Memory Fabric</h3>
|
||||
<p>
|
||||
Agent System Skills and User/Agent Memory — how split-brain
|
||||
works in plain language and technical detail.
|
||||
Skills, Brain, and Ops — how the Layered Memory Fabric works in
|
||||
plain language and technical detail.
|
||||
</p>
|
||||
<span class="card-tag">Core concept</span>
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<li><a href="/">Introduction</a></li>
|
||||
<li><a href="/docs/install.html">Installation</a></li>
|
||||
<li><a href="/docs/iso.html">ISO Install</a></li>
|
||||
<li><a href="/docs/split-brain.html">Split Brain</a></li>
|
||||
<li><a href="/docs/split-brain.html">Layered Memory</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue