kimal3 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,30 +1,30 @@
1
- {
2
- "name": "kimal3",
3
- "version": "0.5.0",
4
- "description": "Trag deine KI-Projekte dort ein, wo sie entstehen: im Terminal. · Log your AI projects where they happen: in the terminal.",
5
- "type": "module",
6
- "bin": {
7
- "kimal3": "dist/kimal3.js"
8
- },
9
- "files": [
10
- "dist",
11
- "skill",
12
- "claude-plugins",
13
- "coach",
14
- "zeigen",
15
- "README.md"
16
- ],
17
- "engines": {
18
- "node": ">=20"
19
- },
20
- "scripts": {
21
- "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json",
22
- "prepublishOnly": "npm run build"
23
- },
24
- "keywords": [
25
- "kimal3",
26
- "cli"
27
- ],
28
- "homepage": "https://app.kimal3.de/pro",
29
- "license": "SEE LICENSE IN README.md"
30
- }
1
+ {
2
+ "name": "kimal3",
3
+ "version": "0.6.0",
4
+ "description": "Trag deine KI-Projekte dort ein, wo sie entstehen: im Terminal. · Log your AI projects where they happen: in the terminal.",
5
+ "type": "module",
6
+ "bin": {
7
+ "kimal3": "dist/kimal3.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "skill",
12
+ "claude-plugins",
13
+ "coach",
14
+ "zeigen",
15
+ "README.md"
16
+ ],
17
+ "engines": {
18
+ "node": ">=20"
19
+ },
20
+ "scripts": {
21
+ "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json",
22
+ "prepublishOnly": "npm run build"
23
+ },
24
+ "keywords": [
25
+ "kimal3",
26
+ "cli"
27
+ ],
28
+ "homepage": "https://app.kimal3.de/pro",
29
+ "license": "SEE LICENSE IN README.md"
30
+ }
package/skill/SKILL.md CHANGED
@@ -13,7 +13,7 @@ description: Projekte ins kimal3-Erfolgsprofil eintragen oder auflisten, Firmend
13
13
  Sobald der Mensch sagt, ein Projekt sei fertig, oder ausdrücklich bittet, es einzutragen.
14
14
  **Oder** wenn er seinen KI-Arbeitsplatz anlegen will — dann s. „Den Arbeitsplatz anlegen".
15
15
 
16
- ## Die neun Slash-Befehle, die der Mensch hat
16
+ ## Die zehn Slash-Befehle, die der Mensch hat
17
17
 
18
18
  `kimal3 skill install` legt sie global ab (`~/.claude/commands/`) — er kann sie also in
19
19
  **jedem** Ordner tippen. Sie sind der Weg, den er selbst auslöst; dieses Skill ist der Weg,
@@ -26,6 +26,7 @@ den du erkennst.
26
26
  | `/k3feierabend` | Sitzung sauber beenden: Stand sichern, aufräumen, zusammenfassen |
27
27
  | `/k3kurs` | Zurück in den Mini-Kurs — holt den Stand mit `kimal3 kurs` und macht da weiter, wo er aufgehört hat |
28
28
  | `/k3projekt` | Ein fertiges Projekt ins Erfolgsprofil eintragen |
29
+ | `/k3plan` | Die Specs eines Projekts gegen den Code prüfen und das Ergebnis mit `kimal3 plan` und `kimal3 plan hoch` auf die Projektseite laden |
29
30
  | `/k3liste` | Seine eingetragenen Projekte zeigen |
30
31
  | `/k3analyse` | Firmendaten holen und seine Frage dazu beantworten |
31
32
  | `/k3kontext` | Die offenen Fragen über seine Firma im Gespräch beantworten |
@@ -81,6 +81,7 @@ Stell die Liste in zwei Gruppen dar:
81
81
  | `/k3kurs` | Zurück in den Mini-Kurs — da weiter, wo du aufgehört hast |
82
82
  | `/k3kontext` | Durch die offenen Fragen über deine Firma führen |
83
83
  | `/k3projekt <was du gebaut hast>` | Ein fertiges Projekt ins Erfolgsprofil eintragen |
84
+ | `/k3plan` | Die Specs gegen den Code prüfen und die Planung in die App hochladen |
84
85
  | `/k3liste` | Deine eingetragenen Projekte zeigen |
85
86
  | `/k3analyse <deine Frage>` | Firmendaten holen und deine Frage dazu beantworten |
86
87
  | `/k3zeigen` | Eine Aufgabe vormachen statt beschreiben — ich nehme auf und mache daraus einen Plan |
@@ -88,13 +89,13 @@ Stell die Liste in zwei Gruppen dar:
88
89
  Sag dazu: Die Slash-Befehle sind der **sichere** Weg — du musst dir keinen Satz merken. Ohne
89
90
  sie geht es auch: „das Projekt ist fertig" genügt, dann greife ich über den Skill.
90
91
 
91
- ## 6. Der zehnte Eintrag im Menü: `/kimal3` ist KEIN Befehl
92
+ ## 6. Der elfte Eintrag im Menü: `/kimal3` ist KEIN Befehl
92
93
 
93
94
  In derselben `/`-Liste steht auch **`/kimal3`**. Erklär den Unterschied **ungefragt** — das Menü
94
95
  wirft zwei verschiedene Sorten in eine Liste, und genau daran hat sich der erste Mensch gestoßen,
95
96
  der die Familie gesehen hat (Dennis, 2026-08-19):
96
97
 
97
- - Die neun **`/k3…`** sind **Slash-Befehle** (Dateien in `~/.claude/commands/`) — **der Mensch**
98
+ - Die zehn **`/k3…`** sind **Slash-Befehle** (Dateien in `~/.claude/commands/`) — **der Mensch**
98
99
  tippt sie bewusst.
99
100
  - **`/kimal3`** ist der **Skill** (`~/.claude/skills/kimal3/SKILL.md`) — meine
100
101
  Bedienungsanleitung. Sie ist der Grund, warum „das Projekt ist fertig" genügt: Ich schlage sie
@@ -102,5 +103,5 @@ der die Familie gesehen hat (Dennis, 2026-08-19):
102
103
  sie mehrere Dinge auf einmal und liest sich nicht wie ein Menüpunkt.
103
104
 
104
105
  Sag auch, was `/kimal3` **nicht** ist: **nicht die Installation.** Die ist `kimal3 skill install`
105
- im Terminal — der eine Befehl, der beides ablegt, den Skill **und** die neun `/k3…`. Was im Menü
106
+ im Terminal — der eine Befehl, der beides ablegt, den Skill **und** die zehn `/k3…`. Was im Menü
106
107
  steht, ist sein Ergebnis.
@@ -1,41 +1,41 @@
1
- ---
2
- description: Zurück in den Mini-Kurs — da weiter, wo du aufgehört hast
3
- ---
4
-
5
- <!-- kimal3:erzeugt — diese Datei wird von `kimal3 skill install` gepflegt und bei
6
- jedem Update ueberschrieben. Eigene Aenderungen gehen dabei verloren; wer sie
7
- behalten will, kopiert die Datei unter einem anderen Namen. -->
8
- # Kurs
9
-
10
- > Zurück in den Mini-Kurs: „Wo war ich nochmal?" — macht da weiter, wo du aufgehört hast.
11
- > Den Stand holt `kimal3 kurs` frisch von kimal3 — dieselben Haken, die der Mensch im Browser unter
12
- > https://app.kimal3.de/kurs sieht.
13
-
14
- Führe die Schritte der Reihe nach aus. Bleib im Coaching-Ton: Deutsch, freundlich, ein Schritt
15
- nach dem anderen, das Warum vor dem Wie, null Vorwissen vorausgesetzt.
16
-
17
- ## 1. Den Stand holen
18
- - Führ `kimal3 kurs` aus (unter Windows so, wie es `SKILL.md` beschreibt).
19
- - Rückgabewert **2**: Der Mensch ist nicht angemeldet. Zeig ihm `kimal3 login`, lass ihn selbst im Browser bestätigen
20
- und nenn **keinen** Kursstand.
21
- - Rückgabewert **3**: Der Stand ist gerade nicht abrufbar. Sag es in einem Satz und **erzähl den Kurs nicht aus dem
22
- Gedächtnis**.
23
- - Kennt das Programm den Befehl nicht, ist es zu alt: Nenn `npm install -g kimal3@latest`, danach `kimal3 skill install`.
24
-
25
- ## 2. Stand in einem Satz sagen
26
- - Sag in **einem** Satz, wo ihr im Kurs steht — aus der Ausgabe (Zeile `Kurs:`), nichts dazuerfinden. Kein Vortrag.
27
-
28
- ## 3. Als Nächstes führen
29
- - Die Zeile `Als Nächstes:` nennt den nächsten Schritt. Führ **einen** Schritt nach dem anderen: zeigen, machen lassen,
30
- verstehen. Nie die ganze Liste auf einmal.
31
- - Steht dahinter **„(du hakst ab)"** und hat der Mensch den Schritt offensichtlich schon getan (zum Beispiel „Claude ganz
32
- beendet und neu geöffnet" — er sitzt ja gerade in Claude), führ ihn nicht noch einmal: Frag kurz nach und bitte ihn,
33
- den Schritt unter https://app.kimal3.de/kurs abzuhaken.
34
- - Steht dahinter **„(setzt Claude)"** und ist er offen, lass die Einrichtung noch einmal laufen — über die Anleitung
35
- `https://app.kimal3.de/einrichten` (lade sie wie der Kurs-Satz und folge ihr), **nicht** mit einem frei aufgerufenen
36
- `kimal3 einrichten`. Bleibt der Schritt danach offen, nenn den Grund aus der Ausgabe von `einrichten` und schlag
37
- keinen dritten Lauf vor.
38
-
39
- ## 4. Abgeschlossen
40
- - Steht in der Ausgabe `Kurs: abgeschlossen`, gratuliere kurz und frag mit einem Vorschlag, woran er hier arbeiten
41
- möchte. Kein Kurs-Gerede mehr.
1
+ ---
2
+ description: Zurück in den Mini-Kurs — da weiter, wo du aufgehört hast
3
+ ---
4
+
5
+ <!-- kimal3:erzeugt — diese Datei wird von `kimal3 skill install` gepflegt und bei
6
+ jedem Update ueberschrieben. Eigene Aenderungen gehen dabei verloren; wer sie
7
+ behalten will, kopiert die Datei unter einem anderen Namen. -->
8
+ # Kurs
9
+
10
+ > Zurück in den Mini-Kurs: „Wo war ich nochmal?" — macht da weiter, wo du aufgehört hast.
11
+ > Den Stand holt `kimal3 kurs` frisch von kimal3 — dieselben Haken, die der Mensch im Browser unter
12
+ > https://app.kimal3.de/kurs sieht.
13
+
14
+ Führe die Schritte der Reihe nach aus. Bleib im Coaching-Ton: Deutsch, freundlich, ein Schritt
15
+ nach dem anderen, das Warum vor dem Wie, null Vorwissen vorausgesetzt.
16
+
17
+ ## 1. Den Stand holen
18
+ - Führ `kimal3 kurs` aus (unter Windows so, wie es `SKILL.md` beschreibt).
19
+ - Rückgabewert **2**: Der Mensch ist nicht angemeldet. Zeig ihm `kimal3 login`, lass ihn selbst im Browser bestätigen
20
+ und nenn **keinen** Kursstand.
21
+ - Rückgabewert **3**: Der Stand ist gerade nicht abrufbar. Sag es in einem Satz und **erzähl den Kurs nicht aus dem
22
+ Gedächtnis**.
23
+ - Kennt das Programm den Befehl nicht, ist es zu alt: Nenn `npm install -g kimal3@latest`, danach `kimal3 skill install`.
24
+
25
+ ## 2. Stand in einem Satz sagen
26
+ - Sag in **einem** Satz, wo ihr im Kurs steht — aus der Ausgabe (Zeile `Kurs:`), nichts dazuerfinden. Kein Vortrag.
27
+
28
+ ## 3. Als Nächstes führen
29
+ - Die Zeile `Als Nächstes:` nennt den nächsten Schritt. Führ **einen** Schritt nach dem anderen: zeigen, machen lassen,
30
+ verstehen. Nie die ganze Liste auf einmal.
31
+ - Steht dahinter **„(du hakst ab)"** und hat der Mensch den Schritt offensichtlich schon getan (zum Beispiel „Claude ganz
32
+ beendet und neu geöffnet" — er sitzt ja gerade in Claude), führ ihn nicht noch einmal: Frag kurz nach und bitte ihn,
33
+ den Schritt unter https://app.kimal3.de/kurs abzuhaken.
34
+ - Steht dahinter **„(setzt Claude)"** und ist er offen, lass die Einrichtung noch einmal laufen — über die Anleitung
35
+ `https://app.kimal3.de/einrichten` (lade sie wie der Kurs-Satz und folge ihr), **nicht** mit einem frei aufgerufenen
36
+ `kimal3 einrichten`. Bleibt der Schritt danach offen, nenn den Grund aus der Ausgabe von `einrichten` und schlag
37
+ keinen dritten Lauf vor.
38
+
39
+ ## 4. Abgeschlossen
40
+ - Steht in der Ausgabe `Kurs: abgeschlossen`, gratuliere kurz und frag mit einem Vorschlag, woran er hier arbeiten
41
+ möchte. Kein Kurs-Gerede mehr.
@@ -0,0 +1,347 @@
1
+ ---
2
+ description: Die Specs gegen den Code prüfen und die Planung in die App hochladen
3
+ ---
4
+
5
+ <!-- kimal3:erzeugt — diese Datei wird von `kimal3 skill install` gepflegt und bei
6
+ jedem Update ueberschrieben. Eigene Aenderungen gehen dabei verloren; wer sie
7
+ behalten will, kopiert die Datei unter einem anderen Namen. -->
8
+ # Planung prüfen und hochladen
9
+
10
+ ## 1. Wozu
11
+
12
+ Du prüfst die User Stories in den Specs dieses Projekts gegen den Code und lädst **nur das
13
+ Ergebnis** in die App hoch — nie den Code. Dort sieht der Mensch auf der Projektseite (Reiter
14
+ „Planung"), was offen ist, was auf seinen Test wartet und was fertig ist, und urteilt mit
15
+ „Passt" oder „Passt nicht".
16
+
17
+ Arbeite die Abschnitte der Reihe nach ab. Die Regeln (Abschnitt 5) und das Dateiformat
18
+ (Abschnitt 6) brauchst du schon ab Abschnitt 2 — lies sie zuerst. Was ein Rückgabewert von
19
+ `kimal3` heißt, steht in **`~/.claude/skills/kimal3/SKILL.md`, Abschnitt „Rückgabewerte"**;
20
+ diese Datei wiederholt es nicht.
21
+
22
+ 🔑 **`/k3plan` prüft, ordnet ein und lädt hoch — es baut nichts.** Was nachzubessern ist, steht
23
+ danach als Befund an der Story; gebaut wird, wenn der Mensch es sagt.
24
+
25
+ ## 2. Rückmeldungen holen
26
+
27
+ Arbeite im **Projektordner** (dort, wo Specs und Code liegen). Die Datei heißt immer
28
+ `plan/stand.json`, relativ zu diesem Ordner.
29
+
30
+ ```
31
+ kimal3 plan
32
+ ```
33
+
34
+ **Kommt `Im Ordner liegt keine plan/stand.json.`**, ist es das erste Mal (oder du stehst im
35
+ falschen Ordner — prüf das zuerst):
36
+
37
+ 1. `kimal3 projekt liste` — such das Projekt, um das es hier geht. Gibt es **kein** passendes,
38
+ frag den Menschen, welches gemeint ist, und schlag `/k3projekt <was du gebaut hast>` vor:
39
+ Ohne Eintrag im Erfolgsprofil gibt es keine Projektseite. Hier aufhören, nichts erfinden.
40
+ 2. Leg `plan/stand.json` an, mit dem Namen **genau so, wie die Liste ihn schreibt**:
41
+
42
+ ```json
43
+ {
44
+ "format": 1,
45
+ "projekt": "LinkedIn Content-App",
46
+ "projekt_id": null,
47
+ "basis": null,
48
+ "geprueft_am": "2026-10-21T22:10:00+02:00",
49
+ "specs": [],
50
+ "themen": [],
51
+ "uebernommen": []
52
+ }
53
+ ```
54
+
55
+ (Name und Zeitpunkt sind ein Beispiel.) `projekt_id` und `basis` trägt `kimal3 plan hoch`
56
+ nach dem ersten Hochladen selbst ein — **lass sie bei `null`**.
57
+ 3. `kimal3 plan` noch einmal.
58
+
59
+ **Was die Ausgabe heißt** (Beispiel, erfundene Werte):
60
+
61
+ ```
62
+ #12 · passt nicht · 2026-09-23-content-planer / US-2 (Runde 1): Beim Ziehen springt er auf Dienstag
63
+ #13 · Thema: Kalender soll Feiertage zeigen
64
+ Bestätigt: 2026-09-23-content-planer / US-1 (Runde 1)
65
+ Ansehen: https://app.kimal3.de/projekt/…
66
+ ```
67
+
68
+ - `#12 · passt nicht · <Spec> / <Story> (Runde n): <Satz>` — der Mensch hat die Story getestet,
69
+ sie hält nicht. → Regel 1 in Abschnitt 5. Die Nummer brauchst du später für `uebernommen`.
70
+ - `#13 · Thema: <Satz>` — etwas Neues, das er in der App notiert hat. → Regel 3.
71
+ - `Bestätigt: …` — für diese Stories hat er in **dieser** Runde „Passt" gesagt; sie sind fertig.
72
+ Ein „Passt" musst du nicht übernehmen.
73
+ - `Ansehen: …` — der Link zur Planung. Merk ihn dir für den Bericht.
74
+ - `Keine offenen Rückmeldungen.` — nichts zu übernehmen; weiter mit Abschnitt 3.
75
+
76
+ **Absagen:**
77
+ - `Kein Projekt heißt „…“. Deine Projekte: … Trag den Namen in plan/stand.json genau so ein.` —
78
+ übernimm den passenden Namen **wörtlich** aus der Liste in `"projekt"`. Passen zwei, frag.
79
+ - `Mehrere deiner Projekte heißen „…“ (Nummern: …).` — frag den Menschen, welches gemeint ist, und
80
+ trag dessen Nummer als `"projekt_id"` ein.
81
+ - `Die Projektnummer in plan/stand.json gehört zu keinem deiner Projekte.` — die Nummer stammt aus
82
+ einem kopierten Ordner oder einem gelöschten Projekt. Setz `"projekt_id"` auf `null` (die Zeile
83
+ bleibt stehen, das Feld ist Pflicht); dann sucht kimal3 nach dem Namen. Das ist der **einzige**
84
+ Fall, in dem du `projekt_id` selbst änderst.
85
+ - `Der Plan ist nicht lesbar: plan/stand.json enthält kein gültiges JSON-Objekt.` — Klammern oder
86
+ Kommas in der Datei reparieren.
87
+
88
+ ## 3. Specs finden
89
+
90
+ Such im Projektordner in **`docs/superpowers/specs/`**, **`plan/`** und **`docs/specs/`** nach
91
+ Markdown-Dateien mit User Stories („Als … will ich … damit …", oft `US-1`, `US-2`, mit
92
+ Akzeptanzkriterien und Gegenprobe). `plan/stand.json` selbst, Statuszettel und Aufgabenlisten
93
+ sind keine Specs.
94
+
95
+ Je Spec ein Eintrag in `specs`, je User Story ein Eintrag in `stories`, je Akzeptanzkriterium
96
+ ein Eintrag in `kriterien` (kurz gefasst, höchstens 500 Zeichen: Ausgangslage → Handlung →
97
+ Ergebnis).
98
+
99
+ 🔴 **Die Schlüssel sind bindend.** Die App hängt jedes „Passt" und „Passt nicht" an
100
+ Spec-Schlüssel + Story-Schlüssel + Runde. Steht eine Spec oder Story schon in `plan/stand.json`,
101
+ **übernimm ihren Schlüssel unverändert** — ein umbenannter Schlüssel lässt das Urteil des
102
+ Menschen verschwinden. Neu: Spec-Schlüssel = Dateiname ohne `.md`; Story-Schlüssel = die Nummer
103
+ aus der Spec (`US-3`); nummeriert die Spec nicht, zähl selbst `US-1`, `US-2` … in ihrer
104
+ Reihenfolge.
105
+
106
+ - `titel`: die Überschrift der Spec bzw. der Story. `datei`: der Pfad der Spec im Projektordner (relativ, endet auf `.md`; sonst `null`). Den **Text** der Spec
107
+ liest `kimal3 plan hoch` aus dieser Datei und schickt ihn mit — Pfade außerhalb des Projektordners
108
+ liest es nicht.
109
+ - Der Story-Schlüssel ist **derselbe wie in der Überschrift der Spec**, wo die Spec ihre Stories
110
+ nummeriert (`### US-3 · …` → `US-3`): Die App findet die Story im Spec-Text über diesen Schlüssel.
111
+ - Eine Spec ohne Stories kommt mit `"stories": []` hinein; sag es im Bericht.
112
+ - Grenzen: höchstens 50 Specs, 60 Stories je Spec, 400 zusammen. Sind es mehr, frag den
113
+ Menschen, welche Specs hineingehören.
114
+
115
+ **Der Stand je Story:**
116
+ - `offen` — noch nichts gebaut.
117
+ - `in_arbeit` — teilweise gebaut, oder ein Befund ist offen. `gebaut_am` ist dann `null`.
118
+ - `gebaut` — gebaut. `gebaut_am`: das Datum, an dem **diese Runde** fertig wurde (`JJJJ-MM-TT`);
119
+ dazu ein `testen`-Satz (Abschnitt 4).
120
+ - `weggelassen` — bewusst nicht gebaut, `grund` ist Pflicht (Regel 8). Nur, wenn die Spec oder
121
+ der Mensch das so entschieden hat — nie von dir allein, um aufzuräumen. Im Zweifel: `offen`
122
+ lassen und im Bericht fragen.
123
+
124
+ ## 4. Gegen den Code prüfen
125
+
126
+ Führ je Kriterium seine Gegenprobe aus, **wo es geht**: die Wächter oder Tests des Projekts
127
+ (`npm test`, `npm run …`), einen Befehl, die App starten und die Adresse aufrufen, eine Datei
128
+ lesen.
129
+
130
+ - `bestanden` — **nur**, wenn die Gegenprobe in dieser Sitzung gelaufen ist und das erwartete
131
+ Ergebnis gezeigt hat. Nie aus dem Gedächtnis, nie vom letzten Mal, nie weil der Code „richtig
132
+ aussieht".
133
+ - `gescheitert` — sie ist gelaufen und hat etwas anderes gezeigt. Das ist ein Befund (Regel 1);
134
+ die App stellt die Story und ihre Spec damit nach „In Arbeit".
135
+ - `offen` — alles, was nicht gelaufen ist: braucht einen Browser, eine Anmeldung, echte Daten
136
+ oder einen Menschen. Lesen zählt nur, wenn das Kriterium etwas über die Datei selbst sagt (eine
137
+ Datei gibt es, ein Text steht so da) — ein Verhalten beweist Lesen nicht.
138
+
139
+ ⚠️ Eine Story mit einem `offen`-Kriterium steht in „Claude-Test offen", und der Mensch kann sie
140
+ noch nicht testen. Sag im Bericht, was fehlt, damit die Gegenprobe laufen kann.
141
+
142
+ **Der `testen`-Satz** (bei jeder `gebaut`-Story, höchstens 1000 Zeichen) nennt die **Adresse oder
143
+ den Befehl** und **was dort zu sehen sein muss**, zum Beispiel: „Starte `npm run dev`, öffne
144
+ http://localhost:3000/kalender und zieh den Beitrag vom Montag auf den Mittwoch — er steht danach
145
+ am Mittwoch." Ohne ihn zeigt die App: „Claude hat nicht aufgeschrieben, wie man das testet".
146
+
147
+ **Befunde** (`befunde`): nur **offene**. `quelle: "claude"` für etwas, das die Story verspricht und
148
+ nicht tut, und das kein Kriterium abdeckt. `seit`: das Datum, an dem der Befund entstand — steht
149
+ er schon in der Datei, bleibt sein altes Datum.
150
+
151
+ **Die Runde** bindet ein Urteil an einen Bau-Stand — wie ein Stempel auf einer Fassung:
152
+ - Sie beginnt bei `1` und wird **nie** kleiner.
153
+ - **Um genau 1 erhöhen**, wenn eine Story mit einem Befund des Menschen (`quelle: "mensch"`)
154
+ seitdem nachgebessert wurde (Git-Verlauf, und die Gegenproben bestehen jetzt): dann
155
+ `befunde: []`, `stand: "gebaut"`, neues `gebaut_am`, neuer `testen`-Satz. Der Mensch testet neu.
156
+ Ist unklar, ob nachgebessert wurde: Befund stehen lassen und im Bericht fragen.
157
+ - **Auch erhöhen**, wenn du eine **bestätigte** Story so geändert hast, dass der Mensch es merken
158
+ würde — sein altes „Passt" gilt dann nicht mehr (Regel 7).
159
+ - Sonst **nicht anfassen**: Eine bestätigte Story bleibt fertig, solange ihre Runde gleich bleibt.
160
+
161
+ ## 5. Die acht Regeln
162
+
163
+ Die App zeigt sie dem Menschen in genau diesem Wortlaut („So bleibt die Planung kurz"):
164
+
165
+ 1. **Ein Befund ist keine neue Karte.** Hält eine Story nicht, was sie verspricht — Claudes Gegenprobe scheitert oder du sagst „Passt nicht" —, hängt der Befund an **dieser** Story, und ihre Spec geht zurück nach „In Arbeit“.
166
+ 2. **Neu ist nur, was niemand versprochen hat. Das kommt in den Eingang, und der hat fünf Plätze.**
167
+ 3. **Claude ordnet jedes Thema beim nächsten `/k3plan` ein:** als neue Story in eine Spec, als Befund an eine Story, oder gestrichen mit Begründung. „Für später" gibt es nicht. Was daraus wurde, steht unter „Zuletzt eingeordnet".
168
+ 4. **Nichts liegt länger als 14 Tage im Eingang.**
169
+ 5. **Höchstens eine Spec gleichzeitig in Arbeit** („In Arbeit“ und „Claude-Test offen“ zusammen). Erst fertig machen, dann die nächste beginnen.
170
+ 6. **Höchstens fünf Stories warten auf deinen Test.** Sind es mehr, fängt Claude nichts Neues an, bis du getestet hast.
171
+ 7. **Fertig heißt zweimal geprüft:** Claudes Gegenproben bestanden, und du hast „Passt" gesagt — für genau diesen Stand.
172
+ 8. **Eine Spec ist erst abgeschlossen, wenn jede Story fertig oder bewusst weggelassen ist** — mit Grund. Einen stillen Rest gibt es nicht.
173
+
174
+ **Was du danach tust:**
175
+
176
+ - **Regel 1 — jedes `passt nicht` aus `kimal3 plan`:** Gibt es die Story noch, häng den Satz des
177
+ Menschen als Befund an sie (`{ "text": "<sein Satz>", "quelle": "mensch", "seit": "<heute>" }`),
178
+ `stand: "in_arbeit"`, `gebaut_am: null`. Ist sie seitdem schon nachgebessert, stattdessen
179
+ Runde + 1 und `befunde: []` (Abschnitt 4). Dazu in `uebernommen`:
180
+ `{ "rueckmeldung": 12, "antwort": "Befund an US-2" }`. Gibt es die Story nicht mehr, sagt die
181
+ `antwort`, warum. ⚠️ Ohne Befund von `mensch` und ohne höhere Runde lehnt der Server das
182
+ Hochladen ab.
183
+ - **Regel 2 — Neues:** Was dir beim Prüfen auffällt oder der Mensch im Gespräch sagt und was
184
+ **keine** Spec verspricht, kommt nach `themen`:
185
+ `{ "schluessel": "T-1", "text": "…", "quelle": "claude" | "mensch", "seit": "<heute>" }`.
186
+ Die fünf Plätze teilen sich `themen` und die offenen Notizen aus der App.
187
+ - **Regel 3 — einordnen:** Jedes `Thema` aus `kimal3 plan` **und** jedes Thema, das schon von
188
+ früher in `themen` steht, ordnest du **jetzt** ein — eins von dreien:
189
+ - **neue Story:** schreib sie in die Spec, zu der sie gehört (User Story, Akzeptanzkriterium mit
190
+ Gegenprobe), und in `plan/stand.json` mit `stand: "offen"`. Passt keine Spec, frag, wohin.
191
+ Antwort: `neue Story US-7 in „Content-Planer“`.
192
+ - **Befund an eine Story:** wie bei Regel 1. Antwort: `Befund an US-2 in „Content-Planer“`.
193
+ - **gestrichen:** Antwort `gestrichen: <Grund in einem Satz>`, zum Beispiel
194
+ `gestrichen: Feiertage stehen schon im Kalender-Werkzeug.`
195
+
196
+ Für eine Notiz aus der App gehört die Antwort als **ein Satz** in `uebernommen` (die App zeigt
197
+ sie unter „Zuletzt eingeordnet" als `<Notiz> → <Antwort>`); schreib sie darum **ohne** Pfeil
198
+ am Anfang. Ein Thema aus der Datei nimmst du aus `themen` heraus und nennst seine Einordnung im
199
+ Bericht.
200
+ - **Regel 4:** Weil du bei jedem `/k3plan` alles einordnest, liegt nichts lange. Ein Thema mit
201
+ `seit` vor mehr als 14 Tagen ordnest du **auf jeden Fall** jetzt ein.
202
+ - **Regel 5 und 6 — keine neue Spec beginnen**, solange eine andere Spec in Arbeit ist (eine ihrer
203
+ Stories ist `in_arbeit`, hat einen Befund oder eine gescheiterte Gegenprobe, oder ist `gebaut`
204
+ mit einem `offen`-Kriterium oder ganz ohne Kriterien), oder solange mehr als fünf Stories auf den Test des Menschen
205
+ warten (`gebaut`, alles bestanden, kein Befund, noch nicht bestätigt). **Sag dem Menschen
206
+ stattdessen, was er testen soll** — mit den `testen`-Sätzen. Ordnest du ein Thema als neue Story
207
+ in eine Spec ein, beginnst du sie damit nicht: Sie steht `offen`, und die Spec gilt nicht als in
208
+ Arbeit.
209
+ - **Regel 7:** „Fertig" setzt nur der Mensch mit „Passt" in der App; in der Datei gibt es dafür kein
210
+ Feld. Du hältst nur die Runde stabil (Abschnitt 4).
211
+ - **Regel 8:** `weggelassen` nur mit `grund` (Abschnitt 3).
212
+
213
+ ## 6. Die Datei
214
+
215
+ `plan/stand.json` steht unter Git. Beispiel, gekürzt:
216
+
217
+ ```json
218
+ {
219
+ "format": 1,
220
+ "projekt": "LinkedIn Content-App",
221
+ "projekt_id": null,
222
+ "basis": null,
223
+ "geprueft_am": "2026-10-21T22:10:00+02:00",
224
+ "specs": [
225
+ {
226
+ "schluessel": "2026-09-23-content-planer",
227
+ "titel": "Content-Planer als Seite",
228
+ "datei": "plan/2026-09-23-content-planer-seite-spec.md",
229
+ "stories": [
230
+ {
231
+ "schluessel": "US-2",
232
+ "titel": "Beiträge im Kalender verschieben",
233
+ "stand": "gebaut",
234
+ "runde": 1,
235
+ "gebaut_am": "2026-10-21",
236
+ "kriterien": [
237
+ { "text": "Beitrag vom Montag auf Mittwoch ziehen → steht am Mittwoch", "gegenprobe": "bestanden" }
238
+ ],
239
+ "befunde": [],
240
+ "testen": "Öffne /kalender, zieh den Beitrag vom Montag auf den Mittwoch.",
241
+ "grund": null
242
+ }
243
+ ]
244
+ }
245
+ ],
246
+ "themen": [
247
+ { "schluessel": "T-1", "text": "Kalender soll Feiertage zeigen", "quelle": "mensch", "seit": "2026-10-21" }
248
+ ],
249
+ "uebernommen": [
250
+ { "rueckmeldung": 12, "antwort": "Befund an US-2" }
251
+ ]
252
+ }
253
+ ```
254
+
255
+ **Die Felder** — jedes muss da sein, auch wenn es `null` oder leer ist; ein unbekanntes Feld
256
+ (ein Tippfehler wie `"befund"`) lehnt der Server ab:
257
+
258
+ - `format`: genau `1`.
259
+ - `projekt`: der Name wie in der App, 1–200 Zeichen.
260
+ - `projekt_id`, `basis`: am Anfang `null`; danach schreibt sie `kimal3 plan hoch` — **nie von Hand
261
+ ändern**. Einzige Ausnahme: die Absage „Die Projektnummer in plan/stand.json gehört zu keinem
262
+ deiner Projekte." — dann `projekt_id` auf `null` setzen (Abschnitt 2).
263
+ - `geprueft_am`: jetzt, mit Zeitzone (`date +%Y-%m-%dT%H:%M:%S%:z` in der Bash, `Get-Date -Format
264
+ "yyyy-MM-ddTHH:mm:sszzz"` in PowerShell).
265
+ - `specs[]`: `schluessel` (eindeutig, 1–80 Zeichen), `titel` (1–200), `datei` (Pfad oder `null`),
266
+ `stories[]`.
267
+ - `stories[]`: `schluessel` (eindeutig in ihrer Spec), `titel`, `stand` (`offen` · `in_arbeit` ·
268
+ `gebaut` · `weggelassen`), `runde` (1–999), `gebaut_am` (`JJJJ-MM-TT` bei `gebaut`, sonst
269
+ `null`), `kriterien[]`, `befunde[]`, `testen` (Satz oder `null`), `grund` (Pflicht bei
270
+ `weggelassen`, sonst `null`).
271
+ - `kriterien[]`: `{ "text", "gegenprobe": "bestanden" | "gescheitert" | "offen" }`, höchstens 30
272
+ je Story.
273
+ - `befunde[]`: `{ "text", "quelle": "claude" | "mensch", "seit": "JJJJ-MM-TT" }` — nur offene,
274
+ höchstens 20.
275
+ - `themen[]`: `{ "schluessel", "text", "quelle", "seit" }`, höchstens 50 (der Eingang hat fünf
276
+ Plätze, Regel 2).
277
+ - `uebernommen[]`: `{ "rueckmeldung": <Nummer aus kimal3 plan>, "antwort": "<ein Satz>" }`. Leert
278
+ `kimal3 plan hoch` nach dem Hochladen selbst.
279
+ - Die ganze Datei: höchstens 300 KB.
280
+
281
+ ## 7. Hochladen
282
+
283
+ Erst der Probelauf — er prüft alles und speichert nichts:
284
+
285
+ ```
286
+ kimal3 plan hoch --probe
287
+ ```
288
+
289
+ `Probelauf: würde 9 Stories hochladen, 2 Rückmeldungen als übernommen melden. Gespeichert wurde
290
+ nichts.` (Zahlen als Beispiel.) **Vergleich die zweite Zahl** mit den offenen Rückmeldungen aus
291
+ `kimal3 plan`: Ist sie kleiner, hast du eine vergessen — sie bliebe in der App unter „Wartet auf
292
+ Claude".
293
+
294
+ Dann:
295
+
296
+ ```
297
+ kimal3 plan hoch
298
+ ```
299
+
300
+ Geklappt hat es bei `✓ Planung für „…“ hochgeladen: … Stories, … warten auf deinen Test.` und
301
+ `Ansehen: …`; beim ersten Mal zusätzlich `projekt_id und basis stehen jetzt in plan/stand.json.`
302
+ Die CLI hat `projekt_id` und `basis` eingetragen und `uebernommen` geleert — lass die Datei so.
303
+ Sag dem Menschen, dass `plan/stand.json` geändert ist und in den nächsten Commit gehört.
304
+
305
+ Danach steht eine Zeile `Spec-Texte hochgeladen: 1 von 3. Ohne Text: …` — der Text der Specs geht mit hoch.
306
+ Eine Spec ohne Text ist ein **Hinweis, kein Fehlschlag** (Rückgabewert `0`): Nenn dem Menschen die
307
+ Specs, die in der Klammer stehen, und was zu tun ist (Pfad in `datei` berichtigen; über 300 KB
308
+ lässt sich nicht hochladen).
309
+
310
+ **Absagen — die Meldung lesen, beheben, Probelauf, noch einmal:**
311
+
312
+ | Meldung beginnt mit | Was du tust |
313
+ |---|---|
314
+ | `Der Plan ist nicht lesbar: <Ort> …` | Die Stelle (`specs[0].stories[2].stand`) in der Datei reparieren. |
315
+ | `Kein Projekt heißt …` · `Mehrere deiner Projekte heißen …` · `Die Projektnummer in plan/stand.json gehört zu keinem deiner Projekte.` | Wie in Abschnitt 2. Bei der Projektnummer darfst du `projekt_id` auf `null` setzen — nur hier. |
316
+ | `<Spec> / <Story> hat Runde 1, gespeichert ist schon Runde 2.` | Die Datei ist älter als der gespeicherte Stand. Runde auf den gespeicherten Wert setzen — nie kleiner. |
317
+ | `Rückmeldung 12 gibt es in diesem Projekt nicht oder steht zweimal …` | Nur Nummern aus `kimal3 plan`, jede einmal. |
318
+ | `Rückmeldung 12 („…“) ist als übernommen gemeldet, aber US-2 hat keinen Befund von dir …` | Den Befund mit `quelle: "mensch"` an die Story hängen (Regel 1) — oder Runde + 1, wenn nachgebessert ist. |
319
+ | `In der App liegt ein neuerer Plan (hochgeladen …).` | Eine andere Arbeitskopie hat hochgeladen. **Nicht überschreiben.** Sag es dem Menschen und frag, ob ihr deren Stand erst holt (Git) und neu prüft. `kimal3 plan hoch --ueberschreiben` **nur nach seinem ausdrücklichen Ja.** |
320
+ | `Die gespeicherte Planung in der App ist beschädigt …` | Auch hier `--ueberschreiben` **nur nach seinem Ja.** |
321
+ | `Die Planung ist gespeichert, aber die Rückmeldungen sind noch nicht als übernommen markiert.` | `kimal3 plan hoch` **unverändert** noch einmal — das ist harmlos, die CLI hat `basis` schon nachgetragen und `uebernommen` stehen lassen. |
322
+ | ``Die Planung ist gespeichert, aber die Spec-Texte nicht. Führ `kimal3 plan hoch` noch einmal aus.`` | `kimal3 plan hoch` **unverändert** noch einmal — der Plan steht schon in der App, die CLI hat `basis` nachgetragen. |
323
+ | `⚠ Die Planung ist gespeichert, aber plan/stand.json ließ sich nicht nachtragen. Trag selbst ein: …` | Genau diese Werte in die Datei schreiben. |
324
+ | `… ließ sich gerade nicht laden` / `… nicht speichern` | Einmal wiederholen; klappt es dann nicht, dem Menschen sagen. |
325
+
326
+ 🔴 **`--ueberschreiben` ersetzt, was ein anderer hochgeladen hat.** Nie aus eigenem Entschluss,
327
+ auch nicht, wenn die Meldung es vorschlägt.
328
+
329
+ ## 8. Dem Menschen berichten
330
+
331
+ **Höchstens fünf Zeilen**, ohne Fachjargon:
332
+
333
+ - was **fertig** wurde (seit dem letzten Mal bestätigt),
334
+ - was **auf seinen Test wartet** — mit dem `testen`-Satz, damit er gleich loslegen kann,
335
+ - was im **Eingang** entschieden wurde (jedes Thema mit seiner Antwort),
336
+ - eine **Warnung**, wenn Regel 5 oder 6 verletzt ist: „Teste zuerst …" statt einer neuen Story,
337
+ - der **Link** aus `Ansehen: …`.
338
+
339
+ Beispiel (erfundene Werte):
340
+
341
+ ```
342
+ Fertig: US-1 „Beiträge anlegen“.
343
+ Dein Test: US-2 — öffne /kalender und zieh den Beitrag vom Montag auf den Mittwoch.
344
+ Eingang: „Kalender soll Feiertage zeigen“ → neue Story US-7 in „Content-Planer“.
345
+ Claude-Test offen: US-4 braucht einen Browser, den ich hier nicht habe.
346
+ Planung: https://app.kimal3.de/projekt/…
347
+ ```
package/skill/en/SKILL.md CHANGED
@@ -13,7 +13,7 @@ description: Add projects to the kimal3 success profile or list them, analyse co
13
13
  As soon as the person says a project is finished, or explicitly asks for it to be added.
14
14
  **Or** when they want to set up their AI Workplace — then see “Setting up the workplace”.
15
15
 
16
- ## The nine slash commands the person has
16
+ ## The ten slash commands the person has
17
17
 
18
18
  `kimal3 skill install` puts them in the global folder (`~/.claude/commands/`) — so the person can
19
19
  type them in **any** folder. They are the route the person triggers themselves; this skill is the
@@ -26,12 +26,13 @@ route you recognise.
26
26
  | `/k3wrapup` (German: `/k3feierabend`) | End a session cleanly: save the status, tidy up, summarise |
27
27
  | `/k3course` (German: `/k3kurs`) | Back into the Mini course — fetches the status with `kimal3 course` and picks up where they left off |
28
28
  | `/k3project` (German: `/k3projekt`) | Add a finished project to the success profile |
29
+ | `/k3plan` | Check a project's specs against the code and upload the result to the project page with `kimal3 plan` and `kimal3 plan upload` |
29
30
  | `/k3list` (German: `/k3liste`) | Show the projects they have added |
30
31
  | `/k3analyse` | Fetch company data and answer their question about it |
31
32
  | `/k3context` (German: `/k3kontext`) | Answer the open questions about their company in conversation |
32
33
  | `/k3show` (German: `/k3zeigen`) | Show a task instead of describing it — records with `kimal3 show …`, evaluates on the computer and writes the plan; nothing is read before their yes |
33
34
 
34
- `/k3`, `/k3start` and `/k3analyse` have the same name in German. Colleagues whose account is set to German have the German names — if someone says they ran `/k3feierabend`, that is `/k3wrapup`.
35
+ `/k3`, `/k3start`, `/k3plan` and `/k3analyse` have the same name in German. Colleagues whose account is set to German have the German names — if someone says they ran `/k3feierabend`, that is `/k3wrapup`.
35
36
 
36
37
  🔴 **Only name one of these commands if you know the person has it.** They come with
37
38
  `kimal3 skill install`; anyone who has never run that sees nothing when they type, and advice that
@@ -82,6 +82,7 @@ Show the list in two groups:
82
82
  | `/k3course` (German: `/k3kurs`) | Back into the Mini course — picking up where you left off |
83
83
  | `/k3context` (German: `/k3kontext`) | Take you through the open questions about your company |
84
84
  | `/k3project <what you built>` (German: `/k3projekt`) | Add a finished project to the success profile |
85
+ | `/k3plan` | Check the specs against the code and upload the planning to the app |
85
86
  | `/k3list` (German: `/k3liste`) | Show the projects you have added |
86
87
  | `/k3analyse <your question>` | Fetch company data and answer your question about it |
87
88
  | `/k3show` (German: `/k3zeigen`) | Show a task instead of describing it — I record it and turn it into a plan |
@@ -89,13 +90,13 @@ Show the list in two groups:
89
90
  Also tell them: the slash commands are the **safe** route — you don't have to remember any sentence.
90
91
  It works without them too: “the project is finished” is enough, and then I use the skill.
91
92
 
92
- ## 6. The tenth entry in the menu: `/kimal3` is NOT a command
93
+ ## 6. The eleventh entry in the menu: `/kimal3` is NOT a command
93
94
 
94
95
  The same `/` list also shows **`/kimal3`**. Explain the difference **without being asked** — the
95
96
  menu throws two different kinds into one list, and that is exactly what tripped up the first
96
97
  person who saw the family (Dennis, 19 August 2026):
97
98
 
98
- - The nine **`/k3…`** are **slash commands** (files in `~/.claude/commands/`) — **the person**
99
+ - The ten **`/k3…`** are **slash commands** (files in `~/.claude/commands/`) — **the person**
99
100
  types them on purpose.
100
101
  - **`/kimal3`** is the **skill** (`~/.claude/skills/kimal3/SKILL.md`) — my
101
102
  operating manual. It is the reason “the project is finished” is enough: I open it
@@ -103,5 +104,5 @@ person who saw the family (Dennis, 19 August 2026):
103
104
  names several things at once and doesn't read like a menu item.
104
105
 
105
106
  Also say what `/kimal3` is **not**: **not the installation.** That is `kimal3 skill install`
106
- in the terminal — the one command that puts both in place, the skill **and** the nine `/k3…`.
107
+ in the terminal — the one command that puts both in place, the skill **and** the ten `/k3…`.
107
108
  What appears in the menu is its result.