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/README.md +3 -0
- package/dist/api.js +112 -0
- package/dist/arbeitsplatz-dateien.js +84 -22
- package/dist/argumente.js +150 -0
- package/dist/befehle/arbeitsplatz.js +139 -17
- package/dist/befehle/kontext-fragen.js +182 -0
- package/dist/befehle/kontext-gemeinsam.js +185 -0
- package/dist/befehle/kontext-hoch.js +236 -0
- package/dist/befehle/kontext-runter.js +305 -0
- package/dist/befehle/skill-install.js +51 -17
- package/dist/befehle/werkbank.js +128 -17
- package/dist/befehle-katalog.js +58 -2
- package/dist/firmen-liste.js +4 -2
- package/dist/fragen-lesen.js +178 -0
- package/dist/kimal3.js +29 -2
- package/dist/kontext-dateien.js +248 -0
- package/dist/kontext-stand.js +870 -0
- package/dist/nachricht.js +137 -2
- package/package.json +1 -1
- package/skill/SKILL.md +106 -11
- package/skill/commands/k3.md +59 -18
- package/skill/commands/k3kontext.md +89 -0
- /package/skill/commands/{k3firma.md → k3analyse.md} +0 -0
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
|
|
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
|
|
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
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
|
|
70
|
-
ausfüllen —
|
|
71
|
-
|
|
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
|
-
|
|
74
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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"
|
|
190
|
-
|
|
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
|
package/skill/commands/k3.md
CHANGED
|
@@ -1,24 +1,69 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
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 —
|
|
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
|
-
|
|
11
|
-
|
|
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
|
-
##
|
|
58
|
+
## 4. Die Befehlsliste holen, nicht auswendig aufsagen
|
|
14
59
|
|
|
15
|
-
Führe `kimal3 --
|
|
16
|
-
|
|
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
|
-
##
|
|
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
|
-
| `/
|
|
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
|
-
##
|
|
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
|
|
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
|
|
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
|