kimal3 0.2.8 → 0.2.9

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/dist/kimal3.js CHANGED
@@ -390,8 +390,34 @@ function endeMitHinweis(code) {
390
390
 
391
391
  🔑 DIE NOTBREMSE BLEIBT, und sie ist die einzige Stelle, die noch hart
392
392
  beendet: Sie ist `unref`t, haelt die Schleife also nicht am Leben, und
393
- feuert nur, wenn ein Kanal wirklich haengt. Nach zwei Sekunden ist die
394
- Verbindung von draussen ohnehin zu -- der Absturz droht dort nicht.
393
+ feuert nur, wenn ein Kanal wirklich haengt.
394
+
395
+ 🔬 WARUM ZWEI SEKUNDEN -- gemessen statt behauptet (2026-09-10, nach
396
+ Review-Runde 1 am PR #31). Hier stand als Begruendung: "nach zwei
397
+ Sekunden ist die Verbindung von draussen ohnehin zu". Das war die
398
+ einzige ungemessene Zahl im ganzen Umbau, und der Review vermutete
399
+ genau darin die Gefahr -- die Notbremse koenne ausgerechnet in dem
400
+ Augenblick zuschlagen, gegen den dieser Fix gebaut ist.
401
+ Nachgemessen (echte Netzanfrage, danach hartes Beenden nach N ms, je
402
+ 20 Laeufe, Node 24):
403
+ 0 ms .... 20 von 20 Abstuerzen
404
+ 1 ms .... 17 von 20
405
+ 5 ms .... 14 von 20
406
+ 10 ms ..... 7 von 20
407
+ 25 ms ..... 0 von 20
408
+ 50 ms ..... 0 von 20
409
+ 2 000 ms ..... 0 von 20
410
+ 5 000 ms ..... 0 von 20
411
+ Das gefaehrliche Fenster ist also rund 25 Millisekunden breit, nicht
412
+ Sekunden -- die zwei Sekunden liegen achtzigfach dahinter. Der Verdacht
413
+ des Reviews ist damit widerlegt, und Erhoehen wuerde nichts kaufen: Es
414
+ wuerde nur den einzigen Fall verlangsamen, in dem die Notbremse
415
+ ueberhaupt zaehlt (ein Kanal, der wirklich haengt).
416
+ ⚠️ Gemessen auf Node 24; ausgeliefert wird ab Node 20 (cli/package.json).
417
+ Auf Node 20 ist es NICHT nachgemessen -- auf diesem Rechner steht keine
418
+ solche Fassung. Was dagegen spricht, dass es dort anders liegt: Der
419
+ Abbruch haengt an einem Kanal, der gerade zugeht, und das ist eine Sache
420
+ von Millisekunden, nicht von Sekunden.
395
421
  */
396
422
  setTimeout(() => process.exit(code), 2000).unref();
397
423
  process.stdout.write("", () => {
@@ -524,8 +550,16 @@ haupt()
524
550
  // Kommentar an `endeMitHinweis` verbietet, denn auf Windows sind beide
525
551
  // Ausgabekanaele asynchron und `process.exit()` wirft Ausstehendes weg.
526
552
  // Ausgerechnet die Fehlermeldung waere das Erste, was verlorengeht.
527
- // Beide Faelle entstehen NACH einer Netzanfrage, also drohte hier zusaetzlich
528
- // derselbe Absturz wie in `endeMitHinweis` (D-18).
553
+ // ⚠️ Die beiden Faelle liegen dabei VERSCHIEDEN, und das stand hier bis zur
554
+ // dritten Review-Runde falsch ("beide entstehen nach einer Netzanfrage"):
555
+ // `NichtAngemeldet` wird in cli/src/api.ts:117 geworfen, BEVOR die Anfrage
556
+ // ueberhaupt hinausgeht (der `fetch` steht dort erst in Zeile 171) -- dort
557
+ // drohte der Absturz aus D-18 also nie. Nur die zweite Meldung ("nicht
558
+ // erreichbar") kommt nach einer Netzanfrage, und nur fuer sie galt das.
559
+ // 🔑 Fuer BEIDE gilt dagegen der Grund darueber: Auf Windows sind die
560
+ // Ausgabekanaele asynchron, und ein hartes Beenden wirft Ausstehendes weg.
561
+ // *Ein Kommentar, der eine richtige Aenderung halb falsch begruendet, ist
562
+ // gefaehrlicher als keiner -- der naechste Leser rechnet nicht nach.*
529
563
  // 🔑 `exitCode` statt `exit`: Die Zahl stimmt, die Meldung kommt an, und
530
564
  // Node laeuft aus, sobald die Kanaele leer sind.
531
565
  .catch((f) => {
package/package.json CHANGED
@@ -1,27 +1,27 @@
1
- {
2
- "name": "kimal3",
3
- "version": "0.2.8",
4
- "description": "Trag deine KI-Projekte dort ein, wo sie entstehen: im Terminal.",
5
- "type": "module",
6
- "bin": {
7
- "kimal3": "dist/kimal3.js"
8
- },
9
- "files": [
10
- "dist",
11
- "skill",
12
- "README.md"
13
- ],
14
- "engines": {
15
- "node": ">=20"
16
- },
17
- "scripts": {
18
- "build": "tsc -p tsconfig.json",
19
- "prepublishOnly": "npm run build"
20
- },
21
- "keywords": [
22
- "kimal3",
23
- "cli"
24
- ],
25
- "homepage": "https://app.kimal3.de/pro",
26
- "license": "SEE LICENSE IN README.md"
27
- }
1
+ {
2
+ "name": "kimal3",
3
+ "version": "0.2.9",
4
+ "description": "Trag deine KI-Projekte dort ein, wo sie entstehen: im Terminal.",
5
+ "type": "module",
6
+ "bin": {
7
+ "kimal3": "dist/kimal3.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "skill",
12
+ "README.md"
13
+ ],
14
+ "engines": {
15
+ "node": ">=20"
16
+ },
17
+ "scripts": {
18
+ "build": "tsc -p tsconfig.json",
19
+ "prepublishOnly": "npm run build"
20
+ },
21
+ "keywords": [
22
+ "kimal3",
23
+ "cli"
24
+ ],
25
+ "homepage": "https://app.kimal3.de/pro",
26
+ "license": "SEE LICENSE IN README.md"
27
+ }
package/skill/SKILL.md CHANGED
@@ -192,6 +192,17 @@ Stelle.
192
192
  3. **Die Antwort in die genannte Datei schreiben** — unter ihre `## `-Überschrift, über der der
193
193
  Anker steht. Die Hinweiszeilen mit `>` gehören uns; **lass sie stehen und schreib darunter.**
194
194
 
195
+ 🔴 **Schreib die Antwort so, dass man sie als Rohtext lesen kann:**
196
+ - **Eine Zeile nie mitten im Satz umbrechen** — auch nicht, wenn sie lang wird. Ein Absatz
197
+ ist eine Zeile. Die `>`-Hinweise darüber sind umbrochen; **ahm sie nicht nach.**
198
+ - **Kein `**fett**`, keine Überschriften, keine Tabellen.**
199
+ - Mehrere Aussagen werden am besten eine Liste, jede Zeile beginnt mit `- `.
200
+
201
+ 🔑 **Warum:** In der App (**Firma → Kontext**) steht jede Antwort in einem Eingabefeld, das
202
+ den Text zeigt, wie er in der Datei steht. Ein Umbruch nach ~100 Zeichen reißt dort den Satz
203
+ mitten durch, und `**fett**` erscheint als Sternchen — bei jeder Kollegin, die dort liest oder
204
+ weiterschreibt. *Aufgefallen am 25.09.2026 an unseren eigenen Antworten.*
205
+
195
206
  🔴 **Die Pfade zählen ab dem Ordner, den `kontext fragen` als `Arbeitsplatz:` nennt — nicht
196
207
  ab deinem Arbeitsverzeichnis.** Der Normalfall ist, dass beides auseinanderfällt:
197
208
  `kimal3 arbeitsplatz neu` rät ausdrücklich, in die **Werkbank** zu wechseln und dort Claude
@@ -1,43 +1,97 @@
1
- ---
2
- description: Sitzung sauber beenden — Stand sichern, aufräumen, zusammenfassen
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
- # Feierabend
9
-
10
- > Sauberer Sitzungs-Abschluss: Stand sichern, aufräumen, zusammenfassen — damit der nächste
11
- > Start (in diesem oder einem anderen Projekt) sauber weitergeht.
12
-
13
- Führe die Schritte der Reihe nach aus. Bleib im Coaching-Ton: erklär kurz, was du tust, und hol
14
- dir **vor dem Veröffentlichen (Push)** ein OK. Ist ein Schritt hier nicht relevant, sag das kurz
15
- und überspring ihn — kein Leerlauf.
16
-
17
- ## 1. Stand sichten
18
- - Ist es ein Git-Repo? Dann `git status` + `git diff --stat`: Was wurde in dieser Sitzung
19
- geändert? Fass es in 1–2 Sätzen zusammen.
20
- - Kein Git-Repo? Sag das kurz und biete an, eins einzurichten (Sicherheitsnetz) — erzwing nichts.
21
-
22
- ## 2. Lebende Dokumente nachziehen
23
- - **Status-/Übergabe-Doc:** Gibt es eine `WEITER-HIER.md` (oder `ROADMAP.md`)? Aktualisiere
24
- „aktueller Stand" + „nächster Schritt" auf das, was heute passiert ist. Sag laut, was du
25
- geändert hast. Gibt es keins und die Arbeit wächst über eine Sitzung hinaus: eins vorschlagen.
26
- - **Coach aktuell halten:** Prüf kurz, ob die `CLAUDE.md` (global oder Projekt) an eine neue
27
- Arbeitsweise angepasst gehört — **nur bei echtem Anlass**, nicht als Pflichtübung.
28
-
29
- ## 3. Aufräumen (leichtgewichtig)
30
- - Offensichtlichen Müll entfernen (`.DS_Store`, `*.tmp`, `*.log`, `__pycache__`).
31
- - Bei allem Unklaren: **nicht** löschen — auflisten und mich fragen.
32
-
33
- ## 4. Sichern (mit meinem OK)
34
- - Stage die relevanten Änderungen — **niemals** Secrets oder `.env*`.
35
- - Zeig mir kurz, was in den Commit geht, und schlag eine Commit-Nachricht vor.
36
- - Nach meinem OK: committen. Dann **frag, ob du pushen sollst** (der Schritt „nach außen").
37
- Erst nach meiner Bestätigung `git push`.
38
-
39
- ## 5. Zusammenfassen & Abschied
40
- - 2–3 Sätze **ohne Fachjargon**: Was haben wir heute geschafft, was habe ich gelernt.
41
- - **Ein** konkreter, kleiner nächster Schritt fürs nächste Mal (der Cliffhanger — klein halten).
42
- - Kurzer, freundlicher Abschied wie ein guter Kollege, der Feierabend macht. Warte auf meine
43
- Antwort, bevor die Sitzung endet.
1
+ ---
2
+ description: Sitzung sauber beenden — Stand sichern, aufräumen, zusammenfassen
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
+ # Feierabend
9
+
10
+ > Sauberer Sitzungs-Abschluss: Stand sichern, aufräumen, zusammenfassen — damit der nächste
11
+ > Start (in diesem oder einem anderen Projekt) sauber weitergeht.
12
+
13
+ Führe die Schritte der Reihe nach aus. Bleib im Coaching-Ton: erklär kurz, was du tust, und hol
14
+ dir **vor dem Veröffentlichen (Push)** ein OK. Ist ein Schritt hier nicht relevant, sag das kurz
15
+ und überspring ihn — kein Leerlauf.
16
+
17
+ ## 1. Stand sichten
18
+ - Ist es ein Git-Repo? Dann `git status` + `git diff --stat`: Was wurde in dieser Sitzung
19
+ geändert? Fass es in 1–2 Sätzen zusammen.
20
+ - Kein Git-Repo? Sag das kurz und biete an, eins einzurichten (Sicherheitsnetz) — erzwing nichts.
21
+
22
+ ## 2. Status-Datei nachziehen — und aufräumen
23
+ Die Status-Datei (`WEITER-HIER.md` oder `ROADMAP.md`) ist der Zettel für den nächsten Start. Sie
24
+ taugt nur, solange man sie in einem Atemzug lesen kann. **Jeder Feierabend schreibt etwas dazu —
25
+ also muss auch jeder Feierabend etwas wegräumen**, sonst wächst sie, bis niemand sie mehr liest.
26
+
27
+ Gibt es keine Status-Datei und die Arbeit wächst über eine Sitzung hinaus: eine vorschlagen,
28
+ dann weiter mit Schritt 3.
29
+
30
+ 1. **Nachziehen:** „Wo wir stehen" und „nächster Schritt" auf das setzen, was heute passiert ist.
31
+ 2. **Wegräumen, was nicht mehr gilt.** Ins Archiv wandert:
32
+ - was **erledigt** ist (fertige Aufgaben, abgehakte Punkte),
33
+ - die Geschichten **früherer Sitzungen** („Davor …", „Stand vom …") — in „Wo wir stehen" bleibt
34
+ nur der heutige Stand,
35
+ - was im Text **widerlegt oder überholt** ist.
36
+ Was bleibt: der aktuelle Stand, der nächste Schritt, die offenen Punkte, und je Idee für später
37
+ **höchstens zwei Sätze** — Ausführliches bekommt eine eigene Datei, die Status-Datei verlinkt sie.
38
+ 3. **Ins Archiv heißt: verschieben, nicht löschen.** Gibt es schon ein Archiv (steht meist im Kopf
39
+ der Status-Datei), dorthin; sonst `WEITER-HIER-archiv.md` daneben anlegen. Unten anhängen, mit
40
+ dem heutigen Datum als Überschrift, **im Wortlaut** — das Warum früherer Entscheidungen soll
41
+ auffindbar bleiben.
42
+ 4. **Messen statt schätzen:** Zeilen der Status-Datei **vorher und nachher zählen**. Steht in ihrem
43
+ Kopf eine Zielgröße, gilt die, sonst **150 Zeilen**. Liegt sie danach noch drüber, weiter
44
+ wegräumen — oder sag laut, warum der Rest bleiben muss. Prüf danach im Archiv nach, dass das
45
+ Verschobene wirklich dort steht (eine Zeile daraus suchen), bevor du es als erledigt meldest.
46
+ 5. **Sag laut, was du geändert hast:** was neu drinsteht, was ins Archiv ging, Zeilen vorher → nachher.
47
+
48
+ ## 3. Gelernte Regeln — gehört etwas festgehalten?
49
+ **Nur bei echtem Anlass**, nicht als Pflichtübung. Ein Anlass ist: Ich habe dich heute korrigiert,
50
+ eine Arbeitsweise ausdrücklich gewollt, oder dieselbe Art Frage zum dritten Mal gleich beantwortet.
51
+ Kein Anlass? Sag das in einem Halbsatz und geh weiter.
52
+
53
+ Gibt es einen, **schlag die Regel vor** — ein Satz, was du künftig anders machst, dazu Datum und
54
+ Anlass in einem Satz — und trag sie erst nach meinem OK ein. Wohin, hängt davon ab, was sie ist:
55
+
56
+ | Was ist es? | Wohin |
57
+ |---|---|
58
+ | **Eine Arbeitsregel** — wie du arbeiten, fragen, prüfen, erklären sollst | `~/.claude/rules/kimal3-coach.md`, **unten** im Abschnitt „Gelernte Regeln" (neueste unten) |
59
+ | **Etwas über mich** — wer ich bin, meine Rollen, meine Werkzeuge | meine `~/.claude/CLAUDE.md` |
60
+ | **Etwas über dieses Projekt** — Aufbau, Werkzeuge, Fallen | die `CLAUDE.md` im Projektordner |
61
+
62
+ 🔬 **Vorher nachsehen, ob es die Regel schon gibt** — im Coach und in den CLAUDE.md-Dateien. Steht
63
+ sie schon da, trag sie **nicht** doppelt ein: Sag mir, wo sie steht und dass sie heute nicht
64
+ gegriffen hat. Eine Regel, die zweimal dasteht, wird nicht besser befolgt.
65
+ ⚠️ **Gibt es `~/.claude/rules/kimal3-coach.md` nicht**, kommt auch eine Arbeitsregel in meine
66
+ `~/.claude/CLAUDE.md`. Leg die Coach-Datei **nicht** selbst an — sie gehört kimal3.
67
+ 🔴 **Im Coach änderst du NUR den Abschnitt „Gelernte Regeln"** und schreibst nur unten dazu. Alles
68
+ darüber ist die Vorlage von kimal3 — dort änderst du nichts.
69
+
70
+ Sag danach laut, **welcher Satz in welcher Datei** steht (vollständiger Pfad). Der Ordner
71
+ `~/.claude` ist meist kein Git-Repo — die Datei ist dann nicht über Git gesichert; sag das dazu.
72
+
73
+ ## 4. Projekt aufräumen (leichtgewichtig)
74
+ - Offensichtlichen Müll entfernen (`.DS_Store`, `*.tmp`, `*.log`, `__pycache__`).
75
+ - Bei allem Unklaren: **nicht** löschen — auflisten und mich fragen.
76
+
77
+ ## 5. Sichern (mit meinem OK)
78
+ - Stage die relevanten Änderungen **Datei für Datei** — **niemals** Secrets oder `.env*`, und kein
79
+ `git add -A`, das fremde Arbeit mitnimmt.
80
+ - Zeig mir kurz, was in den Commit geht — **und was bewusst draußen bleibt**: Dateien, die Git noch
81
+ nicht kennt und die nicht aus dieser Sitzung stammen, stehen mit Namen und einem Satz, was sie
82
+ sind, in derselben Liste. (Sie kommen oft aus einer anderen Sitzung und fallen sonst niemandem
83
+ auf.) Mein OK zum Commit gilt für die ganze Liste; will ich eine davon doch dabeihaben, sage ich es.
84
+ - Schlag eine Commit-Nachricht vor.
85
+ - Nach meinem OK: committen.
86
+ - **Pushen, je nach Projekt:** Prüf mit `git remote`, ob es überhaupt ein Ziel gibt.
87
+ - Kein Ziel: sag das kurz — der Commit ist dann die Sicherung, fertig.
88
+ - Ein Ziel: **frag, ob du pushen sollst** (der Schritt „nach außen"). Steht in der
89
+ Projekt-`CLAUDE.md`, dass ein Push etwas auslöst (zum Beispiel die Live-Seite neu ausliefert),
90
+ sag das dazu. Erst nach meiner Bestätigung `git push`.
91
+
92
+ ## 6. Zusammenfassen & Abschied
93
+ - 2–3 Sätze **ohne Fachjargon**: Was haben wir heute geschafft, was habe ich gelernt — und in
94
+ einem Satz, was aufgeräumt wurde.
95
+ - **Ein** konkreter, kleiner nächster Schritt fürs nächste Mal (der Cliffhanger — klein halten).
96
+ - Kurzer, freundlicher Abschied wie ein guter Kollege, der Feierabend macht. Warte auf meine
97
+ Antwort, bevor die Sitzung endet.
@@ -44,6 +44,8 @@ beantwortet keine davon gut. Genau deshalb ist das ein Gespräch und kein Formul
44
44
 
45
45
  Schreib die Antwort in die Datei, die `kimal3 kontext fragen` genannt hat, unter ihre
46
46
  `## `-Überschrift. Die `>`-Hinweiszeilen gehören uns: **stehen lassen, darunter schreiben.**
47
+ **Wie die Antwort aussieht** (nie mitten im Satz umbrechen, kein Fett) steht in
48
+ `SKILL.md`, Schritt 3 des Ablaufs — halte dich daran, sonst ist sie in der App kaum lesbar.
47
49
 
48
50
  🔴 **Nichts erfinden**, auch nichts vorschlagen, was wie eine Antwort aussieht. Weiß der Mensch
49
51
  etwas nicht, **bleibt die Frage offen** und ist beim nächsten Mal wieder da.