Schemas — Frontmatter Reference
Jedes Brain-File hat YAML-Frontmatter. Dieses Dokument beschreibt die Felder in menschlicher Form. Die maschinenlesbare Version liegt in ../packages/schemas/src/brain.schema.json.
Strikt validiert: Commits mit ungültigem Frontmatter werden vom pre-commit-Hook abgelehnt (Phase 3). Die CLI, der MCP-Server und die Web-UI validieren beim Schreiben über
core.brain.write(sieheINPUTS.md).
Gemeinsame Pflichtfelder
| Feld | Typ | Beschreibung |
|---|---|---|
id |
string | Eindeutige ID: <instance>.<category>.<path>[.<subpath>...]. Beispiel: kuble.projekt.nori-v3 |
category |
enum | slow | private | business | kunde | projekt | knowledge | inbox. Muss mit id[1] matchen |
title |
string | Lesbarer Titel (Deutsch erlaubt, Umlaute OK) |
owner |
Verantwortliche Person | |
created |
date | ISO YYYY-MM-DD |
updated |
date | ISO YYYY-MM-DD — bei jeder inhaltlichen Änderung aktualisieren |
Gemeinsame optionale Felder
| Feld | Typ | Beschreibung |
|---|---|---|
tags |
string[] | Lowercase-kebab, unique (ai, launch-q2) |
visibility |
enum | private | team | public. Default: Personal → private, Business → team |
encrypted |
boolean | Opt-in-Flag für zukünftige File-Encryption (nicht im MVP aktiv, siehe DECISIONS.md D17) |
description |
string | Ein-Satz-Zusammenfassung |
Kategorie-spezifische Regeln
slow — stabile Firmen-Ebene (nur Business-Instanzen)
Werte, Kultur, Prozesse, Kernwissen. Keine zusätzlichen Pflichtfelder.
Beispiel: ../examples/business-instance-kuble/brains/slow/werte.md.
private — private Soul (nur Personal-Instanzen)
Persönliche Werte, Identität. Nie gesynct. Keine zusätzlichen Pflichtfelder.
Beispiel: ../examples/personal-instance-gustavo/soul/private/werte.md.
business — Business-Soul-Kopie (nur Personal-Instanzen)
Read-only Spiegel eines Business-slow-Brains, one-way gepullt vom verbundenen Business. Die erste Path-Komponente ist der Business-Slug: <personal>.business.<biz-slug>.<path>.
Beispiel: ../examples/personal-instance-gustavo/soul/business/kuble/werte.md.
kunde — Kundenbrain (beide Instanz-Typen)
| Feld | Pflicht | Typ | Beschreibung |
|---|---|---|---|
status |
✅ | enum | prospect | active | paused | churned |
contacts |
⬜ | object[] | [{name (pflicht), role?, email?, phone?}] |
Pfad: brains/rapid/kunden/<slug>/index.md. Bei verschachtelten Notizen: brains/rapid/kunden/<slug>/<path>.md mit ID <instance>.kunde.<slug>.<path>.
Beispiel: ../examples/business-instance-kuble/brains/rapid/kunden/example-gmbh/index.md.
projekt — Projektbrain (beide Instanz-Typen, häufigster Sync-Träger)
| Feld | Pflicht | Typ | Beschreibung |
|---|---|---|---|
status |
✅ | enum | active | paused | done | archived |
customer |
⬜ | string | ID eines kunde-Brains (Pattern: *.kunde.*) |
sync |
⬜ | object | Sync-Konfiguration mit einer verbundenen Instanz — siehe unten |
sync Sub-Objekt
| Feld | Pflicht | Typ | Beschreibung |
|---|---|---|---|
target |
✅ | string | Brain-ID des Sync-Ziels (auf der anderen Instanz) |
mode |
✅ | enum | selective | mirror | off |
fields |
cond. | string[] | Pflicht bei mode=selective. H2-Sektionsnamen oder Frontmatter-Keys, die syncen (case-sensitive) |
direction |
⬜ | enum | push | pull | bidirectional. Default: bidirectional |
Beispiel: ../examples/business-instance-kuble/brains/rapid/projekte/nori-v3/index.md hat sync.target: gustavo.projekt.nori-v3 — und auf der Personal-Seite zeigt ../examples/personal-instance-gustavo/brains/rapid/projekte/nori-v3/index.md zurück mit sync.target: kuble.projekt.nori-v3.
knowledge — Wissens-Artefakt (beide Instanz-Typen)
| Feld | Pflicht | Typ | Beschreibung |
|---|---|---|---|
source |
⬜ | string | URL oder Referenz, wenn extern bezogen |
Keine weiteren Pflichtfelder. Freie Form.
inbox — Quick-Capture (beide Instanz-Typen)
Keine zusätzlichen Pflichtfelder. Datei-Slug ist konventionell ein Timestamp (2026-04-17-22-45-03). Wird nach Triage per gts inbox triage in die richtige Kategorie verschoben (Phase 3+).
Invarianten (zusätzlich zur JSON-Schema-Prüfung)
Diese werden von core.brain.validate (bzw. dem pre-commit-Hook) zusätzlich geprüft:
categorymuss dem zweiten Segment vonidentsprechen.- Dateipfad muss mit der ID matchen (siehe
AUTHORING.md§1). sync.targetmuss ein geparseter Brain-ID sein.- Erlaubte Kategorien hängen vom Instance-Typ ab (siehe
packages/core/src/paths.ts).
Selective Sync — Wie fields konkret funktioniert
Wenn ein H2-Name in fields steht, wandert der Inhalt unter dieser Sektion zum Target. Beispiel:
## Goals
- Launch Q3 2026
- 10 customers by Q4
## Internal Notes
- Prospect X is slow to respond
Mit fields: [Goals] wandert nur ## Goals, ## Internal Notes bleibt im Original.
Steht ein Frontmatter-Key in fields (z.B. fields: [status]), wandert stattdessen dieser Frontmatter-Wert — case-sensitive.
Sync-Konflikte (beide Seiten haben denselben Field seit dem letzten Sync geändert) werden gemeldet, nie automatisch überschrieben.