kimal3 0.1.6 → 0.2.1

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/nachricht.js CHANGED
@@ -62,6 +62,21 @@ function teile(v) {
62
62
  }
63
63
  return zahlen;
64
64
  }
65
+ /**
66
+ * Laesst sich das ueberhaupt als Versionsstand lesen?
67
+ *
68
+ * 🔴 **Gebraucht, weil `istAelter` unten bei Muell `false` sagt** -- und
69
+ * `false` heisst dort „nicht aelter", was ein Aufrufer als „neu genug" liest.
70
+ * Fuer den Update-Hinweis ist das richtig („im Zweifel schweigen"), fuer eine
71
+ * Faehigkeits-Frage (`cli/src/faehigkeiten.ts`) ist es genau verkehrt: Dort
72
+ * wuerde ein unlesbarer Kopf zur Auskunft „die Fassung kann alles".
73
+ *
74
+ * *Dieselbe Antwort `false` bedeutet an zwei Stellen Verschiedenes -- deshalb
75
+ * muss die Frage „ist das ueberhaupt eine Nummer" getrennt gestellt werden.*
76
+ */
77
+ export function istVersionsstand(v) {
78
+ return teile(v) !== null;
79
+ }
65
80
  /**
66
81
  * Ist `a` aelter als `b`? Zahl fuer Zahl, nicht als Text.
67
82
  *
@@ -100,9 +115,73 @@ export function heuteAus(d) {
100
115
  return new Intl.DateTimeFormat("sv-SE", { timeZone: "Europe/Berlin" }).format(d);
101
116
  }
102
117
  /**
103
- * Die ganze Entscheidung, als Funktion von vier Werten.
118
+ * Die Kennung eines FIRMENKONTEXT-Hinweises faengt hiermit an, und dahinter
119
+ * steht der Server-Stand, den er meint (`kontext-2026-08-26T09:00:00Z`).
120
+ *
121
+ * 🔑 Sie steht als eigener Name da, weil sie von ZWEI Seiten gebraucht wird:
122
+ * `firmenHinweisAus` baut die Kennung, `hinweisErledigt` liest sie wieder
123
+ * auseinander. Zwei getippte `"kontext-"` waeren zwei Wahrheiten -- und die
124
+ * zweite verrottete lautlos, weil ein Hinweis, der nicht mehr erkannt wird,
125
+ * einfach wieder erscheint, statt einen Fehler zu machen.
104
126
  */
105
- export function sollZeigen(h, eigeneVersion, gesehen, heute) {
127
+ export const KONTEXT_HINWEIS_PRAEFIX = "kontext-";
128
+ /**
129
+ * Ist der ANLASS dieses Hinweises inzwischen erledigt?
130
+ *
131
+ * 🔴 DER FALL, DER DIESE FUNKTION RECHTFERTIGT (offener Punkt A-4, gemessen
132
+ * am 2026-08-26): Direkt nach `kimal3 kontext runter` stand da
133
+ *
134
+ * Dein Firmenkontext ist aktuell.
135
+ * Nordwind hat den Firmenkontext aktualisiert. kimal3 kontext runter
136
+ *
137
+ * -- die zweite Zeile riet zu genau dem Befehl, der gerade gelaufen war. Kein
138
+ * Rechenfehler: Die CLI schickt ihren Stand VOR dem Herunterladen mit, der
139
+ * Server vergleicht ihn mit seinem eigenen und haengt den Hinweis an. Bis der
140
+ * Hinweis ausgegeben wird, hat der Befehl den lokalen Stand laengst
141
+ * nachgezogen. *Die Meldung kam einen Aufruf zu spaet.*
142
+ *
143
+ * Die Regel dagegen: **Ein Hinweis, dessen Stand der lokale Merkzettel JETZT
144
+ * traegt, ist erledigt und wird nicht ausgegeben.**
145
+ *
146
+ * ⚠️ NUR Kontext-Hinweise. Die globale Nachricht aus der Datenbank traegt eine
147
+ * UUID als Kennung und darf durch diese Regel NIE verstummen -- sie hat mit
148
+ * dem Firmenkontext nichts zu tun, und ein Kanal, der sich versehentlich selbst
149
+ * stilllegt, faellt niemandem auf.
150
+ *
151
+ * ⚠️ `null` und leer heissen "wir wissen es nicht", nicht "erledigt": Wer den
152
+ * lokalen Stand nicht kennt, darf keinen Hinweis unterdruecken. Im Zweifel
153
+ * zeigen -- eine Zeile zu viel ist harmlos, eine verschluckte Zeile nicht.
154
+ */
155
+ export function hinweisErledigt(hinweisId, lokalerStandJetzt) {
156
+ if (!hinweisId)
157
+ return false;
158
+ if (!hinweisId.startsWith(KONTEXT_HINWEIS_PRAEFIX))
159
+ return false;
160
+ const gemeinterStand = hinweisId.slice(KONTEXT_HINWEIS_PRAEFIX.length);
161
+ if (gemeinterStand === "")
162
+ return false;
163
+ if (lokalerStandJetzt === null || lokalerStandJetzt === "")
164
+ return false;
165
+ return gemeinterStand === lokalerStandJetzt;
166
+ }
167
+ /**
168
+ * Die ganze Entscheidung, als Funktion von fuenf Werten.
169
+ *
170
+ * 🔴 `lokalerKontextStandJetzt` IST ABSICHTLICH PFLICHT, nicht optional
171
+ * (A-4). Am 2026-08-26 hat dieses Projekt gemessen, was ein optionales
172
+ * Argument anrichtet: `lageFuerDatei` konnte erkennen, dass sich unsere
173
+ * Vorlage geaendert hat -- die Aufrufstelle uebergab den noetigen Wert nie,
174
+ * und weil das Argument optional war, fehlte keine Zeile, meckerte kein
175
+ * Compiler und wurde kein Waechter rot. Die Rechnung war gebaut, geprueft,
176
+ * dokumentiert und in der Wirklichkeit tot. *Ein Pflicht-Argument ist die
177
+ * einzige Verdrahtung, die der Compiler fuer einen mitdenkt.*
178
+ *
179
+ * 🔑 UND ER MUSS FRISCH SEIN. Der Wert, den die CLI im Kopf mitschickt, wird
180
+ * VOR dem Netzaufruf gelesen; dieser hier gehoert an das ENDE des Befehls.
181
+ * Wer denselben Wert zweimal benutzt, baut den Fehler wieder ein, gegen den
182
+ * `hinweisErledigt` geschrieben ist.
183
+ */
184
+ export function sollZeigen(h, eigeneVersion, gesehen, heute, lokalerKontextStandJetzt) {
106
185
  if (!h.id)
107
186
  return false;
108
187
  if (!h.text || h.text.trim() === "")
@@ -110,6 +189,11 @@ export function sollZeigen(h, eigeneVersion, gesehen, heute) {
110
189
  // Leeres Feld = alle sehen es. Sonst nur, wer aelter ist als die Grenze.
111
190
  if (h.gilt_unter_version && !istAelter(eigeneVersion, h.gilt_unter_version))
112
191
  return false;
192
+ // Der Anlass ist erledigt -- der Befehl, zu dem geraten wird, ist gerade
193
+ // gelaufen. Bewusst VOR der Tagessperre: Ein Hinweis, der gar nicht mehr
194
+ // gilt, soll auch nicht den einen Platz des Tages verbrauchen.
195
+ if (hinweisErledigt(h.id, lokalerKontextStandJetzt))
196
+ return false;
113
197
  // Hoechstens einmal am Tag -- auch bei zwanzig Befehlen.
114
198
  if (gesehen[h.id] === heute)
115
199
  return false;
@@ -196,3 +280,54 @@ export function skillZustand(inhalt, eigeneVersion) {
196
280
  export function skillMeldung() {
197
281
  return "\n → Deine kimal3-Skilldateien sind aelter als die CLI. kimal3 skill install\n";
198
282
  }
283
+ /**
284
+ * Zerlegt den Kopf `X-Kimal3-Kontext-Stand`: `<firmen-id>:<stand>` (Task 10).
285
+ *
286
+ * ⚠️ AM ERSTEN DOPPELPUNKT TRENNEN, nicht am `split(":")[1]`: `stand` ist oft
287
+ * ein ISO-Zeitstempel und traegt selbst Doppelpunkte
288
+ * (`2026-08-21T07:12:33.456Z`). Ein `split` wuerde ihn mitten durchschneiden.
289
+ *
290
+ * Fehlt der Kopf, ist er leer, hat keinen Doppelpunkt oder ist eine Seite
291
+ * leer -> `null`. Diese Datei rechnet nur; SIE PRUEFT NICHT, ob die Firmen-ID
292
+ * echt ist oder der Anrufer ihr Mitglied ist -- das ist Datenbankzugriff und
293
+ * gehoert der Aufrufstelle (`src/lib/cli/nachricht.ts`).
294
+ */
295
+ export function kontextStandAusKopf(wert) {
296
+ if (!wert)
297
+ return null;
298
+ const trenner = wert.indexOf(":");
299
+ if (trenner <= 0)
300
+ return null;
301
+ const firmaId = wert.slice(0, trenner);
302
+ const stand = wert.slice(trenner + 1);
303
+ if (stand === "")
304
+ return null;
305
+ return { firmaId, stand };
306
+ }
307
+ /**
308
+ * Die ZWEITE Quelle des Update-Kanals (Task 10) -- rein: Sie bekommt den
309
+ * lokalen Stand (aus dem Kopf, schon geparst) und den server-gefuehrten
310
+ * Stand samt Firmennamen fertig nachgeschlagen und ENTSCHEIDET nur noch.
311
+ *
312
+ * 🔴 WARUM DER SERVER-STAND UND NICHT DER ROHE KOPF VERGLICHEN WIRD: Der
313
+ * Server weiss nicht, was auf der Platte des Kunden liegt -- die CLI schickt
314
+ * ihren Stand, die App vergleicht ihn nur mit ihrem eigenen (Bauplan Step 2).
315
+ *
316
+ * 🔑 `id: kontext-<serverStand>` (Step 3): Die Tagessperre der CLI merkt sich
317
+ * Hinweise nach `id` -- aendert die Firma den Kontext ein zweites Mal am
318
+ * selben Tag, aendert sich `serverStand` und damit automatisch die `id`. Der
319
+ * Hinweis erscheint also je NEUEM Stand genau einmal, ohne dass diese
320
+ * Funktion selbst je ein Datum ansieht.
321
+ *
322
+ * 🔑 US-8: `firmenName` steht IM TEXT, nicht nur die ID -- wer in zwei Firmen
323
+ * ist, muss lesen koennen, WELCHE gemeint ist.
324
+ */
325
+ export function firmenHinweisAus(lokalerStand, serverStand, firmenName) {
326
+ if (lokalerStand === serverStand)
327
+ return null;
328
+ return {
329
+ id: `${KONTEXT_HINWEIS_PRAEFIX}${serverStand}`,
330
+ text: `${firmenName} hat den Firmenkontext aktualisiert. kimal3 kontext runter`,
331
+ gilt_unter_version: null,
332
+ };
333
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kimal3",
3
- "version": "0.1.6",
3
+ "version": "0.2.1",
4
4
  "description": "Trag deine KI-Projekte dort ein, wo sie entstehen: im Terminal.",
5
5
  "type": "module",
6
6
  "bin": {
package/skill/SKILL.md CHANGED
@@ -43,6 +43,21 @@ Das ist meist richtig, aber nicht immer schön (`s.mueller@…` wird zu `werkban
43
43
  **Frag den Menschen nach seinem Vornamen und gib ihn mit**, statt es dem Server zu überlassen —
44
44
  er heißt selten so, wie seine Adresse aussieht.
45
45
 
46
+ 🔴 **Gehört der Mensch zu MEHREREN Firmen, fragen beide Befehle nach — mit `--firma`.**
47
+ Sie legen dann nichts an, sondern nennen die Firmen als fertige Zeilen zum Kopieren. Das ist
48
+ kein Fehler, sondern die Rückfrage: Der Ordner trägt den Namen der Firma, und raten darf der
49
+ Befehl ihn nicht.
50
+
51
+ ```
52
+ kimal3 arbeitsplatz neu sabine --firma "Nordwind Handel GmbH"
53
+ kimal3 werkbank neu sabine --firma "Nordwind Handel GmbH"
54
+ kimal3 werkbank neu sabine --firma-id "…" # falls zwei Firmen GLEICH heissen
55
+ ```
56
+
57
+ ⚠️ Der Rückgabewert ist dann `1` und die Absage steht auf der Fehlerausgabe. **Nimm eine der
58
+ angebotenen Zeilen, statt es unverändert zu wiederholen** — ohne `--firma` kommt dieselbe
59
+ Rückfrage noch einmal.
60
+
46
61
  ⚠️ **`werkbank neu` verlangt ein eigenes Pro-Konto.** Die Route prüft den Plan **pro Person**
47
62
  (`konto_plan`), nicht über die Firmen-Mitgliedschaft. Ein Kollege ohne eigenes Pro bekommt
48
63
  Rückgabewert `4` — dann **nicht** wiederholen und nicht raten, sondern genau das sagen: Sein
@@ -66,21 +81,99 @@ Der oberste Ordner heißt immer gleich, ein zweiter Name ist dort nicht mehr vor
66
81
  Frage bleibt trotzdem stehen — **weil sie die richtige ist**, nicht weil die Falle noch offen
67
82
  wäre.
68
83
 
69
- **Danach:** in die Werkbank wechseln und **jeden Platzhalter in eckigen Klammern** gemeinsam
70
- ausfüllen — `[FIRMA]` und `[NAME]` sind nur die häufigsten, es sind zehn verschiedene. Sie
71
- stehen absichtlich noch drin — frag nach, statt zu raten. `[DATUM]` ist schon gefüllt.
84
+ **Danach:** in die **Werkbank** wechseln und dort die Platzhalter in eckigen Klammern
85
+ gemeinsam ausfüllen — es sind vier verschiedene. Such nach eckigen Klammern, statt einer Liste
86
+ zu folgen: Eine abgetippte Liste veraltet in dem Moment, in dem die Vorlage wächst. Frag nach,
87
+ statt zu raten.
72
88
 
73
- 🔑 **Zuerst die zwei Dateien, die bei JEDEM Start mitladen** (`CLAUDE.md` der Firma und der
74
- Werkbank) — dort kostet ein leerer Vordruck jede Sitzung. Der Rest (`kontext/firma.md`) kann
75
- warten, bis er gebraucht wird.
89
+ ⚠️ `[FIRMA]` findest du meist schon ausgefüllt — den Namen setzt der Server beim Ausliefern ein.
90
+ `[DATUM]` ebenso. Was übrig bleibt, sind die Angaben über den **Menschen** vor dir.
76
91
 
77
- ⚠️ **Nicht nach dieser Liste suchen, sondern nach eckigen Klammern.** Hier stand bis zum
78
- 2026-08-19 eine Aufzählung mit einem Platzhalter, den es gar nicht gab — „Rolle“ ist eine
79
- Beschriftung, kein Vordruck — und ohne sieben, die es gab. *Eine abgetippte Liste veraltet in dem Moment, in dem die Vorlage wächst.*
92
+ 🔴 **Nur in der Werkbank — nirgends sonst.** Die oberste `CLAUDE.md` und alles in `kontext/`
93
+ gehören der **Firma**, nicht dem Menschen vor dir. Den Firmennamen setzt der Server beim
94
+ Ausliefern selbst ein; die Fragen in `kontext/` beantwortet ihr über
95
+ `kimal3 kontext fragen` (s. den nächsten Abschnitt). **Schreib dort nichts hinein, was du dir
96
+ selbst ausgedacht hast** — beim nächsten `kimal3 kontext runter` ist es weg, und bis dahin steht
97
+ dort eine Auskunft über die Firma, die sich niemand aus der Firma ausgedacht hat.
80
98
 
81
99
  ⚠️ **Nicht die Vorlage „aufräumen".** Das Beispiel-Projekt trägt oben groß, dass kein Code
82
100
  darin liegt. Nichts davon ausführen und nicht versuchen, es lauffähig zu machen.
83
101
 
102
+ ## Firmenkontext aktuell halten (`kimal3 kontext runter` · `kimal3 kontext hoch`)
103
+
104
+ **Wann:** Der Mensch fragt, ob sein Firmenkontext aktuell ist, hat gerade `arbeitsplatz neu`
105
+ oder `werkbank neu` ausgeführt, will wissen, was am Firmenkontext noch fehlt, oder will als
106
+ Admin eine Änderung an `kontext/*.md` an die Firma weitergeben.
107
+
108
+ `kimal3 kontext runter` holt `CLAUDE.md` und die fünf Dateien in `kontext/`
109
+ (`kurzprofil.md`, `firma.md`, `marke.md`, `systeme.md`, `sicherheit.md`) von der Firma und legt
110
+ sie im gefundenen KI-Arbeitsplatz ab. Lokal geänderte Dateien fasst er **nicht** an — er sagt in
111
+ seiner Ausgabe, was als Nächstes zu tun ist (Admin: `kontext hoch`; sonst: an den genannten
112
+ Admin weitergeben).
113
+
114
+ ### Den Firmenkontext ausfüllen — der Ablauf
115
+
116
+ In `kontext/` stehen **Fragen über die Firma**, keine Lückentexte. Beantwortet werden sie im
117
+ Gespräch mit dir — oder in der App unter **Firma → Kontext**. Beide Wege führen an dieselbe
118
+ Stelle.
119
+
120
+ 1. **`kimal3 kontext fragen`** — er gibt jede Frage aus, unter der noch nichts steht: Datei,
121
+ Anker, Frage, Hinweis. Sind alle beantwortet, sagt er das in einem Satz, und du bist fertig.
122
+ Der Befehl liest nur; er braucht weder Netz noch Anmeldung.
123
+ 2. **Die Fragen EINZELN stellen.** Eine Frage, die Antwort abwarten, dann die nächste. Keine
124
+ lange Liste und kein Fragebogen am Stück — es sind Fragen über die Firma eines Menschen, und
125
+ die beantwortet er nicht in einem Rutsch.
126
+ 3. **Die Antwort in die genannte Datei schreiben** — unter ihre `## `-Überschrift, über der der
127
+ Anker steht. Die Hinweiszeilen mit `>` gehören uns; **lass sie stehen und schreib darunter.**
128
+
129
+ 🔴 **Die Pfade zählen ab dem Ordner, den `kontext fragen` als `Arbeitsplatz:` nennt — nicht
130
+ ab deinem Arbeitsverzeichnis.** Der Normalfall ist, dass beides auseinanderfällt:
131
+ `kimal3 arbeitsplatz neu` rät ausdrücklich, in die **Werkbank** zu wechseln und dort Claude
132
+ zu starten; die fünf Dateien liegen dann eine Ebene höher. **Setz jeden Pfad an den
133
+ genannten Arbeitsplatz an, bevor du schreibst.**
134
+ ⚠️ Wer das übergeht, legt eine **neue** Datei am falschen Ort an. `kimal3 kontext hoch` liest
135
+ weiter die echten Dateien und schickt leere Antworten hoch — *beide Seiten melden Erfolg, und
136
+ die Arbeit des Menschen ist trotzdem weg.*
137
+ 4. **`kimal3 kontext hoch`** — schickt alle fünf Dateien an die Firma. **Nur der Firmen-Admin
138
+ darf das.**
139
+
140
+ 🔴 **Erfinde keine Antwort, und schlage keine vor, die wie eine Antwort aussieht.** Genau
141
+ deshalb gibt es diesen Umbau: Vorher standen dort fertige Beispieltexte von kimal3, und ein
142
+ Klick machte sie zur Aussage der Firma. Weiß der Mensch etwas nicht, **bleibt die Frage offen**
143
+ — sie ist dann beim nächsten `kimal3 kontext fragen` wieder da. Ein „[noch klären]", das er
144
+ selbst schreibt, ist in Ordnung; ein Satz, den du dir ausdenkst, nicht.
145
+
146
+ ⚠️ **Sieht eine der fünf Dateien nicht mehr aus wie ihre Frageliste — etwa weil etwas Fremdes
147
+ darüberkopiert wurde —, bricht `kontext hoch` ab und schickt gar nichts, auch die vier anderen
148
+ nicht** (Rückgabewert `1`). Das ist **kein** „noch einmal versuchen": Sag dem Menschen, welche
149
+ Datei gemeint ist, und hol sie mit `kimal3 kontext runter` zurück.
150
+
151
+ 🔴 **Bei `kontext hoch` sagt die Zahl `1` allein GAR NICHTS — die Meldung sagt es. LIES SIE.**
152
+
153
+ ⚠️ **Hier stand bis zum 2026-08-28: „Rückgabewert `1` heißt ‚du bist kein Admin dieser
154
+ Firma'".** Das war falsch und gefährlich. `kontext hoch` hat **sechs** verschiedene Ausgänge
155
+ auf dieser einen Zahl (`cli/src/befehle/kontext-hoch.ts`): unbekannte Option · kein
156
+ Arbeitsplatz gefunden · eine Datei nicht lesbar · eine Datei ohne Fragen · „jemand anderes hat
157
+ geändert" (Ausweg `--ueberschreiben`) · mehrere Firmen (Ausweg `--firma`) — und die Rolle.
158
+
159
+ 🔴 **Der teuerste davon steht in `kontext-hoch.ts` (Merkzettel-Zweig) und ist ein ERFOLG:** *„Die Firma hat
160
+ deine Änderungen gespeichert — nur der lokale Merkzettel ließ sich nicht schreiben."* Auch das
161
+ gibt `1` zurück. Wer die Zahl als „kein Admin" deutet, sagt einem Menschen, der gerade alle
162
+ Fragen beantwortet und **erfolgreich hochgeschickt** hat, er solle sich an seinen Admin wenden.
163
+ *Ein Erfolg, als Absage vorgelesen — und er tippt danach alles noch einmal.*
164
+
165
+ **Also:** Nimm den Satz, den der Befehl geschrieben hat, und sag dem Menschen, was er bedeutet.
166
+ Geht es wirklich um die Rolle, nenne den Admin — lief vorher `kontext runter`, kennt dessen
167
+ Ausgabe den Namen bereits; sonst frag, wer in der Firma Admin ist. Ein zweiter Versuch hilft nur
168
+ dort, wo die Meldung einen Ausweg nennt (`--ueberschreiben`, `--firma`), sonst nie.
169
+
170
+ ⚠️ **Beide Befehle brauchen wie `werkbank neu` ein eigenes Pro-Konto** — ohne das kommt
171
+ Rückgabewert `4`, dann **nicht wiederholen**.
172
+
173
+ `kimal3 kontext hoch --ueberschreiben` erzwingt das Speichern, auch wenn die Firma inzwischen von
174
+ jemand anderem geändert wurde. **Nur auf ausdrücklichen Wunsch einsetzen** — sonst geht die
175
+ Änderung des Kollegen oder der Kollegin verloren.
176
+
84
177
  ## Erst nachsehen, dann schreiben
85
178
  `kimal3 projekt liste` — steht es schon da, **nicht** noch einmal eintragen.
86
179
 
@@ -186,8 +279,10 @@ mitbestimmungspflichtig. Das entscheidet die Firma, nicht dieses Werkzeug.
186
279
  **nicht** wiederholen
187
280
 
188
281
  🔴 **Die `1` hat mehrere Gründe, und sie verlangen Verschiedenes:** „wähl eine Firma", „leg
189
- zuerst ein Erfolgsprofil an", „die Eingabe passt nicht", „das Paket ist unvollständig". **Gib
190
- niemals einen Standard-Rat auf die Zahl allein** — die Meldung nennt jedes Mal, was zu tun ist.
282
+ zuerst ein Erfolgsprofil an", „die Eingabe passt nicht", „das Paket ist unvollständig", und bei
283
+ `kontext hoch` ausdrücklich **„du bist kein Admin"** (s. oben) — dort **nicht** wiederholen,
284
+ sondern sagen, an wen sich der Mensch wendet. **Gib niemals einen Standard-Rat auf die Zahl
285
+ allein** — die Meldung nennt jedes Mal, was zu tun ist.
191
286
 
192
287
  ⚠️ Hier stand kurzzeitig „dann ist `npm install -g kimal3` der Weg". Das hätte bei „du gehörst
193
288
  zu zwei Firmen" eine Neuinstallation empfohlen — für einen völlig normalen Fall. *Ein
@@ -1,24 +1,69 @@
1
1
  ---
2
- description: Übersicht — alle kimal3-Befehle und was du damit tun kannst
2
+ description: Wo du stehst — und alle kimal3-Befehle auf einen Blick
3
3
  ---
4
4
 
5
5
  <!-- kimal3:erzeugt — diese Datei wird von `kimal3 skill install` gepflegt und bei
6
6
  jedem Update ueberschrieben. Eigene Aenderungen gehen dabei verloren; wer sie
7
7
  behalten will, kopiert die Datei unter einem anderen Namen. -->
8
- # kimal3 — Übersicht
8
+ # kimal3 — wo du stehst
9
+
10
+ Beantworte zuerst **„wo stehe ich?"**, erst danach kommt die Befehlsliste. Dieser Befehl
11
+ **trägt nichts ein** — er liest nur.
12
+
13
+ ## 1. Den Stand holen — drei Aufrufe in dieser Reihenfolge
14
+
15
+ ```
16
+ kimal3 --version
17
+ kimal3 kontext fragen
18
+ kimal3 projekt liste
19
+ ```
20
+
21
+ 🔴 **Die tragende Regel: Was lokal beantwortbar ist, wird IMMER beantwortet.** Die ersten
22
+ beiden lesen nur Dateien auf der Platte — weder Netz noch Anmeldung. Nur der dritte geht
23
+ ins Netz. Kommt er mit **irgendeinem** Wert außer `0` zurück, **brich nicht ab**: schreib bei
24
+ den Projekten, was seine Meldung sagt, und **stell die beiden lokalen Zeilen trotzdem hin**.
25
+
26
+ 🔴 **Und `1` ist bei `projekt liste` KEINE Störung, sondern der Normalzustand eines frischen
27
+ Pro-Käufers:** *„Du hast noch kein Erfolgsprofil."* Ein Profil hat erst, wer den Kurs durch
28
+ hat — der Kunde, für den dieser Befehl gebaut ist, sieht das also beim ersten Mal fast immer.
29
+ „Gerade nicht abrufbar" wäre hier **falsch**; schreib `Erfolgsprofil: noch keins` und nimm den
30
+ Schritt aus Abschnitt 3.
31
+ ⚠️ Die Liste `2`/`3`/`4` stand hier bis zur vierten Prüfrunde allein — und ließ ausgerechnet
32
+ den häufigsten Fall ungedeckt. *Zähl bei Rückgabewerten nie auf, was du kennst; sag, was bei
33
+ allem anderen gilt.*
34
+ *Ein Befehl, der sagt, wo man steht, darf nicht ausgerechnet dann verstummen, wenn etwas
35
+ nicht stimmt* — sonst schweigt er genau in dem Moment, in dem jemand wissen will, was ihm
36
+ fehlt. Auch `4` (kein Pro-Zugang) ist hier **kein** Grund zu schweigen.
37
+
38
+ ## 2. Die vier Zeilen, die du hinschreibst
39
+
40
+ | Zeile | Woher — und was dabei zu beachten ist |
41
+ |---|---|
42
+ | `Ausweis hinterlegt für <adresse>` | Aus `--version`. ⚠️ Sag **nicht** „angemeldet als": Die Zeile liest nur die Ausweis-Datei; ob der Server ihn noch annimmt, weiß allein der Server. Steht dort `Nicht angemeldet.`, ist **das** die Lage. |
43
+ | `Firmenkontext: <N> von <M> Fragen noch offen` | Aus `kontext fragen`, **wörtlich übernommen**. ⚠️ Die Platzhalter stehen hier mit Absicht: Eine Beispielzahl in genau der Zeile, die „wörtlich übernehmen" sagt, lädt zum Abschreiben ein. 🔴 **Rechne die Zahl NICHT um** in „3 von 17 beantwortet": Das wäre eine zweite Wahrheit über dieselbe Sache, und sie wird falsch, sobald sich der Fragenkatalog ändert. Sind alle beantwortet, sagt er es selbst (`✓ Alle … Fragen …`) — dann übernimm auch das. ⚠️ Die Gesamtzahl ist **nicht fest**: Sie hängt am Fragenkatalog des Ordners und wächst mit ihm. Nenne nie eine Zahl, die du nicht gerade gelesen hast. |
44
+ | `Projekte im Profil: 2` | Aus `projekt liste`. Klappt der Abruf nicht: „gerade nicht abrufbar", und weiter nach der Regel oben. |
45
+ | **`Dein nächster Schritt: …`** | Aus den drei Zeilen abgeleitet — s. Abschnitt 3. Fehlt eine Angabe, nenn den Schritt **so weit wie möglich**, statt gar keinen. |
46
+
47
+ ## 3. Der nächste Schritt — die Lage entscheidet, nicht die Gewohnheit
9
48
 
10
- Zeig dem Menschen, was dieses Werkzeug kann. **Nichts abrufen, nichts eintragen** — dieser
11
- Befehl erklärt nur.
49
+ | Lage | Was du sagst |
50
+ |---|---|
51
+ | `--version` sagt `Nicht angemeldet.` | `! kimal3 login` — **der Mensch tippt das selbst**, er bestätigt im Browser. Das kann ich nicht für ihn tun. |
52
+ | Angemeldet, aber `kontext fragen` bricht mit `1` und „Hier steht kein KI-Arbeitsplatz" ab | 🔴 **Rate hier NICHT sofort `arbeitsplatz neu`.** Die Meldung heißt „ich habe von hier aufwärts keinen gefunden" — nicht „es gibt keinen". Der häufigere Fall ist, dass der Mensch schlicht woanders steht; die CLI selbst rät deshalb „Wechsle in deinen Arbeitsplatz-Ordner". **Frag erst: „Hast du schon einen KI-Arbeitsplatz-Ordner?"** Ja → dorthin wechseln und noch einmal. Nein → `! kimal3 arbeitsplatz neu`, vom Menschen getippt. ⚠️ Wer hier falsch rät, legt einen **zweiten, leeren** Arbeitsplatz an; der Firmenkontext steht danach in zwei Ordnern, und `kontext hoch` schickt aus dem falschen. |
53
+ | Arbeitsplatz da, Fragen offen | `/k3kontext` — ich stelle die Fragen einzeln. |
54
+ | `projekt liste` sagt „Du hast noch kein Erfolgsprofil" | Das Profil entsteht im Kurs. Nenn die Adresse aus seiner Meldung (`…/profil`) — **nicht** `/k3projekt`: Ohne Profil gibt es nichts, worin ein Projekt stehen könnte. |
55
+ | Alles beantwortet, Profil da, aber keine Projekte | `/k3projekt <was du gebaut hast>` |
56
+ | Alles steht | Sag genau das — **erfinde keinen Schritt**, nur damit einer dasteht. |
12
57
 
13
- ## 1. Die Befehlsliste holen, nicht auswendig aufsagen
58
+ ## 4. Die Befehlsliste holen, nicht auswendig aufsagen
14
59
 
15
- Führe `kimal3 --version` aus, dann `kimal3 --help`. Die Liste kommt aus dem Werkzeug selbst —
16
- so kann sie nicht veralten.
60
+ Führe `kimal3 --help` aus. Die Liste kommt aus dem Werkzeug selbst — so kann sie nicht
61
+ veralten.
17
62
 
18
63
  Antwortet die Shell mit „nicht gefunden", ist das einer von zwei Fällen; welcher, steht in
19
64
  `~/.claude/skills/kimal3/SKILL.md` ganz oben. Nenn beide, rate nicht.
20
65
 
21
- ## 2. So aufbereiten, dass klar wird, WER tippt
66
+ ## 5. So aufbereiten, dass klar wird, WER tippt
22
67
 
23
68
  Stell die Liste in zwei Gruppen dar:
24
69
 
@@ -30,20 +75,22 @@ Stell die Liste in zwei Gruppen dar:
30
75
 
31
76
  | Slash-Befehl | Wofür |
32
77
  |---|---|
78
+ | `/k3` | Wo du stehst — dieser Befehl hier |
79
+ | `/k3kontext` | Durch die offenen Fragen über deine Firma führen |
33
80
  | `/k3projekt <was du gebaut hast>` | Ein fertiges Projekt ins Erfolgsprofil eintragen |
34
81
  | `/k3liste` | Deine eingetragenen Projekte zeigen |
35
- | `/k3firma <deine Frage>` | Firmendaten holen und deine Frage dazu beantworten |
82
+ | `/k3analyse <deine Frage>` | Firmendaten holen und deine Frage dazu beantworten |
36
83
 
37
84
  Sag dazu: Die Slash-Befehle sind der **sichere** Weg — du musst dir keinen Satz merken. Ohne
38
85
  sie geht es auch: „das Projekt ist fertig" genügt, dann greife ich über den Skill.
39
86
 
40
- ## 3. Der fünfte Eintrag im Menü: `/kimal3` ist KEIN Befehl
87
+ ## 6. Der sechste Eintrag im Menü: `/kimal3` ist KEIN Befehl
41
88
 
42
89
  In derselben `/`-Liste steht auch **`/kimal3`**. Erklär den Unterschied **ungefragt** — das Menü
43
90
  wirft zwei verschiedene Sorten in eine Liste, und genau daran hat sich der erste Mensch gestoßen,
44
91
  der die Familie gesehen hat (Dennis, 2026-08-19):
45
92
 
46
- - Die vier **`/k3…`** sind **Slash-Befehle** (Dateien in `~/.claude/commands/`) — **der Mensch**
93
+ - Die fünf **`/k3…`** sind **Slash-Befehle** (Dateien in `~/.claude/commands/`) — **der Mensch**
47
94
  tippt sie bewusst.
48
95
  - **`/kimal3`** ist der **Skill** (`~/.claude/skills/kimal3/SKILL.md`) — meine
49
96
  Bedienungsanleitung. Sie ist der Grund, warum „das Projekt ist fertig" genügt: Ich schlage sie
@@ -51,11 +98,5 @@ der die Familie gesehen hat (Dennis, 2026-08-19):
51
98
  sie mehrere Dinge auf einmal und liest sich nicht wie ein Menüpunkt.
52
99
 
53
100
  Sag auch, was `/kimal3` **nicht** ist: **nicht die Installation.** Die ist `kimal3 skill install`
54
- im Terminal — der eine Befehl, der beides ablegt, den Skill **und** die vier `/k3…`. Was im Menü
101
+ im Terminal — der eine Befehl, der beides ablegt, den Skill **und** die fünf `/k3…`. Was im Menü
55
102
  steht, ist sein Ergebnis.
56
-
57
- ## 4. Zum Schluss der Stand
58
-
59
- Nenn aus der `--version`-Ausgabe die Version und mit welcher App das Werkzeug spricht, und ob
60
- ein Konto angemeldet ist. Ist keins angemeldet, ist der nächste Schritt `kimal3 login` —
61
- **vom Menschen getippt**.
@@ -0,0 +1,89 @@
1
+ ---
2
+ description: Die offenen Fragen über deine Firma im Gespräch beantworten
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
+ # Firmenkontext ausfüllen
9
+
10
+ ## 1. Zuerst die Regeln lesen
11
+
12
+ Lies **`~/.claude/skills/kimal3/SKILL.md`**, „Firmenkontext aktuell halten" und „Den
13
+ Firmenkontext ausfüllen — der Ablauf". Diese Datei wiederholt die Regeln bewusst nicht —
14
+ sonst gäbe es zwei Wahrheiten, die auseinanderlaufen.
15
+
16
+ ## 2. Nachsehen, was offen ist
17
+
18
+ ```
19
+ kimal3 kontext fragen
20
+ ```
21
+
22
+ Er liest nur und braucht weder Netz noch Anmeldung. **Nichts offen?** Sag das in einem Satz und
23
+ hör auf.
24
+
25
+ 🔴 **Die Zeile `Arbeitsplatz: …` ist die wichtigste der ganzen Ausgabe — die Pfade darunter
26
+ zählen ab dort, nicht ab deinem Arbeitsverzeichnis.** Der Normalfall ist, dass beides
27
+ auseinanderfällt: `arbeitsplatz neu` rät ausdrücklich, in die **Werkbank** zu wechseln und dort
28
+ Claude zu starten; die Dateien liegen dann eine Ebene höher. **Setz jeden Pfad an den genannten
29
+ Arbeitsplatz an, bevor du schreibst.**
30
+ ⚠️ Wer das übergeht, legt eine **neue** Datei am falschen Ort an. `kimal3 kontext hoch` liest
31
+ weiter die echten Dateien und schickt leere Antworten hoch — beide Seiten melden Erfolg, und die
32
+ Arbeit ist trotzdem weg.
33
+
34
+ **Kein Arbeitsplatz gefunden?** Die Meldung heißt „ich habe von hier aufwärts keinen gefunden" —
35
+ **nicht** „es gibt keinen". Frag erst: *Hast du schon einen KI-Arbeitsplatz-Ordner?* Ja → dorthin
36
+ wechseln und noch einmal. Nein → `kimal3 arbeitsplatz neu`. ⚠️ Wer hier falsch rät, legt einen
37
+ zweiten, leeren Arbeitsplatz an.
38
+
39
+ ## 3. Die Fragen stellen — eine nach der anderen
40
+
41
+ 🔴 **Eine Frage, die Antwort abwarten, dann die nächste.** Kein Fragebogen am Stück.
42
+ 🔑 Es sind Fragen über die Firma eines Menschen — wer sie alle auf einmal bekommt,
43
+ beantwortet keine davon gut. Genau deshalb ist das ein Gespräch und kein Formular.
44
+
45
+ Schreib die Antwort in die Datei, die `kimal3 kontext fragen` genannt hat, unter ihre
46
+ `## `-Überschrift. Die `>`-Hinweiszeilen gehören uns: **stehen lassen, darunter schreiben.**
47
+
48
+ 🔴 **Nichts erfinden**, auch nichts vorschlagen, was wie eine Antwort aussieht. Weiß der Mensch
49
+ etwas nicht, **bleibt die Frage offen** und ist beim nächsten Mal wieder da.
50
+
51
+ ⚠️ **Ein Abbruch mittendrin ist kein Sonderfall:** Die gegebenen Antworten stehen schon in den
52
+ Dateien, beim nächsten `/k3kontext` sind einfach weniger offen. **Verwalte keinen
53
+ Zwischenstand** — die Dateien *sind* der Stand.
54
+
55
+ ## 4. Hochschicken — erst zeigen, dann fragen
56
+
57
+ Zeig dem Menschen, **was an die Firma geht**, und warte auf sein ausdrückliches Ja. Erst dann:
58
+
59
+ ```
60
+ kimal3 kontext hoch
61
+ ```
62
+
63
+ 🔑 Die fünf Dateien gehören der **Firma** — alle Kolleginnen und Kollegen bekommen sie beim
64
+ nächsten `kimal3 kontext runter` zu sehen.
65
+ ⚠️ `kimal3 kontext hoch --ueberschreiben` **nur auf ausdrücklichen Wunsch**: Es verwirft, was
66
+ inzwischen jemand anderes an der Firma geändert hat.
67
+
68
+ ## 5. Wenn es nicht klappt
69
+
70
+ 🔴 **Bei `kontext hoch` sagt die Zahl `1` allein GAR NICHTS — lies die Meldung.** Sie ist der
71
+ Sammelausgang für mindestens sechs verschiedene Lagen, und sie verlangen Gegensätzliches:
72
+
73
+ | Was in der Meldung steht | Was es heißt |
74
+ |---|---|
75
+ | „Den Firmenkontext pflegt der Firmen-Admin." | An der Rolle ändert ein zweiter Versuch nichts. Nenn den Admin — lief vorher `kimal3 kontext runter`, steht sein Name in dessen Ausgabe. |
76
+ | „Hier steht kein KI-Arbeitsplatz" | **Nicht** `arbeitsplatz neu` raten! Siehe Abschnitt 2 — der Ordner existiert meist, nur steht der Mensch woanders. |
77
+ | „Der Kontext wurde inzwischen … geändert" | Der Ausweg steht in derselben Meldung: `--ueberschreiben`. Schlag ihn nur vor, wenn der Mensch die fremde Änderung wirklich verwerfen will — sie ist die Arbeit eines Kollegen. |
78
+ | mehrere Firmen / mehrdeutig | Der Ausweg heißt `--firma "…"`. **Du wählst nicht** — leg die Liste vor. |
79
+ | eine Datei ist nicht lesbar oder trägt keine Fragen mehr | `kimal3 kontext runter` holt sie zurück. |
80
+ | **„Du gehörst keiner Firma an."** | 🔴 **Schick ihn NICHT zu einem Admin — es gibt keinen.** Das trifft ausgerechnet den frischen Pro-Käufer: Er bekommt seinen Arbeitsplatz mit allen Fragen offen, beantwortet sie brav, und hier ist niemand, an den sie gehen könnten. Sag ihm, dass seine Antworten **in seinen Dateien stehen und dort bleiben**, und dass sie hochgehen, sobald es eine Firma gibt. Nichts geht verloren. |
81
+ | **„Die Firma hat deine Änderungen gespeichert — nur der lokale Merkzettel …"** | 🔴 **Das ist ein ERFOLG.** Alles ist oben angekommen; nur eine Datei auf der Platte ließ sich nicht schreiben. Sag genau das — **niemals** „das hat nicht geklappt". |
82
+
83
+ ⚠️ **Warum das hier so ausführlich steht:** Die letzte Zeile ist der teuerste Fall. Wer die `1`
84
+ als „kein Admin" deutet, sagt einem Menschen, der gerade alle Fragen beantwortet und
85
+ erfolgreich hochgeschickt hat, er solle sich an seinen Admin wenden. *Ein Erfolg, als Absage
86
+ vorgelesen.*
87
+
88
+ **Rückgabewert `4`**: angemeldet, aber kein Pro-Zugang — die Meldung zeigen, den Befehl **nicht**
89
+ wiederholen. Alles Übrige deutest du nach `SKILL.md`, Abschnitt „Rückgabewerte".
File without changes