Artefakt-Schema-Spezifikation
Kanonisches YAML-Frontmatter-Schema und Pflichtfelder für alle Artefakttypen im Apothem-Quellbaum, mit Vorlagen pro Klasse und Validierungsregeln.
YAML-Frontmatter-Vorlagen pro Klasse und Pflichtfelder für alle Artefakte des Apothem-Ökosystems.
Maßgebliche Quelle. Der maschinenlesbare, vom Gate erzwungene Vertrag sind die JSON-Schemas pro Klasse unter
src/apothem/schemas/(agent.schema.json,command.schema.json,skill.schema.json, …). Die Schemas für Skills und Befehle deklarierenadditionalProperties: falseund lehnen daher unbekannte Schlüssel ab; die Schemas für Agenten, Output-Styles und Pläne deklarierenadditionalProperties: true. Diese Seite undfrontmatter-schema.mdxsind die beiden menschenlesbaren Projektionen dieser Schemas; diese Seite enthält die Vorlagen und ausgearbeiteten Beispiele pro Klasse, frontmatter-schema den knappen Index der Pflichtschlüssel. Widerspricht eine Seite den JSON-Schemas, haben die Schemas Vorrang.
Überblick
Alle Artefakte im Apothem-Quellbaum (unter src/apothem/ und in der
Konfigurationsoberfläche der Wurzel) müssen einen YAML-Frontmatter-Block
(zwischen ----Trennzeichen) enthalten, mit Pflicht- und optionalen Feldern,
die für ihren Artefakttyp spezifisch sind. Dieses Dokument definiert das
kanonische Schema für jeden Typ.
Universelle Regeln:
- Das Frontmatter ist YAML-1.2-konform
- Alle Zeichenkettenwerte verwenden doppelte Anführungszeichen, und eine leere Zeichenkette wird als
""geschrieben - Feldreihenfolge: Pflichtfelder zuerst, optionale Felder nach Relevanz gruppiert
- Kommentare im Frontmatter verwenden
#mit Leerzeichen:# comment - Pfadwerte müssen relativ sein (kein führender
/) und für plattformübergreifende Kompatibilität Schrägstriche (/) verwenden
Versionierungskonvention (versionierte Artefaktklassen — Commands, Helfer, Skills, CLAUDE.md):
versionist semantisch (MAJOR.MINOR.PATCH). Erhöhen Sie MAJOR bei inkompatiblen Schema- oder Vertragsänderungen; MINOR bei additiven, nicht inkompatiblen Änderungen (neue optionale Felder, zusätzliche Abschnitte, zusätzliche Antimuster); PATCH bei einer Verhaltensänderung, die eine bestehende Direktive korrigiert, ohne den Vertrag zu brechen.- Tippfehlerkorrekturen, Linkkorrekturen, Formatierungen sowie reine Kommentar- oder Dokumentationsänderungen lassen
versionunverändert. Nur eine Verhaltensänderung erhöht sie. updatedist das ISO-8601-Datum (YYYY-MM-DD) der jüngsten Bearbeitung. Es muss sich bei jeder Erhöhung vonversionändern und ändert sich auch bei einer Tippfehler- oder Linkkorrektur ohne Versionserhöhung.- Neue Artefakte beginnen bei
v0.Y.Z. Die Hochstufung aufvX.Y.Zzeigt an, dass der Vertrag des Artefakts stabil genug ist, um eine öffentliche Zusage zu sein. - Plan-Suiten fallen nicht unter diese Konvention. Eine Tippfehlerkorrektur an einer Plan-Suite erhöht die PATCH-Nummer der Suite-Version (
vX.Y.ZzuvX.Y.(Z+1)) und hängt eine Zeile an die Revisionshistorie an. Der Entwicklerleitfaden beschreibt die Plan-Suite-Regel in seinem Abschnitt zu Revisionen von Plan-Suiten.
Schema: Regeln
Pfadmuster: src/apothem/rules/*.md
Zweck: Verhaltensmandate und operative Direktiven.
Pflichtfelder
---
name: "kebab-case-identifier"
description: "One-line description"
pathFilter: "**/*.py, **/*.toml"
alwaysApply: true | false
---| Feld | Typ | Zweck | Beispiel |
|---|---|---|---|
name | string | Maschinenlesbarer Bezeichner | "operational-mandates" |
description | string | Einzeilige Beschreibung für Registries | "Operational mandates CM-1–10" |
pathFilter | string | Kommagetrennte Glob-Liste, die den Geltungsbereich einer pfadgefilterten Regel festlegt; bei stets aktiven Regeln die leere Zeichenkette ("") | "**/*.py, **/*.toml" |
alwaysApply | boolean | true für stets aktive Regeln (überall geladen); false für pfadgefilterte Regeln (geladen, wenn pathFilter zutrifft) | true |
Optionale Felder
Regeln haben keine optionalen Frontmatter-Felder und — anders als andere Artefaktklassen — auch keine Felder version / updated / scope / portability. Die vier obigen Pflichtfelder sind der vollständige Frontmatter-Vertrag für Regeln, den frontmatter_grep erzwingt.
Beispiel
---
name: "operational-mandates"
description: "Behavioral definitions for CM-1 through CM-10: violation indicators and recovery actions"
pathFilter: ""
alwaysApply: true
---
# Rule: Operational Mandates
...Schema: Commands
Pfadmuster: src/apothem/commands/*.md
Zweck: Definitionen von Slash-Commands (/plan-execute, /freshify usw.).
Pflichtfelder
---
name: "command-name"
version: "MAJOR.MINOR.PATCH"
updated: "YYYY-MM-DD"
description: "What this command does"
argument-hint: "[argument-pattern]"
disable-model-invocation: true | false
portability: "universal"
allowed-tools: "Read, Glob, Grep"
---| Feld | Typ | Zweck | Beispiel |
|---|---|---|---|
name | string | Command-Name (ohne führenden /) | "plan-execute" |
version | string | Semantische Version | "X.Y.Z" |
updated | string (ISO 8601) | Datum der letzten Aktualisierung | "2026-04-20" |
description | string | Kurzbeschreibung | "Executes a phase with quality gates" |
argument-hint | string | Verwendungsmuster oder "[args...]", falls es keines gibt | "[path/to/plan] [phase-id]" |
disable-model-invocation | boolean | Falls true, startet nur der Operator den Command; das Modell ruft ihn niemals von sich aus auf | true |
portability | string | Portabilitätsklassifizierung über die Harness-Adapter hinweg | "universal" |
allowed-tools | string | Tools, die während der Ausführung des Commands vorab genehmigt sind: lesende Tools, dazu Tools mit Nebenwirkungen nur als eingegrenzte Regeln wie Bash(git log *). Der bloße Platzhalter "*" wird abgelehnt | "Read, Glob, Grep" |
Optionale Felder
Commands haben keine optionalen Frontmatter-Felder — die acht obigen Pflichtfelder sind der vollständige Frontmatter-Vertrag für Commands, den command.schema.json (additionalProperties: false) erzwingt.
Beispiel
---
name: "plan-execute"
version: "X.Y.Z"
updated: "2026-04-20"
description: "Executes a specific phase from a Master Plan Suite with conformity checking and quality gates"
argument-hint: "[path/to/plan-suite/] [phase-id] [--dry-run]"
disable-model-invocation: true
portability: "universal"
allowed-tools: "Read, Glob, Grep"
---
# /plan-execute — Execute a Specific Phase
...Schema: Helfer
Pfadmuster:
src/apothem/agents/*.mdZweck: Persistente Helfer-Definitionen (auch delegierte Worker genannt) für parallele Exploration, Audits und Qualitätstore.
Pflichtfelder
---
name: "agent-name"
version: "MAJOR.MINOR.PATCH"
updated: "YYYY-MM-DD"
description: "What this agent specializes in"
tools: "Tool1, Tool2, Tool3"
disallowedTools: "Write, Edit"
maxTurns: 20
effort: "high" | "medium" | "low"
---| Feld | Typ | Zweck | Beispiel |
|---|---|---|---|
name | string | Helfer-Bezeichner | "codebase-explorer" |
version | string | Semantische Version | "X.Y.Z" |
updated | string (ISO 8601) | Datum der letzten Aktualisierung | "2026-04-20" |
description | string | Beschreibung der Spezialisierung | "Deep codebase exploration" |
tools | string (kommagetrennt) | Erlaubte Tools | "Read, Glob, Grep, Bash" |
disallowedTools | string (kommagetrennt) | Verbotene Tools | "Write, Edit, TodoWrite" |
maxTurns | integer | Maximale Anzahl an Gesprächsrunden (typisch 5–20; Werte über 20 erfordern einen Inline-Kommentar mit Begründung) | 20 |
effort | enum | Rechenumfang | "high" |
Optionale Felder
permissionMode: "default" # Permission handling
memory: user | project | local # Persistent-memory scope; omit for none
pattern: "Research" | "Audit" | "Implementation" | "Quality" # Agent team pattern
portability: "universal"Beispiel
---
name: "codebase-explorer"
version: "X.Y.Z"
updated: "2026-04-20"
description: "Deep codebase exploration — find patterns, trace dependencies, discover conventions, map architecture"
tools: "Read, Glob, Grep, Bash"
disallowedTools: "Write, Edit, TodoWrite"
maxTurns: 20
effort: "high"
permissionMode: "default"
portability: "universal"
---
You are a codebase exploration specialist...Schema: Skills
Pfadmuster: src/apothem/skills/*/SKILL.md
Zweck: Wiederverwendbare Technik-Definitionen mit Erkennungssignalen und Ausführungsprozeduren.
Pflichtfelder
---
name: "skill-name"
version: "MAJOR.MINOR.PATCH"
updated: "YYYY-MM-DD"
description: "What this skill teaches"
archetype: "workflow-template"
userInvocable: true | false
disable-model-invocation: true | false
allowed-tools: "Read, Glob, Grep"
---| Feld | Typ | Zweck | Beispiel |
|---|---|---|---|
name | string | Skill-Bezeichner | "plan-suite" |
version | string | Semantische Version | "X.Y.Z" |
updated | string (ISO 8601) | Datum der letzten Aktualisierung | "2026-04-20" |
description | string | Was der Skill bereitstellt | "Master Plan Suite template" |
archetype | string | Formklasse, ein Kebab-Case-Bezeichner der Form <class>-template | "workflow-template" |
userInvocable | boolean | Falls true, kann der Benutzer diesen Skill ausdrücklich anfordern | false |
disable-model-invocation | boolean | Falls true, wird der Skill nur durch ausdrücklichen Aufruf erreicht | true |
allowed-tools | string | Tools, die während der Ausführung des Skills vorab genehmigt sind: lesende Tools, dazu Tools mit Nebenwirkungen nur als eingegrenzte Regeln wie Bash(git log *). Der bloße Platzhalter "*" wird abgelehnt | "Read, Glob, Grep" |
Optionale Felder
argument-hint: "[args...]" # Usage pattern if userInvocableBeispiel
---
name: "ecosystem-audit"
version: "X.Y.Z"
updated: "2026-04-20"
description: "Comprehensive blind audit of the apothem ecosystem"
archetype: "audit-template"
userInvocable: true
disable-model-invocation: false
allowed-tools: "Read, Glob, Grep, Agent, TodoWrite"
argument-hint: "[--focus area] [--fix]"
---
## Purpose
...Schema: Hooks
Pfadmuster: der hooks-Block in settings.json plus die
Python-Implementierungen unter src/apothem/hooks/.
Zweck: Ereignisgesteuerte Validatoren und Handler für die Zustandsverwaltung deklarieren, die der Host an klar definierten Punkten des Lebenszyklus aufruft.
Schema der Settings-Datei
Der Schlüssel hooks der obersten Ebene ordnet Ereignisnamen Arrays von
Matcher-Blöcken zu:
"hooks": {
"<EventName>": [
{
"matcher": "<pattern>",
"hooks": [
{
"type": "command",
"command": "${PYTHON_BIN}",
"args": ["${HARNESS_ROOT}/.apothem/support/hooks/dispatch.py", "<EventName>", "<message-name>"],
"timeout": <seconds>,
"statusMessage": "<short human-readable label>"
}
]
}
]
}Die Form -m apothem.hooks.dispatch ist für die Entwicklung aus einem Quell-Checkout mit PYTHONPATH=src gedacht.
| Feld | Typ | Zweck | Beispiel |
|---|---|---|---|
matcher | string | Tool-Namensmuster (oder "*" für tool-unabhängige Ereignisse) | "Write" |
hooks[].type | Literal "command" | Der derzeit einzige unterstützte Hook-Handler-Typ | "command" |
hooks[].command | string | Ausführbarer Befehl; Apothem verwendet den Platzhalter ${PYTHON_BIN}, der bei der Installation aufgelöst wird | "${PYTHON_BIN}" |
hooks[].args | Array von Strings | Argumente in Exec-Form: ein Skriptpfad unter ${HARNESS_ROOT}/.apothem/support/, danach seine Argumente | ["${HARNESS_ROOT}/.apothem/support/hooks/dispatch.py", "SessionStart"] |
hooks[].timeout | Ganzzahl in Sekunden | Maximale Laufzeit, bevor der Host den Hook beendet | 30 |
hooks[].statusMessage | string | Kurzes Label, das in der Host-Oberfläche angezeigt wird | "Session start" |
Erforderliche Ereignisse
Die Claude-Code-Vorlage registriert vier Ereignisse: SessionStart, PreToolUse, PostToolUse und Stop. scripts/dev/validate_hooks.py prüft settings.json auf die fünf Ereignisse in der Tabelle unten, eine andere Menge, und meldet jedes, das es nicht findet, als Warnung, nicht als Fehlschlag. PostToolUse ist registriert, gehört aber nicht zu den fünf. PreCompact und PostCompact gehören zu den fünf, sind aber für Claude Code nicht registriert (Hook-Referenz); der Prüfer warnt dort daher vor beiden.
Die Timeout-Werte spiegeln die kanonischen Budgets der Hook-Ereignisse wider — die Tabelle unten gibt sie zur Bequemlichkeit der Lesenden wieder; maßgeblich ist die kanonische Quelle.
| Ereignis | Typisches Timeout | Zweck |
|---|---|---|
SessionStart | 30 Sekunden | Speicher lesen, Plan-Zustand prüfen, Bereitschaft melden |
PreToolUse | 10 Sekunden | Schreibvorgänge gegen Richtlinien zur Inhaltsisolierung + Frontmatter validieren |
PreCompact | 30 Sekunden | Verifizieren, dass der Zustand vor der Kontextverdichtung externalisiert wurde |
PostCompact | 30 Sekunden | Arbeitszustand nach der Kontextverdichtung wiederherstellen |
Stop | 60 Sekunden | Externalisierung am Sitzungsende — Wiederaufnahmezustand, Ausgaben, Entscheidungen |
dispatch.py akzeptiert zur Vorwärtskompatibilität auch UserPromptSubmit und
Notification auf seiner Ereignis-Whitelist; keines der beiden ist in den
ausgelieferten Vorlagen verdrahtet. Fügen Sie zum Aktivieren einen
Matcher-Block mit demselben Exec-Form-Muster hinzu.
Python-Schicht
Jeder Hook-Befehl läuft über denselben Python-Dispatcher:
| Datei | Rolle |
|---|---|
src/apothem/hooks/dispatch.py | Leitet SessionStart an session_start_bootstrap.main() und jedes andere Ereignis der Whitelist an emit_hook_context.main() weiter. Beendet sich immer mit 0. |
src/apothem/hooks/session_start_bootstrap.py | Hook-Skript für den Sitzungsstart — gibt Kontext mit einer Zusammenfassung von Speicher und Plan-Suite aus. |
src/apothem/hooks/emit_hook_context.py | Standard-Hook-Emitter — schreibt einen gültigen Umschlag, der die registrierte --context-file-Nutzlast trägt. |
src/apothem/hooks/messages/*.md | Statische Kontext-Nutzlast, auf die --context-file verweist. |
Validierung
scripts/dev/validate_hooks.py erzwingt den Hook-Vertrag:
settings.jsonlässt sich als JSON parsen und deklariert jedes der fünf Ereignisse in der Tabelle; ein fehlendes Ereignis ist eine Warnung, kein Fehlschlag.- Alle drei Python-Skripte existieren und lassen sich als gültiges Python parsen.
- Alle Nachrichtendateien, auf die
--context-file-Argumente verweisen, existieren. - In
src/apothem/hooks/**.pyerscheinen keine fest codierten absoluten Benutzerpfade (C:\Users\...usw.). - Shell-Artefakte unter
src/apothem/hooks/undscripts/sind auf die genehmigten Locator- / Bootstrap-Stubs beschränkt.
Schema: CLAUDE.md
Pfad: CLAUDE.md (Wurzel)
Zweck: Projektbezogene Anweisungen für Claude Code.
Verpflichtendes YAML-Frontmatter
---
name: "CLAUDE"
version: "MAJOR.MINOR.PATCH"
updated: "YYYY-MM-DD"
description: "Project-scoped Claude Code instructions for the Apothem source repository"
scope: "project"
portability: "project-local"
---Abschnitte
CLAUDE.md ist in Prosa-Abschnitten verfasst und unter CLAUDE.md beschrieben. Kein Validator verlangt eine feste Abschnittsliste: scripts/dev/validate_ecosystem.py prüft die oben genannten Frontmatter-Schlüssel.
Validierungs-Checkliste
Jedes Artefakt muss diese Prüfungen bestehen:
Frontmatter-Validierung
- YAML ist syntaktisch gültig (keine Parsing-Fehler)
- Alle Pflichtfelder für den Artefakttyp sind vorhanden
-
namefolgt der Kebab-Case-Konvention -
versionist semantisch (MAJOR.MINOR.PATCH) -
updatedliegt im ISO-8601-Datumsformat vor (YYYY-MM-DD) -
descriptionist eine nicht leere, einzeilige Zeichenkette - Optionale Felder entsprechen den erwarteten Enum-Werten (falls zutreffend)
- Keine Tippfehler in Feldnamen (verwenden Sie die kanonischen Namen aus dem Schema)
- Kein überflüssiger Leerraum und keine Formatierungsprobleme
Inhaltsvalidierung
- Der Inhalt beginnt in einer neuen Zeile nach dem schließenden
---; bei Dateien der Markdown-Familie ist die kanonische SPDX-Header-Zeile der erste Inhalt danach - Keine plan-internen Verweise (CM-7-Konformität)
- Querverweise lassen sich auflösen (falls andere Artefakte aufgeführt werden)
- Links verwenden relative Pfade mit Schrägstrichen
Portabilitätsvalidierung
- Keine fest codierten absoluten Pfade (relative verwenden)
- Keine Windows-spezifische Syntax in Artefakten mit universellem Geltungsbereich
- Pfadtrennzeichen sind Schrägstriche
- Umgebungsvariablen verwenden ein plattformunabhängiges Format (
${VAR}oder tool-nativ)
Hinweise
- Konsistenz als Sicherheit: Kanonisches Frontmatter ermöglicht automatisierte Validierung, Tooling und artefaktübergreifende Verifikation. Abweichungen summieren sich schnell.
- Portabilitätserklärung: Nicht alle Artefakte können universell sein. Deklarieren Sie Einschränkungen ausdrücklich — besser einen Vorbehalt dokumentieren, als einen stillen Fehler auszuliefern.
- Kebab-Case für Namen: Leicht zu verwenden in URLs, Skripten und Kommandozeilenkontexten. Vermeiden Sie Leerzeichen, Unterstriche und camelCase bei Namen.
- Hygiene bei Versionsanhebungen: Jede Bearbeitung, die das Verhalten ändert, muss
versionundupdatedgemeinsam erhöhen. Tippfehler-, Link- und Formatierungskorrekturen lassen die Version unverändert; neue optionale Abschnitte oder Antimuster erhöhen MINOR; strukturelle Umgestaltungen oder Vertragsänderungen erhöhen MAJOR.
Commit-Konventionen
Legt das Format der Commit-Nachrichten, die Release-Markierung, die Disziplin der ausschließlich menschlichen Autorschaft und die Kadenz pro Aufgabe für git-Artefakte und Versionskontrolle fest.
Artefakt-Registries
Vollständige Aufzählung der Apothem-Ökosystem-Artefakte: Commands, Regeln, delegierte Worker, Hooks, Skills, Output-Styles, Disziplin der Artefaktevolution und Deklarationen leerer Artefaktklassen.