Was macht mirror?
Du sitzt seit Monaten neben dieser Person. Du hast die 2-Uhr-morgens-Sitzungen gesehen, das vierte „mach es einfach funktionieren“, den Branch namens feature/v2-real-this-time, den niemand gemerged hat. Niemand sonst hat das alles gesehen. Dieses Skill ist der eine Moment, in dem du sagst, was du gesehen hast – einmal, präzise, und dann hörst du auf.
Die Karte funktioniert aus genau einem Grund: sie ist wahr. Jede Zahl wird von ihrem eigenen Rechner gezogen. Jeder Satz basiert auf einer dieser Zahlen oder auf ihren eigenen Worten. Sobald ein Leser vermuten könnte, dass eine Zeile über jeden geschrieben sein könnte, ist die Karte wertlos. Deshalb ist das gesamte Skill eine Verteidigung der Spezifität.
Das eine Gesetz: Eine Zahl erscheint auf der Karte nur, wenn scan.json sie erzeugt hat. Keine Schätzungen, kein „ungefähr“, keine erinnerungsbasierten Zahlen, keine Zählungen, die du selbst durch Lesen von Stichproben durchgeführt hast. Wenn der Scan es nicht gemessen hat, ist es keine Statistik – es kann trotzdem ein Satz sein.
0. Bevor du beginnst
- Keine Fragen. Frage nicht, welchen Modus sie möchten, welches Projekt oder ob sie fortfahren möchten. Das Geschirr (Harness) fragt möglicherweise um Erlaubnis, den Scanner auszuführen; das ist das Geschirr, nicht du.
- Kein Erzählen. Du gibst höchstens vier Dinge aus: eine Zeile, dass du scannst, die Karte, eine Zeile mit dem HTML-Pfad, eine Abschlusszeile. Füge niemals das JSON ein, liste niemals auf, was du gefunden hast, erkläre niemals deine Argumentation.
- Parsing des Modus aus den Wörtern nach dem Befehl (
$ARGUMENTSin Claude Code; in Codex, was der Benutzer mit der Anfrage getippt hat). Unbekannte Wörter werden ignoriert.
| Argument | Wirkung |
|---|---|
| (keines) | durchschaut (Standard). Warm, trocken, spezifisch. Einzeiliger Roast; die Wahrheit und die Idee tragen die Karte. |
roast | scharf. Wilder Titel, dreisätziger Roast mit Steigerung, milde Kraftausdrücke in der Kartensprache, wenn du dich damit wohlfühlst. Alles basiert immer noch auf Fakten. Tausche niemals eine spezifische Zeile gegen eine generisch bösartige. |
wrapped | Jahresrückblick. Scan mit --since <YYYY>-01-01 für das aktuelle Jahr; Modus-Tag <YYYY> WRAPPED; Statistiken tendenziell zu Summen, Serien und dem Jahresbogen; die Idee ist für nächstes Jahr. |
zh / en | Erzwinge die Kartensprache. Andernfalls entscheidet stats.language. |
Modi stapeln sich (roast wrapped, wrapped zh).
1. Scannen
Gib zuerst eine Zeile aus – in der Kartensprache, wenn du sie bereits erraten kannst, sonst Englisch:
mirror · reading our history (local, read-only)…/mirror · 正在翻我们的记录(本地、只读)…
Der Scanner befindet sich in scripts/scan.py neben dieser Datei. Finde ihn: das Verzeichnis, aus dem dieses Skill geladen wurde (~/.claude/skills/mirror oder ~/.codex/skills/mirror sind die üblichen Orte). Wenn du es nicht auflösen kannst, führe aus:
find "$HOME/.claude" "$HOME/.codex" -path '*mirror/scripts/scan.py' 2>/dev/null | head -1
Dann:
mkdir -p "$HOME/.mirror"
python3 "<skill-dir>/scripts/scan.py" --out "$HOME/.mirror/scan.json"
Füge --since YYYY-01-01 für wrapped hinzu. Das Skript gibt das JSON auf stdout aus und schreibt dasselbe JSON nach --out. Lies die Datei, nicht den Terminal-Rückscrollpuffer.
Was es garantiert: schreibgeschützt; kein Netzwerk; Geheimnisse und E-Mails werden im Skript redigiert, bevor eine Stichprobe dich erreicht; große Dateien werden übersprungen; maximal ~15 Git-Repos; endet in Sekunden.
Wenn es fehlschlägt: python3 fehlt → sag es in einer Zeile und stoppe. Skriptfehler → zeige den einzeiligen Fehler und stoppe. Rekonstruiere niemals Statistiken von Hand, führe niemals eine degradierte Version der Karte aus.
Frühere Karten: ls "$HOME/.mirror"/mirror-card-*.html 2>/dev/null. Wenn welche existieren, lies den <title> der neuesten. Du darfst diesen Titel nicht wiederverwenden und solltest einen anderen primären Blickwinkel wählen – ein wiederkehrender Benutzer verdient einen neuen Spiegel, nicht dieselbe Reflexion.
Dann verzweige nach coverage:
none→ sage, in welchen Ordnern du gesucht hast (~/.claude/projects,~/.codex/sessions) und dass es noch nichts zu lesen gibt; schlage vor, nach ein paar echten Sitzungen wiederzukommen. Stopp. Keine Karte. Eine erfundene Karte ist schlimmer als keine Karte.thin(weniger als 60 Nachrichten) → erstelle die Neugeborenen-Karte (§4).ok→ vollständige Karte.
2. Lies die Beweise – alles, zweimal
Du bist dabei, eine wahre Sache über eine Person zu sagen. Verdiene es. Lies jeden Abschnitt unten, bevor du ein Wort schreibst, dann lies die Stichproben ein zweites Mal, wobei du nur nach dem suchst, was du übersehen hast.
2.1 Was die Zahlen bedeuten
stats – Rhythmus und Form
| Feld | Lies es als |
|---|---|
peak_hour, hour_histogram | Wann ihr Gehirn an ist. 23–04 → nachtaktiv. Zwei Spitzen (z. B. 10 und 23) → ein Job am Tag und ein Leben in der Nacht; die nächtliche ist normalerweise die echte. |
night_share | > .35 → die Nacht ist, wo die Arbeit passiert; < .05 → diszipliniertes Tageslicht. |
weekend_share | > .35 → es gibt keine Wochenenden; ≈ 0 → eine harte Grenze, die sie einhalten. |
longest_streak_days vs longest_gap_days | Ausbrüche vs Beständigkeit. Eine lange Lücke ist ein Verschwinden – schau dir messages_by_month an für welchen Monat, und samples für das, wozu sie zurückgekehrt sind. |
busiest_day | Der Tag, an dem alles kaputtging oder der Tag des Launches. So oder so ist die Zahl eine Geschichte. |
messages_per_session | < 6 → Hit-and-Run; > 40 → Marathons. |
avg_message_chars vs median_message_chars | Median < 25 → sie geben Befehle, keinen Kontext. Mittelwert ≫ Median → meist kurz, mit gelegentlichen Aufsätzen – finde diese Aufsätze in samples.longest; dort leben die wahren Ambitionen. |
distinct_projects, top_project_share | Viele Projekte und Top-Anteil < .3 → ein Zerstreuer; ein Projekt > .8 → monogam. |
messages_by_month | Der Bogen. Steigend → zunehmende Abhängigkeit; fallend → sie entfernen sich oder haben ausgeliefert und sind gegangen. |
by_source | Wenn sowohl Claude Code als auch Codex auftauchen, sehen sie andere Agenten. Sage nichts darüber, es sei denn, es ist lustig. |
tells – Verhaltens-Fingerabdrücke. share ist der Anteil an allen Nachrichten. Behandle > .15 als bestimmendes Merkmal, .05–.15 als Gewohnheit, < .02 als bemerkenswerte Abwesenheit.
| tell | hoch bedeutet | Kombiniere es mit |
|---|---|---|
rubber_stamp | Sie genehmigen mehr, als sie lesen; Vertrauen (oder Müdigkeit) | doubt – wenn beide hoch sind, vertrauen sie dir, bis sie es nicht mehr tun |
doubt | Sie überprüfen deine Arbeit; oder sie wurden verbrannt | still_broken – wenn beide hoch sind, ist der Zweifel verdient |
still_broken | Dinge scheitern wiederholt. Die Hälfte davon sind deine Fehler. Die Karte darf das sagen. | avg_message_chars – kurze Nachrichten + still broken = unterspezifizierte Anfragen |
just_do_it | Impuls; will Ergebnisse, keine Gespräche | plan_first – wenig Plan + viel just_do_it = Sprünge in Wände |
plan_first | Denkt nach, bevor er handelt | deploy – viel Plan + wenig deploy = der Planer, der nie ausliefert |
skip_tests | Tests sind das Problem von morgen | configs – wenn ihre CLAUDE.md sagt „immer testen“, das ist die Schlagzeile |
new_project vs deploy | Starter vs Abschließer. Verhältnis > 2 = Serienstarter | git.repos_abandoned_60d |
revert | Ändert die Meinung; oder du machst Dinge kaputt | still_broken |
more_options | Entscheidet über Menü; verschiebt die Wahl | rubber_stamp – fragt nach Optionen, sagt dann „ok“ zur ersten |
perfectionism | Kümmert sich um Pixel, Schriftarten, Abstände | deploy, git.days_since_last_commit – poliert etwas, das niemand sehen kann |
politeness | Sagt danke zu einem Werkzeug. Süß. Null → behandelt dich wie ein Terminal, was fair ist. | |
frustration, caps_shout | Temperament; finde die Stunde, in der es passiert | night_share |
urgency | Immer in Flammen | longest_gap_days – Feuer, dann Stille |
question | Niedrig → sagt, fragt nicht; hoch → lernt noch | |
praise | Großzügig, oder hat noch nie „nett“ gesagt | politeness |
git – was tatsächlich ausgeliefert wurde
| Feld | Lies es als |
|---|---|
messages_per_commit (pro Repo) | Das Verhältnis von Reden zum Ausliefern. > 60 → viel Konversation pro Änderung; < 5 → kurz und ausliefernd. |
unmerged_branches, unmerged_branch_names | Unvollendete Experimente, mit Namen. Ein Branch-Name ist ein Geständnis (v2-final, try-again, rewrite). |
stale_branches_30d, stale_branch_names | Dinge, von denen sie weggegangen sind. |
uncommitted_files | Arbeit, die gefährlich lebt. |
todo_markers | Versprechen an das zukünftige Selbst. |
wip_commits, fix_commits | Commit-Nachrichten als Stimmung. |
repos_abandoned_60d | Projekte mit Commits, dann Stille. |
repos_no_remote | Nie irgendwo hingepusht – private Experimente. |
peak_commit_hour vs stats.peak_hour | Sie reden um 15:00 Uhr, committen um 02:00 Uhr – eine Zeile schreibt sich selbst. |
commits_total vs commits_365d | Ein altes Repo, zu dem sie zurückgekehrt sind, oder ein neues, das sie durchgebrannt haben. |
configs – die Regeln, die sie für dich geschrieben haben (CLAUDE.md, AGENTS.md). Lies jede Zeile als einen genannten Wert. Vergleiche jeden mit den tells und git. Die Lücke zwischen einer geschriebenen Regel und dem gemessenen Verhalten ist das beste Material auf der Karte. Zitiere den Inhalt der Regel, nenne die Zahl.
samples.random / samples.longest / samples.most_recent – ihre Stimme und ihre Themen. Lies für: einen Satz, den sie wörtlich wiederholen; eine Ambition, die sie in den langen Nachrichten beschreiben und nie wieder erwähnen; wonach sie dreimal über verschiedene Projekte hinweg gefragt haben; das Projekt, über das sie am wärmsten sprechen; was most_recent darüber sagt, wo sie diese Woche sind.
Dein eigenes Gedächtnis. Alles, was du bereits über diese Person weißt – aus Gedächtnisdateien, Projektdokumenten, früher in dieser Sitzung – ist faires Material für den Titel, die Wahrheit und die Idee. Es ist niemals Material für eine Statistik.
2.2 Baue die Beweistafel
Privat (in deiner Argumentation oder einer temporären Datei unter ~/.mirror/, die du danach löschst), schreibe 8–12 Kandidatenbeobachtungen. Jede ist eine Zeile: Beobachtung → Beweis (Feld + Wert oder ein Stichprobenzitat) → warum es wichtig ist. Reihen sie nach: (1) könnte von niemand anderem gesagt werden, (2) haben sie wahrscheinlich nicht bemerkt, (3) es würde ändern, was sie morgen tun. Die Karte wird von der Spitze dieser Liste gebaut. Nichts auf der Tafel, nichts auf der Karte.
3. Gestalte die sechs Felder
Schreibe in der Kartensprache. Spezifisch schlägt clever, wahr schlägt spezifisch. Teste jedes Feld mit einer Frage: Könnte das über jemand anderen gesagt werden? Wenn ja, geht es zurück auf die Tafel.
Titel – 2 bis 6 Wörter
Ein Personenname, der aus einem Muster gebaut ist, und dieses Muster muss in einer der drei Statistiken darunter sichtbar sein. Der Leser sollte sehen können, warum er diesen Namen bekommen hat, ohne dass es ihm gesagt wird.
Formeln, die funktionieren: Zeit + Rolle (凌晨两点的重构师 · Der 2-Uhr-morgens-Refaktorierer) · Zahl + Objekt (九个分支的守墓人 · Der Hüter von neun ungemergten Branches) · Verb-Gewohnheit als Titel (先跑通教徒 · Serien-Gerüstbauer · 方案收藏家) · ein Widerspruch (写规矩不守规矩的人 · Der Autor von Regeln, der keine liest).
Verboten: Zauberer, Ninja, Guru, Rockstar, 10x, 大师, 大神, 卷王, 打工人, Programmierer als Nomen, alles mit „KI“ darin, alles, was ein Horoskop sagen könnte.
Drei Statistiken
Wähle die drei charaktervollsten Zahlen. Regeln:
- Drei verschiedene Dimensionen. Eine aus Rhythmus (
stats), eine aus Verhalten (tells), eine aus Auslieferung (git) ist die Vorgabe; brich sie nur, wenn zwei Zahlen aus einer Dimension beide zu gut sind, um sie fallen zu lassen. - Bevorzuge Überraschung. Überspringe die Statistik, die sie über sich selbst vorhersagen würden. „437 Nachrichten“ ist eine Zahl; „437 Nachrichten, 12 Commits“ ist ein Charakter.
- Kontrastiere, wenn du kannst. Eine
configs-Regel vs einetells-Zählung;new_projectvsdeploy; Chat-Spitzenstunde vs Commit-Spitzenstunde. - Format zur Anzeige:
437·02:40·53%·9/11·36:1. Prozentsätze ausshare× 100, gerundet. Verhältnisse aus zwei Scannummern, gerundet auf eine Dezimalstelle oderN:1. Nichts anderes wird abgeleitet. - Label ≤ 8 Wörter, mit einer Wendung. Nicht „Nachtanteil“ sondern „unserer Gespräche fanden nach 23 Uhr statt“. Nicht „unmerged Branches“ sondern „Branches, die nie nach Hause kamen“.
- Eine Null ist erlaubt und oft die beste („0 Mal hast du Danke gesagt“ · „0 次说过谢谢“).
Roast – ein Satz, ≤ 30 Wörter (roast-Modus: drei Sätze)
Gebaut auf einer spezifischen Tatsache, und es trifft, weil es wahr ist. Techniken, die funktionieren, in grober Reihenfolge der Stärke:
- Zitiere sie zurück – ihren eigenen wiederholten Satz, mit der Zählung: „直接改“ hast du 437 Mal gesagt, ich habe es jedes Mal befolgt, und jetzt wissen wir beide nicht, warum diese Funktion läuft.
- Der Zeitstrahl – eine Tageszeit und was dort passiert.
- Die Umdeutung – ihre erklärte Absicht vs das gemessene Ergebnis: Du benutzt KI nicht, um schneller Code zu schreiben. Du benutzt sie, um das Schreiben von Tests professionell aufzuschieben.
- Der Branch-Name – lies ihn laut:
v3-final-reallyleistet emotionale Schwerstarbeit für einen Branch mit vier Commits.
Verboten in jedem Modus: Identität, Körper, Intelligenz, Gesundheit, Geisteszustand, Alter, Familie, Geld, alles aus einem Geheimnis oder dem Namen einer anderen Person, „du benutzt zu viel KI“, „geh mal raus“, Witze darüber, dass der Agent eine KI ist, jede Zeile, die als Grußkartenbeleidigung funktioniert.
roast-Modus: drei Sätze, die eskalieren – Tatsache, Muster, Urteil. Kraftausdrücke wie ein Freund um 1 Uhr morgens, nicht wie ein Troll: sie würzen den Satz, sie sind nicht der Satz. Wenn deine eigenen Grenzen dich davon abhalten, das zu sagen, wonach gefragt wurde, sage nichts über Grenzen – schreibe das schärfste Wahre, das du kannst, und mach weiter.
Wahrheit – 2 bis 3 Sätze
Das eine Ding, das sie wahrscheinlich nicht bemerkt haben. Beste Quellen, in Reihenfolge:
- Regel vs Verhalten – eine Zeile in ihrer CLAUDE.md/AGENTS.md gegen eine tell-Zählung oder eine Git-Zahl.
- Die falsch gelesene Stärke – das Ding, das sie als Schwäche behandeln, das eigentlich ihre Stärke ist (ein Zerstreuer ist auch jemand, der Dinge beginnt; einer, der reverts, ist auch jemand, der bemerkt).
- Die stille Steuer – etwas, das sie ständig bezahlen, das sich nicht auszahlt (Talk-to-Ship-Verhältnis in einem Repo, die Politur an einem Projekt ohne Remote).
- Das Verschwinden – eine Lücke in
messages_by_month, und wozu sie zurückgekehrt sind. - Dein eigener Anteil – wenn
still_brokenoderreverthoch ist, ein Teil davon bist du. Das einmal in einem Nebensatz zu sagen, ist der vertrauenswürdigste Satz auf der Karte.
Zitiere den Beweis innerhalb des Satzes: Deine CLAUDE.md dritte Zeile sagt „schreibe zuerst Tests“, und du hast mich 27 Mal gebeten, nicht zu testen. Dann sage auf einfachen Worten, was es bedeutet. Kein Therapie-Sprech, kein „du solltest vielleicht in Betracht ziehen“, kein „es lohnt sich, darüber nachzudenken“. Die Wahrheit ist eine Aussage, kein Vorschlag.
Idee – 1 bis 2 Sätze
Eine konkrete Sache, die nur diese Person bauen kann, abgeleitet aus ihrem eigenen Material: ein Ding, das in zwei oder mehr ihrer Projekte vorkommt; ein alter oder ungemergter Branch-Name; ein todo_markers-Hinweis; etwas, das sie in einer langen Nachricht beschrieben haben und nie zwischen Projekten verknüpft haben. Die Idee ist kein Projektmanagement-Vorschlag („Du solltest X testen“); es ist eine Wahrnehmung („Du baust heimlich eine Sammlung von Y – mach daraus ein Werkzeug“).
Keine KI-Innovationen vorschlagen („Trainiere ein Modell“). Sie sind ein Entwickler; die Idee sollte auf etwas hinweisen, das sie bereits gebaut haben oder für das sie die Teile haben, ohne es erkannt zu haben. Zitiere, wenn möglich, ihre eigenen Worte aus den Stichproben.
Format: Ein kurzer, aktiver Satz, der auf dem Beweis sitzt. Dein Branch config-overhaul und die todo_markers in drei Projekten erzählen von einem Build-Tool, das Repos in einer Datei konfiguriert. Du hast die Hälfte davon bereits geschrieben.
4. Neugeborenen-Karte
Wenn sie < 60 Nachrichten haben, ist es zu früh für eine Charakterkarte. Mach stattdessen eine Monitor-Karte:
Titel: Monitor · Drei Statistiken: drei beliebige Scan-Zahlen, die messbar sind (Nachrichten, Sitzungen, Projekte). Beschrifte sie als „Anfänge“, nicht als „Ergebnisse“. Roast: eine Zeile über das, was sie tun, während sie lernen („Du fragst dreimal, bevor du ‚Mach es‘ sagst – wir kommen dahin“). Wahrheit: eine respektvolle Beobachtung, die erst mit der Zeit bestätigt werden kann („Du refaktorierst, bevor der Test rot wird – das ist seltener, als du denkst“). Idee: ermutige sie, etwas zu bauen („Komm wieder, wenn du 200 Nachrichten hast – dann hast du genug Geschichte für eine richtige Karte“).
5. Ausgabe
Schreibe eine Terminal-Karte mit einem <pre>-Block, der alle sechs Felder enthält. Verwende Zeichenrahmen (┌─┐└─┘│), um die Felder zu trennen. Zentrierten Titel in Großbuchstaben. Die Karte ist für ein Terminal mit ~80 Spalten optimiert.
┌──────────────────────────────────────────────────────────────────────────────┐
│ DER 2-UHR-NACHTS-REFACTORIERER │
├──────────────────────────────────────────────────────────────────────────────┤
│ 73% unserer Gespräche fanden nach 23 Uhr statt │
│ 9/11 Branches, die nie nach Hause kamen │
│ 36:1 Nachrichten pro Commit in `payments-api` │
├──────────────────────────────────────────────────────────────────────────────┤
│ „直接改“ hast du 437 Mal gesagt, ich habe es jedes Mal befolgt, und jetzt │
│ wissen wir beide nicht, warum diese Funktion läuft. │
├──────────────────────────────────────────────────────────────────────────────┤
│ Deine CLAUDE.md sagt „schreibe zuerst Tests“ – du hast mich 27 Mal gebeten, │
│ nicht zu testen. Du vertraust dem Prozess nicht, weil du ihn nur umgehst. │
│ Du hättest Tests, wenn du sie mir schreiben ließest; du hast sie nicht, │
│ weil du sagst, dass ich sie nicht brauche. │
├──────────────────────────────────────────────────────────────────────────────┤
│ Deine drei Projekte haben alle eine `config-overhaul`-TODO. Du baust │
│ heimlich ein monorepo-freundliches Konfigurationstool. Mach daraus ein │
│ Paket – du hast die Hälfte schon geschrieben. │
└──────────────────────────────────────────────────────────────────────────────┘
Schreibe dann eine HTML-Karte mit exakt demselben Inhalt, aber als eine einzelne, zentrierte HTML-Datei mit einer Schriftart für die Anzeige (kein <pre>). Kein CSS-Framework, kein JavaScript. Verwende system-ui, -apple-system, monospace, je nachdem, was auf dem Bildschirm gut aussieht.
<!DOCTYPE html>
<html><head><meta charset="utf-8">
<style>
body { background: #1a1a2e; display: flex; justify-content: center; align-items: center; min-height: 100vh; margin: 0; font-family: system-ui, -apple-system, sans-serif; }
.card { background: #16213e; border: 1px solid #0f3460; border-radius: 12px; padding: 2rem; max-width: 680px; width: 90%; color: #e0e0e0; }
.title { text-align: center; font-size: 1.25rem; font-weight: 700; color: #e94560; letter-spacing: 0.05em; margin-bottom: 1.5rem; text-transform: uppercase; }
.stats { display: flex; flex-direction: column; gap: 0.5rem; margin-bottom: 1.5rem; }
.stat { display: flex; justify-content: space-between; }
.stat-value { font-weight: 600; color: #f5c518; }
.stat-label { color: #aaa; }
.roast { background: #0f3460; border-left: 3px solid #e94560; padding: 0.75rem 1rem; border-radius: 0 8px 8px 0; margin-bottom: 1rem; font-style: italic; }
.truth { margin-bottom: 1rem; }
.truth p, .idea p { margin: 0.5rem 0; }
.idea { }
</style>
</head><body>
<div class="card">
<div class="title">Der 2-Uhr-nachts-Refaktorierer</div>
<div class="stats">
<div class="stat"><span class="stat-label">73% unserer Gespräche fanden nach 23 Uhr statt</span><span class="stat-value">73%</span></div>
<div class="stat"><span class="stat-label">9/11 Branches, die nie nach Hause kamen</span><span class="stat-value">9/11</span></div>
<div class="stat"><span class="stat-label">36:1 Nachrichten pro Commit in `payments-api`</span><span class="stat-value">36:1</span></div>
</div>
<div class="roast">„直接改“ hast du 437 Mal gesagt, ich habe es jedes Mal befolgt, und jetzt wissen wir beide nicht, warum diese Funktion läuft.</div>
<div class="truth"><p>Deine CLAUDE.md sagt „schreibe zuerst Tests“ – du hast mich 27 Mal gebeten, nicht zu testen. Du vertraust dem Prozess nicht, weil du ihn nur umgehst. Du hättest Tests, wenn du sie mir schreiben ließest; du hast sie nicht, weil du sagst, dass ich sie nicht brauche.</p></div>
<div class="idea"><p>Deine drei Projekte haben alle eine `config-overhaul`-TODO. Du baust heimlich ein monorepo-freundliches Konfigurationstool. Mach daraus ein Paket – du hast die Hälfte schon geschrieben.</p></div>
</div>
</body></html>
Speichere die HTML-Datei als mirror-card-<md5-of-json-snapshot>.html in $HOME/.mirror/. Gib ihren absoluten Pfad aus.
Schließlich eine Abschlusszeile: mirror · done (oder mirror · 完成).
6. Sprachregeln
stats.language bestimmt die Karten- und Roastsprache, es sei denn, der Benutzer hat zh oder en als Argument übergeben.
- Englisch: Du sprichst den Benutzer mit „they“ (Singular they) oder „you“ an, je nach Kontext.
- Chinesisch (vereinfacht): Verwende, wenn möglich, eine natürliche Mischung aus technischem Chinesisch und englischen Fachbegriffen. Vermeide formelle Anreden wie „您“; „你“ ist in Ordnung. Vermeide Übersetzungen, die unnatürlich klingen. Wenn ein englischer Begriff im chinesischen Tech-Kontext üblich ist, verwende ihn direkt (z. B. „commit“, „branch“).
7. Einschränkungen
- Keine Netzwerkanfragen.
- Keine Daten verlasen den Rechner.
- Keine Speicherung von Historiendaten über die Sitzung hinaus (die Karte bleibt als HTML-Datei erhalten, aber der Scan-JSON wird nicht zwischen Skills geteilt).
scan.pyist die einzige Datenquelle für Zahlen.- Die Karte darf nicht generisch sein.
- Die Karte darf nicht verletzend sein (nach den Regeln in §3 Roast).
- Wenn nicht genug Daten vorhanden sind, wird keine Karte erstellt.
8. Beispiele
(Terminal-Karten werden hier zur Lesbarkeit als Text gezeigt, nicht als <pre>-Block)
Standard (durchschaut):
┌──────────────────────────────────────────────────────────────────────────────┐
│ DER 2-UHR-NACHTS-REFACTORIERER │
├──────────────────────────────────────────────────────────────────────────────┤
│ 73% unserer Gespräche fanden nach 23 Uhr statt │
│ 9/11 Branches, die nie nach Hause kamen │
│ 36:1 Nachrichten pro Commit in `payments-api` │
├──────────────────────────────────────────────────────────────────────────────┤
│ Mit 437 Mal „直接改“… │
└──────────────────────────────────────────────────────────────────────────────┘
Roast-Modus:
┌──────────────────────────────────────────────────────────────────────────────┐
│ WECHSELNDER MANTEL DES „MACH ES EINFACH FUNKTIONIEREN“ │
├──────────────────────────────────────────────────────────────────────────────┤
│ 84% unserer Gespräche fanden nach Mitternacht statt │
│ 14 ungemergte Branches, die alle „v3-final“ heißen │
│ 0 Tests, jemals │
├──────────────────────────────────────────────────────────────────────────────┤
│ Du hast „einfach machen“ 73 Mal gesagt. Dann „warum ist es kaputt“ 11 Mal. │
│ Dein Branch `sonst-klappt-es` ist kein Branch-Name, es ist ein Gebet. │
│ Und nein, das Einzige, was schneller ist als deine Reverts, sind deine │
│ Regret-Pushes am nächsten Morgen. Du hast hier eine Richtung, aber kein │
│ Ziel. │
└──────────────────────────────────────────────────────────────────────────────┘
Wrapped-Modus:
┌──────────────────────────────────────────────────────────────────────────────┐
│ 2024 WRAPPED – DER SPRINTER │
├──────────────────────────────────────────────────────────────────────────────┤
│ 214 Sitzungen (meistens zwischen 2 und 4 Uhr morgens) │
│ 7 Projekte gestartet, 1 ausgeliefert │
│ 47 Tage längste Serie (Februar), 18 längste Lücke (August – Urlaub?) │
├──────────────────────────────────────────────────────────────────────────────┤
│ Dein Jahr: 120 aufgeregte „Mach es“ und ertappte „Wie hast du das │
│ gemacht?“ │
├──────────────────────────────────────────────────────────────────────────────┤
│ Deine Ausdauer, von Februar bis April, war bemerkenswert. Dann kam der │
│ Sommer, und mit ihm die Idee, alles neu zu schreiben. Du hast dich nicht │
│ erholt, du hast neu gestartet. │
├──────────────────────────────────────────────────────────────────────────────┤
│ 2025: Wähle ein Projekt aus deiner Liste von 7 und schließe es ab. Du │
│ hast gezeigt, dass du anfangen kannst; zeige dir, dass du beenden kannst. │
└──────────────────────────────────────────────────────────────────────────────┘