name: heartbeatWorkspace description: Cron-Heartbeat-Skill der Workspace scannt + Drift erkennt + Auto-Fix-Vorschlaege macht. Aktivieren bei "Heartbeat Check", "Workspace-Drift pruefen", "Stale-Audit pruefen", oder via cron alle 6h. metadata: type: skill layer: 0-selbst-beobachter
Skill: heartbeatWorkspace — Workspace-Drift-Erkennung
Wann aktivieren
- Manuell: "Heartbeat Check", "Drift pruefen"
- Automatisch: via /schedule alle 6h
- Beim Session-Start (zusaetzlich zur Init-Routine)
Was es macht (Scans)
Jeder Scan ist read-only und liefert nur Report + Auto-Fix-Vorschlag — niemals Auto-Delete. Scans, deren Voraussetzung im Workspace nicht existiert (z.B. ein L0-Selbst-Beobachter-State-File, ein Trust-Store), werden uebersprungen statt zu failen.
Scan 1: Stale Audit-Files
Glob **/*.audit.md im Workspace.
- Output: Liste mit Pfad + Alter
- Auto-Fix-Vorschlag: "Diese N Audits sind aelter als 3 Tage. Soll ich
cleanup-after-welleaufrufen?"
Scan 2: STATUS.md Frische
Glob **/STATUS.md (Top-Level Projekte).
- Wenn aelter als 14 Tage UND letzter git-Commit am Projekt war juenger: WARNING
- Auto-Fix: "STATUS.md fuer
ist veraltet. Letzte Welle nicht dokumentiert?"
Scan 3: MEMORY.md vs Filesystem-Drift
- Liste alle Memory-Files
- Vergleiche mit MEMORY.md-Index
- Output: Phantom-Eintraege (Index referenziert geloeschte Files), Waisen-Files (Files ohne Index-Eintrag)
Scan 4: Phantom User-Anleitungen
Glob _schriftbuero/User-Anleitungen/ACT-*.md.
- Vergleiche mit INDEX.md falls vorhanden
- Output: Phantom-Refs
Scan 5: Skill-Eval-Drift
Glob ~/.claude/skills/*/.
- Pruefe ob jeder Skill: SKILL.md + eval.json + learnings.md + last-output.md hat
- Output: Skills denen Eval-Files fehlen
Scan 6: Runbook-Mitlern-Drift
Glob _runbooks/*.md (+ Projekte/**/_runbooks/*.md), ohne INDEX.md.
- Fehlende
## Run-LogSektion — Runbook hat den Pflicht-Abschnitt nicht (Grep(?m)^##\s+Run-Log). Haerter: auch## Learningsfehlt. - Stale Run-Log — letzter (oberster) Datums-Eintrag im
## Run-Logist > 45 Tage alt, obwohl das Runbook einen aktiven Bereich betrifft (Projekt-Status AKTIV in CLAUDE.md, oder L2/L4-global). Heuristik, nicht hart — markieren, nicht loeschen. - Header-Drift —
> Klassifikation:oder> Stand:fehlt. - INDEX-Phantom — Runbook nicht in
_runbooks/INDEX.mdreferenziert (bzw. INDEX zeigt auf nicht-existentes Runbook). - Output: Liste Runbook + welcher Mangel. Auto-Fix-Vorschlag: "Run-Log-Sektion nachruesten (Vorlage
_control/templates/runbook-template.md)" bzw. "Runbookwurde seit nicht genutzt-protokolliert — noch aktuell?"
Scan 7: Lesson-Drift (Episodic-Memory-Pattern)
Glob **/_control/audits/*/ (Welle-Ordner). Fuer jede Welle der letzten 7 Tage:
- Fehlende
WELLE-LOG.md— Welle abgeschlossen ohne Episodic-Memory-Eintrag (Pflicht:_control/templates/welle-log-template.md). - WELLE-LOG ohne Lessons-Tabelle —
## Lessons-Sektion fehlt oder ist leer trotz >=5 Tool-Calls (Heuristik aus Audit-File-Anzahl). - Verankerungs-Drift — WELLE-LOG hat Lessons-Tabelle mit "Vorgeschlagene Verankerung", aber im genannten Skill/Runbook/Memory-File ist seit der Welle nichts hinzugekommen (Git-log-Check oder grep nach Welle-ID).
- Output: Liste Welle + Mangel. Auto-Fix-Vorschlag: "WELLE-LOG.md fuer Welle
fehlt — Lesson-Auto-Capture nachholen (Skill cleanup-after-welleSchritt 9+10)" bzw. "Wellehat Lessons vorgeschlagen, aber nicht verankert — Architekt-Review noetig."
Scan 8: Skill-INDEX-Drift
Glob ~/.claude/skills/*/SKILL.md. Vergleiche mit Eintraegen in ~/.claude/skills/INDEX.md.
- Phantom im INDEX — INDEX listet Skill der nicht existiert.
- Waise — Skill existiert ohne INDEX-Eintrag.
- Output: Diff. Auto-Fix-Vorschlag: "INDEX nachpflegen (Layer + Trigger eintragen)".
Scan 9: Lern-Register-Drift
Read _control/lern-register.md (falls vorhanden). Parse Lessons.
- Stale-Lesson — Lesson mit
zuletzt-getroffen> 30 Tage ohne Update / ohne neue Belegung. - Hard-Cap-Verletzung — mehr Lessons aktiv als das definierte Limit (z.B. > 12). Heuristik: zaehle
^\[\d{4}-\d{2}-\d{2}\]\[Treffer. - Kapazitaets-Reserve — < 4 Slots frei. Markieren als Pre-Promote-Warnung.
- Beleg-fehlt — Lesson ohne klare Beleg-Welle / Beleg-Datei-Referenz im Lesson-Text.
- Output: Liste Lesson + Mangel + Vorschlag. Auto-Fix-Vorschlag: "Stale-Lesson archivieren (KILL-Mechanism)" bzw. "Hard-Cap verletzt — User-Konsolidierungs-Entscheidung in OPEN-ITEMS notieren".
Scan 10: CLAUDE-Modul-Drift
Read CLAUDE.md (INDEX) + Glob _control/claude-md/*.md (falls die Doktrin in Module gesplittet ist).
- Phantom-Modul im INDEX — INDEX referenziert Modul-File das nicht existiert.
- Waisen-Modul —
_control/claude-md/XX-*.mdexistiert ohne INDEX-Eintrag. - thinkLikeUser-Pointer-Drift — die
~/.claude/skills/thinkLikeUser/context/*.mdenthalten KEINEN Pointer auf die jeweiligen Modul-Files (grep auf die Modul-Dateinamen). - Modul-Token-Bombe — einzelnes Modul > 12k Tokens (Grenze fuer Sub-Agent-Spawn). Heuristik:
wc -wund*1.3als Tokens-Approx. - INDEX-Token-Bombe — Root-CLAUDE.md > 1.5k Tokens (INDEX soll schlank bleiben).
- Output: Liste Mangel + Vorschlag. Auto-Fix-Vorschlag: "Modul-Phantom: INDEX-Eintrag entfernen oder Modul anlegen" / "Waise: in INDEX referenzieren" / "Pointer-Drift: thinkLikeUser/context/XXX.md nachziehen" / "Modul-Token-Bombe: weiter splitten (User-Entscheidung)".
Scan 11: Trust-Score pro Sub-Agent-Klasse (nur wenn Workspace einen Trust-Store fuehrt)
Read den Trust-Store (EMA-Speicher, z.B. _control/trust-score/trust-store.json) + Glob **/_control/audits/*/WELLE-LOG.md (Welle-Outcomes letzte 30 Tage).
- Trust-Score-Engine: pro Sub-Agent-Klasse (z.B.
cleanup-worker,reviewer,audit-worker,<projekt>-worker) wird EMA gefuehrt:- Initial-Score: 50/100
- PASS-Welle: +alpha * (100 - aktueller Score), alpha=0.2
- FAIL/PARTIAL-Welle: -alpha * aktueller Score, alpha=0.2
- Formel:
new = alpha * outcome + (1-alpha) * old, outcome={0,100}
- Trust-Drift — Score < 35 fuer eine Klasse: Worker-Klasse hat ueberproportional gefailed.
- Trust-Hoch — Score > 80: Klasse zuverlaessig, weniger Reviewer-Hop noetig.
- Output: Tabelle Klasse | Score | Trend | Letzte Welle. Auto-Fix-Vorschlag: "Trust-Drift bei
: spawnStructuredWorker mit verschaerftem Pflicht-Prefix nutzen / Worker-Aufgaben kleiner schneiden / Reviewer-Hop einschalten".
Scan 12: Skill-Health-Score (ruft auditSkillHealth, falls vorhanden)
Berechnet pro Skill ein Health-Score (0-100):
- Recency (last-used aus learnings.md Run-History) — Gewicht 40%
- Success-Rate (PASS vs. FAIL letzte 10 Runs) — Gewicht 30%
- Eval-Quality (durchschnittlicher eval.json-Score) — Gewicht 20%
- Drift-Risk (Pflicht-Files vorhanden?) — Gewicht 10%
Status: >= 80 ACTIVE / 60-79 STABLE / 40-59 WATCH / < 40 DECAY (Konsolidierungs-Kandidat).
Speichert nach ~/.claude/skills/_health/skill-health.json. Output unter "Skill-Health" im Bericht.
Scan 13: Cross-Welle-Pattern-Drift (ruft detectCrossWellePattern, falls vorhanden)
Grept ueber alle **/_control/audits/**/WELLE-LOG.md. Clustert Lessons nach Schluesselwort. Auto-Promotion-Vorschlag wenn:
- Cluster hat >= 3 Welle-Hits
- Span <= 30 Tage
- Score >= 0.5
Output: Liste Cluster + Promotion-Vorschlaege fuer Lern-Register. Architekt-Approval-Pflicht vor Promotion.
Scan 14: Selbst-Beobachter-State-Drift (nur wenn Workspace ein L0-State-File fuehrt)
Read das L0-Selbst-Beobachter-State-File (Root-State mit Trust-Score / Skill-Health / Pattern-Cluster / Welle-Forecast). Pruefungen:
- Stale-Snapshot — Sektion "Aktueller Selbstzustand" aelter als 7 Tage. WARN.
- Trust-Score-Drift — Werte weichen > 10 Punkte ab vom Trust-Store. FIX-VORSCHLAG.
- Wave-Memory-Index-Luecke — Welle ohne State-Eintrag (existiert WELLE-LOG.md aber keine Zeile im State). WARN.
- Hitzegradient-Stale — Cluster mit "(2x belegt)" aber detectCrossWellePattern findet 5 Wellen-Hits. FIX-VORSCHLAG. Auto-Fix-Vorschlag: "State-File update via cleanup-after-welle Schritt 11 nachholen".
Scan 15: Runbook-Doppelungs-Drift
Read alle gleichnamigen Runbooks (global _runbooks/<name>.md + projekt-lokal Projekte/<X>/_runbooks/<name>.md). Pro gedoppelter Name:
- Hash-Vergleich — wenn Inhalt zwischen Doppelungen abweicht: DRIFT-WARNUNG mit Datums-Comparison.
- Doppelungs-Map-Check — Doppelungen aus einer Skill-Scope-Mapping-Datei (falls vorhanden) mit Filesystem abgleichen. Missing-Doppelungen flaggen. Auto-Fix-Vorschlag: "Sync von projekt-lokaler PRIMARY zu globaler oder umgekehrt — Architekt entscheidet welche Richtung".
Scan 16: Pflicht-File-Check pro Projekt
Glob alle aktiven Projekte (Projekte/*/, Projekte/<MultiBrand>/Shops/*/, EXCLUDE privat-gitignorte Pfade). Pro Projekt:
CLAUDE.mdfehlt — Agent-Doku weg, L-Klassifikation unklar -> P1STATUS.mdfehlt — Live-Stand-SSOT weg -> P1README.mdfehlt — User-Eintrittspunkt weg -> P2VISION.mdfehlt — Vision-Stand weg -> P2 (fuer aktive Projekte), N/A fuer Vision-Phase-Sub-Shops Auto-Fix-Vorschlag: "Projekthat Pflicht-Files fehlend. Soll ich Templates anlegen (Pointer-Pattern)?"
Output-Format (Markdown-Bericht)
# Heartbeat-Bericht <YYYY-MM-DD HH:MM>
## Stale Audits (N gefunden)
## Veraltete STATUS.md (M gefunden)
## Memory-Drift (P Phantome, Q Waisen)
## Phantom User-Anleitungen (R gefunden)
## Skill-Eval-Drift (S Skills unvollstaendig)
## Runbook-Mitlern-Drift (T Runbooks: U ohne Run-Log, V stale, W Header/INDEX-Drift)
## Lesson-Drift (X Wellen ohne WELLE-LOG, Y ohne Lessons, Z unverankert)
## Skill-INDEX-Drift (Phantome / Waisen)
## Lern-Register-Drift (stale / Hard-Cap / ohne Beleg)
## CLAUDE-Modul-Drift (Phantome / Waisen / Pointer-Drift / Token-Bombe)
## Trust-Score pro Sub-Agent-Klasse [falls Trust-Store vorhanden]
| Klasse | Score | Trend | Letzte Welle |
## Skill-Health (ACTIVE/STABLE/WATCH/DECAY)
## Pflicht-File-Check (Projekte mit fehlenden Files)
## Auto-Fix-Vorschlaege (Architekt entscheidet)
1. cleanup-after-welle aufrufen
2. STATUS-Update fuer <Projekt> initiieren
3. Memory-Pflege Runbook ausfuehren
4. Runbook-Run-Log-Sektionen nachruesten / veraltete Runbooks ueberarbeiten
5. WELLE-LOG.md fuer offene Wellen nachholen (cleanup-after-welle Schritt 9+10)
6. Skill-INDEX nachpflegen
7. Stale-Lessons aus Lern-Register archivieren (KILL-Mechanism)
8. CLAUDE-Modul-Drift fixen (INDEX / Modul-File / thinkLikeUser-Pointer)
9. Trust-Drift bei <Klasse>: Worker-Aufgaben kleiner schneiden / verschaerften Pflicht-Prefix
Doktrin
- Niemals automatisch loeschen — nur reporten + Vorschlaege
- ASCII (interne Agent-Doku)
- Scans ohne vorhandene Voraussetzung ueberspringen, nicht failen
- Bericht IMMER an gleicher Stelle:
_schriftbuero/Heartbeat/<YYYY-MM-DD-HHMM>.md
Boundaries
- Read-only Scan, keine Edits
- Nicht laenger als 60s laufen (Cron-Friendly)
Voraussetzungen
- Glob/Grep-Tools
- Working Directory = workspace root
- Optional: /schedule fuer Cron