Datenstruktur
~/.claude/ck/
├── projects.json ↠Pfad → {name, contextDir, lastUpdated}
└── contexts/<name>/
├── context.json ↠QUELLE DER WAHRHEIT (strukturiertes JSON, v2)
└── CONTEXT.md ↠generierte Ansicht — nicht von Hand bearbeiten
Befehle
/ck:init — Ein Projekt registrieren
node "$HOME/.claude/skills/ck/commands/init.mjs"
Das Skript gibt JSON mit automatisch erkannten Informationen aus. Präsentiere es als Bestätigungsentwurf:
Folgendes wurde gefunden — bestätige oder bearbeite:
Projekt: <Name>
Beschreibung: <Beschreibung>
Stack: <Stack>
Ziel: <Ziel>
Nicht-Tuns: <Einschränkungen oder "Keine">
Repo: <Repo oder "kein">
Warte auf die Zustimmung des Benutzers. Wende alle Änderungen an. Leite dann das bestätigte JSON an save.mjs --init weiter:
echo '<bestätigtes-json>' | node "$HOME/.claude/skills/ck/commands/save.mjs" --init
Schema des bestätigten JSON: {"name":"...","path":"...","description":"...","stack":["..."],"goal":"...","constraints":["..."],"repo":"..." }
/ck:save — Sitzungszustand speichern
Dies ist der einzige Befehl, der eine LLM-Analyse erfordert. Analysiere das aktuelle Gespräch:
summary: ein Satz, max. 10 Wörter, was erreicht wurdeleftOff: woran aktiv gearbeitet wurde (spezifische Datei/Funktion/Fehler)nextSteps: geordnetes Array mit konkreten nächsten Schrittendecisions: Array von{what, why}für Entscheidungen dieser Sitzungblockers: Array aktueller Blocker (leeres Array, wenn keine)goal: aktualisierte Zielzeichenkette nur wenn es sich in dieser Sitzung geändert hat, sonst auslassen
Zeige dem Benutzer eine Entwurfszusammenfassung: "Sitzung: '<summary>' — speichern? (ja / bearbeiten)"
Warte auf Bestätigung. Leite dann an save.mjs weiter:
echo '<json>' | node "$HOME/.claude/skills/ck/commands/save.mjs"
JSON-Schema (exakt): {"summary":"...","leftOff":"...","nextSteps":["..."],"decisions":[{"what":"...","why":"..."}],"blockers":["..."]}
Gib die stdout-Bestätigung des Skripts wortwörtlich aus.
/ck:resume [Name|Nummer] — Ausführliches Briefing
node "$HOME/.claude/skills/ck/commands/resume.mjs" [Argument]
Gib die Ausgabe wortwörtlich aus. Frage dann: "Hier weitermachen? Oder hat sich etwas geändert?"
Wenn der Benutzer Änderungen meldet → führe sofort /ck:save aus.
/ck:info [Name|Nummer] — Kurze Übersicht
node "$HOME/.claude/skills/ck/commands/info.mjs" [Argument]
Gib die Ausgabe wortwörtlich aus. Keine Rückfrage.
/ck:list — Portfolio-Ansicht
node "$HOME/.claude/skills/ck/commands/list.mjs"
Gib die Ausgabe wortwörtlich aus. Wenn der Benutzer mit einer Nummer oder einem Namen antwortet → führe /ck:resume aus.
/ck:forget [Name|Nummer] — Ein Projekt entfernen
Löse zuerst den Projektnamen auf (führe bei Bedarf /ck:list aus).
Frage: "Dies wird den Kontext für '' dauerhaft löschen. Bist du sicher? (ja/nein)"
Wenn ja:
node "$HOME/.claude/skills/ck/commands/forget.mjs" [Name]
Gib die Bestätigung wortwörtlich aus.
/ck:migrate — v1-Daten in v2 konvertieren
node "$HOME/.claude/skills/ck/commands/migrate.mjs"
Führe zuerst einen Probelauf durch:
node "$HOME/.claude/skills/ck/commands/migrate.mjs" --dry-run
Gib die Ausgabe wortwörtlich aus. Migriert alle v1 CONTEXT.md + meta.json-Dateien in v2 context.json.
Originale werden als meta.json.v1-backup gesichert — es wird nichts gelöscht.
SessionStart-Hook
Der Hook unter ~/.claude/skills/ck/hooks/session-start.mjs muss in ~/.claude/settings.json registriert werden, um den Projektkontext automatisch beim Start einer Sitzung zu laden:
{
"hooks": {
"SessionStart": [
{ "hooks": [{ "type": "command", "command": "node \"~/.claude/skills/ck/hooks/session-start.mjs\"" }] }
]
}
}
Der Hook injiziert ~100 Tokens pro Sitzung (kompakte 5-zeilige Zusammenfassung). Er erkennt auch ungespeicherte Sitzungen, Git-Aktivitäten seit dem letzten Speichern und Zielkonflikte mit CLAUDE.md.
Regeln
- Erweitere
~in Bash-Aufrufen immer zu$HOME. - Befehle sind groß-/kleinschreibungsunabhängig:
/CK:SAVE,/ck:save,/Ck:Savefunktionieren alle. - Wenn ein Skript mit Exit-Code 1 endet, gib seine stdout als Fehlermeldung aus.
- Bearbeite
context.jsonoderCONTEXT.mdniemals direkt — verwende immer die Skripte. - Wenn
projects.jsonfehlerhaft ist, informiere den Benutzer und biete an, es auf{}zurückzusetzen.