Skip to content
Apothem
Referenz

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 deklarieren additionalProperties: false und lehnen daher unbekannte Schlüssel ab; die Schemas für Agenten, Output-Styles und Pläne deklarieren additionalProperties: true. Diese Seite und frontmatter-schema.mdx sind 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):

  • version ist 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 version unverändert. Nur eine Verhaltensänderung erhöht sie.
  • updated ist das ISO-8601-Datum (YYYY-MM-DD) der jüngsten Bearbeitung. Es muss sich bei jeder Erhöhung von version ändern und ändert sich auch bei einer Tippfehler- oder Linkkorrektur ohne Versionserhöhung.
  • Neue Artefakte beginnen bei v0.Y.Z. Die Hochstufung auf vX.Y.Z zeigt 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.Z zu vX.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
---
FeldTypZweckBeispiel
namestringMaschinenlesbarer Bezeichner"operational-mandates"
descriptionstringEinzeilige Beschreibung für Registries"Operational mandates CM-1–10"
pathFilterstringKommagetrennte Glob-Liste, die den Geltungsbereich einer pfadgefilterten Regel festlegt; bei stets aktiven Regeln die leere Zeichenkette ("")"**/*.py, **/*.toml"
alwaysApplybooleantrue 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"
---
FeldTypZweckBeispiel
namestringCommand-Name (ohne führenden /)"plan-execute"
versionstringSemantische Version"X.Y.Z"
updatedstring (ISO 8601)Datum der letzten Aktualisierung"2026-04-20"
descriptionstringKurzbeschreibung"Executes a phase with quality gates"
argument-hintstringVerwendungsmuster oder "[args...]", falls es keines gibt"[path/to/plan] [phase-id]"
disable-model-invocationbooleanFalls true, startet nur der Operator den Command; das Modell ruft ihn niemals von sich aus auftrue
portabilitystringPortabilitätsklassifizierung über die Harness-Adapter hinweg"universal"
allowed-toolsstringTools, 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/*.md

Zweck: 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"
---
FeldTypZweckBeispiel
namestringHelfer-Bezeichner"codebase-explorer"
versionstringSemantische Version"X.Y.Z"
updatedstring (ISO 8601)Datum der letzten Aktualisierung"2026-04-20"
descriptionstringBeschreibung der Spezialisierung"Deep codebase exploration"
toolsstring (kommagetrennt)Erlaubte Tools"Read, Glob, Grep, Bash"
disallowedToolsstring (kommagetrennt)Verbotene Tools"Write, Edit, TodoWrite"
maxTurnsintegerMaximale Anzahl an Gesprächsrunden (typisch 5–20; Werte über 20 erfordern einen Inline-Kommentar mit Begründung)20
effortenumRechenumfang"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"
---
FeldTypZweckBeispiel
namestringSkill-Bezeichner"plan-suite"
versionstringSemantische Version"X.Y.Z"
updatedstring (ISO 8601)Datum der letzten Aktualisierung"2026-04-20"
descriptionstringWas der Skill bereitstellt"Master Plan Suite template"
archetypestringFormklasse, ein Kebab-Case-Bezeichner der Form <class>-template"workflow-template"
userInvocablebooleanFalls true, kann der Benutzer diesen Skill ausdrücklich anfordernfalse
disable-model-invocationbooleanFalls true, wird der Skill nur durch ausdrücklichen Aufruf erreichttrue
allowed-toolsstringTools, 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 userInvocable

Beispiel

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

FeldTypZweckBeispiel
matcherstringTool-Namensmuster (oder "*" für tool-unabhängige Ereignisse)"Write"
hooks[].typeLiteral "command"Der derzeit einzige unterstützte Hook-Handler-Typ"command"
hooks[].commandstringAusführbarer Befehl; Apothem verwendet den Platzhalter ${PYTHON_BIN}, der bei der Installation aufgelöst wird"${PYTHON_BIN}"
hooks[].argsArray von StringsArgumente in Exec-Form: ein Skriptpfad unter ${HARNESS_ROOT}/.apothem/support/, danach seine Argumente["${HARNESS_ROOT}/.apothem/support/hooks/dispatch.py", "SessionStart"]
hooks[].timeoutGanzzahl in SekundenMaximale Laufzeit, bevor der Host den Hook beendet30
hooks[].statusMessagestringKurzes 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.

EreignisTypisches TimeoutZweck
SessionStart30 SekundenSpeicher lesen, Plan-Zustand prüfen, Bereitschaft melden
PreToolUse10 SekundenSchreibvorgänge gegen Richtlinien zur Inhaltsisolierung + Frontmatter validieren
PreCompact30 SekundenVerifizieren, dass der Zustand vor der Kontextverdichtung externalisiert wurde
PostCompact30 SekundenArbeitszustand nach der Kontextverdichtung wiederherstellen
Stop60 SekundenExternalisierung 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:

DateiRolle
src/apothem/hooks/dispatch.pyLeitet 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.pyHook-Skript für den Sitzungsstart — gibt Kontext mit einer Zusammenfassung von Speicher und Plan-Suite aus.
src/apothem/hooks/emit_hook_context.pyStandard-Hook-Emitter — schreibt einen gültigen Umschlag, der die registrierte --context-file-Nutzlast trägt.
src/apothem/hooks/messages/*.mdStatische Kontext-Nutzlast, auf die --context-file verweist.

Validierung

scripts/dev/validate_hooks.py erzwingt den Hook-Vertrag:

  • settings.json lä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/**.py erscheinen keine fest codierten absoluten Benutzerpfade (C:\Users\... usw.).
  • Shell-Artefakte unter src/apothem/hooks/ und scripts/ 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
  • name folgt der Kebab-Case-Konvention
  • version ist semantisch (MAJOR.MINOR.PATCH)
  • updated liegt im ISO-8601-Datumsformat vor (YYYY-MM-DD)
  • description ist 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 version und updated gemeinsam 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.

On this page