Was macht Continuous Learning v2.1 - Instinktbasierte Architektur?
Ein fortschrittliches Lernsystem, das deine Claude Code-Sitzungen durch atomare "Instinkte" in wiederverwendbares Wissen verwandelt – kleine gelernte Verhaltensweisen mit Konfidenzbewertung.
v2.1 fügt projektbezogene Instinkte hinzu – React-Muster bleiben in deinem React-Projekt, Python-Konventionen bleiben in deinem Python-Projekt, und universelle Muster (wie "Eingaben immer validieren") werden global geteilt.
Wann aktivieren
- Einrichten des automatischen Lernens aus Claude Code-Sitzungen
- Konfigurieren der instinktbasierten Verhaltensextraktion über Hooks
- Anpassen der Konfidenzschwellen für gelernte Verhaltensweisen
- Überprüfen, Exportieren oder Importieren von Instinkt-Bibliotheken
- Weiterentwicklung von Instinkten zu vollständigen Skills, Befehlen oder Agenten
- Verwalten von projektbezogenen vs. globalen Instinkten
- Befördern von Instinkten vom Projekt- in den globalen Bereich
Was ist neu in v2.1
| Funktion | v2.0 | v2.1 |
|---|---|---|
| Speicher | Global (~/.claude/homunculus/) | Projektbezogen (${XDG_DATA_HOME:-~/.local/share}/ecc-homunculus/projects/<hash>/) |
| Bereich | Alle Instinkte überall anwendbar | Projektbezogen + global |
| Erkennung | Keine | Git-Remote-URL / Repo-Pfad |
| Beförderung | Nicht verfügbar | Projekt → global, wenn in 2+ Projekten gesehen |
| Befehle | 4 (status/evolve/export/import) | 6 (+promote/projects) |
| Projektübergreifend | Vermischungsrisiko | Standardmäßig isoliert |
Was ist neu in v2 (gegenüber v1)
| Funktion | v1 | v2 |
|---|---|---|
| Beobachtung | Stop-Hook (Sitzungsende) | PreToolUse/PostToolUse (100% zuverlässig) |
| Analyse | Hauptkontext | Hintergrundagent (Haiku) |
| Granularität | Ganze Skills | Atomare "Instinkte" |
| Konfidenz | Keine | 0,3-0,9 gewichtet |
| Weiterentwicklung | Direkt zu Skill | Instinkte -> Cluster -> Skill/Befehl/Agent |
| Teilen | Keine | Instinkte exportieren/importieren |
Das Instinkt-Modell
Ein Instinkt ist ein kleines gelerntes Verhalten:
---
id: prefer-functional-style
trigger: "beim Schreiben neuer Funktionen"
confidence: 0.7
domain: "code-style"
source: "session-observation"
scope: project
project_id: "a1b2c3d4e5f6"
project_name: "my-react-app"
---
# Bevorzuge funktionalen Stil
## Aktion
Verwende funktionale Muster anstelle von Klassen, wenn angemessen.
## Belege
- 5 Instanzen der Bevorzugung funktionaler Muster beobachtet
- Benutzer korrigierte klassenbasierten Ansatz zu funktional am 2025-01-15
Eigenschaften:
- Atomar – ein Auslöser, eine Aktion
- Konfidenzgewichtet – 0,3 = vorläufig, 0,9 = nahezu sicher
- Domain-getaggt – code-style, testing, git, debugging, workflow usw.
- Belegbasiert – zeichnet auf, welche Beobachtungen es erstellt haben
- Bereichsbewusst –
project(Standard) oderglobal
Wie es funktioniert
Sitzungsaktivität (in einem Git-Repo)
|
| Hooks erfassen Prompts + Tool-Nutzung (100% zuverlässig)
| + erkennen Projektkontext (Git-Remote / Repo-Pfad)
v
+---------------------------------------------+
| projects/<project-hash>/observations.jsonl |
| (Prompts, Tool-Aufrufe, Ergebnisse, Projekt) |
+---------------------------------------------+
|
| Beobachter-Agent liest (Hintergrund, Haiku)
v
+---------------------------------------------+
| MUSTERERKENNUNG |
| * Benutzerkorrekturen -> Instinkt |
| * Fehlerbehebungen -> Instinkt |
| * Wiederholte Arbeitsabläufe -> Instinkt |
| * Bereichsentscheidung: Projekt oder global? |
+---------------------------------------------+
|
| Erstellt/aktualisiert
v
+---------------------------------------------+
| projects/<project-hash>/instincts/personal/ |
| * prefer-functional.yaml (0.7) [project] |
| * use-react-hooks.yaml (0.9) [project] |
+---------------------------------------------+
| instincts/personal/ (GLOBAL) |
| * always-validate-input.yaml (0.85) [global]|
| * grep-before-edit.yaml (0.6) [global] |
+---------------------------------------------+
|
| /evolve clustert + /promote
v
+---------------------------------------------+
| projects/<hash>/evolved/ (projektbezogen) |
| evolved/ (global) |
| * commands/new-feature.md |
| * skills/testing-workflow.md |
| * agents/refactor-specialist.md |
+---------------------------------------------+
Projekterkennung
Das System erkennt automatisch dein aktuelles Projekt:
CLAUDE_PROJECT_DIR-Umgebungsvariable (höchste Priorität) – wird als explizite Überschreibung verwendet, auch wenn das Verzeichnis kein Git-Repo ist (gehasht über den absoluten Pfad)git remote get-url origin– gehasht, um eine portable Projekt-ID zu erstellen (gleiches Repo auf verschiedenen Maschinen erhält die gleiche ID)git rev-parse --show-toplevel– Fallback mit Repo-Pfad (maschinenspezifisch)- Globaler Fallback – wenn kein Projekt erkannt wird, gehen Instinkte in den globalen Bereich
Jedes Projekt erhält eine 12-stellige Hash-ID (z.B. a1b2c3d4e5f6). Eine Registrierungsdatei unter ${XDG_DATA_HOME:-~/.local/share}/ecc-homunculus/projects.json bildet IDs auf lesbare Namen ab.
Datenverzeichnis
Continuous-learning-v2 speichert Beobachterdaten außerhalb von ~/.claude, damit Claude Codes Schutz vor sensiblen Pfaden nicht das Schreiben von Instinkten im Hintergrund blockiert:
CLV2_HOMUNCULUS_DIR, wenn auf einen absoluten Pfad gesetzt$XDG_DATA_HOME/ecc-homunculus$HOME/.local/share/ecc-homunculus
Bestehende Benutzer mit Daten unter ~/.claude/homunculus können einmalig migrieren:
bash skills/continuous-learning-v2/scripts/migrate-homunculus.sh
Schnellstart
1. Beobachtungs-Hooks aktivieren
Wenn als Plugin installiert (empfohlen):
Es ist kein zusätzlicher settings.json-Hook-Block erforderlich. Claude Code v2.1+ lädt das Plugin hooks/hooks.json automatisch, und observe.sh ist dort bereits registriert.
Wenn du zuvor observe.sh in ~/.claude/settings.json kopiert hast, entferne diesen doppelten PreToolUse/PostToolUse-Block. Das Duplizieren des Plugin-Hooks führt zur doppelten Ausführung und zu ${CLAUDE_PLUGIN_ROOT}-Auflösungsfehlern, da diese Variable nur innerhalb von plugin-verwalteten hooks/hooks.json-Einträgen verfügbar ist.
Wenn manuell in ~/.claude/skills installiert, füge dies zu deiner ~/.claude/settings.json hinzu:
{
"hooks": {
"PreToolUse": [{
"matcher": "*",
"hooks": [{
"type": "command",
"command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh"
}]
}],
"PostToolUse": [{
"matcher": "*",
"hooks": [{
"type": "command",
"command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh"
}]
}]
}
}
2. Verzeichnisstruktur initialisieren
Das System erstellt Verzeichnisse automatisch bei der ersten Nutzung, du kannst sie aber auch manuell erstellen:
# Globale Verzeichnisse
mkdir -p "${XDG_DATA_HOME:-$HOME/.local/share}/ecc-homunculus"/{instincts/{personal,inherited},evolved/{agents,skills,commands},projects}
# Projektverzeichnisse werden automatisch erstellt, wenn der Hook zum ersten Mal in einem Git-Repo läuft
3. Die Instinkt-Befehle verwenden
/instinct-status # Zeige gelernte Instinkte (Projekt + global)
/evolve # Gruppiere verwandte Instinkte zu Skills/Befehlen
/instinct-export # Exportiere Instinkte in eine Datei
/instinct-import # Importiere Instinkte von anderen
/promote # Befördere Projekt-Instinkte in den globalen Bereich
/projects # Liste alle bekannten Projekte und ihre Instinktanzahlen auf
Befehle
| Befehl | Beschreibung |
|---|---|
/instinct-status | Zeige alle Instinkte (projektbezogen + global) mit Konfidenz |
/evolve | Gruppiere verwandte Instinkte zu Skills/Befehlen, schlage Beförderungen vor |
/instinct-export | Exportiere Instinkte (filterbar nach Bereich/Domain) |
/instinct-import <datei> | Importiere Instinkte mit Bereichskontrolle |
/promote [id] | Befördere Projekt-Instinkte in den globalen Bereich |
/projects | Liste alle bekannten Projekte und ihre Instinktanzahlen auf |
Konfiguration
Bearbeite config.json, um den Hintergrundbeobachter zu steuern:
{
"version": "2.1",
"observer": {
"enabled": false,
"run_interval_minutes": 5,
"min_observations_to_analyze": 20
}
}
| Schlüssel | Standard | Beschreibung |
|---|---|---|
observer.enabled | false | Aktiviere den Hintergrundbeobachter-Agenten |
observer.run_interval_minutes | 5 | Wie oft der Beobachter Beobachtungen analysiert |
observer.min_observations_to_analyze | 20 | Minimale Anzahl von Beobachtungen vor der Analyse |
Anderes Verhalten (Beobachtungserfassung, Instinktschwellen, Projektbereichszuweisung, Beförderungskriterien) wird über Code-Standardwerte in instinct-cli.py und observe.sh konfiguriert.
Plattformunterstützung für den Beobachter
Der Hintergrundbeobachter benötigt WSL2, Linux oder macOS. Auf nativen Windows
(Git Bash / MSYS2) startet er und meldet Erfolg, aber der Prozess wird beendet,
wenn der auslösende Hook beendet wird und sein Job-Objekt geschlossen wird,
also läuft dort nie eine Analyse – das Setzen von observer.enabled: true ist
dort praktisch ein No-Op (siehe Issue #2489).
observe.sh erkennt dies beim nächsten Hook-Aufruf und schreibt eine
erklärende Warnung in observer-start.log, sobald der Beobachter mehrmals
hintereinander nicht überlebt hat.
| Umgebungsvariable | Standard | Beschreibung |
|---|---|---|
ECC_OBSERVER_NOSURVIVE_WARN_AFTER | 3 | Aufeinanderfolgende Nicht-Überlebensfälle, bevor die Warnung protokolliert wird |
Dateistruktur
${XDG_DATA_HOME:-~/.local/share}/ecc-homunculus/
+-- identity.json # Dein Profil, technisches Niveau
+-- projects.json # Registry: Projekt-Hash -> Name/Pfad/Remote
+-- observations.jsonl # Globale Beobachtungen (Fallback)
+-- instincts/
| +-- personal/ # Global automatisch gelernte Instinkte
| +-- inherited/ # Global importierte Instinkte
+-- evolved/
| +-- agents/ # Global generierte Agenten
| +-- skills/ # Global generierte Skills
| +-- commands/ # Global generierte Befehle
+-- projects/
+-- a1b2c3d4e5f6/ # Projekt-Hash (aus Git-Remote-URL)
| +-- project.json # Pro-Projekt-Metadaten-Spiegelung (id/name/root/remote)
| +-- observations.jsonl
| +-- observations.archive/
| +-- instincts/
| | +-- personal/ # Projektspezifisch automatisch gelernt
| | +-- inherited/ # Projektspezifisch importiert
| +-- evolved/
| +-- skills/
| +-- commands/
| +-- agents/
+-- f6e5d4c3b2a1/ # Ein weiteres Projekt
+-- ...
Leitfaden zur Bereichsentscheidung
| Mustertyp | Bereich | Beispiele |
|---|---|---|
| Sprach-/Framework-Konventionen | project | "React-Hooks verwenden", "Django-REST-Muster befolgen" |
| Dateistruktur-Präferenzen | project | "Tests in __tests__/", "Komponenten in src/components/" |
| Codestil | project | "Funktionalen Stil verwenden", "Dataclasses bevorzugen" |
| Fehlerbehandlungsstrategien | project | "Result-Typ für Fehler verwenden" |
| Sicherheitspraktiken | global | "Benutzereingaben validieren", "SQL bereinigen" |
| Allgemeine Best Practices | global | "Tests zuerst schreiben", "Fehler immer behandeln" |
| Tool-Workflow-Präferenzen | global | "Vor dem Bearbeiten grep", "Vor dem Schreiben lesen" |
| Git-Praktiken | global | "Konventionelle Commits", "Kleine fokussierte Commits" |
Instinkt-Beförderung (Projekt -> Global)
Wenn derselbe Instinkt in mehreren Projekten mit hoher Konfidenz auftritt, ist er ein Kandidat für die Beförderung in den globalen Bereich.
Auto-Beförderungskriterien:
- Gleiche Instinkt-ID in 2+ Projekten
- Durchschnittliche Konfidenz >= 0.8
So beförderst du:
# Einen bestimmten Instinkt befördern
python3 instinct-cli.py promote prefer-explicit-errors
# Alle qualifizierenden Instinkte automatisch befördern
python3 instinct-cli.py promote
# Vorschau ohne Änderungen
python3 instinct-cli.py promote --dry-run
Der Befehl /evolve schlägt ebenfalls Beförderungskandidaten vor.
Konfidenzbewertung
Die Konfidenz entwickelt sich im Laufe der Zeit:
| Wert | Bedeutung | Verhalten |
|---|---|---|
| 0.3 | Vorläufig | Vorgeschlagen, aber nicht erzwungen |
| 0.5 | Moderat | Angewendet, wenn relevant |
| 0.7 | Stark | Automatisch zur Anwendung genehmigt |
| 0.9 | Nahezu sicher | Kernverhalten |
Konfidenz steigt, wenn:
- Das Muster wiederholt beobachtet wird
- Der Benutzer das vorgeschlagene Verhalten nicht korrigiert
- Ähnliche Instinkte aus anderen Quellen übereinstimmen
Konfidenz sinkt, wenn:
- Der Benutzer das Verhalten explizit korrigiert
- Das Muster über längere Zeiträume nicht beobachtet wird
- Widersprüchliche Beweise auftauchen
Warum Hooks statt Skills zur Beobachtung?
"v1 verließ sich auf Skills zur Beobachtung. Skills sind probabilistisch – sie feuern ~50-80% der Zeit basierend auf Claude's Urteilsvermögen."
Hooks feuern 100% der Zeit, deterministisch. Das bedeutet:
- Jeder Tool-Aufruf wird beobachtet
- Keine Muster werden übersehen
- Das Lernen ist umfassend
Abwärtskompatibilität
v2.1 ist vollständig kompatibel mit v2.0 und v1:
- Vorhandene globale Instinkte können mit
scripts/migrate-homunculus.shvon~/.claude/homunculus/instincts/migriert werden - Vorhandene Skills aus
~/.claude/skills/learned/von v1 funktionieren weiterhin - Stop-Hook läuft weiterhin (speist jetzt aber auch in v2 ein)
- Schrittweise Migration: beide parallel ausführen
Datenschutz
- Beobachtungen bleiben lokal auf deinem Rechner
- Projektbezogene Instinkte sind pro Projekt isoliert
- Nur Instinkte (Muster) können exportiert werden – nicht die rohen Beobachtungen
- Es werden keine tatsächlichen Code- oder Gesprächsinhalte geteilt
- Du kontrollierst, was exportiert und befördert wird
Verwandtes
- ECC-Tools GitHub App – Generiere Instinkte aus der Repository-Historie
- Homunculus – Community-Projekt, das die v2-Instinkt-Architektur inspirierte (atomare Beobachtungen, Konfidenzbewertung, Instinkt-Evolutions-Pipeline)
- Der Longform-Leitfaden – Abschnitt zum kontinuierlichen Lernen
Instinktbasiertes Lernen: Claude deine Muster beibringen, ein Projekt nach dem anderen.