File size: 42,358 Bytes
5134cea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
{
  "meta": {
    "stand": "2026-03-22",
    "version": "1.0.0"
  },
  "hero": {
    "title": "Samuels AI-Werkstatt",
    "subtitle": "4 Harnesses. 1 Workflow. Datengetrieben.",
    "stats": [
      { "label": "Harnesses", "value": "4" },
      { "label": "Sessions", "value": "100+" },
      { "label": "Stunden", "value": "50+" },
      { "label": "Stand", "value": "2026-03-22" }
    ]
  },
  "style_fit": {
    "kicker": "Welches Tool passt?",
    "heading": "Style-Fit Matrix",
    "description": "Welches Harness trifft deinen Arbeitsstil am besten — fuer jeden Task-Typ bewertet.",
    "task_types": [
      "Greenfield Architektur",
      "Feature iterieren",
      "Bugfix isoliert",
      "Refactor gross",
      "Docs schreiben",
      "Codebase erkunden",
      "Parallele Agenten",
      "Interaktiv chatten",
      "Terminal-nah"
    ],
    "harnesses": ["Claude Code", "Hermes", "OpenCode", "Codex CLI"],
    "matrix": [
      ["PERFEKT",  "GUT",      "OKAY",     "MITTEL"],
      ["PERFEKT",  "GUT",      "GUT",      "OKAY"],
      ["GUT",      "GUT",      "PERFEKT",  "OKAY"],
      ["PERFEKT",  "GUT",      "GUT",      "MITTEL"],
      ["GUT",      "PERFEKT",  "OKAY",     "SCHLECHT"],
      ["PERFEKT",  "GUT",      "GUT",      "MITTEL"],
      ["PERFEKT",  "MITTEL",   "GUT",      "SCHLECHT"],
      ["PERFEKT",  "GUT",      "OKAY",     "MITTEL"],
      ["GUT",      "MITTEL",   "MITTEL",   "PERFEKT"]
    ],
    "recommendations": [
      {
        "harness": "Claude Code",
        "for": "Architektur, grosse Refactors, Agenten-Workflows",
        "color": "teal"
      },
      {
        "harness": "Hermes",
        "for": "Dokumentation, Research, Analyse",
        "color": "gold"
      },
      {
        "harness": "OpenCode",
        "for": "Isolierte Bugs, saubere Feature-Implementierungen",
        "color": "green"
      },
      {
        "harness": "Codex CLI",
        "for": "Terminal-Scripts, Batch-Ops, Shell-Automation",
        "color": "amber"
      }
    ]
  },
  "harnesses": [
    {
      "id": "claude-code",
      "name": "Claude Code",
      "tagline": "Vollstaendiges Agentic Coding Environment",
      "status": "aktiv",
      "color": "teal",
      "data_complete": true,
      "stats": [
        { "label": "Sessions", "value": "100+" },
        { "label": "Avg. Session", "value": "~45 min" },
        { "label": "Modell", "value": "claude-opus-4-6" }
      ],
      "strengths": [
        "Tiefste Codebase-Integration via LSP und Git",
        "Subagent-Orchestrierung fuer parallele Arbeit",
        "Sidecar-NG Kontext-Injektion",
        "MCP-Server Support",
        "Direkter Bash/File-Zugriff"
      ],
      "weaknesses": [
        "Hoechste Kosten pro Session",
        "Opinionated Workflow (Claude-first)",
        "Kein nativer Web-Browser"
      ],
      "architecture_link": "diagrams/architecture-claude-code.html",
      "router_keywords": ["architektur", "system", "design", "plan", "komplex", "verstehen", "codebase", "neue idee", "greenfield", "orchestr", "analyse"],
      "router_reason": "Dein Architekt-Modus — Plan Mode erzwingt Denken vor Code. Teuer aber richtig wenn du verstehen willst WAS passiert.",
      "router_wave": "Wave 1 — Scout",
      "tutorial": {
        "quickStart": [
          "Starte mit: `claude` oder `claude --plan` für Architektur-Modus",
          "Erste Commands: `/status`, `git status`, `Lies BACKLOG.md`",
          "Plan Mode aktivieren für grosse Entscheidungen",
          "Subagents für parallele Recherche: `run_in_background: true`",
          "Ergebnis als Tasksheet exportieren für nächstes Harness"
        ],
        "adhsPatterns": {
          "bodyDoubling": "Du bist mein virtueller Co-Worker. Ich rede mit dir während ich hacke — nicht weil ich Hilfe brauche, sondern weil Präsenz mich fokussiert. Sprich, auch wenn ich nicht direkt frage.",
          "dopaminTrigger": "Schnelle Wins: Cliffhanger setzen, Teilergebnisse zeigen, Checkpoint-Messages ('Session bisher: 3 Features, 2 Tests grün').",
          "antiParalysis": "Wenn ich feststecke: Nicht philosophieren, sondern 'Was ist die kleinste nächste Action?' stellen. Mikro-Schritte, nicht Grossvision.",
          "sessionRhythm": "Max 45min pro Session. Dann /compact oder neue Session. Hyperfocus ≠ Produktivität — nach 1h ohne Test → Quality Drop."
        },
        "wellenmodus": {
          "role": "Scout & Orchestrator",
          "entry": "Wenn Task Architektur, Planung, oder grosses Refactor braucht",
          "exit": "Tasksheet für Hermes/Codex wenn Code gebaut werden soll"
        },
        "handoff": {
          "toHermes": "Konkretes Feature mit Scope-Statement, nicht Plan",
          "toOpenCode": "Isolierter Bugfix mit Fehlermeldung + Expected vs Actual",
          "toCodex": "Refactor-Task mit Before/After-Beschreibung"
        },
        "architektur": {
          "annotations": [
            { "component": "CLAUDE.md", "description": "Globale + per-project Verhaltensregeln. Priorität: project > global." },
            { "component": "settings.json", "description": "Modell, Permissions, Env-Variablen. settings.local.json überschreibt." },
            { "component": "Hooks (5 Points)", "description": "SessionStart, UserPromptSubmit, PreToolUse (blockiert!), PostToolUse, Stop" },
            { "component": "Subagents", "description": "Parallele Tasks via Task-Tool. Cost: ~$0.25/M (Haiku). vs $15/M (Opus)." },
            { "component": "MCP-Server", "description": "Externe Tools: Filesystem, GitHub, Memory. Nicht für Long-Running." }
          ]
        },
        "config": {
          "settingsKeys": [
            { "key": "model", "type": "string", "default": "claude-opus-4-6", "description": "Default-Modell für Sessions" },
            { "key": "permissions.allow", "type": "array", "default": "['Edit', 'Write', 'Glob', 'Grep', 'Agent', 'Bash(git*)']", "description": "Erlaubte Tools" },
            { "key": "permissions.deny", "type": "array", "default": "['Bash(rm*)', 'Bash(apt*)', 'Bash(dd*)']", "description": "Verbotene Tools ( safety_gates.py)" },
            { "key": "env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS", "type": "boolean", "default": "1", "description": "Aktiviert Subagent-Orchestrierung" },
            { "key": "hooks.PreToolUse", "type": "array", "description": "Blocking-Hooks vor Tool-Ausführung" },
            { "key": "hooks.UserPromptSubmit", "type": "array", "description": "Context-Injection vor LLM-Call (Sidecar-NG nutzt dies)" }
          ],
          "hooks": [
            { "name": "SessionStart", "description": "Session-Init. Nicht blockierend. Gut für Auto-Context.", "canBlock": false },
            { "name": "UserPromptSubmit", "description": "Vor LLM-Call. Kann additionalContext injizieren (Sidecar-NG).", "canBlock": false },
            { "name": "PreToolUse", "description": "Vor Tool-Ausführung. BLOCKIERT Tool wenn Handler blockiert. Nutzung: safety_gates.py.", "canBlock": true },
            { "name": "PostToolUse", "description": "Nach Tool-Ausführung. Für Logging, Async-Review.", "canBlock": false },
            { "name": "Stop", "description": "Session-Ende. Cleanup, Final-Report.", "canBlock": false }
          ]
        },
        "faq": [
          { "q": "Session friert ein", "a": "ctrl+c → neu starten. Prüfe ~/claude/.claude/logs/ für Fehler." },
          { "q": "Subagent antwortet nicht", "a": "60s timeout in CLAUDE.md. Prüfe seinen Output oder spawnne neuen." },
          { "q": "Sidecar-Injection funktioniert nicht", "a": "Prüfe hook_inject.py läuft, additionalContext wird in PreToolUse nicht unterdrückt." },
          { "q": "Context zu voll", "a": "/compact eingeben oder neue Session starten. Long-Context = Quality-Drop." },
          { "q": "Hook führt nichts aus", "a": "Prüfe: 1) Hook-Pfad existiert, 2) Datei ausführbar, 3) Interpreter-Pfad in Shebang." }
        ]
      },
      "powerUser": {
        "level2": {
          "title": "Config Mastery",
          "configHierarchy": [
            { "file": "~/.claude/settings.json", "role": "Basis-Config: Modell, Permissions, Hooks. Wird versioniert." },
            { "file": "~/.claude/settings.local.json", "role": "Lokale Overrides — NICHT ins Git. Für Bash(*) und sensitive Permissions." },
            { "file": "~/.claude/CLAUDE.md", "role": "Globale Verhaltensregeln. Akkumulieren mit Projekt-CLAUDE.md — nicht überschreiben." },
            { "file": "<project>/CLAUDE.md", "role": "Projektspezifische Regeln. Höchste Priorität. Definiert Scope, Test-Strategie, Verbote." }
          ],
          "bashPermissions": [
            { "pattern": "Bash(git*)", "meaning": "Alle git-Befehle erlaubt" },
            { "pattern": "Bash(python3 /home/*)", "meaning": "python3 nur mit absolutem Pfad" },
            { "pattern": "Bash(*)", "meaning": "ALLES erlaubt — nur in settings.local.json, nie in settings.json" },
            { "pattern": "Bash(gh api*)", "meaning": "GitHub CLI API-Calls" },
            { "pattern": "Bash(npm*)", "meaning": "Alle npm-Befehle" }
          ],
          "attentionBudget": [
            { "rule": ">50 Regeln = Compliance-Drop", "detail": "Ab ~50 CLAUDE.md-Regeln sinkt die Regel-Einhaltung messbar. Weniger, schärfer ist besser." },
            { "rule": "Weniger > Mehr", "detail": "Weniger Regeln, scharf formuliert > viele Regeln, weich formuliert. Jede Regel konkurriert um Kontext." },
            { "rule": "CLAUDE.md ≠ Config-File", "detail": "Kein JSON, kein YAML — Aufmerksamkeitsbudget. Was nicht gelesen wird, wirkt nicht." },
            { "rule": "Projekt > Global", "detail": "project/CLAUDE.md überschreibt ~/.claude/CLAUDE.md bei Konflikten. Nutze das gezielt." }
          ]
        },
        "level3": {
          "title": "Subagent & Cost Mastery",
          "costTable": [
            { "action": "Kurze Analyse", "cost": "<$0.05", "tip": "Unter 2min — kein Subagent nötig" },
            { "action": "Codebase-Analyse (vollständig)", "cost": "~$0.20-0.50", "tip": "Sonnet-Subagent statt Opus direkt" },
            { "action": "Subagent-Wave (3 Agents)", "cost": "~$0.10-0.30", "tip": "Haiku für Background-Tasks: ~$0.25/1M" },
            { "action": "Session ohne Fokus (>1h)", "cost": "$1-3+", "tip": "ABBRECHEN — /compact oder neue Session" },
            { "action": "Opus direkt", "cost": "~$15/1M Tokens", "tip": "Nur für Architektur — nie für Recherche" },
            { "action": "Sonnet-Subagent", "cost": "~$3/1M Tokens", "tip": "5x günstiger als Opus — für Recherche + Code" }
          ],
          "subagentPatterns": [
            { "pattern": "run_in_background: true — IMMER", "description": "Hauptsession muss responsive bleiben. Kein Blocking. Pflicht bei run_in_background: true." },
            { "pattern": "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1", "description": "Aktiviert typisierte Subagents mit Frontmatter-Model-Override. 21 aktive Agent-Typen parallel ausführbar." },
            { "pattern": "Max 2-3 parallele Sessions", "description": "Mehr als 3 parallele Claude Code Sessions = Context-Chaos + doppelte Kosten. Hard Limit." },
            { "pattern": "Sonnet für Recherche, Opus für Architektur", "description": "Nie Opus für Websuche oder File-Lesen. Sonnet-Subagent reicht, spart 80% der Kosten." },
            { "pattern": "Lesen vor Spawn", "description": "Erst relevante Dateien selbst lesen. Subagent soll nicht Dinge herausfinden die schon bekannt sind." },
            { "pattern": "1 fehlgeschlagener Ansatz → STOPP", "description": "Nicht automatisch Ansatz 2 probieren. Samuel fragen. Zweiter autonomer Versuch löst Problem selten." }
          ]
        },
        "level4": {
          "title": "Extension System",
          "extensionTypes": [
            { "type": "Agent", "path": "~/.claude/agents/my-agent.md", "description": "Frontmatter mit name/model/tools/subagent_type + System-Prompt. Erbt alle aktiven Hooks." },
            { "type": "Skill", "path": "~/.claude/skills/my-skill/SKILL.md", "description": "Via /my-skill getriggert. Kontext-Injektion, kein Tool. Sidecar-NG nutzt Skills über Knowledge-Base-Paths." },
            { "type": "Command", "path": "~/.claude/commands/my-cmd.md", "description": "Via /my-cmd aufgerufen. Setzt Datei-Inhalt als System-Prompt. Verhält sich wie Slash-Command." },
            { "type": "Hook", "path": "~/.claude/hooks/my-hook.py", "description": "Bekommt JSON via stdin (tool, input, session_id). Exit 0 = erlaubt, non-zero = geblockt (nur PreToolUse)." },
            { "type": "Statusline", "path": "~/.claude/statusline.sh", "description": "Liest JSON von stdin (Context%, Token-Usage, Git-Branch, Hooks). ANSI-formatierte Ausgabe. Editierbar ohne Neustart." }
          ],
          "hookDeepDive": [
            { "name": "PreToolUse", "blocking": true, "knownBug": false, "detail": "Einzigartig: blockt Tool-Ausführung physisch. Kein anderer Harness hat das. Hook entscheidet ob Tool läuft.", "workaround": null },
            { "name": "UserPromptSubmit", "blocking": false, "knownBug": false, "detail": "additionalContext-Injection vor LLM-Call. Sidecar-NG nutzt diesen Hook für Prompt-Klassifikation.", "workaround": null },
            { "name": "SessionStart", "blocking": false, "knownBug": true, "detail": "Bug #13650: additionalContext wird verworfen. Hook läuft, aber Injection landet nicht beim LLM.", "workaround": "Injection über UserPromptSubmit statt SessionStart" },
            { "name": "Hook-Inheritance", "blocking": false, "knownBug": false, "detail": "Subagents erben ALLE Hooks — kein differenziertes Gate pro Agent möglich. Known Limitation.", "workaround": "Matcher in PreToolUse einschränken, z.B. nur auf Agent-Tool" },
            { "name": "Hook-Restart Required", "blocking": false, "knownBug": false, "detail": "Hook-Änderungen in settings.json erfordern Session-Neustart. Kein Hot-Reload.", "workaround": "Hook-Script selbst kann ohne Neustart editiert werden — nur settings.json-Änderungen erfordern Neustart" }
          ],
          "activeHooks": [
            { "name": "enforce-background-agents.py", "hook": "PreToolUse → Agent", "function": "Blockt Agent-Calls ohne run_in_background: true. Hält Hauptsession responsive." },
            { "name": "coach-before.sh", "hook": "SessionStart", "function": "Rotiert Playbook-Regeln, Streak-Counter, tägliche Fokus-Injection." },
            { "name": "event_logger.py", "hook": "alle Events", "function": "JSON-Telemetrie aller Tool-Calls. Datei: ~/.claude/events/YYYY-MM-DD.jsonl" },
            { "name": "gsd-context-monitor.js", "hook": "PostToolUse", "function": "Context-Window-Überwachung. Warnt bei >80% Auslastung." },
            { "name": "hook_inject.py (Sidecar-NG)", "hook": "UserPromptSubmit", "function": "Keyword-First → LLM-Fallback Klassifikation. Injiziert additionalContext für aktiven Mode/Skill." }
          ]
        }
      }
    },
    {
      "id": "hermes",
      "name": "Hermes",
      "tagline": "Billig & Anpassungsfähig — das Arbeitspferd",
      "status": "aktiv",
      "color": "gold",
      "data_complete": true,
      "stats": [
        { "label": "Sessions", "value": "40+" },
        { "label": "Avg. Session", "value": "~20 min" },
        { "label": "Modell", "value": "MiniMax-M2.5" }
      ],
      "strengths": [
        "MiniMax ~150x billiger als Opus — fuer Routineaufgaben",
        "10 Provider, 200+ Modelle via OpenRouter",
        "Beste Feedback-Annahme — Korrekturen werden direkt akzeptiert",
        "48 eingebaute Tools (Web, Browser, Vision, SmartHome)",
        "Git Worktrees fuer parallele, isolierte Tasks"
      ],
      "weaknesses": [
        "Scope-Drift: Baut standardmaessig in ~/.hermes/ wenn cwd nicht gesetzt",
        "Langsamer Start: 10-15s Stille vor erster Response — normal, nicht abbrechen",
        "Output-Qualitaet mittel: funktional aber nicht elegant",
        "Kein CLAUDE.md-Aequivalent: SOUL.md aktuell leer",
        "Kein PreToolUse-Blocking: keine programmatische Verhaltenssteuerung"
      ],
      "architecture_link": "diagrams/architecture-hermes.html",
      "router_keywords": ["build", "implement", "feature", "frontend", "backend", "api", "günstig", "iterati", "docs", "dokumentation", "research", "schreib"],
      "router_reason": "50x günstiger als Opus. Self-Improvement ersetzt deine Meta-Arbeit. Wenn du weißt WAS du willst — bau es hier.",
      "router_wave": "Wave 2 — Build",
      "tutorial": {
        "quickStart": [
          "IMMER zuerst: `cd ~/Projekte/Projekt` — Hermes baut sonst in ~/.hermes/",
          "Starte: `hermes chat` (15s Stille am Anfang = normal, nicht abbrechen)",
          "Modell waehlen: `hermes chat -m minimax/minimax-text-01` fuer guenstige Runs",
          "Verzeichnis-Check: 'Bestätige in welchem Verzeichnis du arbeitest'",
          "Tasksheet einfuegen — Scope, Output-Pfad, Constraints klar",
          "Feedback geben — konkret und praezise. Hermes akzeptiert Korrekturen direkt.",
          "Feature by Feature iterieren, Summary fuer Handoff an Codex"
        ],
        "adhsPatterns": {
          "bodyDoubling": "Pair-Programming-Feeling. CLI oder Telegram — offen lassen, nicht killen. Ich rede waehrend du zuloeschst.",
          "dopaminTrigger": "Iteratives Feedback gibt immediate gratification. Kleine Korrektur, sofort sichtbarer Erfolg. Nicht alles auf einmal.",
          "antiParalysis": "Feature by Feature. Kleine Schritte die ich abschliessen kann. Scope-Drift ist teurer als tiny Tasks.",
          "sessionRhythm": "15s Stille am Anfang ist normal. Geduld. Iterationen sind billig — nich neu starten wenn etwas falsch ist."
        },
        "wellenmodus": {
          "role": "Output-Bauer (Wave 2)",
          "entry": "Wenn Claude Code einen Plan hat und Tasksheet existiert",
          "exit": "Summary an Codex fuer Polishing oder fertig wenn keine Qualitaetsanspruch"
        },
        "handoff": {
          "toOpenCode": "Reality-Check mit frischem Blick — was hat Hermes gebaut das suboptimal ist?",
          "toCodex": "Summary: Geaenderte Dateien, implementierte Features, offene TODOs. Codex Polishing machen lassen."
        },
        "architektur": {
          "annotations": [
            { "component": "config.yaml", "description": "Haupt-Config (YAML). 284 Zeilen — alle Einstellungen." },
            { "component": "SOUL.md", "description": "Agent-Personality, freier Text. Aktuell leer — Potenzial ungenutzt." },
            { "component": "10 Provider", "description": "MiniMax, OpenRouter (200+ Modelle), Anthropic, OpenAI, Gemini, Custom Endpoints." },
            { "component": "48 Tools", "description": "Web, Terminal, Vision, Browser, SmartHome — ohne MCP-Server." },
            { "component": "Git Worktrees", "description": "Parallele isolierte Agents auf demselben Repo. Merge danach manuell." }
          ]
        },
        "config": {
          "settingsKeys": [
            { "key": "default_model", "type": "string", "default": "MiniMax-M2.5", "description": "Default-Modell" },
            { "key": "default_provider", "type": "string", "default": "minimax", "description": "Default-Provider" },
            { "key": "agent.reasoning_effort", "type": "string", "default": "medium", "description": "low | medium | high — mehr Tokens bei high" },
            { "key": "terminal.backend", "type": "string", "default": "local", "description": "local | docker | ssh | modal — wo Code ausgefuehrt wird" },
            { "key": "terminal.cwd", "type": "string", "default": ".", "description": "Working Directory — ~/.hermes wenn nicht gesetzt" },
            { "key": "memory.enabled", "type": "boolean", "default": "true", "description": "Cross-Session Memory via Honcho AI" },
            { "key": "compression.enabled", "type": "boolean", "default": "true", "description": "Context-Kompression fuer lange Sessions" }
          ],
          "hooks": [
            { "name": "gateway:startup", "description": "Beim Gateway-Start. Logging, Init.", "canBlock": false },
            { "name": "session:start", "description": "Bei neuer Session. Worktree-Setup.", "canBlock": false },
            { "name": "agent:start", "description": "Vor erstem Agent-Turn.", "canBlock": false },
            { "name": "session:reset", "description": "Bei Session-Reset. Cleanup.", "canBlock": false }
          ]
        },
        "faq": [
          { "q": "Session startet nicht", "a": "15s warten. Dann Enter druecken. Das ist normal — nicht abbrechen und neu starten." },
          { "q": "Baut am falschen Ort", "a": "IMMER zuerst cd in Projektordner. Tasksheet muss Output-Pfad enthalten." },
          { "q": "Output-Qualitaet mittel", "a": "Normal. Hermes ist funktional, nicht elegant. Polishing by Codex." },
          { "q": "Keine Verhaltensregeln", "a": "SOUL.md ist leer. Fuer strukturierte Regeln: SOUL.md befuellen (kommt noch)." },
          { "q": "Workflow mit Claude Code", "a": "Plan Mode in CC → Tasksheet schreiben → hermes chat → Summary → Codex Polishing." }
        ]
      }
    },
    {
      "id": "opencode",
      "name": "OpenCode",
      "tagline": "Schlankes Agentic Coding Tool",
      "status": "aktiv",
      "color": "green",
      "data_complete": true,
      "stats": [
        { "label": "Sessions", "value": "50+" },
        { "label": "Avg. Session", "value": "~15 min" },
        { "label": "Modell", "value": "MiniMax / Claude Sonnet" }
      ],
      "strengths": [
        "Multi-Provider: Anthropic, OpenAI, MiniMax ohne Lock-in",
        "One-Shot Mode für schnelle Pipelines",
        "Parallele Instanzen ohne Konflikte",
        "MCP native Support ohne JSON-Editierung",
        "Headless Server für API-Integration"
      ],
      "weaknesses": [
        "Fragt NICHT nach — unvollständiges Briefing führt zu falschem Output",
        "Scope-Drift ohne explizites Scope-Statement",
        "Kein Session-Gedächtnis zwischen opencode run-Aufrufen",
        "Feedback-Reparatur schwach — Korrekturen werden bestätigt aber nicht integriert",
        "Keine Subagent-Orchestrierung"
      ],
      "architecture_link": "diagrams/architecture-opencode.html",
      "router_keywords": ["bugfix", "bug", "fix", "fehler", "debug", "isoliert", "schnell", "provider", "lsp"],
      "router_reason": "LSP Pre-fetch liefert Kontext bevor du fragst. Für isolierte Bugs ohne den Overhead von Claude Code.",
      "router_wave": "Wave 2 — Build (Alternative)",
      "tutorial": {
        "quickStart": [
          "Starte mit: `opencode` (TUI) oder `opencode run \"prompt\"` (one-shot)",
          "Im Projektordner starten: `cd ~/Projekte/MeinProjekt`",
          "Erstes: `Lies ARCHITECTURE.md` — Was hat Claude Code geplant?",
          "Scope explizit machen: Output-Pfad + Umfang in einem Satz",
          "Bauen oder Reality-Check — one-shot für Drafts, TUI für komplexe Tasks",
          "Ergebnis dokumentieren — was wurde gebaut, was weggelassen, warum"
        ],
        "adhsPatterns": {
          "bodyDoubling": "TUI-Session fühlt sich wie Pair-Programming an. Offen lassen, nicht wegdiskutieren. Ich rede während du baust.",
          "dopaminTrigger": "Schneller Output in <30s. One-shot für immediate gratification — Draft wegwerfen ist billig, nicht frustrierend.",
          "antiParalysis": "Kurzes Briefing, schneller Re-Run. Billig = Experimentieren erlaubt. Lieber 2min laenger briefen als zweiten Run.",
          "sessionRhythm": "One-shots statt Marathon. Max 3 Runs pro Task, dann reflektieren. Nicht in Loop verlieren."
        },
        "wellenmodus": {
          "role": "Reality-Check & Schnell-Builder",
          "entry": "Wenn Claude Code einen Plan hat und du schnelle Validierung brauchst",
          "exit": "Ergebnis an Hermes für Implementierung oder Bestätigung dass Plan stimmt"
        },
        "handoff": {
          "toHermes": "Dateistruktur + validierten Plan. Kontext immer mitgeben.",
          "toCodex": "Refactor-Task mit Before/After-Beschreibung. Sandbox macht sicheres Bulk-Edit."
        },
        "architektur": {
          "annotations": [
            { "component": "opencode run", "description": "One-shot Execution ohne TUI. Für Pipelines und schnelle Drafts." },
            { "component": "opencode serve", "description": "Headless HTTP-Server für API-Integration." },
            { "component": "Multi-Provider", "description": "anthropic, openai, minimax. MiniMax ~150x billiger als Opus." },
            { "component": "Plugins (TS)", "description": "TypeScript Hooks für Context-Injection. experimental.chat.system.transform." },
            { "component": "MCP-Server", "description": "Native CLI-Verwaltung: opencode mcp add/remove/list." }
          ]
        },
        "config": {
          "settingsKeys": [
            { "key": "provider", "type": "object", "description": "API-Keys für Provider (anthropic, openai, minimax)" },
            { "key": "model.default", "type": "string", "default": "anthropic/claude-sonnet-4-5", "description": "Default-Modell" },
            { "key": "model.fast", "type": "string", "default": "anthropic/claude-haiku-4-5", "description": "Schnelles Modell für einfache Tasks" },
            { "key": "permission", "type": "string", "default": "ask", "description": "ask | auto-edit | allow — für headless: allow" },
            { "key": "mcp", "type": "object", "description": "MCP-Server Config (filesystem, github, etc.)" },
            { "key": "experimental.chat.system.transform", "type": "string", "description": "Plugin-Path für Context-Injection" }
          ],
          "hooks": [
            { "name": "system.transform", "description": "TypeScript-Hook für System-Prompt Modifikation. Injiziert CLAUDE.md-ähnliche Regeln.", "canBlock": false },
            { "name": "postResponse", "description": "Nach Response — für Syntax-Check, Narration-Dispatch.", "canBlock": false },
            { "name": "onError", "description": "Bei Error — Error-Pattern-Analyse und Kontext-Return.", "canBlock": false }
          ]
        },
        "faq": [
          { "q": "Session blockiert", "a": "ctrl+c zum Beenden. Bei headless: permission: allow in opencode.json setzen." },
          { "q": "Baut das Falsche", "a": "Re-Run mit explizitem Scope. Nicht 'nochmal' sagen — genau beschreiben was ANDERS." },
          { "q": "Kein Gedächtnis", "a": "Kontext immer mitgeben. Nichts voraussetzen. Jeder run startet blank." },
          { "q": "Plugin funktioniert nicht", "a": "experimental.chat.system.transform in opencode.json prüfen. Pfad muss stimmen." },
          { "q": "Dashboard statt Website", "a": "Immer explizit: 'Admin-Dashboard, nicht Landing Page. Keine Hero-Section.'" }
        ]
      }
    },
    {
      "id": "codex-cli",
      "name": "Codex CLI",
      "tagline": "Verify-, Review- und Polishing-Harness fuer den letzten Meter",
      "status": "aktiv",
      "color": "amber",
      "data_complete": true,
      "stats": [
        { "label": "Sessions", "value": "40+" },
        { "label": "Avg. Session", "value": "~20 min" },
        { "label": "Modell", "value": "gpt-5.4" }
      ],
      "strengths": [
        "Saubere Scope-Begrenzung durch Sandbox + Approval-Policy",
        "Starker Review-Workflow mit `codex review`",
        "Rigorose Rueckfragen vor riskanten Implementierungen",
        "Terminal-nahe Edits, Refactors und Batch-Operationen",
        "Runbooks fuer Planning, Build, Inspect und Review"
      ],
      "weaknesses": [
        "Langsamer Start wenn das Repo erst gelesen werden muss",
        "Kein Hook-System wie bei Claude Code",
        "Wenig Selbstkritik — Review und Tests weiter selbst einfordern",
        "Nicht der beste ROI fuer offene Exploration oder Research",
        "OpenAI-locked, kein Multi-Provider-Setup"
      ],
      "architecture_link": "diagrams/architecture-codex-cli.html",
      "router_keywords": ["test", "tests", "verif", "review", "polish", "polieren", "refactor", "rename", "bulk", "migrat", "sandbox", "batch", "aufräum", "cleanup", "quality", "stabil", "ship"],
      "router_reason": "Codex ist dein Finish-Harness: Sandbox und Approval halten den Scope eng, Rueckfragen reduzieren Fehlannahmen und `codex review` macht den letzten Qualitaetscheck.",
      "router_wave": "Wave 3 — Verify"
      ,
      "tutorial": {
        "quickStart": [
          "Starte interaktiv mit `codex` direkt im Projektordner wenn der Task noch Rueckfragen braucht",
          "Nutze `codex exec \"PROMPT\"` fuer klare Einzelaufgaben wie Type Hints, Refactors oder Tests",
          "Setze fuer sichere Alltagsarbeit `-s workspace-write -a on-request` oder den Shortcut `--full-auto`",
          "Verwende `codex review` vor jedem Ship-Kandidaten als Pflichtschritt, nicht als Bonus",
          "Wenn ein guter Zwischenstand existiert: `codex resume --last` fortsetzen oder `codex fork --last` fuer riskante Varianten"
        ],
        "adhsPatterns": {
          "bodyDoubling": "Codex ist weniger conversational als Claude Code, aber stark wenn der Auftrag klar gerahmt ist. Nutze ihn als ruhigen Co-Worker fuer den Finish-Pass: ein Ziel, ein Scope, ein sauberer Abschluss.",
          "dopaminTrigger": "Sichtbare Mini-Wins funktionieren gut: erst `codex review`, dann ein enger Fix, dann direkt Tests oder Smoke-Checks. Kurze, abgeschlossene Schleifen halten Momentum ohne Scope-Explosion.",
          "antiParalysis": "Wenn du festhaengst, nicht 'mach es besser' sagen. Gib Codex ein enges Paket: Datei, Ziel, Definition of Done und was explizit out of scope ist.",
          "sessionRhythm": "Codex nicht als Marathon-Session benutzen. Erst Planung oder Build woanders, dann 15 bis 25 Minuten Finish-Phase: Review, Polishing, Verifikation, Handoff."
        },
        "wellenmodus": {
          "role": "Verifier & Finisher",
          "entry": "Wenn ein Feature bereits gebaut ist und jetzt Review, Polishing, Tests oder Scope-sichere Refactors anstehen",
          "exit": "Ship-Entscheidung mit Findings, offenen Punkten und konkreter Empfehlung an Samuel"
        },
        "handoff": {
          "toHermes": "Wenn waehrend des Polishings klar wird dass neue Funktionalitaet fehlt oder ein groesserer Umbau noetig ist.",
          "toOpenCode": "Wenn ein isolierter Build-Task schneller als one-shot oder in parallelen kleinen Runs gebaut werden kann.",
          "toSamuel": "Review-Ergebnis, behobene Punkte, verbleibende Risiken und eine klare Ship-Empfehlung: JA oder NEIN."
        },
        "architektur": {
          "annotations": [
            { "component": "config.toml", "description": "Zentrale Steuerung fuer Modell, Reasoning, Trust-Level und Modell-Migrationen." },
            { "component": "Runbooks", "description": "Vier Session-Typen strukturieren die Arbeit: build, planning, review und inspect." },
            { "component": "Sandbox Mode", "description": "Bestimmt die Umgebung: read-only, workspace-write oder danger-full-access." },
            { "component": "Approval Policy", "description": "Legt fest wann Rueckfragen kommen: untrusted, on-request, on-failure oder never." },
            { "component": "codex review", "description": "Eingebauter Review-Modus fuer uncommitted Changes, Branch-Diffs oder einzelne Commits." }
          ]
        },
        "config": {
          "settingsHeading": "Config / CLI Keys",
          "hooksHeading": "Runbooks",
          "settingsKeys": [
            { "key": "model", "type": "string", "default": "gpt-5.4", "description": "Standardmodell fuer interaktive Sessions und exec-Runs" },
            { "key": "model_reasoning_effort", "type": "string", "default": "medium", "description": "Reasoning-Tiefe: low, medium, high oder xhigh" },
            { "key": "projects.<path>.trust_level", "type": "string", "default": "trusted", "description": "Projektbezogene Vertrauenseinstufung fuer Rechte und Verhalten" },
            { "key": "notice.model_migrations", "type": "table", "description": "Leitet veraltete Modellnamen auf aktuelle Modelle um" },
            { "key": "sandbox_mode", "type": "flag", "default": "workspace-write", "description": "Praktisch via CLI-Flag gesetzt: read-only, workspace-write oder danger-full-access" },
            { "key": "approval_policy", "type": "flag", "default": "on-request", "description": "Praktisch via CLI-Flag gesetzt: untrusted, on-request, on-failure oder never" }
          ],
          "hooks": [
            { "name": "planning.md", "description": "Runbook fuer unscharfe Ziele und Architekturarbeit. Erst artefaktfaehig machen, dann bauen.", "canBlock": false },
            { "name": "build.md", "description": "Runbook fuer klar umrissene Implementierung mit stabilem Outcome.", "canBlock": false },
            { "name": "inspect.md", "description": "Read-only Exploration zum Verstehen einer Codebase ohne Edits.", "canBlock": false },
            { "name": "review.md", "description": "Qualitaets- und Regressionsfokus fuer Review-Paesse vor dem Ship.", "canBlock": false }
          ]
        },
        "faq": [
          { "q": "Warum stellt Codex so viele Rueckfragen?", "a": "Weil es Fehlannahmen vor dem Edit reduziert. Gerade bei Review-, Refactor- und Finish-Aufgaben spart das Re-Work." },
          { "q": "Wann nutze ich `codex review`?", "a": "Immer vor einem Ship-Kandidaten und immer dann, wenn Codex selbst etwas veraendert hat. Review ist Pflichtschritt, nicht optional." },
          { "q": "Welcher Sandbox-Modus ist alltagstauglich?", "a": "Meist `workspace-write` mit `on-request`. Fuer Analyse `read-only`, fuer riskante Vollautonomie nur in bekannten, stabilen Situationen mehr." },
          { "q": "Wofuer ist Codex die falsche Wahl?", "a": "Offene Exploration, Research und grobe Produktentscheidungen. Dafuer erst Claude Code oder Hermes nutzen und Codex spaeter fuer Finish und Verify einsetzen." },
          { "q": "Was wenn waehrend des Polishings neuer Scope auftaucht?", "a": "Nicht heimlich mitbauen. Findings dokumentieren und den Task zur passenden Build- oder Plan-Phase zurueckgeben." }
        ]
      }
    }
  ],
  "architecture_diagrams": [
    {
      "name": "Claude Code",
      "link": "diagrams/architecture-claude-code.html",
      "description": "Hub-and-Spoke Architektur mit Sidecar-NG Integration"
    },
    {
      "name": "Hermes",
      "link": "diagrams/architecture-hermes.html",
      "description": "Multi-Provider Gateway mit SOUL.md und Personality-System"
    },
    {
      "name": "Codex CLI",
      "link": "diagrams/architecture-codex-cli.html",
      "description": "Terminal-native Pipeline mit Sandbox-Execution"
    },
    {
      "name": "OpenCode",
      "link": "diagrams/architecture-opencode.html",
      "description": "Modulares Open-Source Coding Agent Framework"
    }
  ],
  "laws": [
    {
      "number": 1,
      "title": "Kontext ist alles",
      "text": "Ohne sauberen Kontext liefert jedes Modell Mittelwert-Output. CLAUDE.md, Sidecar und Skill-Injektion sind keine Extras — sie sind der Job.",
      "beweis": "Sessions ohne Sidecar produzieren messbar mehr Korrekturen",
      "color": "teal"
    },
    {
      "number": 2,
      "title": "Verifikation vor Commit",
      "text": "Code Review allein zaehlt nicht. Tests laufen oder es ist nicht fertig.",
      "beweis": "Jeder 'fast fertig'-Commit ohne Tests hat Folge-Fixes erzeugt",
      "color": "green"
    },
    {
      "number": 3,
      "title": "Atomare Commits",
      "text": "Eine logische Aenderung pro Commit. Was nicht in einen Satz passt, gehoert in zwei Commits.",
      "beweis": "Grosse Commits blockieren Rollbacks und verwischen Kausalitaet",
      "color": "gold"
    },
    {
      "number": 4,
      "title": "Fragen ist schneller als Irren",
      "text": "Wenn der Agent unsicher ist, fragt er. Eine Rueckfrage kostet 10 Sekunden. Falsches Abbiegen kostet 10 Minuten.",
      "beweis": "Sidecar Intent-First-Regel reduziert Out-of-Scope-Aenderungen",
      "color": "teal"
    },
    {
      "number": 5,
      "title": "Parallelitaet beats Sequenz",
      "text": "Unabhaengige Tasks werden gleichzeitig ausgefuehrt. Subagents sind die Einheit, nicht Prompts.",
      "beweis": "Parallele Subagent-Runs reduzieren Gesamtzeit um ~60%",
      "color": "amber"
    },
    {
      "number": 6,
      "title": "Scope-Disziplin",
      "text": "Was nicht explizit beauftragt ist, wird nicht gemacht. Keine spontanen Refactors, keine Erweiterungen.",
      "beweis": "Scope-Creep ist die haeufigste Ursache fuer lange Review-Zyklen",
      "color": "red"
    },
    {
      "number": 7,
      "title": "Exploration Budget",
      "text": "Ein fehlgeschlagener Ansatz, dann Stop und fragen. Nicht automatisch Ansatz 2 probieren.",
      "beweis": "Zweiter autonomer Ansatz loest das Problem selten, kostet aber immer Context",
      "color": "amber"
    },
    {
      "number": 8,
      "title": "Stabilisierung vor Neubau",
      "text": "Bugs werden als Patches geloest, nicht als Rewrites. Backlog schlaegt Goldplating.",
      "beweis": "Rewrites ohne Testbaseline reproducieren 40% der alten Bugs",
      "color": "gold"
    },
    {
      "number": 9,
      "title": "Deutsche Kommunikation, englische Commits",
      "text": "Conventional Commits auf Englisch. Alles andere in der Sprache des Kontexts.",
      "beweis": "Konsistenz in Commit-History erleichtert Changelog-Generierung",
      "color": "muted"
    },
    {
      "number": 10,
      "title": "Evidence vor Bauchgefuehl",
      "text": "Kein Feature, keine Entscheidung ohne Datenbasis. Evals, Logs, Tests — nicht Intuition.",
      "beweis": "Sidecar-NG Accuracy-Messungen zeigten kontra-intuitive Ergebnisse mehrfach",
      "color": "teal"
    }
  ],
  "anti_patterns": [
    {
      "name": "Ambiguous Target",
      "description": "Task starten ohne zu klaeren welches Projekt, welche Komponente, welches Konzept gemeint ist.",
      "folge": "30 Minuten Arbeit in die falsche Richtung",
      "severity": "hoch"
    },
    {
      "name": "Blind Agent Trust",
      "description": "Subagent-Output nicht verifizieren und direkt als erledigt markieren.",
      "folge": "Stille Regressionen, die erst Tage spaeter auffallen",
      "severity": "kritisch"
    },
    {
      "name": "Big Bang Commit",
      "description": "Alles in einem Commit, weil 'gehoert zusammen'.",
      "folge": "Unkontrollierbarer Rollback, verlorene Kausalitaet",
      "severity": "hoch"
    },
    {
      "name": "Config-Halluzination",
      "description": "Keys in Konfigurationsdateien schreiben die dort nicht existieren.",
      "folge": "Stille Fehler oder Runtime-Crashes",
      "severity": "hoch"
    },
    {
      "name": "Scope Creep",
      "description": "Waehrend X implementieren auch Y und Z refactoren weil man gerade dabei ist.",
      "folge": "Review-Aufwand verdoppelt, Rollback unmoeglich",
      "severity": "mittel"
    },
    {
      "name": "Guessing without Asking",
      "description": "Bei Unklarheit raten statt eine Rueckfrage zu stellen.",
      "folge": "Meistens falsche Richtung, immer Zeitverlust",
      "severity": "hoch"
    },
    {
      "name": "Retry Loop ohne Diagnose",
      "description": "Nach fehlgeschlagenem Test denselben Ansatz nochmal versuchen.",
      "folge": "Exponentiell steigende Context-Kosten, gleiche Fehler",
      "severity": "mittel"
    },
    {
      "name": "Commit ohne Tests",
      "description": "Commit-Vorschlag ohne eigene Verifikation dass Tests gruen sind.",
      "folge": "Samuel gibt Freigabe auf der Basis falscher Annahmen",
      "severity": "kritisch"
    }
  ],
  "wave_mode": {
    "kicker": "So arbeite ich",
    "heading": "Wellenmodus",
    "description": "Jede produktive Session folgt dem gleichen Muster: Scout, Build, Verify — mit klaren Convergence-Checkpoints.",
    "phases": [
      {
        "id": "scout",
        "name": "Scout",
        "description": "Kontext aufbauen. Ziel klaeren. Ambiguitaeten eliminieren bevor Code geschrieben wird.",
        "steps": ["git status pruefen", "Relevante Dateien lesen", "Ziel mit Samuel abgleichen", "Teilaufgaben identifizieren"],
        "color": "teal"
      },
      {
        "id": "build",
        "name": "Build",
        "description": "Parallele Subagents fuer unabhaengige Tasks. Atomare Aenderungen. Scope-Disziplin.",
        "steps": ["Subagents spawnen fuer parallele Arbeit", "Jede Aenderung atomar halten", "Scope nicht erweitern", "Fehler sofort eskalieren"],
        "color": "gold"
      },
      {
        "id": "verify",
        "name": "Verify",
        "description": "Tests ausfuehren. Output verifizieren. Commit erst nach gruenem Signal.",
        "steps": ["pytest / smoke-tests laufen", "Agent-Output selbst pruefen", "Commit-Gate: Samuel entscheidet", "Ergebnis dokumentieren"],
        "color": "green"
      }
    ],
    "checkpoints": [
      "Nach Scout: Ziel ist schriftlich klar",
      "Nach Build: Tests existieren fuer jede Aenderung",
      "Nach Verify: Samuels Commit-Freigabe"
    ]
  },
  "costs": {
    "kicker": "Was kostet was",
    "heading": "Kostenvergleich",
    "harnesses": [
      {
        "name": "Claude Code",
        "model": "claude-opus-4-6",
        "cost_per_session": "~$0.80-3.00",
        "cost_relative": 100,
        "billing": "Token-basiert",
        "notes": "Hoechste Qualitaet, hoechste Kosten. Subagents multiplizieren."
      },
      {
        "name": "Hermes",
        "model": "TBD",
        "cost_per_session": "TBD",
        "cost_relative": 0,
        "billing": "TBD",
        "notes": "Daten nach Bootcamp verfuegbar"
      },
      {
        "name": "OpenCode",
        "model": "Konfigurierbar",
        "cost_per_session": "Modell-abhaengig",
        "cost_relative": 60,
        "billing": "Token-basiert via Provider",
        "notes": "Open-Source, Kosten haengen vom konfigurierten Modell ab"
      },
      {
        "name": "Codex CLI",
        "model": "gpt-5.4",
        "cost_per_session": "~$0.20-0.60",
        "cost_relative": 25,
        "billing": "Token-basiert (OpenAI)",
        "notes": "Mittelpreisig, aber stark fuer Review, Polishing und verifizierte Terminal-Tasks"
      }
    ]
  }
}