initial: claude code workflow bundle (plan-start, status, handoff, adr)
This commit is contained in:
+15
@@ -0,0 +1,15 @@
|
||||
# macOS
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Editor / IDE
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
# OS / tooling
|
||||
Thumbs.db
|
||||
.Trash-*
|
||||
@@ -0,0 +1,173 @@
|
||||
# Claude Code Workflow — Universal Bundle
|
||||
|
||||
Ein minimaler Satz von vier Skills plus Templates für einen nachvollziehbaren
|
||||
Planungs-, Bau- und Übergabe-Workflow in Claude Code. Ziel: Projektstatus lebt
|
||||
auf der Platte (in `docs/`), nicht im Sitzungskontext — und die Skills sorgen
|
||||
dafür, dass diese Dateien konsistent wachsen statt chaotisch.
|
||||
|
||||
Dieses Bundle ist **rechnerübergreifend portabel**: du klonst / kopierst diesen
|
||||
Ordner auf jede neue Maschine und installierst den globalen Teil mit einem
|
||||
einzigen Kopier- bzw. Symlink-Schritt.
|
||||
|
||||
---
|
||||
|
||||
## Speicherorte auf einen Blick
|
||||
|
||||
Die Skills teilen sich in zwei Ebenen. Wichtig: in diesem Bundle liegt aktuell
|
||||
**nur der globale Teil**. Projektspezifische Skills entstehen pro Projekt direkt
|
||||
im jeweiligen Repo (siehe unten) und gehören nicht hierher, weil sie projekt-
|
||||
spezifischen Kontext tragen.
|
||||
|
||||
| Was | Quelle in diesem Bundle | Ziel auf deinem Rechner | Scope |
|
||||
|---|---|---|---|
|
||||
| Globale Skills (plan-start, status, handoff, adr) | `global-skills/` | `~/.claude/skills/` | maschinenweit, alle Projekte |
|
||||
| Projekt-Wegweiser | wird von `plan-start` erzeugt | `<projekt>/CLAUDE.md` | nur dieses Projekt |
|
||||
| Projekt-Doku | wird von `plan-start` erzeugt | `<projekt>/docs/` | nur dieses Projekt |
|
||||
| Projektspezifische Skills (optional) | — (im Projekt anlegen) | `<projekt>/.claude/skills/` | nur dieses Projekt |
|
||||
|
||||
Die Trennung ist bewusst: alles unter `~/.claude/skills/` ist **Verb** (Prozess,
|
||||
überall gleich), alles unter `<projekt>/` ist **Kontext** (Inhalt, projekt-
|
||||
spezifisch). Skills im Projekt-Repo werden mitcommittet und sind Teil der
|
||||
Dokumentation.
|
||||
|
||||
---
|
||||
|
||||
## Installation (pro Rechner, einmalig)
|
||||
|
||||
### Option A — symlinken (empfohlen)
|
||||
|
||||
Wenn du dieses Bundle per Git versionierst und auf mehreren Rechnern spiegelst,
|
||||
sind Symlinks der saubere Weg. Änderungen werden zentral gepflegt, jeder
|
||||
Rechner zieht nach `git pull` automatisch mit.
|
||||
|
||||
```bash
|
||||
# einmalig anlegen
|
||||
mkdir -p ~/.claude/skills
|
||||
|
||||
# für jeden Skill einen Symlink — Pfad auf dein geklontes Bundle anpassen
|
||||
ln -s "$PWD/global-skills/plan-start" ~/.claude/skills/plan-start
|
||||
ln -s "$PWD/global-skills/status" ~/.claude/skills/status
|
||||
ln -s "$PWD/global-skills/handoff" ~/.claude/skills/handoff
|
||||
ln -s "$PWD/global-skills/adr" ~/.claude/skills/adr
|
||||
```
|
||||
|
||||
### Option B — kopieren
|
||||
|
||||
Wenn du lieber unabhängige Kopien willst (z. B. weil du pro Rechner abweichend
|
||||
tunen möchtest):
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.claude/skills
|
||||
cp -r global-skills/plan-start ~/.claude/skills/
|
||||
cp -r global-skills/status ~/.claude/skills/
|
||||
cp -r global-skills/handoff ~/.claude/skills/
|
||||
cp -r global-skills/adr ~/.claude/skills/
|
||||
```
|
||||
|
||||
### Prüfen
|
||||
|
||||
Nach Install sollte in Claude Code die Skill-Liste die vier Namen enthalten.
|
||||
Grobe Kontrolle auf der Shell:
|
||||
|
||||
```bash
|
||||
ls ~/.claude/skills/
|
||||
# plan-start status handoff adr
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Die vier Skills im Überblick
|
||||
|
||||
| Skill | Phase | Was er tut |
|
||||
|---|---|---|
|
||||
| `plan-start` | Projektstart | Legt `CLAUDE.md`, `docs/`-Struktur und erste Dateien nach Template an. Einmal pro Projekt. |
|
||||
| `status` | Wiedereinstieg | Liest `docs/90-status.md` + letztes Session-Log, fasst in 5–10 Zeilen zusammen. Dein „Wo stehen wir?"-Befehl. |
|
||||
| `handoff` | Sessionende | Fragt drei kurze Reflexionsfragen, schreibt Session-Log nach `docs/sessions/`, aktualisiert `docs/90-status.md`. |
|
||||
| `adr` | nach Architektur-Entscheidung | Legt nummerierten ADR nach `docs/30-decisions/` an. Kontext, Entscheidung, Konsequenzen, Alternativen. |
|
||||
|
||||
Nicht dabei (bewusst): `/debug-log` und `/concept-lock`. Die baust du nach zwei,
|
||||
drei Wochen Praxis — dann weißt du, wie sie konkret aussehen müssen. Alles
|
||||
andere wäre hypothetisch.
|
||||
|
||||
---
|
||||
|
||||
## Was `plan-start` im Projekt erzeugt
|
||||
|
||||
```
|
||||
<projekt>/
|
||||
├── CLAUDE.md # Wegweiser, verweist auf docs/90-status.md
|
||||
├── .claude/
|
||||
│ └── skills/ # leer — hier landen später projektspezifische Skills
|
||||
└── docs/
|
||||
├── 00-overview.md # Zweck, Ziele, Nicht-Ziele
|
||||
├── 10-plan.md # Phasen, Milestones, aktueller Fokus
|
||||
├── 20-architecture.md # Stack, Entscheidungen in Kurzform
|
||||
├── 30-decisions/ # ADRs, einer pro Datei, nummeriert
|
||||
├── 40-workflows/ # Deploy-, Backup-, Debug-Prozeduren
|
||||
├── 90-status.md # Single Source of Truth: aktueller Stand
|
||||
└── sessions/ # Session-Logs chronologisch, YYYY-MM-DD-<slug>.md
|
||||
```
|
||||
|
||||
Die Nummerierung ist kein Selbstzweck — sie sortiert alphabetisch in der
|
||||
Lese-Reihenfolge, in der eine frische Claude-Code-Instanz die Dateien beim
|
||||
Scannen wahrnimmt, und gibt dir visuelle Hierarchie im Editor.
|
||||
`90-status.md` steht bewusst ganz unten: die eine Datei, die du immer
|
||||
aktualisierst und die jede neue Session zuerst liest.
|
||||
|
||||
---
|
||||
|
||||
## Projektspezifische Skills (optional, pro Repo)
|
||||
|
||||
Wenn du in einem konkreten Projekt merkst, dass du immer wieder denselben
|
||||
projektspezifischen Handgriff ausführst (z. B. „Deploy-Pipeline prüfen",
|
||||
„Testdaten regenerieren"), lege ihn als Skill in diesem Repo an:
|
||||
|
||||
```
|
||||
<projekt>/.claude/skills/<skill-name>/SKILL.md
|
||||
```
|
||||
|
||||
Commit mit. Damit ist der Skill Teil der Projekt-Doku — und andere Rechner /
|
||||
Mitwirkende haben ihn automatisch.
|
||||
|
||||
---
|
||||
|
||||
## Konventionen, die das Ganze tragen
|
||||
|
||||
- **Sprache**: Prosa auf Deutsch, Code / Pfade / Kommandos / Skill-Namen auf
|
||||
Englisch. Das gilt in allen Templates und Skills konsistent.
|
||||
- **Single Source of Truth**: `docs/90-status.md`. Kein anderer Ort beschreibt
|
||||
„wo wir gerade stehen".
|
||||
- **ADRs sind append-only**: einmal geschrieben, nur noch durch neue ADRs
|
||||
ersetzt (`Supersedes: 0003`). Nie rückwirkend umschreiben — das killt die
|
||||
Nachvollziehbarkeit.
|
||||
- **Session-Logs sind verpflichtend**: `handoff` am Ende jeder relevanten
|
||||
Session. Wer das überspringt, hat nach drei Sessions wieder das alte Problem
|
||||
— nur mit mehr Dateien drumherum.
|
||||
- **CLAUDE.md bleibt schlank** (~50–80 Zeilen): Navigation, nicht Enzyklopädie.
|
||||
Sie verweist auf `docs/`, sie enthält keine Inhalte, die dort hingehören.
|
||||
|
||||
---
|
||||
|
||||
## Erste Schritte in einem neuen Projekt
|
||||
|
||||
```bash
|
||||
cd ~/projekte/mein-neues-ding
|
||||
# in Claude Code:
|
||||
# skill: plan-start "Kurzbeschreibung der Idee"
|
||||
```
|
||||
|
||||
`plan-start` fragt ein paar Basics ab (Name, Zweck, Stack-Hinweise),
|
||||
generiert die Ordnerstruktur und schreibt eine erste `CLAUDE.md` sowie
|
||||
`docs/00-overview.md`, `docs/10-plan.md` und `docs/90-status.md`.
|
||||
|
||||
Am Ende der Session: `skill: handoff`.
|
||||
Beim nächsten Einstieg: `skill: status`.
|
||||
|
||||
Das ist der komplette Kreislauf.
|
||||
|
||||
---
|
||||
|
||||
## Lizenz / Umgang
|
||||
|
||||
Internes Tooling, keine formelle Lizenz. Passe die Templates an deinen Stil
|
||||
an — sie sind als Ausgangspunkt gedacht, nicht als Dogma.
|
||||
@@ -0,0 +1,98 @@
|
||||
---
|
||||
name: adr
|
||||
description: Legt unter docs/30-decisions/ einen neuen Architecture Decision Record an, automatisch hochnummeriert, nach festem Template (Context, Decision, Consequences, Alternatives). Ergänzt gleichzeitig den Abschnitt "Laufende ADRs" in docs/20-architecture.md.
|
||||
disable-model-invocation: true
|
||||
argument-hint: "<titel der entscheidung, z. b.: 'pocketbase statt supabase'>"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Edit
|
||||
- Bash
|
||||
---
|
||||
|
||||
# adr — Architecture Decision Record
|
||||
|
||||
## Wann der Skill läuft
|
||||
|
||||
Immer dann, wenn eine **Entscheidung getroffen wird, die später Kopfschmerzen
|
||||
kostet, wenn sie niemand dokumentiert**. Typische Beispiele:
|
||||
|
||||
- Wahl einer Technologie gegen Alternativen („PocketBase statt Supabase").
|
||||
- Struktur-Entscheidung, die konkurrierende Optionen hatte („Monorepo statt
|
||||
mehrerer Repos", „Events statt direktem Call").
|
||||
- Betriebs-Entscheidung mit Tragweite („Caddy als Reverse-Proxy", „tägliches
|
||||
Snapshot-Backup auf Hetzner Storage Box").
|
||||
|
||||
**Nicht** für triviale Entscheidungen („wir benennen die Variable `user_id`
|
||||
statt `uid`") — da ist der ADR mehr Last als Nutzen.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
Existiert `docs/30-decisions/`? Wenn nicht → meldet „Kein initialisiertes
|
||||
Projekt. Erst `plan-start` ausführen." Abbrechen.
|
||||
|
||||
## Was der Skill tut
|
||||
|
||||
### Schritt 1 — Titel bestimmen
|
||||
|
||||
- Titel kommt aus `$ARGUMENTS`. Wenn leer: freundlich nach einem Titel fragen
|
||||
(eine Zeile), nicht weiter spekulieren.
|
||||
- Slug aus Titel ableiten: lowercase, Leerzeichen → Bindestrich, Sonderzeichen
|
||||
raus. Beispiel: `PocketBase statt Supabase` → `pocketbase-statt-supabase`.
|
||||
|
||||
### Schritt 2 — Nummer vergeben
|
||||
|
||||
- `ls docs/30-decisions/ | grep -E '^[0-9]{4}-'` listet bestehende ADRs.
|
||||
- Höchste bestehende Nummer + 1, auf 4 Stellen gepaddet (`0001`, `0042`).
|
||||
- Erste ADR → `0001`.
|
||||
|
||||
### Schritt 3 — Datei anlegen
|
||||
|
||||
- Dateiname: `docs/30-decisions/<NNNN>-<slug>.md`.
|
||||
- Inhalt: aus `templates/adr.md.tmpl`, Platzhalter füllen:
|
||||
|
||||
| Platzhalter | Quelle |
|
||||
|---|---|
|
||||
| `{{ADR_NUMBER}}` | die vergebene Nummer, 4-stellig |
|
||||
| `{{ADR_TITLE}}` | der Titel |
|
||||
| `{{ADR_DATE}}` | `date +%F` |
|
||||
| `{{ADR_AUTHOR}}` | `git config user.name`, sonst leer |
|
||||
|
||||
**Status** ist initial `proposed`. Der Nutzer wechselt ihn später auf
|
||||
`accepted`, wenn die Entscheidung gelebt wird — oder auf
|
||||
`superseded by NNNN`, wenn ein späterer ADR sie ablöst.
|
||||
|
||||
### Schritt 4 — Abschnitt „Laufende ADRs" in 20-architecture.md ergänzen
|
||||
|
||||
Am Ende von `docs/20-architecture.md` steht ein Abschnitt `## Laufende ADRs`.
|
||||
Dort wird eine Zeile nach folgendem Muster angehängt:
|
||||
|
||||
```markdown
|
||||
- [{{ADR_NUMBER}}](30-decisions/{{ADR_NUMBER}}-{{slug}}.md) — {{ADR_TITLE}} (`proposed`, {{ADR_DATE}})
|
||||
```
|
||||
|
||||
Wenn dort noch der Platzhalter-Text `_(Noch keine ADRs. ...)_` steht: diesen
|
||||
entfernen und die erste Zeile einfügen.
|
||||
|
||||
### Schritt 5 — Kurze Bestätigung
|
||||
|
||||
Dem Nutzer den neuen Pfad und die Nummer zurückmelden, und einen knappen
|
||||
Hinweis: „Datei ist als `proposed` markiert. Wenn die Entscheidung steht: auf
|
||||
`accepted` setzen."
|
||||
|
||||
## Harte Regeln
|
||||
|
||||
- **Nie einen bestehenden ADR überschreiben.** Nummerierung ist append-only.
|
||||
- **Nie den Status eines anderen ADR ändern.** Wenn der neue ADR einen alten
|
||||
ablöst: das trägt der Nutzer selbst am alten ADR nach (im neuen ADR sollte
|
||||
er es im Header `Supersedes: NNNN` notieren — aber auch das macht der
|
||||
Nutzer, der Skill verdrahtet das nicht automatisch, weil das Fehlerquelle
|
||||
ist).
|
||||
- **Keine Entscheidung erfinden.** Der Skill legt nur das Gerüst an.
|
||||
Context / Decision / Consequences füllt der Nutzer. Der Skill darf ruhig
|
||||
Vorschläge machen, wenn im Chatkontext genug Information da ist — aber er
|
||||
schreibt nichts in die Datei, was der Nutzer nicht bestätigt hat.
|
||||
|
||||
## Template
|
||||
|
||||
Siehe `./templates/adr.md.tmpl`.
|
||||
@@ -0,0 +1,59 @@
|
||||
# ADR {{ADR_NUMBER}} — {{ADR_TITLE}}
|
||||
|
||||
**Status:** proposed
|
||||
**Datum:** {{ADR_DATE}}
|
||||
**Autor:** {{ADR_AUTHOR}}
|
||||
<!-- Bei Ablösung eines früheren ADR: Supersedes: NNNN -->
|
||||
|
||||
## Context
|
||||
|
||||
<!-- Die Ausgangslage. Welches Problem / welche Anforderung stellt sich?
|
||||
Welche Randbedingungen (Budget, Zeit, Team-Know-how, Betriebs-Kontext)
|
||||
schränken die Wahl ein? Dieser Abschnitt soll in einem Jahr noch
|
||||
verständlich sein, ohne dass jemand den Projekt-Kontext präsent hat. -->
|
||||
|
||||
TBD
|
||||
|
||||
## Decision
|
||||
|
||||
<!-- Was wurde entschieden? In einem klaren Satz. Danach ggf. 2–5 Sätze zur
|
||||
Konkretisierung (Version, Variante, Konfiguration). -->
|
||||
|
||||
TBD
|
||||
|
||||
## Consequences
|
||||
|
||||
<!-- Was folgt aus der Entscheidung?
|
||||
- Positiv: was wird dadurch einfacher / möglich?
|
||||
- Negativ: welche Kosten / Einschränkungen / Risiken erkauft man sich?
|
||||
- Neutral / strukturell: was ändert sich im Ablauf, auch wenn's weder
|
||||
gut noch schlecht ist?
|
||||
-->
|
||||
|
||||
### Positiv
|
||||
|
||||
- TBD
|
||||
|
||||
### Negativ
|
||||
|
||||
- TBD
|
||||
|
||||
### Neutral / strukturell
|
||||
|
||||
- TBD
|
||||
|
||||
## Alternatives considered
|
||||
|
||||
<!-- Die Hauptalternativen, die erwogen wurden, jeweils mit einem Satz warum
|
||||
sie NICHT gewählt wurden. Das ist der Teil, der in zwei Jahren am
|
||||
wertvollsten ist: „Wir haben X bewusst verworfen, weil …". -->
|
||||
|
||||
- **Alternative A:** TBD — verworfen, weil TBD.
|
||||
- **Alternative B:** TBD — verworfen, weil TBD.
|
||||
|
||||
## Rückfallplan
|
||||
|
||||
<!-- Falls diese Entscheidung sich später als falsch erweist: wie kommt man
|
||||
raus? Wie hoch ist der Umstellungsaufwand grob? -->
|
||||
|
||||
TBD
|
||||
@@ -0,0 +1,120 @@
|
||||
---
|
||||
name: handoff
|
||||
description: Schreibt am Ende einer Arbeitssession einen Session-Log nach docs/sessions/YYYY-MM-DD-<slug>.md und aktualisiert docs/90-status.md. Erzwingt eine kurze Reflexion des Nutzers (drei Fragen), bevor geschrieben wird — bewusst NICHT autonom aus dem Sitzungskontext ableiten.
|
||||
disable-model-invocation: true
|
||||
argument-hint: "<optional: kurzer slug für den log-dateinamen>"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Edit
|
||||
- Bash
|
||||
---
|
||||
|
||||
# handoff — Sessionende
|
||||
|
||||
## Warum es diesen Skill überhaupt gibt
|
||||
|
||||
Die Disziplin des ganzen Workflows liegt nicht in den anderen Skills, sondern
|
||||
in diesem hier. Wer `handoff` am Sessionende überspringt, hat nach drei
|
||||
Sessions wieder das alte Problem: Kontext verdunstet, „wo war ich stehen-
|
||||
geblieben?" ist Rateraten.
|
||||
|
||||
Und: `handoff` fragt **explizit nach**, statt autonom zusammenzufassen. Das ist
|
||||
gegen die LLM-Intuition („kann ich doch selbst"), aber genau der Punkt.
|
||||
Automatisch generierte Session-Logs sind nach drei Wochen formal korrekt und
|
||||
inhaltlich beliebig. Die fünf Sekunden Reflexion pro Session sind die
|
||||
Investition, die das System überhaupt tragbar macht.
|
||||
|
||||
## Wann der Skill läuft
|
||||
|
||||
Auf expliziten Aufruf am Ende einer Session. Vorher prüfen: existiert
|
||||
`docs/90-status.md`? Wenn nicht → melden „Kein initialisiertes Projekt", abbrechen.
|
||||
|
||||
## Was der Skill tut
|
||||
|
||||
### Schritt 1 — Drei Fragen an den Nutzer
|
||||
|
||||
Nacheinander, nicht als Liste. Auf jede Antwort kurz warten, nicht selbst
|
||||
vorschlagen. Die Fragen sind bewusst stumpf und weit, damit der Nutzer
|
||||
reflektiert:
|
||||
|
||||
1. **„Was hast du in dieser Session konkret erledigt?"**
|
||||
(Faktisch. Nicht „wir haben über X gesprochen", sondern „Datei Y angelegt,
|
||||
Test Z bestanden, Entscheidung A getroffen".)
|
||||
|
||||
2. **„Was hast du angefangen und nicht beendet?"**
|
||||
(Die Dinge, die sonst vergessen werden. Halbe Edits, offene Branches,
|
||||
angetestete Hypothesen ohne Ergebnis.)
|
||||
|
||||
3. **„Was sind die nächsten 1–3 konkreten Schritte, wenn du das Projekt
|
||||
wieder aufnimmst?"**
|
||||
(Klein, prüfbar. Nicht „Feature X bauen", sondern „Funktion `parse_header`
|
||||
um Content-Type erweitern, dann Test dafür schreiben".)
|
||||
|
||||
Zusätzlich darf der Skill **nur wenn nötig** nachfragen:
|
||||
|
||||
- Gab es eine größere Entscheidung, die einen ADR verdient? (Falls ja: den
|
||||
Nutzer an `adr <titel>` erinnern — **nicht** selbst anlegen.)
|
||||
- Ist der aktuelle Fokus in `docs/10-plan.md` noch korrekt? (Wenn nein: Notiz
|
||||
machen, dass der Nutzer das beim nächsten Mal anpassen sollte. Nicht selbst
|
||||
editieren.)
|
||||
|
||||
### Schritt 2 — Slug und Dateiname bauen
|
||||
|
||||
- Datum: `date +%F` → `YYYY-MM-DD`.
|
||||
- Slug: aus `$ARGUMENTS`, sonst aus der Antwort auf Frage 1 automatisch
|
||||
ableiten (2–4 Wörter, lowercase, Bindestriche, keine Sonderzeichen).
|
||||
- Dateiname: `docs/sessions/YYYY-MM-DD-<slug>.md`.
|
||||
- Kollision vermeiden: wenn die Datei existiert, suffix `-2`, `-3`, … anhängen.
|
||||
|
||||
### Schritt 3 — Session-Log schreiben
|
||||
|
||||
Nach dem Template `templates/session-log.md.tmpl` (liegt im Skill-Ordner).
|
||||
Platzhalter füllen:
|
||||
|
||||
| Platzhalter | Quelle |
|
||||
|---|---|
|
||||
| `{{SESSION_DATE}}` | aktuelles Datum `YYYY-MM-DD` |
|
||||
| `{{SESSION_SLUG}}` | der Slug von oben |
|
||||
| `{{WHAT_DONE}}` | Antwort auf Frage 1, als Bulletpoints |
|
||||
| `{{WHAT_OPEN}}` | Antwort auf Frage 2, als Bulletpoints |
|
||||
| `{{NEXT_STEPS}}` | Antwort auf Frage 3, als nummerierte Liste |
|
||||
| `{{DURATION}}` | optional, wenn der Nutzer ihn nennt, sonst weglassen |
|
||||
|
||||
### Schritt 4 — `docs/90-status.md` aktualisieren
|
||||
|
||||
Keine komplette Neuschreibung. Gezielt:
|
||||
|
||||
- Zeitstempel „Letzte Aktualisierung" auf heute setzen.
|
||||
- Abschnitt **„Aktueller Stand"** ersetzen durch eine Destillation aus Frage 1
|
||||
+ Frage 2 (2–4 Sätze).
|
||||
- Abschnitt **„Nächste Schritte"** ersetzen durch die Antwort auf Frage 3.
|
||||
- Abschnitt **„Offene Entscheidungen / Blocker"**: nur anfassen, wenn der
|
||||
Nutzer im Gespräch explizit eine Entscheidung oder einen Blocker erwähnt
|
||||
hat. Sonst unverändert lassen.
|
||||
- Abschnitt **„Zuletzt geändert durch"**: auf
|
||||
`handoff — <slug> am <datum>` setzen.
|
||||
|
||||
### Schritt 5 — Kurze Bestätigung
|
||||
|
||||
Dem Nutzer in 2–3 Zeilen zurückmelden: welche Datei wurde geschrieben, was
|
||||
wurde in `90-status.md` aktualisiert. Keine Zusammenfassung der Zusammenfassung
|
||||
— der Nutzer weiß, was er gerade gesagt hat.
|
||||
|
||||
Optional, wenn relevant: Hinweis auf einen anzulegenden ADR, falls in Schritt 1
|
||||
eine Architektur-Entscheidung genannt wurde.
|
||||
|
||||
## Harte Regeln
|
||||
|
||||
- **Nicht automatisch zusammenfassen** ohne die drei Fragen zu stellen. Auch
|
||||
dann nicht, wenn der Sitzungsverlauf scheinbar alles klar macht. Die Fragen
|
||||
sind Pflicht.
|
||||
- **Nichts in `30-decisions/` schreiben.** Dafür gibt's `adr`. Der Nutzer wird
|
||||
daran erinnert, aber er entscheidet.
|
||||
- **Nie `git commit`.** Der Nutzer entscheidet, ob und wann.
|
||||
- **Niemals einen bestehenden Session-Log überschreiben.** Bei Kollision
|
||||
Suffix anhängen.
|
||||
|
||||
## Template
|
||||
|
||||
Siehe `./templates/session-log.md.tmpl`.
|
||||
@@ -0,0 +1,21 @@
|
||||
# Session {{SESSION_DATE}} — {{SESSION_SLUG}}
|
||||
|
||||
**Datum:** {{SESSION_DATE}}
|
||||
**Dauer:** {{DURATION}}
|
||||
|
||||
## Was wurde erledigt
|
||||
|
||||
{{WHAT_DONE}}
|
||||
|
||||
## Was ist offen / angefangen
|
||||
|
||||
{{WHAT_OPEN}}
|
||||
|
||||
## Nächste Schritte
|
||||
|
||||
{{NEXT_STEPS}}
|
||||
|
||||
## Notizen / Überraschungen
|
||||
|
||||
<!-- Optional: unerwartete Erkenntnisse, Sackgassen, Dinge, die später noch
|
||||
mal aufschlagen könnten. Wenn nichts — Abschnitt weglassen. -->
|
||||
@@ -0,0 +1,97 @@
|
||||
---
|
||||
name: plan-start
|
||||
description: Legt in einem neuen oder leeren Projektordner die standardisierte Dokumentations- und Wegweiser-Struktur an (CLAUDE.md, docs/ mit 00-overview, 10-plan, 20-architecture, 90-status, 30-decisions/, 40-workflows/, sessions/). Nutzt die Templates unter templates/ dieses Skills. Soll nur auf explizite Nutzeranforderung laufen, nie autonom.
|
||||
disable-model-invocation: true
|
||||
argument-hint: "<kurzer projekttitel oder eine zeile zur idee>"
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Write
|
||||
- Edit
|
||||
- Bash
|
||||
---
|
||||
|
||||
# plan-start — Projekt-Scaffolding
|
||||
|
||||
## Wann der Skill läuft
|
||||
|
||||
Ausschließlich auf expliziten Aufruf, in einem **neuen oder noch leeren
|
||||
Projektordner**. Der Skill legt eine Grundstruktur an und darf vorhandene
|
||||
Dateien nicht überschreiben.
|
||||
|
||||
## Was der Skill tut
|
||||
|
||||
1. Prüft den aktuellen Arbeitsordner. Wenn dort bereits `CLAUDE.md` oder
|
||||
`docs/` existiert → **abbrechen** und dem Nutzer melden: „Hier liegt schon
|
||||
ein initialisiertes Projekt. `plan-start` ist idempotent nicht — du willst
|
||||
vermutlich `status` oder direkt in `docs/` editieren."
|
||||
2. Stellt dem Nutzer vor dem Schreiben **kurz und konkret** diese Fragen
|
||||
(eine nach der anderen, nicht als Sammel-Liste):
|
||||
- **Projektname** (wird als Titel in CLAUDE.md und Headings verwendet)
|
||||
- **Ein-Satz-Zweck** („Wofür ist das Projekt da?")
|
||||
- **Aktuelle Phase** (Planung / Build / Wartung — Default: Planung)
|
||||
- **Stack in Stichworten** (z. B. „Python + FastAPI + PocketBase",
|
||||
„NixOS + Caddy + Docker Compose" — darf auch leer sein, wenn noch unklar)
|
||||
3. Legt folgende Struktur an — relativ zum aktuellen Arbeitsordner:
|
||||
|
||||
```
|
||||
./CLAUDE.md
|
||||
./.claude/skills/.gitkeep
|
||||
./docs/00-overview.md
|
||||
./docs/10-plan.md
|
||||
./docs/20-architecture.md
|
||||
./docs/90-status.md
|
||||
./docs/30-decisions/README.md
|
||||
./docs/40-workflows/README.md
|
||||
./docs/sessions/README.md
|
||||
```
|
||||
|
||||
4. Befüllt jede Datei aus dem passenden Template unter
|
||||
`./templates/` dieses Skills. Platzhalter werden wie folgt ersetzt:
|
||||
|
||||
| Platzhalter | Quelle |
|
||||
|---|---|
|
||||
| `{{PROJECT_NAME}}` | aus Frage 1 |
|
||||
| `{{PROJECT_PURPOSE}}` | aus Frage 2 |
|
||||
| `{{PROJECT_PHASE}}` | aus Frage 3 |
|
||||
| `{{PROJECT_STACK}}` | aus Frage 4, leer → `TBD` |
|
||||
| `{{TODAY_ISO}}` | heutiges Datum als `YYYY-MM-DD` via `date +%F` |
|
||||
| `{{USER_NAME}}` | optional: `git config user.name`, sonst leer |
|
||||
|
||||
5. Erzeugt `.claude/skills/.gitkeep` als leere Datei, damit das
|
||||
projektspezifische Skill-Verzeichnis unter Versionskontrolle bleibt, auch
|
||||
solange es leer ist.
|
||||
|
||||
6. Gibt am Ende eine **kurze Bestandsaufnahme** in 3–5 Zeilen aus: was wurde
|
||||
angelegt, was als Nächstes sinnvoll ist (Empfehlung: `docs/00-overview.md`
|
||||
und `docs/10-plan.md` durchgehen und konkretisieren, dann `handoff`).
|
||||
|
||||
## Harte Regeln
|
||||
|
||||
- **Nie** Dateien überschreiben. Wenn auch nur eine der Zieldateien existiert:
|
||||
komplett abbrechen und den Nutzer informieren.
|
||||
- **Nie** in ein nicht-leeres Git-Repo schreiben, ohne vorher zu warnen. Ein
|
||||
Repo mit einer `.git/`, aber ohne `CLAUDE.md` und ohne `docs/` ist in Ordnung
|
||||
— das heißt der Nutzer hat bereits `git init` gemacht, das ist der Normalfall.
|
||||
- **Nie** `git commit` selbstständig ausführen. Der Nutzer entscheidet, was
|
||||
committet wird.
|
||||
|
||||
## Tonfall in den erzeugten Templates
|
||||
|
||||
- Prosa auf Deutsch, kurz, konkret.
|
||||
- Code, Pfade, Kommandos auf Englisch.
|
||||
- Platzhalter-Abschnitte sind mit `TBD` oder einem sichtbaren HTML-Kommentar
|
||||
`<!-- TODO: ... -->` markiert, damit der Nutzer sofort sieht, was noch gefüllt
|
||||
werden muss.
|
||||
|
||||
## Templates
|
||||
|
||||
Siehe `./templates/` im Skill-Ordner:
|
||||
|
||||
- `CLAUDE.md.tmpl`
|
||||
- `00-overview.md.tmpl`
|
||||
- `10-plan.md.tmpl`
|
||||
- `20-architecture.md.tmpl`
|
||||
- `90-status.md.tmpl`
|
||||
- `30-decisions.README.md.tmpl`
|
||||
- `40-workflows.README.md.tmpl`
|
||||
- `sessions.README.md.tmpl`
|
||||
@@ -0,0 +1,49 @@
|
||||
# 00 — Overview
|
||||
|
||||
**Projekt:** {{PROJECT_NAME}}
|
||||
**Angelegt:** {{TODAY_ISO}}
|
||||
|
||||
## Zweck in einem Satz
|
||||
|
||||
{{PROJECT_PURPOSE}}
|
||||
|
||||
## Warum überhaupt
|
||||
|
||||
<!-- TODO: In 3–6 Sätzen die Motivation. Welches Problem löst das Projekt?
|
||||
Für wen? Was war der Auslöser? Dieses Feld altert am schnellsten — trotzdem
|
||||
wichtig, weil es Monate später erklärt, warum das Ding existiert. -->
|
||||
|
||||
## Ziele
|
||||
|
||||
<!-- TODO: 3–5 konkrete, prüfbare Ziele. Nicht „schneller sein", sondern
|
||||
„Antwortzeit < 200 ms bei p95". -->
|
||||
|
||||
- TBD
|
||||
- TBD
|
||||
- TBD
|
||||
|
||||
## Nicht-Ziele
|
||||
|
||||
<!-- TODO: Explizit festhalten, was das Projekt NICHT sein will. Spart später
|
||||
viele Diskussionen. Beispiel: „Kein Multi-Tenant", „Keine Mobile-App",
|
||||
„Keine Echtzeitfähigkeit im ersten Release". -->
|
||||
|
||||
- TBD
|
||||
- TBD
|
||||
|
||||
## Stakeholder / Betroffene
|
||||
|
||||
<!-- TODO: Wer nutzt das? Wer zahlt? Wer operiert es? Wer wird wach, wenn es
|
||||
bricht? -->
|
||||
|
||||
- Nutzer: TBD
|
||||
- Betrieb: TBD
|
||||
- Auftraggeber: TBD
|
||||
|
||||
## Erfolgskriterien
|
||||
|
||||
<!-- TODO: Woran messen wir „fertig" und „gut"? Idealerweise eine Kombination
|
||||
aus quantitativen Kennzahlen und qualitativen Aussagen („Kristian kann
|
||||
ohne Nachfrage deployen"). -->
|
||||
|
||||
- TBD
|
||||
@@ -0,0 +1,40 @@
|
||||
# 10 — Plan
|
||||
|
||||
**Letzte Aktualisierung:** {{TODAY_ISO}}
|
||||
|
||||
Der Plan ist ein **lebendes Dokument**. Er darf sich ändern — jede nicht-
|
||||
triviale Änderung sollte ein kurzer Eintrag in `docs/sessions/` erklären,
|
||||
grobe Kursänderungen einen eigenen ADR in `docs/30-decisions/` bekommen.
|
||||
|
||||
## Phasen-Übersicht
|
||||
|
||||
| Phase | Status | Ziel | Zeitfenster |
|
||||
|---|---|---|---|
|
||||
| 1 — Konzept & Planung | in progress | Overview, Plan, erste Architektur-Skizze | {{TODAY_ISO}} – TBD |
|
||||
| 2 — Build / Prototype | pending | TBD | TBD |
|
||||
| 3 — Härtung / Launch | pending | TBD | TBD |
|
||||
| 4 — Betrieb / Wartung | pending | laufend | — |
|
||||
|
||||
## Aktueller Fokus
|
||||
|
||||
<!-- TODO: Der eine oder zwei Punkte, an denen jetzt konkret gearbeitet wird.
|
||||
Nicht die große Vision — der nächste Schritt. -->
|
||||
|
||||
- TBD
|
||||
|
||||
## Milestones
|
||||
|
||||
<!-- TODO: 3–7 grobe Marker, nicht mehr. Jeder Milestone sollte demonstrier-
|
||||
bar sein: „X funktioniert, Y ist dokumentiert". -->
|
||||
|
||||
- [ ] M1 — TBD
|
||||
- [ ] M2 — TBD
|
||||
- [ ] M3 — TBD
|
||||
|
||||
## Offene Fragen / Risiken
|
||||
|
||||
<!-- TODO: Was ist noch unklar? Wo liegt das größte Risiko? Explizit festhalten
|
||||
— das sind die Dinge, die sonst beim nächsten Wiedereinstieg vergessen
|
||||
werden. -->
|
||||
|
||||
- TBD
|
||||
@@ -0,0 +1,55 @@
|
||||
# 20 — Architecture
|
||||
|
||||
**Letzte Aktualisierung:** {{TODAY_ISO}}
|
||||
|
||||
Diese Datei ist **kein Ort für detaillierte Begründungen** — die leben in
|
||||
`docs/30-decisions/` als ADRs. Hier steht die kompakte Architektur-Sicht, so
|
||||
wie sie aktuell gilt. Wenn du hier etwas änderst, schreibst du idealerweise
|
||||
einen ADR, der erklärt warum.
|
||||
|
||||
## Stack
|
||||
|
||||
**Kurz:** {{PROJECT_STACK}}
|
||||
|
||||
<!-- TODO: Aufdröseln nach Schicht. Beispiel:
|
||||
- Runtime: Python 3.12, uv
|
||||
- Web-Framework: FastAPI
|
||||
- Persistenz: PocketBase (SQLite-basiert)
|
||||
- Reverse-Proxy: Caddy
|
||||
- Deployment: systemd-Unit auf NixOS
|
||||
-->
|
||||
|
||||
- Runtime: TBD
|
||||
- Framework: TBD
|
||||
- Persistenz: TBD
|
||||
- Infrastruktur: TBD
|
||||
|
||||
## Komponenten
|
||||
|
||||
<!-- TODO: Kurze Liste der Hauptkomponenten mit je 1–2 Sätzen Zweck. Ein
|
||||
simples ASCII-Diagramm oder Mermaid-Block ist oft Gold wert. -->
|
||||
|
||||
```
|
||||
<!-- TODO: Komponenten-Skizze -->
|
||||
```
|
||||
|
||||
## Datenfluss
|
||||
|
||||
<!-- TODO: Wie fließen Daten durch das System? Eingänge, Transformationen,
|
||||
Ausgänge, Persistenzpunkte. Ein Absatz reicht am Anfang. -->
|
||||
|
||||
TBD
|
||||
|
||||
## Externe Abhängigkeiten
|
||||
|
||||
<!-- TODO: APIs, SaaS, Hardware, die wir nicht selbst betreiben. Jede Zeile:
|
||||
Name, Zweck, was passiert, wenn sie ausfällt. -->
|
||||
|
||||
- TBD
|
||||
|
||||
## Laufende ADRs
|
||||
|
||||
<!-- Dieser Abschnitt wird durch den `adr`-Skill gepflegt: er ergänzt die Liste
|
||||
unten beim Anlegen eines neuen ADR. -->
|
||||
|
||||
_(Noch keine ADRs. `adr <titel>` ausführen, um einen anzulegen.)_
|
||||
@@ -0,0 +1,32 @@
|
||||
# 30 — Decisions (ADRs)
|
||||
|
||||
Hier leben **Architecture Decision Records** — je eine Markdown-Datei pro
|
||||
Entscheidung, nummeriert. Neue ADRs werden mit dem `adr`-Skill angelegt, der
|
||||
automatisch hochzählt und das Template anwendet.
|
||||
|
||||
## Regeln
|
||||
|
||||
- **Append-only.** Eine einmal getroffene Entscheidung wird nicht rückwirkend
|
||||
umgeschrieben. Stattdessen wird sie durch einen neuen ADR ersetzt, der
|
||||
`Supersedes: <nummer>` im Header trägt. Der alte ADR bekommt dann den Status
|
||||
`superseded by <neue-nummer>`.
|
||||
- **Ein ADR pro Entscheidung.** Nicht „ADR für Q2" oder „ADR für Auth-Stack
|
||||
insgesamt", sondern „ADR für: PocketBase statt Supabase".
|
||||
- **Begründung vor Details.** Der „Warum"-Teil ist der wertvolle. Wenn du in
|
||||
sechs Monaten auf den ADR zurückkommst, willst du nicht die Spec lesen,
|
||||
sondern verstehen, warum diese Wahl damals sinnvoll erschien.
|
||||
|
||||
## Namensschema
|
||||
|
||||
```
|
||||
NNNN-kurzer-slug.md
|
||||
```
|
||||
|
||||
Beispiel: `0001-pocketbase-statt-supabase.md`, `0002-caddy-als-reverse-proxy.md`.
|
||||
|
||||
## Status-Werte
|
||||
|
||||
- `proposed` — wird diskutiert, aber noch nicht gelebt.
|
||||
- `accepted` — gilt, Code / Betrieb folgt dem.
|
||||
- `superseded by NNNN` — überholt durch einen neueren ADR.
|
||||
- `deprecated` — gilt nicht mehr, aber es gibt (noch) keinen Nachfolger.
|
||||
@@ -0,0 +1,41 @@
|
||||
# 40 — Workflows
|
||||
|
||||
Operative Prozeduren: Deploy, Backup, Restore, Debug-Playbooks, Incident-
|
||||
Response. Jede Datei beschreibt **eine Prozedur**, die man zur Not um 3 Uhr
|
||||
morgens halbwach abarbeiten kann.
|
||||
|
||||
## Was hier hineingehört
|
||||
|
||||
- `deploy.md` — wie wird released?
|
||||
- `backup.md` — was wird gesichert, wohin, wie oft, wie restoren?
|
||||
- `debug-<thema>.md` — strukturierte Playbooks für wiederkehrende Debug-Situa-
|
||||
tionen (z. B. „Mail kommt nicht raus", „DB antwortet langsam").
|
||||
- `incident-response.md` — erste Schritte bei Ausfall.
|
||||
|
||||
## Format
|
||||
|
||||
Jede Datei folgt einem einfachen Schema:
|
||||
|
||||
```markdown
|
||||
# <Titel>
|
||||
|
||||
**Wann anwenden:** <konkreter Auslöser>
|
||||
**Voraussetzungen:** <was muss verfügbar / installiert sein>
|
||||
|
||||
## Ablauf
|
||||
|
||||
1. Schritt
|
||||
2. Schritt
|
||||
3. Schritt
|
||||
|
||||
## Verifikation
|
||||
|
||||
Wie erkenne ich, dass der Prozess erfolgreich war?
|
||||
|
||||
## Wenn es schiefgeht
|
||||
|
||||
Fallback, Rollback, wen ansprechen.
|
||||
```
|
||||
|
||||
Keine Poesie. Kopierbare Kommandos und harte Fakten — Workflows sind für den
|
||||
schlechten Tag geschrieben, nicht für den guten.
|
||||
@@ -0,0 +1,37 @@
|
||||
# 90 — Status
|
||||
|
||||
> **Single Source of Truth** für „wo stehen wir gerade?".
|
||||
> Wird durch den `handoff`-Skill am Sessionende aktualisiert.
|
||||
> Manuelle Edits sind erlaubt, aber bitte den Zeitstempel oben anpassen.
|
||||
|
||||
**Letzte Aktualisierung:** {{TODAY_ISO}} (via `plan-start`)
|
||||
**Aktuelle Phase:** {{PROJECT_PHASE}}
|
||||
|
||||
---
|
||||
|
||||
## Aktueller Stand
|
||||
|
||||
<!-- 2–5 Sätze: was funktioniert, was ist der Status des aktuellen Fokus? -->
|
||||
|
||||
Projekt gerade initialisiert. Grundstruktur steht, inhaltliche Ausarbeitung
|
||||
von `docs/00-overview.md` und `docs/10-plan.md` ist der nächste Schritt.
|
||||
|
||||
## Nächste Schritte (priorisiert)
|
||||
|
||||
<!-- 3–5 konkrete, kleine Schritte. Keine Jahresziele. -->
|
||||
|
||||
1. `docs/00-overview.md` ausfüllen — Zweck, Ziele, Nicht-Ziele konkretisieren.
|
||||
2. `docs/10-plan.md` ausfüllen — Phasen und Milestones grob setzen.
|
||||
3. Erste Architektur-Entscheidungen als ADRs festhalten (`adr <titel>`).
|
||||
|
||||
## Offene Entscheidungen / Blocker
|
||||
|
||||
<!-- Was wartet auf einen Entschluss? Was blockiert den Fortschritt? -->
|
||||
|
||||
_Keine offenen Blocker. Noch keine Entscheidungen getroffen._
|
||||
|
||||
## Zuletzt geändert durch
|
||||
|
||||
<!-- handoff trägt hier Session-Slug und Datum ein. -->
|
||||
|
||||
`plan-start` am {{TODAY_ISO}}
|
||||
@@ -0,0 +1,45 @@
|
||||
# {{PROJECT_NAME}}
|
||||
|
||||
{{PROJECT_PURPOSE}}
|
||||
|
||||
**Aktuelle Phase:** {{PROJECT_PHASE}}
|
||||
**Stack (grob):** {{PROJECT_STACK}}
|
||||
|
||||
---
|
||||
|
||||
## Wegweiser für Claude Code
|
||||
|
||||
Der Projektstatus lebt in `docs/`, **nicht** in dieser Datei. Diese `CLAUDE.md`
|
||||
ist bewusst kurz und dient nur der Navigation.
|
||||
|
||||
**Bevor du arbeitest, lies in dieser Reihenfolge:**
|
||||
|
||||
1. `docs/90-status.md` — wo wir gerade stehen. Single Source of Truth.
|
||||
2. `docs/10-plan.md` — aktueller Plan, Phasen, offene Milestones.
|
||||
3. Den neuesten Eintrag in `docs/sessions/` — was in der letzten Session
|
||||
passiert ist und was als Nächstes dran war.
|
||||
4. Bei Architektur-Fragen: die relevanten ADRs in `docs/30-decisions/`.
|
||||
|
||||
## Workflow-Skills (global installiert)
|
||||
|
||||
- `status` — Wiedereinstieg nach Pause: liest 90-status + letztes Session-Log.
|
||||
- `handoff` — am Sessionende: Session-Log schreiben, Status aktualisieren.
|
||||
- `adr <titel>` — neue Architektur-Entscheidung festhalten.
|
||||
- `plan-start` — wurde bereits ausgeführt, um dieses Projekt zu scaffolden.
|
||||
|
||||
## Wichtigste Konventionen
|
||||
|
||||
- **Prosa auf Deutsch, Code / Kommandos auf Englisch.**
|
||||
- **ADRs sind append-only.** Ersetzt werden sie durch neue ADRs mit
|
||||
`Supersedes: <nummer>`, nicht durch Umschreiben der alten.
|
||||
- **`docs/90-status.md` ist die einzige Datei, die den aktuellen Stand
|
||||
beschreibt.** Wenn es widersprüchliche Angaben gibt, gewinnt 90-status.
|
||||
- **Session-Logs sind verpflichtend.** Wer `handoff` überspringt, hat nach drei
|
||||
Sessions wieder keinen Überblick — nur mit mehr Dateien drumherum.
|
||||
|
||||
<!-- TODO: Die drei bis fünf wichtigsten projektspezifischen Kommandos hier
|
||||
ergänzen, sobald der Stack steht. Beispiele:
|
||||
- `make dev` — lokale Entwicklung starten
|
||||
- `pytest -x` — Tests bis zum ersten Fehler
|
||||
- `docker compose up` — Infrastruktur lokal hochfahren
|
||||
-->
|
||||
@@ -0,0 +1,28 @@
|
||||
# Sessions
|
||||
|
||||
Chronologische Session-Logs. Je Session eine Datei, Format:
|
||||
|
||||
```
|
||||
YYYY-MM-DD-<kurzer-slug>.md
|
||||
```
|
||||
|
||||
Beispiel: `2026-04-17-mail-unbound-fix.md`.
|
||||
|
||||
Werden vom `handoff`-Skill am Sessionende geschrieben. Manuelles Editieren ist
|
||||
erlaubt — wer hier schreibt, trägt die aktuelle Wahrheit über das, was passiert
|
||||
ist.
|
||||
|
||||
## Was in einen Session-Log gehört
|
||||
|
||||
- **Was wurde gemacht?** Faktisch, knapp, mit Dateipfaden wo relevant.
|
||||
- **Was ist offen?** Was wurde angefangen und nicht beendet?
|
||||
- **Nächste Schritte.** 1–3 konkrete Punkte für die nächste Session.
|
||||
- **Überraschungen / Erkenntnisse.** Was hat nicht so funktioniert, wie erwartet?
|
||||
|
||||
## Was NICHT hineingehört
|
||||
|
||||
- Vollständige Code-Listings. Dafür gibt's den Commit.
|
||||
- Begründungen für Architektur-Entscheidungen. Dafür gibt's ADRs.
|
||||
- Aktueller Gesamtstand. Dafür gibt's `docs/90-status.md`.
|
||||
|
||||
Session-Logs sind **Protokoll**, nicht **Referenz**.
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
name: status
|
||||
description: Fasst den aktuellen Projektstand in 5–10 Zeilen zusammen. Liest docs/90-status.md und den jüngsten Eintrag in docs/sessions/ und destilliert daraus "Wo stehen wir, was ist als Nächstes, was ist offen". Der Wiedereinstiegs-Befehl nach einer Pause.
|
||||
disable-model-invocation: true
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
---
|
||||
|
||||
# status — Wiedereinstieg
|
||||
|
||||
## Wann der Skill läuft
|
||||
|
||||
Auf expliziten Aufruf, typischerweise am Anfang einer neuen Session — bevor
|
||||
Claude oder Nutzer irgendwas anderes tun. Zweck: in unter 30 Sekunden einen
|
||||
verlässlichen Lagebericht bekommen, ohne `git log` oder Datei-Archäologie.
|
||||
|
||||
## Was der Skill tut
|
||||
|
||||
1. Prüft, ob `docs/90-status.md` existiert.
|
||||
- Wenn **nein**: meldet „Hier scheint noch keine `plan-start`-Struktur zu
|
||||
liegen. Entweder ist das kein initialisiertes Projekt, oder du bist im
|
||||
falschen Ordner." Abbrechen.
|
||||
2. Liest `docs/90-status.md`.
|
||||
3. Listet `docs/sessions/*.md` (ohne `README.md`) und öffnet die **chronologisch
|
||||
jüngste** Datei. Sortierung: die Dateinamen beginnen mit `YYYY-MM-DD`, also
|
||||
reicht `ls -1 | sort -r | head -n 1`.
|
||||
4. Liest ggf. `docs/10-plan.md`, aber **nur den Abschnitt „Aktueller Fokus"** —
|
||||
nicht das ganze Dokument, um den Kontext klein zu halten.
|
||||
5. Destilliert daraus eine **kompakte Ausgabe** in genau dieser Struktur:
|
||||
|
||||
```
|
||||
📍 Stand ({{TODAY_ISO}})
|
||||
|
||||
Wo wir stehen:
|
||||
<2–3 Sätze, direkt aus 90-status.md abgeleitet>
|
||||
|
||||
Aktueller Fokus:
|
||||
<1–2 Zeilen aus 10-plan.md / „Aktueller Fokus">
|
||||
|
||||
Letzte Session (<Dateiname ohne Extension>):
|
||||
<1–2 Sätze, was passiert ist und was offen blieb>
|
||||
|
||||
Offene Blocker / Entscheidungen:
|
||||
<aus 90-status.md — wenn keine, dann "keine">
|
||||
|
||||
Empfehlung für heute:
|
||||
<eine einzige konkrete nächste Aktion>
|
||||
```
|
||||
|
||||
6. Gibt diese Ausgabe als reinen Text aus. **Keine** weitere Konversation,
|
||||
keine Rückfragen, kein „Soll ich …?".
|
||||
|
||||
## Harte Regeln
|
||||
|
||||
- **Nicht zusammenfassen, was nicht da ist.** Wenn `90-status.md` veraltet ist
|
||||
(z. B. letzte Änderung älter als das letzte Session-Log), am Ende der Ausgabe
|
||||
einen knappen Warnhinweis: „⚠️ 90-status ist älter als das letzte Session-Log
|
||||
— vermutlich wurde beim letzten Handoff nicht aktualisiert."
|
||||
- **Nicht kreativ werden.** Keine Interpretation, keine „ich würde empfehlen,
|
||||
Feature X zu bauen" — der Skill referiert, er plant nicht.
|
||||
- **Keine Schreib-Operationen.** Dieser Skill liest ausschließlich.
|
||||
|
||||
## Wenn der Nutzer dann weiterarbeiten will
|
||||
|
||||
Nach der Ausgabe ist der Skill fertig. Die nächste Handlung steuert der
|
||||
Nutzer — typischerweise durch eine konkrete Frage („los, weiter mit Punkt 2
|
||||
aus dem Fokus") oder einen anderen Skill-Aufruf.
|
||||
Reference in New Issue
Block a user