The canonical specification for a WhiteBox memory vault. Any agent implementing this spec can read and write to a vault produced by any other agent that implements it.
This spec is the moat. It is intentionally small and intentionally frozen. Schema v2 may add fields; it will never remove or rename them.
- Plain markdown + YAML frontmatter. No binary formats, no databases, no embeddings as source of truth.
- Human-readable first. Any file in a WhiteBox vault must be meaningful to a user opening it in a text editor.
- Additive evolution. Schema versions only add. A v1 vault remains valid in a v2 world.
- Inspectable always. Derived indexes (search caches, graph databases, learned policies) are recomputable from the markdown and never canonical.
- No required tooling. Every operation in this spec can be performed by hand in a text editor.
Long-lived, resolved truths about the user. One truth per claim. Contradictions need resolution.
- Live in: top-level files (
identity.md,working-style.md) or named subfolders (relationships/<name>.md,projects/<slug>.md). - Format: normal markdown with optional YAML frontmatter.
- Editing: the user edits freely. Agents may propose edits but should not silently overwrite. To dispute a stable fact, an agent writes an observation tagged
conflict.
Append-only notes from agents about the user. Contextual; contradictions are preserved, not resolved.
- Live in:
observations/YYYY-MM.md(one file per month). - Append only. Never edit another agent's observation.
- Patterns emerge from accumulation. The "truth" of a contextual claim is whatever falls out of reading the observation log over time.
Required frontmatter on each observation:
---
date: YYYY-MM-DD
source: <agent or model name>
tags: [<tag>, ...]
confidence: low | medium | high
---Body: one paragraph. What was learned, in what context. Aim for under 100 words per observation.
Observations within a monthly file are separated by --- (horizontal rules). Order is chronological.
A tags.md file at the vault root is the canonical tag registry.
# Tags
## Active
- `tag-name` — short description of what this tag is for
## Proposed
- `agent-suggested-tag` — description (status: proposed)Rules for agents:
- Prefer tags from the Active list.
- If no existing tag fits, append the new tag to Proposed with
status: proposedand a one-line description. - Do not delete or rename tags in other agents' observations. The user curates.
Tag values may include namespaces with :, e.g. relationship:alex or project:my-project.
Optional. If scopes.md exists at vault root, it declares named scopes and which folders each scope includes.
# Scopes
- `public` — root files only
- `work` — root + `projects/`
- `personal` — root + `relationships/`
- `sensitive` — `sensitive/` (never served by default)The active scope for a session is set by the host application (MCP client, system prompt, CLI flag). Agents must not read or write files outside the active scope.
If no scopes.md exists, the default scope is the entire vault.
When several observations of consistent content and matching tags accumulate, an agent may propose promoting them to a stable fact.
- Default threshold: three matching observations of
confidence: mediumor higher. - Promotion requires user approval unless the vault's
scopes.md(or a separatepromotion.md) explicitly authorizes auto-promotion within named scopes. - A promoted fact is written to the appropriate stable file. The originating observations remain in place — they are not deleted.
A minimal valid vault:
vault/
AGENTS.md ← bootloader, read first by any agent
identity.md ← stable facts about the user
working-style.md ← how the user wants to be worked with
tags.md ← tag registry
observations/
YYYY-MM.md ← append-only monthly logs
Optional additions:
vault/
relationships/<name>.md
projects/<slug>.md
scopes.md
sensitive/ ← scope-restricted folder
- The user's editor or app — vaults work in Obsidian, VS Code, plain text editors, or no editor at all.
- The transport between agent and vault — MCP, filesystem, paste-in, browser extension, all valid.
- Retrieval strategy — each agent decides what to load and when. The spec defines format, not behavior.
- Wikilinks or graph structure —
[[wikilink]]and standard markdown links are both supported, neither required. - Versioning of vault contents — git, Syncthing, iCloud, none. User's choice.
This document defines schema version 1.0. Each markdown file in a vault may declare its schema version in frontmatter:
schema: whitebox/1.0Files without a declared version are assumed to be the latest version the vault was created under. A whitebox.toml or similar at vault root may set the default.
The following frontmatter keys are reserved by the spec and should not be used for other purposes by tools:
schema— schema version declarationdate— observation timestampsource— observation author (agent/model identifier)tags— observation or stable-fact tagsconfidence— observation confidence levelstatus— used intags.mdfor tag lifecycle (active,proposed,deprecated)scope— restricts a file to a specific scope
All other frontmatter keys are free for tools and users to define.