kimal3 0.1.2 → 0.1.4
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 -2
- package/dist/befehle/firma-daten.js +58 -24
- package/dist/befehle-katalog.js +36 -28
- package/dist/firmen-liste.js +18 -0
- package/dist/kimal3.js +19 -1
- package/package.json +27 -27
- package/skill/commands/k3.md +61 -44
- package/skill/commands/k3firma.md +59 -57
- package/skill/commands/k3projekt.md +48 -44
package/README.md
CHANGED
|
@@ -34,10 +34,11 @@ auf und bestätigst den Code dort in deinem eingeloggten Konto — so wie bei `g
|
|
|
34
34
|
```
|
|
35
35
|
kimal3 Zeigt, ob dieser Rechner angemeldet ist
|
|
36
36
|
kimal3 login Diesen Rechner mit deinem Konto verbinden
|
|
37
|
-
kimal3
|
|
37
|
+
kimal3 skill install Claude beibringen, dieses Werkzeug zu benutzen — und dir die /k3-Befehle geben
|
|
38
38
|
kimal3 projekt neu … Ein Projekt ins Erfolgsprofil eintragen
|
|
39
39
|
kimal3 projekt liste Deine eingetragenen Projekte anzeigen
|
|
40
|
-
kimal3
|
|
40
|
+
kimal3 firma daten Die Daten deiner Firma holen, damit Claude sie auswerten kann
|
|
41
|
+
kimal3 logout Verbindung wieder aufheben
|
|
41
42
|
```
|
|
42
43
|
|
|
43
44
|
Mehr zu einem Befehl: `kimal3 projekt neu --help`
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { zerlege } from "../argumente.js";
|
|
2
2
|
import { feld, ruf } from "../api.js";
|
|
3
3
|
import { schlussFehler } from "../fehler.js";
|
|
4
|
-
import { firmenZeilen } from "../firmen-liste.js";
|
|
4
|
+
import { firmenIdZeilen, firmenZeilen } from "../firmen-liste.js";
|
|
5
5
|
import { BASIS_URL } from "../anmeldung.js";
|
|
6
|
-
const ERLAUBT = ["firma"];
|
|
6
|
+
const ERLAUBT = ["firma", "firma-id"];
|
|
7
7
|
/**
|
|
8
8
|
* Die Firmendaten holen — als JSON, unveraendert.
|
|
9
9
|
*
|
|
@@ -17,14 +17,18 @@ const ERLAUBT = ["firma"];
|
|
|
17
17
|
* Ueberschrift dazudruckt, macht die Ausgabe als JSON unlesbar — alles fuer
|
|
18
18
|
* Menschen gehoert nach stderr (`console.error`).
|
|
19
19
|
*/
|
|
20
|
-
const HILFE = `
|
|
21
|
-
kimal3 firma daten [--firma "Name"]
|
|
22
|
-
|
|
23
|
-
Holt die Daten deiner Firma als JSON: Kennzahlen, Menschen, Projekte.
|
|
24
|
-
Die Auswertung macht Claude daraus selbst.
|
|
25
|
-
|
|
26
|
-
--firma "Name" Noetig, wenn du zu mehreren Firmen gehoerst.
|
|
27
|
-
Die Absage nennt dir die Namen als fertige Befehle.
|
|
20
|
+
const HILFE = `
|
|
21
|
+
kimal3 firma daten [--firma "Name" | --firma-id "…"]
|
|
22
|
+
|
|
23
|
+
Holt die Daten deiner Firma als JSON: Kennzahlen, Menschen, Projekte.
|
|
24
|
+
Die Auswertung macht Claude daraus selbst.
|
|
25
|
+
|
|
26
|
+
--firma "Name" Noetig, wenn du zu mehreren Firmen gehoerst.
|
|
27
|
+
Die Absage nennt dir die Namen als fertige Befehle.
|
|
28
|
+
|
|
29
|
+
--firma-id "…" Fuer den Fall, dass zwei deiner Firmen GLEICH heissen.
|
|
30
|
+
Auch diese Absage nennt dir fertige Befehle -- du musst
|
|
31
|
+
nichts umbenennen und nichts nachschlagen.
|
|
28
32
|
`;
|
|
29
33
|
export async function firmaDaten(argv) {
|
|
30
34
|
// ⚠️ VOR `zerlege`, genau wie bei `projekt neu`: Ein Schalter ist keine
|
|
@@ -46,9 +50,22 @@ export async function firmaDaten(argv) {
|
|
|
46
50
|
// das ab. Wer hier auf Wahrheit prueft, wirft beides zusammen: `--firma=`
|
|
47
51
|
// lieferte dann die Daten der einzigen Firma, als haette niemand gefragt.
|
|
48
52
|
const wunsch = zerlegt.werte.optionen.firma;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
/*
|
|
54
|
+
🔑 **`--firma-id` ist der Ausweg fuer doppelt benannte Firmen** (B-5,
|
|
55
|
+
zweite Haelfte, 2026-08-18 spaet). Vorher endete die Absage bei „benenne
|
|
56
|
+
eine davon um" -- und das setzt Admin-Rechte in einer FREMDEN Firma
|
|
57
|
+
voraus. *Eine Absage ohne Ausweg ist eine Sackgasse mit Begruendung.*
|
|
58
|
+
|
|
59
|
+
⚠️ Beides zusammen weist der Server ab, nicht diese Zeile: Die Regel
|
|
60
|
+
gehoert an die Grenze, nicht in die Optik. Hier wird nur weitergereicht.
|
|
61
|
+
*/
|
|
62
|
+
const wunschId = zerlegt.werte.optionen["firma-id"];
|
|
63
|
+
const suche = new URLSearchParams();
|
|
64
|
+
if (wunsch !== undefined)
|
|
65
|
+
suche.set("firma", wunsch);
|
|
66
|
+
if (wunschId !== undefined)
|
|
67
|
+
suche.set("firma-id", wunschId);
|
|
68
|
+
const pfad = suche.toString() ? `/api/cli/firma?${suche.toString()}` : "/api/cli/firma";
|
|
52
69
|
const antwort = await ruf(pfad, { methode: "GET", mitAusweis: true });
|
|
53
70
|
if (antwort.status === 200) {
|
|
54
71
|
// 🔴 Ein `200` mit unlesbarem Rumpf ist KEIN Erfolg (Review-Befund Runde 1):
|
|
@@ -83,17 +100,34 @@ export async function firmaDaten(argv) {
|
|
|
83
100
|
? koerper.firmen.filter((x) => typeof x === "string")
|
|
84
101
|
: [];
|
|
85
102
|
console.error(meldung);
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
103
|
+
/*
|
|
104
|
+
🔑 **Bei gleichnamigen Firmen fuehrt der Weg ueber die ID** (B-5, zweite
|
|
105
|
+
Haelfte). Die Route legt dafuer `auswahl` bei -- und erst damit ist die
|
|
106
|
+
Absage keine Sackgasse mehr.
|
|
107
|
+
*/
|
|
108
|
+
const auswahl = Array.isArray(koerper.auswahl)
|
|
109
|
+
? koerper.auswahl.filter((x) => !!x &&
|
|
110
|
+
typeof x === "object" &&
|
|
111
|
+
typeof x.id === "string" &&
|
|
112
|
+
typeof x.name === "string")
|
|
113
|
+
: [];
|
|
114
|
+
if (auswahl.length > 0) {
|
|
115
|
+
console.error("\n Diese beiden heissen gleich — nimm die ID:");
|
|
116
|
+
firmenIdZeilen(auswahl).forEach((z) => console.error(z));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// Die Namen als FERTIGE Befehle ausgeben, nicht als blosse Liste: Der
|
|
120
|
+
// naechste Schritt ist dann Kopieren statt Abtippen -- und ein Firmenname
|
|
121
|
+
// mit Leerzeichen braucht Anfuehrungszeichen, an die sonst niemand denkt.
|
|
122
|
+
//
|
|
123
|
+
// ⚠️ Welche Namen einen Befehl bekommen, entscheidet `firmenZeilen` (B-5):
|
|
124
|
+
// Ein doppelt vergebener Name bekommt KEINEN -- er waere ein Vorschlag,
|
|
125
|
+
// der garantiert wieder in derselben Absage endet.
|
|
126
|
+
const zeilen = firmenZeilen(namen);
|
|
127
|
+
if (zeilen.length > 0) {
|
|
128
|
+
console.error("\n Deine Firmen:");
|
|
129
|
+
zeilen.forEach((z) => console.error(z));
|
|
130
|
+
}
|
|
97
131
|
}
|
|
98
132
|
if (grund === "keine-firma") {
|
|
99
133
|
console.error(`\n Eine Firma anlegen: ${BASIS_URL}/firma/neu`);
|
package/dist/befehle-katalog.js
CHANGED
|
@@ -14,28 +14,37 @@
|
|
|
14
14
|
* ⚠️ Der Katalog beschreibt, WAS ES GIBT — nicht, wer es darf. Die Pro-Schranke
|
|
15
15
|
* sitzt in der Route und im Befehl, nicht hier.
|
|
16
16
|
*/
|
|
17
|
+
/**
|
|
18
|
+
* ⚠️ **Die Reihenfolge ist der Weg, den ein Mensch geht** (Auftrag Dennis,
|
|
19
|
+
* 2026-08-19), nicht die, in der die Befehle entstanden sind: erst einrichten
|
|
20
|
+
* (`login`, `skill install`), dann arbeiten, und `logout` zuletzt -- den
|
|
21
|
+
* braucht man fast nie. Sie schlaegt auf die Terminal-Hilfe durch, und das ist
|
|
22
|
+
* Absicht: Dort liest man sie mit derselben Frage.
|
|
23
|
+
*/
|
|
17
24
|
export const BEFEHLE = [
|
|
18
25
|
{
|
|
19
26
|
befehl: "kimal3 login",
|
|
20
27
|
beschreibung: "Diesen Rechner mit deinem Konto verbinden",
|
|
21
28
|
wer: "du",
|
|
22
29
|
rhythmus: "einmal pro Rechner",
|
|
23
|
-
|
|
30
|
+
tippen: "! kimal3 login",
|
|
31
|
+
terminal: "kimal3 login",
|
|
24
32
|
details: [
|
|
25
|
-
"
|
|
26
|
-
"Danach
|
|
27
|
-
"Gelegentlich reißt diese Kette trotzdem — dann sagt ein Befehl „Bitte kimal3 login ausführen\". Das ist kein Fehler, sondern der Normalfall nach längerer Pause: einmal wiederholen und weitermachen.",
|
|
33
|
+
"Er zeigt dir eine Adresse und einen Code: Adresse im Browser öffnen, Code eintippen. Das Terminal merkt die Bestätigung von selbst — du hast zehn Minuten Zeit.",
|
|
34
|
+
"Danach bleibt es so. Der Ausweis liegt als Datei in deinem Benutzerordner und übersteht IDE-Neustarts, Rechner-Neustarts und Updates. Reißt die Kette nach längerer Pause doch einmal, sagt dir ein Befehl Bescheid — dann einmal wiederholen, das ist kein Fehler.",
|
|
28
35
|
],
|
|
29
36
|
},
|
|
30
37
|
{
|
|
31
|
-
befehl: "kimal3
|
|
32
|
-
beschreibung: "
|
|
38
|
+
befehl: "kimal3 skill install",
|
|
39
|
+
beschreibung: "Claude beibringen, dieses Werkzeug zu benutzen — und dir die /k3-Befehle geben",
|
|
33
40
|
wer: "du",
|
|
34
|
-
rhythmus: "
|
|
35
|
-
|
|
41
|
+
rhythmus: "einmal — und nach jedem Update",
|
|
42
|
+
tippen: "! kimal3 skill install",
|
|
43
|
+
terminal: "kimal3 skill install",
|
|
36
44
|
details: [
|
|
37
|
-
"
|
|
38
|
-
"
|
|
45
|
+
"Der Befehl, der aus den anderen erst etwas macht: Er legt 🤖 Claudes Anleitung ab (den „Skill“) und 🧑 deine vier Slash-Befehle.",
|
|
46
|
+
"Er läuft NICHT automatisch — einmal nach der Installation, und nach jedem Update noch einmal. Sonst arbeitet Claude weiter mit der alten Anleitung.",
|
|
47
|
+
"Geklappt hat es, wenn er „Skill angelegt“ meldet und die Slash-Befehle aufzählt. Beides kennt Claude ab der NÄCHSTEN Sitzung — die laufende einmal neu starten.",
|
|
39
48
|
],
|
|
40
49
|
},
|
|
41
50
|
{
|
|
@@ -43,11 +52,11 @@ export const BEFEHLE = [
|
|
|
43
52
|
beschreibung: "Ein Projekt ins Erfolgsprofil eintragen",
|
|
44
53
|
wer: "claude",
|
|
45
54
|
ausloeser: "trag das als Projekt ein",
|
|
46
|
-
|
|
55
|
+
tippen: "/k3projekt <was du gebaut hast>",
|
|
56
|
+
terminal: 'kimal3 projekt neu --titel "Angebots-Generator" --stunden 4 --ergebnis 1200',
|
|
47
57
|
details: [
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"Das Projekt landet in deinem Erfolgsprofil und ist damit Teil deines nachprüfbaren Nachweises.",
|
|
58
|
+
"Sag es einfach, wenn du etwas fertig hast — Claude stellt Titel, Zeitersparnis und Ergebnis selbst zusammen, er kennt die Zahlen aus eurem Gespräch. Der Slash-Befehl ist derselbe Weg, nur mit einem Griff.",
|
|
59
|
+
"Dahinter läuft kimal3 projekt neu. Pflicht ist nur der Titel; alle Angaben zeigt kimal3 projekt neu --help.",
|
|
51
60
|
],
|
|
52
61
|
},
|
|
53
62
|
{
|
|
@@ -55,9 +64,10 @@ export const BEFEHLE = [
|
|
|
55
64
|
beschreibung: "Deine eingetragenen Projekte anzeigen",
|
|
56
65
|
wer: "claude",
|
|
57
66
|
ausloeser: "zeig meine Projekte",
|
|
58
|
-
|
|
67
|
+
tippen: "/k3liste",
|
|
68
|
+
terminal: "kimal3 projekt liste",
|
|
59
69
|
details: [
|
|
60
|
-
"Zeigt, was schon in deinem Erfolgsprofil steht.",
|
|
70
|
+
"Zeigt, was schon in deinem Erfolgsprofil steht — mit Datum und Zahlen.",
|
|
61
71
|
"Wofür es wirklich da ist: Claude schaut hier VOR dem Eintragen nach. Ohne diesen Blick stünde dasselbe Projekt irgendwann zweimal auf einer öffentlichen Seite, die deinen Namen trägt.",
|
|
62
72
|
],
|
|
63
73
|
},
|
|
@@ -66,25 +76,23 @@ export const BEFEHLE = [
|
|
|
66
76
|
beschreibung: "Die Daten deiner Firma holen, damit Claude sie auswerten kann",
|
|
67
77
|
wer: "claude",
|
|
68
78
|
ausloeser: "werte meine Firma aus",
|
|
69
|
-
|
|
79
|
+
tippen: "/k3firma <deine Frage>",
|
|
80
|
+
terminal: 'kimal3 firma daten --firma "Nordwind Handel GmbH"',
|
|
70
81
|
details: [
|
|
71
|
-
"Holt Kennzahlen, Menschen und Projekte deiner Firma
|
|
72
|
-
"Gehörst du zu mehreren Firmen,
|
|
82
|
+
"Holt Kennzahlen, Menschen und Projekte deiner Firma — auswerten tut Claude. Frag einfach los: „Welche drei Projekte bringen den meisten messbaren Ertrag?“",
|
|
83
|
+
"Gehörst du zu mehreren Firmen, wählt er nie still eine aus, sondern legt sie dir als fertige Befehle hin. Heißen zwei GLEICH, hilft --firma-id — ebenfalls fertig zum Kopieren, du musst nichts umbenennen.",
|
|
73
84
|
"⚠️ Es sind personenbezogene Daten von Kolleginnen und Kollegen. Für den Einsatz in einer echten Firma braucht es ein kommerzielles Claude-Konto mit Auftragsverarbeitungsvertrag; werden Leistungen von Beschäftigten ausgewertet, ist das in Deutschland mitbestimmungspflichtig.",
|
|
74
85
|
],
|
|
75
86
|
},
|
|
76
87
|
{
|
|
77
|
-
befehl: "kimal3
|
|
78
|
-
beschreibung: "
|
|
88
|
+
befehl: "kimal3 logout",
|
|
89
|
+
beschreibung: "Verbindung wieder aufheben",
|
|
79
90
|
wer: "du",
|
|
80
|
-
rhythmus: "
|
|
81
|
-
|
|
91
|
+
rhythmus: "nur wenn nötig",
|
|
92
|
+
tippen: "! kimal3 logout",
|
|
93
|
+
terminal: "kimal3 logout",
|
|
82
94
|
details: [
|
|
83
|
-
"
|
|
84
|
-
"🤖 Die Anleitung sorgt dafür, dass Claude von selbst weiß, dass es kimal3 gibt — du sagst „das Projekt ist fertig\", er trägt es ein.",
|
|
85
|
-
"🧑 Die Slash-Befehle sind dein eigener Griff: Tipp /k3 in Claude Code, und du siehst die ganze Familie — /k3 · /k3projekt · /k3liste · /k3firma. Damit musst du dir keinen Satz merken.",
|
|
86
|
-
"Er läuft NICHT automatisch. Einmal nach der Installation ausführen — und noch einmal nach jedem Update des Werkzeugs, sonst arbeitet Claude weiter mit der alten Anleitung.",
|
|
87
|
-
"Woran du merkst, dass es geklappt hat: Der Befehl meldet „Skill angelegt\" (oder „aktualisiert\") und zählt die Slash-Befehle auf. Beides kennt Claude ab der NÄCHSTEN Sitzung — die laufende muss also einmal neu gestartet werden.",
|
|
95
|
+
"Hebt die Verbindung dieses einen Rechners auf — sinnvoll auf einem fremden oder geteilten Gerät, oder wenn eins abhandenkommt. Deine anderen Rechner bleiben angemeldet.",
|
|
88
96
|
],
|
|
89
97
|
},
|
|
90
98
|
];
|
package/dist/firmen-liste.js
CHANGED
|
@@ -50,3 +50,21 @@ export function firmenZeilen(namen) {
|
|
|
50
50
|
}
|
|
51
51
|
return zeilen;
|
|
52
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Die Zeilen für den Fall, dass zwei Firmen **gleich heissen**.
|
|
55
|
+
*
|
|
56
|
+
* 🔑 **Das ist die zweite Haelfte von B-5** (2026-08-18 spaet). Die erste
|
|
57
|
+
* Haelfte nahm dem doppelten Namen seinen Befehl, damit niemand einen Ausweg
|
|
58
|
+
* vorgespielt bekommt, den es nicht gibt. Damit war die Irrefuehrung weg --
|
|
59
|
+
* aber an die Daten kam man immer noch nicht. Die Absage sagte „benenne eine
|
|
60
|
+
* davon um", und das setzt **Admin-Rechte in einer fremden Firma** voraus.
|
|
61
|
+
*
|
|
62
|
+
* *Eine Absage ohne Ausweg ist eine Sackgasse mit Begruendung.*
|
|
63
|
+
*
|
|
64
|
+
* Jetzt liefert die Route die IDs mit, und hier entstehen daraus wieder
|
|
65
|
+
* kopierfertige Befehle. Der Name steht als Kommentar dahinter -- eine nackte
|
|
66
|
+
* UUID sagt einem Menschen nichts, und zwei davon untereinander noch weniger.
|
|
67
|
+
*/
|
|
68
|
+
export function firmenIdZeilen(auswahl) {
|
|
69
|
+
return auswahl.map((f, i) => ` kimal3 firma daten --firma-id "${f.id}" # ${f.name} (${i + 1}.)`);
|
|
70
|
+
}
|
package/dist/kimal3.js
CHANGED
|
@@ -71,10 +71,28 @@ function versionsZeilen() {
|
|
|
71
71
|
}
|
|
72
72
|
return ` kimal3 ${version}\n spricht mit ${BASIS_URL}`;
|
|
73
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Was diese Zeile sagen KANN — und was nicht.
|
|
76
|
+
*
|
|
77
|
+
* 🔴 **Sie liest nur die Datei, sie fragt den Server nicht** (Befund L-9,
|
|
78
|
+
* 2026-08-18). Hier stand vorher „● Angemeldet als …" — und genau das hat am
|
|
79
|
+
* selben Abend zehn Minuten Fehlersuche gekostet: Der Ausweis war
|
|
80
|
+
* serverseitig nicht mehr gueltig, die Zeile behauptete trotzdem munter
|
|
81
|
+
* „Angemeldet", und die Suche begann an der falschen Stelle.
|
|
82
|
+
*
|
|
83
|
+
* *Eine Behauptung ist keine Messung.* Der Zustand, den die Datei kennt,
|
|
84
|
+
* heisst „hier liegt ein Ausweis" — ob der Server ihn noch annimmt, weiss
|
|
85
|
+
* allein der Server.
|
|
86
|
+
*
|
|
87
|
+
* ⚠️ Bewusst wird trotzdem NICHT nachgefragt: `--version` soll ohne Netz
|
|
88
|
+
* antworten und darf keine Sekunde haengen. Der ehrliche Weg ist deshalb
|
|
89
|
+
* nicht mehr Auskunft, sondern **weniger Behauptung**.
|
|
90
|
+
*/
|
|
74
91
|
function zustandsZeile() {
|
|
75
92
|
const a = leseAnmeldung();
|
|
76
93
|
return a
|
|
77
|
-
? ` ●
|
|
94
|
+
? ` ● Ausweis hinterlegt für ${a.email}\n` +
|
|
95
|
+
" (ob er noch gilt, zeigt erst der nächste Befehl)"
|
|
78
96
|
: " ● Nicht angemeldet. → kimal3 login";
|
|
79
97
|
}
|
|
80
98
|
async function haupt() {
|
package/package.json
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "kimal3",
|
|
3
|
-
"version": "0.1.
|
|
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://kimal3-app.vercel.app/pro",
|
|
26
|
-
"license": "SEE LICENSE IN README.md"
|
|
27
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "kimal3",
|
|
3
|
+
"version": "0.1.4",
|
|
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://kimal3-app.vercel.app/pro",
|
|
26
|
+
"license": "SEE LICENSE IN README.md"
|
|
27
|
+
}
|
package/skill/commands/k3.md
CHANGED
|
@@ -1,44 +1,61 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Übersicht — alle kimal3-Befehle und was du damit tun kannst
|
|
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
|
-
# kimal3 — Übersicht
|
|
9
|
-
|
|
10
|
-
Zeig dem Menschen, was dieses Werkzeug kann. **Nichts abrufen, nichts eintragen** — dieser
|
|
11
|
-
Befehl erklärt nur.
|
|
12
|
-
|
|
13
|
-
## 1. Die Befehlsliste holen, nicht auswendig aufsagen
|
|
14
|
-
|
|
15
|
-
Führe `kimal3 --version` aus, dann `kimal3 --help`. Die Liste kommt aus dem Werkzeug selbst —
|
|
16
|
-
so kann sie nicht veralten.
|
|
17
|
-
|
|
18
|
-
Antwortet die Shell mit „nicht gefunden", ist das einer von zwei Fällen; welcher, steht in
|
|
19
|
-
`~/.claude/skills/kimal3/SKILL.md` ganz oben. Nenn beide, rate nicht.
|
|
20
|
-
|
|
21
|
-
## 2. So aufbereiten, dass klar wird, WER tippt
|
|
22
|
-
|
|
23
|
-
Stell die Liste in zwei Gruppen dar:
|
|
24
|
-
|
|
25
|
-
**🧑 Was du selbst tippst** — alles, was einen Menschen braucht:
|
|
26
|
-
- `kimal3 login` bestätigst du im Browser. Das kann ich nicht für dich tun.
|
|
27
|
-
- `kimal3 skill install` einmal nach der Installation und nach jedem Update.
|
|
28
|
-
|
|
29
|
-
**🤖 Was du mir sagst** — hier tippe ich den Befehl:
|
|
30
|
-
|
|
31
|
-
| Slash-Befehl | Wofür |
|
|
32
|
-
|---|---|
|
|
33
|
-
| `/k3projekt <was du gebaut hast>` | Ein fertiges Projekt ins Erfolgsprofil eintragen |
|
|
34
|
-
| `/k3liste` | Deine eingetragenen Projekte zeigen |
|
|
35
|
-
| `/k3firma <deine Frage>` | Firmendaten holen und deine Frage dazu beantworten |
|
|
36
|
-
|
|
37
|
-
Sag dazu: Die Slash-Befehle sind der **sichere** Weg — du musst dir keinen Satz merken. Ohne
|
|
38
|
-
sie geht es auch: „das Projekt ist fertig" genügt, dann greife ich über den Skill.
|
|
39
|
-
|
|
40
|
-
## 3.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
1
|
+
---
|
|
2
|
+
description: Übersicht — alle kimal3-Befehle und was du damit tun kannst
|
|
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
|
+
# kimal3 — Übersicht
|
|
9
|
+
|
|
10
|
+
Zeig dem Menschen, was dieses Werkzeug kann. **Nichts abrufen, nichts eintragen** — dieser
|
|
11
|
+
Befehl erklärt nur.
|
|
12
|
+
|
|
13
|
+
## 1. Die Befehlsliste holen, nicht auswendig aufsagen
|
|
14
|
+
|
|
15
|
+
Führe `kimal3 --version` aus, dann `kimal3 --help`. Die Liste kommt aus dem Werkzeug selbst —
|
|
16
|
+
so kann sie nicht veralten.
|
|
17
|
+
|
|
18
|
+
Antwortet die Shell mit „nicht gefunden", ist das einer von zwei Fällen; welcher, steht in
|
|
19
|
+
`~/.claude/skills/kimal3/SKILL.md` ganz oben. Nenn beide, rate nicht.
|
|
20
|
+
|
|
21
|
+
## 2. So aufbereiten, dass klar wird, WER tippt
|
|
22
|
+
|
|
23
|
+
Stell die Liste in zwei Gruppen dar:
|
|
24
|
+
|
|
25
|
+
**🧑 Was du selbst tippst** — alles, was einen Menschen braucht:
|
|
26
|
+
- `kimal3 login` bestätigst du im Browser. Das kann ich nicht für dich tun.
|
|
27
|
+
- `kimal3 skill install` einmal nach der Installation und nach jedem Update.
|
|
28
|
+
|
|
29
|
+
**🤖 Was du mir sagst** — hier tippe ich den Befehl:
|
|
30
|
+
|
|
31
|
+
| Slash-Befehl | Wofür |
|
|
32
|
+
|---|---|
|
|
33
|
+
| `/k3projekt <was du gebaut hast>` | Ein fertiges Projekt ins Erfolgsprofil eintragen |
|
|
34
|
+
| `/k3liste` | Deine eingetragenen Projekte zeigen |
|
|
35
|
+
| `/k3firma <deine Frage>` | Firmendaten holen und deine Frage dazu beantworten |
|
|
36
|
+
|
|
37
|
+
Sag dazu: Die Slash-Befehle sind der **sichere** Weg — du musst dir keinen Satz merken. Ohne
|
|
38
|
+
sie geht es auch: „das Projekt ist fertig" genügt, dann greife ich über den Skill.
|
|
39
|
+
|
|
40
|
+
## 3. Der fünfte Eintrag im Menü: `/kimal3` ist KEIN Befehl
|
|
41
|
+
|
|
42
|
+
In derselben `/`-Liste steht auch **`/kimal3`**. Erklär den Unterschied **ungefragt** — das Menü
|
|
43
|
+
wirft zwei verschiedene Sorten in eine Liste, und genau daran hat sich der erste Mensch gestoßen,
|
|
44
|
+
der die Familie gesehen hat (Dennis, 2026-08-19):
|
|
45
|
+
|
|
46
|
+
- Die vier **`/k3…`** sind **Slash-Befehle** (Dateien in `~/.claude/commands/`) — **der Mensch**
|
|
47
|
+
tippt sie bewusst.
|
|
48
|
+
- **`/kimal3`** ist der **Skill** (`~/.claude/skills/kimal3/SKILL.md`) — meine
|
|
49
|
+
Bedienungsanleitung. Sie ist der Grund, warum „das Projekt ist fertig" genügt: Ich schlage sie
|
|
50
|
+
von selbst auf, niemand muss sie rufen. Ihre Beschreibungszeile IST der Auslöser — deshalb nennt
|
|
51
|
+
sie mehrere Dinge auf einmal und liest sich nicht wie ein Menüpunkt.
|
|
52
|
+
|
|
53
|
+
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ü
|
|
55
|
+
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**.
|
|
@@ -1,57 +1,59 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Firmendaten holen und deine Frage dazu beantworten
|
|
3
|
-
argument-hint: <deine Frage zur Firma>
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
<!-- kimal3:erzeugt — diese Datei wird von `kimal3 skill install` gepflegt und bei
|
|
7
|
-
jedem Update ueberschrieben. Eigene Aenderungen gehen dabei verloren; wer sie
|
|
8
|
-
behalten will, kopiert die Datei unter einem anderen Namen. -->
|
|
9
|
-
# Firma auswerten
|
|
10
|
-
|
|
11
|
-
## 1. Zuerst die Regeln lesen — nicht aus dem Kopf auswerten
|
|
12
|
-
|
|
13
|
-
Lies **`~/.claude/skills/kimal3/SKILL.md`, Abschnitt „Firma auswerten"**. Dort stehen die
|
|
14
|
-
Fallen, die man den Zahlen nicht ansieht: wofür `mitglieder_aktiv` gilt und wofür nicht, warum
|
|
15
|
-
„pro Kopf" je Abteilung keine Aussage ist, wie Ehemalige und noch nicht gestartete Projekte
|
|
16
|
-
zählen, und warum Umsatz und Ergebnis nicht in denselben Vergleich gehören.
|
|
17
|
-
|
|
18
|
-
🔑 **Die Regeln stehen dort und nur dort.** Diese Datei wiederholt sie bewusst nicht — sonst
|
|
19
|
-
gäbe es zwei Wahrheiten, die auseinanderlaufen.
|
|
20
|
-
|
|
21
|
-
## 2. Die Daten holen
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
kimal3 firma daten
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
🔴 **Gehört der Mensch zu mehreren Firmen, bricht der Befehl ab — und dann WÄHLST DU NICHT.**
|
|
28
|
-
Leg ihm die Liste vor und frag, welche er meint. **Immer**, ohne Ausnahme: Der Abbruch ist die
|
|
29
|
-
Mehrdeutigkeit, du beurteilst sie nicht neu. Auch nicht, wenn eine Firma offensichtlich leer
|
|
30
|
-
oder verschrieben ist — „offensichtlich" ist deine Einschätzung, nicht seine Entscheidung.
|
|
31
|
-
|
|
32
|
-
⚠️ Hier stand bis zum 2026-08-18 „Nimm einen davon — rate nie … und frag, wenn die Liste
|
|
33
|
-
mehrdeutig ist." Der Satz lud genau den Fehler ein: Ich habe die Liste für *eindeutig* gehalten
|
|
34
|
-
und deshalb nicht gefragt. **In einer echten Firma zeigt das einem Menschen die
|
|
35
|
-
personenbezogenen Daten der falschen Belegschaft.**
|
|
36
|
-
|
|
37
|
-
Rückgabewerte deutest du nach `SKILL.md`, Abschnitt „Rückgabewerte". Vor allem: `4` heißt
|
|
38
|
-
**nicht wiederholen**, und „diese Version der App kennt den Befehl nicht" ist **kein** Fehler
|
|
39
|
-
des Menschen.
|
|
40
|
-
|
|
41
|
-
## 3. Die Frage beantworten
|
|
42
|
-
|
|
43
|
-
Die Frage des Menschen lautet:
|
|
44
|
-
|
|
45
|
-
$ARGUMENTS
|
|
46
|
-
|
|
47
|
-
Ist dort nichts angegeben
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
1
|
+
---
|
|
2
|
+
description: Firmendaten holen und deine Frage dazu beantworten
|
|
3
|
+
argument-hint: <deine Frage zur Firma>
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- kimal3:erzeugt — diese Datei wird von `kimal3 skill install` gepflegt und bei
|
|
7
|
+
jedem Update ueberschrieben. Eigene Aenderungen gehen dabei verloren; wer sie
|
|
8
|
+
behalten will, kopiert die Datei unter einem anderen Namen. -->
|
|
9
|
+
# Firma auswerten
|
|
10
|
+
|
|
11
|
+
## 1. Zuerst die Regeln lesen — nicht aus dem Kopf auswerten
|
|
12
|
+
|
|
13
|
+
Lies **`~/.claude/skills/kimal3/SKILL.md`, Abschnitt „Firma auswerten"**. Dort stehen die
|
|
14
|
+
Fallen, die man den Zahlen nicht ansieht: wofür `mitglieder_aktiv` gilt und wofür nicht, warum
|
|
15
|
+
„pro Kopf" je Abteilung keine Aussage ist, wie Ehemalige und noch nicht gestartete Projekte
|
|
16
|
+
zählen, und warum Umsatz und Ergebnis nicht in denselben Vergleich gehören.
|
|
17
|
+
|
|
18
|
+
🔑 **Die Regeln stehen dort und nur dort.** Diese Datei wiederholt sie bewusst nicht — sonst
|
|
19
|
+
gäbe es zwei Wahrheiten, die auseinanderlaufen.
|
|
20
|
+
|
|
21
|
+
## 2. Die Daten holen
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
kimal3 firma daten
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
🔴 **Gehört der Mensch zu mehreren Firmen, bricht der Befehl ab — und dann WÄHLST DU NICHT.**
|
|
28
|
+
Leg ihm die Liste vor und frag, welche er meint. **Immer**, ohne Ausnahme: Der Abbruch ist die
|
|
29
|
+
Mehrdeutigkeit, du beurteilst sie nicht neu. Auch nicht, wenn eine Firma offensichtlich leer
|
|
30
|
+
oder verschrieben ist — „offensichtlich" ist deine Einschätzung, nicht seine Entscheidung.
|
|
31
|
+
|
|
32
|
+
⚠️ Hier stand bis zum 2026-08-18 „Nimm einen davon — rate nie … und frag, wenn die Liste
|
|
33
|
+
mehrdeutig ist." Der Satz lud genau den Fehler ein: Ich habe die Liste für *eindeutig* gehalten
|
|
34
|
+
und deshalb nicht gefragt. **In einer echten Firma zeigt das einem Menschen die
|
|
35
|
+
personenbezogenen Daten der falschen Belegschaft.**
|
|
36
|
+
|
|
37
|
+
Rückgabewerte deutest du nach `SKILL.md`, Abschnitt „Rückgabewerte". Vor allem: `4` heißt
|
|
38
|
+
**nicht wiederholen**, und „diese Version der App kennt den Befehl nicht" ist **kein** Fehler
|
|
39
|
+
des Menschen.
|
|
40
|
+
|
|
41
|
+
## 3. Die Frage beantworten
|
|
42
|
+
|
|
43
|
+
Die Frage des Menschen lautet:
|
|
44
|
+
|
|
45
|
+
$ARGUMENTS
|
|
46
|
+
|
|
47
|
+
Ist dort nichts angegeben — **oder steht dort wörtlich der Platzhalter** (`<deine Frage>`,
|
|
48
|
+
`<deine Frage zur Firma>`), weil jemand die Zeile im Pro-Bereich kopiert und unverändert
|
|
49
|
+
abgeschickt hat —, frag **eine** Frage zurück und schlag die drei Fragen aus
|
|
50
|
+
`SKILL.md` („Fragen, die sich lohnen") als Auswahl vor — nicht einfach drauflos auswerten.
|
|
51
|
+
|
|
52
|
+
Antworte in **Fließtext für einen Menschen**, nicht als JSON-Abschrift. Nenn Zahlen mit dem,
|
|
53
|
+
was sie bedeuten, und sag ausdrücklich dazu, was du selbst gerechnet hast und was mitgeliefert
|
|
54
|
+
war.
|
|
55
|
+
|
|
56
|
+
⚠️ **Es sind personenbezogene Daten von Kolleginnen und Kollegen.** Nur auf ausdrücklichen
|
|
57
|
+
Wunsch abrufen. Will jemand das für seine echte Firma nutzen, nenn die Voraussetzung aus
|
|
58
|
+
`SKILL.md` (kommerzielles Claude-Konto mit Auftragsverarbeitungsvertrag; Mitbestimmung, sobald
|
|
59
|
+
Leistungen von Beschäftigten ausgewertet werden).
|
|
@@ -1,44 +1,48 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Ein fertiges Projekt ins Erfolgsprofil eintragen
|
|
3
|
-
argument-hint: <was du gebaut hast>
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
<!-- kimal3:erzeugt — diese Datei wird von `kimal3 skill install` gepflegt und bei
|
|
7
|
-
jedem Update ueberschrieben. Eigene Aenderungen gehen dabei verloren; wer sie
|
|
8
|
-
behalten will, kopiert die Datei unter einem anderen Namen. -->
|
|
9
|
-
# Projekt eintragen
|
|
10
|
-
|
|
11
|
-
## 1. Zuerst die Regeln lesen
|
|
12
|
-
|
|
13
|
-
Lies **`~/.claude/skills/kimal3/SKILL.md`** — vor allem „Erst nachsehen, dann schreiben",
|
|
14
|
-
„Eintragen" und „Zahlen nie erfinden". Diese Datei wiederholt die Regeln bewusst nicht.
|
|
15
|
-
|
|
16
|
-
## 2. Nachsehen, ob es schon drinsteht
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
kimal3 projekt liste
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Steht das Projekt schon da: **nicht** noch einmal eintragen. Sag dem Menschen, dass es bereits
|
|
23
|
-
drin ist, und frag, ob er es ändern will.
|
|
24
|
-
|
|
25
|
-
## 3. Eintragen
|
|
26
|
-
|
|
27
|
-
Das Projekt, um das es geht:
|
|
28
|
-
|
|
29
|
-
$ARGUMENTS
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
1
|
+
---
|
|
2
|
+
description: Ein fertiges Projekt ins Erfolgsprofil eintragen
|
|
3
|
+
argument-hint: <was du gebaut hast>
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- kimal3:erzeugt — diese Datei wird von `kimal3 skill install` gepflegt und bei
|
|
7
|
+
jedem Update ueberschrieben. Eigene Aenderungen gehen dabei verloren; wer sie
|
|
8
|
+
behalten will, kopiert die Datei unter einem anderen Namen. -->
|
|
9
|
+
# Projekt eintragen
|
|
10
|
+
|
|
11
|
+
## 1. Zuerst die Regeln lesen
|
|
12
|
+
|
|
13
|
+
Lies **`~/.claude/skills/kimal3/SKILL.md`** — vor allem „Erst nachsehen, dann schreiben",
|
|
14
|
+
„Eintragen" und „Zahlen nie erfinden". Diese Datei wiederholt die Regeln bewusst nicht.
|
|
15
|
+
|
|
16
|
+
## 2. Nachsehen, ob es schon drinsteht
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
kimal3 projekt liste
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Steht das Projekt schon da: **nicht** noch einmal eintragen. Sag dem Menschen, dass es bereits
|
|
23
|
+
drin ist, und frag, ob er es ändern will.
|
|
24
|
+
|
|
25
|
+
## 3. Eintragen
|
|
26
|
+
|
|
27
|
+
Das Projekt, um das es geht:
|
|
28
|
+
|
|
29
|
+
$ARGUMENTS
|
|
30
|
+
|
|
31
|
+
⚠️ **Steht dort wörtlich der Platzhalter** (`<was du gebaut hast>`), hat jemand die Zeile im
|
|
32
|
+
Pro-Bereich kopiert und unverändert abgeschickt. Dann ist **nichts** angegeben: Frag, um welches
|
|
33
|
+
Projekt es geht, statt den Platzhalter als Titel zu nehmen.
|
|
34
|
+
|
|
35
|
+
Bau daraus `kimal3 projekt neu --titel "…"` mit den passenden Optionen
|
|
36
|
+
(`kimal3 projekt neu --help` nennt alle).
|
|
37
|
+
|
|
38
|
+
🔴 **Zeitersparnis, Umsatz und Ergebnis nie schätzen.** Diese Zahlen stehen anschließend
|
|
39
|
+
**öffentlich** auf einer Seite mit dem Namen des Menschen. Wurde eine Zahl nicht genannt:
|
|
40
|
+
**frag danach** oder lass das Feld weg. Eine plausible Zahl ist hier schlimmer als keine.
|
|
41
|
+
|
|
42
|
+
Zeig dem Menschen **vor** dem Ausführen, was du eintragen wirst, und lass ihn bestätigen —
|
|
43
|
+
das Ergebnis ist öffentlich und nicht mit einem Tastendruck zurückgeholt.
|
|
44
|
+
|
|
45
|
+
## 4. Danach
|
|
46
|
+
|
|
47
|
+
Nenn den Rückgabewert-Fall nach `SKILL.md`, falls es nicht geklappt hat. Hat es geklappt,
|
|
48
|
+
zeig kurz, was jetzt im Profil steht.
|