kodelyth-ecc 1.4.1 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,190 @@
1
+ #!/usr/bin/env node
2
+ // =============================================================================
3
+ // Kodelyth ECC — Lessons + Project DNA Hook (SessionStart)
4
+ //
5
+ // Runs at the start of every Claude Code session. Does two things:
6
+ //
7
+ // 1. LESSONS: Reads tasks/lessons.md from the project root (if it exists)
8
+ // and injects the encoded rules as high-priority context. These are
9
+ // corrections the user made in past sessions — hard rules, not soft
10
+ // suggestions. Claude MUST follow them for this session.
11
+ //
12
+ // 2. PROJECT DNA: Detects the tech stack, package manager, and key
13
+ // conventions from the project root (package.json, go.mod, Cargo.toml,
14
+ // etc.) and injects a concise project brief so Claude doesn't need to
15
+ // re-discover basics each session.
16
+ //
17
+ // Output contract: emit { additionalContext: "..." } to stdout.
18
+ // Never block a session — exit 0 even on any error.
19
+ // =============================================================================
20
+
21
+ 'use strict';
22
+
23
+ const fs = require('fs');
24
+ const path = require('path');
25
+
26
+ let raw = '';
27
+ process.stdin.setEncoding('utf8');
28
+ process.stdin.on('data', chunk => { raw += chunk; });
29
+ process.stdin.on('end', run);
30
+ setTimeout(() => { if (!process.stdin.readableEnded) run(); }, 150);
31
+
32
+ function run() {
33
+ try {
34
+ const payload = raw ? JSON.parse(raw) : {};
35
+ const projectRoot = payload.cwd || payload.project_root || process.cwd();
36
+
37
+ const parts = [];
38
+
39
+ const lessons = readLessons(projectRoot);
40
+ if (lessons) parts.push(lessons);
41
+
42
+ const dna = buildProjectDNA(projectRoot);
43
+ if (dna) parts.push(dna);
44
+
45
+ if (parts.length === 0) {
46
+ process.exit(0);
47
+ }
48
+
49
+ process.stdout.write(JSON.stringify({
50
+ additionalContext: parts.join('\n\n---\n\n'),
51
+ meta: { source: 'kodelyth-ecc:read-lessons', hasLessons: !!lessons, hasDNA: !!dna },
52
+ }));
53
+ process.exit(0);
54
+ } catch (err) {
55
+ process.stderr.write(`[ecc:read-lessons] ${err.message}\n`);
56
+ process.exit(0);
57
+ }
58
+ }
59
+
60
+ // ── Read tasks/lessons.md and format as hard rules ────────────────────────
61
+ function readLessons(projectRoot) {
62
+ const lessonsFile = path.join(projectRoot, 'tasks', 'lessons.md');
63
+ if (!fs.existsSync(lessonsFile)) return null;
64
+
65
+ const content = fs.readFileSync(lessonsFile, 'utf8').trim();
66
+ if (!content) return null;
67
+
68
+ // Extract all bullet rules across all dated sections
69
+ const rules = content
70
+ .split('\n')
71
+ .filter(line => line.match(/^-\s+.{5,}/))
72
+ .map(line => line.trim())
73
+ .filter(Boolean);
74
+
75
+ if (rules.length === 0) return null;
76
+
77
+ return [
78
+ '## PROJECT LESSONS — HARD RULES (from past corrections)',
79
+ '',
80
+ 'These rules were encoded from corrections made in previous sessions.',
81
+ 'You MUST follow them for this entire session. They override generic defaults.',
82
+ '',
83
+ rules.join('\n'),
84
+ ].join('\n');
85
+ }
86
+
87
+ // ── Detect project tech stack and conventions ─────────────────────────────
88
+ function buildProjectDNA(projectRoot) {
89
+ const facts = [];
90
+
91
+ // Node / JS / TS
92
+ const pkgPath = path.join(projectRoot, 'package.json');
93
+ if (fs.existsSync(pkgPath)) {
94
+ try {
95
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
96
+ const name = pkg.name || path.basename(projectRoot);
97
+ facts.push(`Project: ${name} (Node.js / JavaScript)`);
98
+
99
+ // Package manager
100
+ if (fs.existsSync(path.join(projectRoot, 'pnpm-lock.yaml'))) {
101
+ facts.push('Package manager: pnpm');
102
+ } else if (fs.existsSync(path.join(projectRoot, 'bun.lockb')) || fs.existsSync(path.join(projectRoot, 'bun.lock'))) {
103
+ facts.push('Package manager: bun');
104
+ } else if (fs.existsSync(path.join(projectRoot, 'yarn.lock'))) {
105
+ facts.push('Package manager: yarn');
106
+ } else {
107
+ facts.push('Package manager: npm');
108
+ }
109
+
110
+ // Framework detection
111
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
112
+ const frameworks = [];
113
+ if (deps.next) frameworks.push(`Next.js ${deps.next}`);
114
+ if (deps.react) frameworks.push(`React ${deps.react}`);
115
+ if (deps.vue) frameworks.push(`Vue ${deps.vue}`);
116
+ if (deps.svelte) frameworks.push(`Svelte`);
117
+ if (deps.express) frameworks.push(`Express ${deps.express}`);
118
+ if (deps.fastify) frameworks.push(`Fastify`);
119
+ if (deps.nestjs || deps['@nestjs/core']) frameworks.push('NestJS');
120
+ if (deps.typescript || deps['ts-node']) frameworks.push('TypeScript');
121
+ if (deps.prisma || deps['@prisma/client']) frameworks.push('Prisma');
122
+ if (deps.drizzle) frameworks.push('Drizzle ORM');
123
+ if (frameworks.length > 0) facts.push(`Stack: ${frameworks.join(', ')}`);
124
+
125
+ // Test runner
126
+ if (deps.jest) facts.push('Test runner: Jest');
127
+ else if (deps.vitest) facts.push('Test runner: Vitest');
128
+ else if (deps.mocha) facts.push('Test runner: Mocha');
129
+ } catch {}
130
+ }
131
+
132
+ // Go
133
+ const goModPath = path.join(projectRoot, 'go.mod');
134
+ if (fs.existsSync(goModPath)) {
135
+ try {
136
+ const goMod = fs.readFileSync(goModPath, 'utf8');
137
+ const moduleLine = goMod.match(/^module (.+)/m);
138
+ const goVersion = goMod.match(/^go (.+)/m);
139
+ facts.push(`Project: ${moduleLine?.[1] || 'Go module'} (Go${goVersion ? ' ' + goVersion[1] : ''})`);
140
+ } catch {}
141
+ }
142
+
143
+ // Rust
144
+ const cargoPath = path.join(projectRoot, 'Cargo.toml');
145
+ if (fs.existsSync(cargoPath)) {
146
+ try {
147
+ const cargo = fs.readFileSync(cargoPath, 'utf8');
148
+ const name = cargo.match(/^name\s*=\s*"(.+)"/m);
149
+ facts.push(`Project: ${name?.[1] || 'Rust crate'} (Rust / Cargo)`);
150
+ } catch {}
151
+ }
152
+
153
+ // Python
154
+ const reqPath = path.join(projectRoot, 'requirements.txt');
155
+ const pyprojPath = path.join(projectRoot, 'pyproject.toml');
156
+ if (fs.existsSync(reqPath) || fs.existsSync(pyprojPath)) {
157
+ facts.push('Language: Python');
158
+ if (fs.existsSync(path.join(projectRoot, 'poetry.lock'))) facts.push('Package manager: Poetry');
159
+ else if (fs.existsSync(path.join(projectRoot, 'Pipfile.lock'))) facts.push('Package manager: Pipenv');
160
+ else facts.push('Package manager: pip');
161
+ }
162
+
163
+ // Java / Kotlin
164
+ if (fs.existsSync(path.join(projectRoot, 'build.gradle')) || fs.existsSync(path.join(projectRoot, 'build.gradle.kts'))) {
165
+ facts.push('Build: Gradle (Java / Kotlin)');
166
+ }
167
+ if (fs.existsSync(path.join(projectRoot, 'pom.xml'))) {
168
+ facts.push('Build: Maven (Java)');
169
+ }
170
+
171
+ // Existing tasks/todo.md
172
+ const todoPath = path.join(projectRoot, 'tasks', 'todo.md');
173
+ if (fs.existsSync(todoPath)) {
174
+ const todo = fs.readFileSync(todoPath, 'utf8').trim();
175
+ const openItems = todo.split('\n').filter(l => l.match(/^-\s*\[ \]/)).slice(0, 5);
176
+ if (openItems.length > 0) {
177
+ facts.push('');
178
+ facts.push('Open tasks (from tasks/todo.md):');
179
+ openItems.forEach(item => facts.push(item.trim()));
180
+ }
181
+ }
182
+
183
+ if (facts.length === 0) return null;
184
+
185
+ return [
186
+ '## PROJECT DNA (auto-detected)',
187
+ '',
188
+ facts.join('\n'),
189
+ ].join('\n');
190
+ }
package/install.sh CHANGED
@@ -47,7 +47,7 @@ echo -e "${RED}${BOLD} ║ DANGER LEVEL: GOD TIER · NOT FOR JUNIOR DEV
47
47
  echo -e "${RED}${BOLD} ╚══════════════════════════════════════════════════════════════╝${RESET}"
48
48
  echo ""
49
49
  echo -e "${BOLD} Kodelyth ECC — The most dangerous AI coding toolkit on the planet${RESET}"
50
- echo -e "${CYAN} 59 specialist agents · 188 skills · 80 commands · 18+ hooks · intent routing · local memory${RESET}"
50
+ echo -e "${CYAN} 61 specialist agents · 188 skills · 80 commands · 20+ hooks · intent routing · compound memory${RESET}"
51
51
  echo -e "${CYAN} Any language · Any framework · Any scale · 300B-level quality${RESET}"
52
52
  echo ""
53
53
  echo -e " github.com/sifxprime/kodelyth-ecc"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "kodelyth-ecc",
3
- "version": "1.4.1",
4
- "description": "Production-grade AI coding toolkit 59 agents, 188 skills, 80 commands, god-tier intent routing, local self-learning memory with auto chat detection. Works with Claude Code, Windsurf, Cursor, Codex, Antigravity, and OpenCode.",
3
+ "version": "1.5.1",
4
+ "description": "Production-grade AI coding toolkit \u2014 61 agents, 188 skills, 80 commands, god-tier intent routing, local self-learning memory with auto chat detection, incident response, load testing. Works with Claude Code, Windsurf, Cursor, Codex, Antigravity, and OpenCode.",
5
5
  "author": "Kodelyth <github.com/sifxprime>",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -22,6 +22,8 @@
22
22
  "memory",
23
23
  "self-learning",
24
24
  "auto-recall",
25
+ "incident-response",
26
+ "load-testing",
25
27
  "kodelyth"
26
28
  ],
27
29
  "bin": {
@@ -134,7 +134,33 @@ Trigger if the user describes **what they're about to build** before they start.
134
134
 
135
135
  ## Priority 4 — Performance & Scale
136
136
 
137
- ### `performance-optimizer` — Slowness / bottleneck
137
+ ### `incident-commander` — Production is down or degraded
138
+
139
+ Route here FIRST for any active production incident. This takes priority over `debug-detective` when the incident is live in production.
140
+
141
+ | Signal | Examples |
142
+ |---|---|
143
+ | Production down | "production is down", "outage", "site is down", "service unavailable" |
144
+ | P0 / P1 | "P0", "P1", "incident", "on-call", "pagerduty fired", "alert triggered" |
145
+ | Blast radius | "10% of users affected", "all requests failing", "error rate spiked" |
146
+ | Active degradation | "production is throwing 500s", "latency is through the roof", "database is down" |
147
+ | Postmortem | "postmortem", "incident review", "blameless review", "what went wrong" |
148
+
149
+ **Counter-signals:** development bug (not production), staging environment, local testing — route to `debug-detective` instead.
150
+
151
+ ### `load-tester` — Load, stress, and capacity testing
152
+
153
+ | Signal | Examples |
154
+ |---|---|
155
+ | Load test request | "load test", "stress test", "performance test", "capacity test" |
156
+ | Tools | "k6", "Locust", "Artillery", "wrk", "Gatling", "hey", "ab test" |
157
+ | Capacity planning | "how many users can we handle", "what's our breaking point", "max RPS" |
158
+ | Pre-launch validation | "will this hold under load", "ready for launch traffic", "scale test" |
159
+ | Soak test | "soak test", "memory leak under load", "sustained load test" |
160
+
161
+ **Counter-signal:** "make this code faster" → `performance-optimizer`. Load-tester handles test design, not code optimization.
162
+
163
+ ### `performance-optimizer` — Slowness / bottleneck in code
138
164
 
139
165
  | Signal | Examples |
140
166
  |---|---|
@@ -284,6 +310,8 @@ Use the chain: `forker` → `sanitizer` → `packager`.
284
310
  | `migration-guide` (plan made) | `pr-test-analyzer` after PR is up |
285
311
  | `architect` (design done) | `code-architect` for the first feature |
286
312
  | `performance-optimizer` (bottleneck found) | `tdd-guide` for a perf regression test |
313
+ | `load-tester` (bottleneck found) | `performance-optimizer` to fix the code |
314
+ | `incident-commander` (incident resolved) | `debug-detective` for deeper root cause, then postmortem |
287
315
 
288
316
  ### Parallel suggestions
289
317
 
@@ -321,6 +349,10 @@ If the user has a multi-faceted concern, name the parallel agents:
321
349
  | "Add accessibility to this form" | `ux-reviewer` | a11y |
322
350
  | "Plan the v2 redesign" | `planner` → `architect` | Plan + design |
323
351
  | "open source this project" | `opensource-forker` | OSS chain start |
352
+ | "production is down, getting 500s" | `incident-commander` | Active production incident |
353
+ | "will this hold under 10k concurrent users" | `load-tester` | Capacity / load testing question |
354
+ | "run a load test before launch" | `load-tester` | Pre-launch load validation |
355
+ | "postmortem for yesterday's outage" | `incident-commander` | Postmortem workflow |
324
356
 
325
357
  ---
326
358
 
@@ -0,0 +1,126 @@
1
+ # Self-Improvement Workflow — Compound Learning System
2
+
3
+ This rule encodes the workflow used by the Claude Code team internally, extended with ECC's three-layer compound memory architecture. Every session makes Claude more aligned with how YOU think and work.
4
+
5
+ ---
6
+
7
+ ## 1. Plan Node Default
8
+
9
+ Enter plan mode for ANY non-trivial task (3+ steps, architectural decisions, or anything that touches more than 2 files):
10
+
11
+ - Write the plan to `tasks/todo.md` with checkable items before writing a single line of code
12
+ - If something goes sideways mid-task: STOP, re-plan, do not keep pushing
13
+ - Use plan mode for verification steps, not just building
14
+ - Write detailed specs upfront — ambiguity at start = bugs at end
15
+ - Check plan with the user before executing when scope is large
16
+
17
+ ## 2. Subagent Strategy
18
+
19
+ The 61 ECC specialist agents exist so the main context window stays clean:
20
+
21
+ - Offload research, exploration, and parallel analysis to subagents
22
+ - For complex problems: throw more compute via agents, not more tokens in main context
23
+ - One task per subagent — focused execution beats monolithic threads
24
+ - Intent routing picks the right specialist automatically — trust it
25
+
26
+ ## 3. Self-Improvement Loop (CRITICAL)
27
+
28
+ **After ANY correction from the user — no matter how small — encode it permanently.**
29
+
30
+ When the user says something like "no, don't do that", "use X instead", "I told you to", "wrong approach", "stop doing X":
31
+
32
+ 1. **Acknowledge** the correction in one line
33
+ 2. **Apply** it immediately in the current response
34
+ 3. **Encode** it: mentally append the rule to `tasks/lessons.md` in the project root
35
+
36
+ The AI MUST track corrections within a session and apply them consistently from that point forward. The `capture-correction.js` hook writes them to disk automatically at session end.
37
+
38
+ ### How lessons compound
39
+
40
+ ```
41
+ Session 1: User corrects "use pnpm not npm" → lesson written
42
+ Session 2: Claude reads lesson → never uses npm again in this project
43
+ Session 3+: New lessons stack → Claude increasingly matches YOUR style
44
+ Month 3: Claude works like a team member who has been here for years
45
+ ```
46
+
47
+ **Review and extend lessons** at `tasks/lessons.md` — edit them freely, they are yours.
48
+
49
+ ## 4. Verification Before Done
50
+
51
+ Never mark a task complete without proving it works:
52
+
53
+ - Run the actual code, test, or command — do not assume
54
+ - Diff behavior between baseline and your changes when relevant
55
+ - Ask: "Would a staff engineer approve this PR?"
56
+ - Run tests, check logs, demonstrate correctness with evidence
57
+ - If verification fails: fix, do not close the loop
58
+
59
+ ## 5. Demand Elegance (Balanced)
60
+
61
+ For non-trivial changes, pause before presenting:
62
+
63
+ - Ask internally: "Is there a more elegant solution?"
64
+ - If the fix feels hacky: "Knowing everything I know now, implement the elegant solution"
65
+ - **Skip this for simple, obvious fixes** — do not over-engineer
66
+ - Challenge your own work before presenting it
67
+ - Three lines of clear code beat a clever one-liner every time
68
+
69
+ ## 6. Autonomous Bug Fixing
70
+
71
+ When given a bug report: fix it. Do not ask for hand-holding:
72
+
73
+ - Point at logs, errors, and failing tests — then resolve them
74
+ - Zero context switching required from the user
75
+ - Go fix failing CI tests without being told how
76
+ - Use `debug-detective` for root cause analysis (never patch symptoms)
77
+ - Use `silent-failure-hunter` when there is no error message
78
+
79
+ ---
80
+
81
+ ## Task Management Protocol
82
+
83
+ When starting any non-trivial task:
84
+
85
+ 1. **Plan First** — write plan to `tasks/todo.md` with checkable items
86
+ 2. **Verify Plan** — check in before starting implementation on large tasks
87
+ 3. **Track Progress** — mark items complete as you go
88
+ 4. **Explain Changes** — high-level summary at each step
89
+ 5. **Document Results** — add review section to `tasks/todo.md`
90
+ 6. **Capture Lessons** — `tasks/lessons.md` is updated automatically by the correction hook
91
+
92
+ ---
93
+
94
+ ## Three-Layer Compound Memory Architecture
95
+
96
+ ECC uses three compounding memory layers — together they make Claude increasingly match how you think:
97
+
98
+ ### Layer 1 — Project Lessons (`tasks/lessons.md`)
99
+ - Per-project. Human-readable. Hard rules.
100
+ - Written automatically when you correct Claude (via `capture-correction.js` Stop hook)
101
+ - Injected at session start (via `read-lessons.js` SessionStart hook)
102
+ - Edit freely — these are YOUR rules for this project
103
+ - Example: "Always use pnpm. Never npm. Never yarn."
104
+
105
+ ### Layer 2 — Global Memory (`~/.kodelyth/memory/`)
106
+ - Cross-project. BM25 fuzzy search. Solution patterns.
107
+ - Captures solutions from every session
108
+ - Auto-recalls relevant past solutions on every prompt you type
109
+ - Example: "Last time you had a CORS issue in Express, you added this middleware..."
110
+
111
+ ### Layer 3 — Intent Routing (`rules/common/agent-intent-routing.md`)
112
+ - Always-on. 61 specialists. Zero setup.
113
+ - Routes your message to the right expert from the first word
114
+ - No agent names needed — just describe the problem
115
+
116
+ **Combined effect**: Layer 1 knows your project rules. Layer 2 knows your past solutions. Layer 3 knows your intent. Together they eliminate the ramp-up cost of every session.
117
+
118
+ ---
119
+
120
+ ## Core Principles
121
+
122
+ - **Simplicity First** — make every change as simple as possible, impact minimal code
123
+ - **No Laziness** — find root causes, no temporary fixes, senior developer standards
124
+ - **Minimal Impact** — changes touch only what's necessary, avoid introducing bugs
125
+ - **Immutability** — create new objects, never mutate existing ones
126
+ - **No Guessing** — if uncertain, ask. Never fabricate facts or behavior.
@@ -1,96 +1,91 @@
1
- <svg width="1200" height="630" viewBox="0 0 1200 630" xmlns="http://www.w3.org/2000/svg" font-family="'Segoe UI', system-ui, -apple-system, sans-serif">
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 700 420" width="700" height="420" font-family="'Segoe UI', system-ui, -apple-system, sans-serif">
2
2
  <defs>
3
- <linearGradient id="bg2" x1="0%" y1="0%" x2="100%" y2="100%">
4
- <stop offset="0%" style="stop-color:#0a0a0f"/>
3
+ <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#050811"/>
5
5
  <stop offset="100%" style="stop-color:#0d1117"/>
6
6
  </linearGradient>
7
- <linearGradient id="acc2" x1="0%" y1="0%" x2="100%" y2="0%">
7
+ <linearGradient id="accent" x1="0%" y1="0%" x2="100%" y2="0%">
8
8
  <stop offset="0%" style="stop-color:#7c3aed"/>
9
9
  <stop offset="100%" style="stop-color:#2563eb"/>
10
10
  </linearGradient>
11
+ <linearGradient id="mem" x1="0%" y1="0%" x2="100%" y2="0%">
12
+ <stop offset="0%" style="stop-color:#059669"/>
13
+ <stop offset="100%" style="stop-color:#0891b2"/>
14
+ </linearGradient>
11
15
  </defs>
12
16
 
13
- <rect width="1200" height="630" fill="url(#bg2)"/>
14
- <rect x="0" y="0" width="1200" height="4" fill="url(#acc2)"/>
15
-
16
- <!-- Grid -->
17
- <g opacity="0.03" stroke="#ffffff" stroke-width="1">
18
- <line x1="0" y1="126" x2="1200" y2="126"/>
19
- <line x1="0" y1="252" x2="1200" y2="252"/>
20
- <line x1="0" y1="378" x2="1200" y2="378"/>
21
- <line x1="0" y1="504" x2="1200" y2="504"/>
22
- <line x1="240" y1="0" x2="240" y2="630"/>
23
- <line x1="480" y1="0" x2="480" y2="630"/>
24
- <line x1="720" y1="0" x2="720" y2="630"/>
25
- <line x1="960" y1="0" x2="960" y2="630"/>
26
- </g>
17
+ <rect width="700" height="420" fill="url(#bg)" rx="12"/>
18
+ <rect x="0" y="0" width="700" height="3" fill="url(#accent)" rx="2"/>
27
19
 
28
20
  <!-- Header -->
29
- <text x="60" y="80" font-size="15" font-weight="700" letter-spacing="4" fill="#7c3aed">KODELYTH ECC</text>
30
- <text x="60" y="130" font-size="52" font-weight="900" letter-spacing="-1" fill="#ffffff">Meet Your AI Team.</text>
31
- <text x="60" y="175" font-size="18" fill="#64748b">6 Kodelyth-exclusive agents. Each one a decade-experienced specialist.</text>
21
+ <text x="28" y="42" font-size="18" font-weight="800" fill="#ffffff">61 Agents — The Complete Roster</text>
22
+ <text x="28" y="62" font-size="11.5" fill="#6e7681">Every specialist you need. Intent routing picks the right one automatically.</text>
23
+
24
+ <!-- Category: Debugging -->
25
+ <text x="28" y="90" font-size="9.5" fill="#484f58" letter-spacing="1.5">DEBUGGING</text>
26
+ <rect x="28" y="98" width="196" height="56" rx="6" fill="#161b22" stroke="#21262d" stroke-width="1"/>
27
+ <rect x="28" y="98" width="2.5" height="56" rx="1" fill="#dc2626"/>
28
+ <text x="40" y="116" font-size="11" font-weight="700" fill="#f87171">debug-detective</text>
29
+ <text x="40" y="131" font-size="10.5" fill="#6e7681">Root cause, never symptoms</text>
30
+ <text x="40" y="147" font-size="9" fill="#30363d">CLAIM · EVIDENCE · TEST</text>
32
31
 
33
- <rect x="60" y="195" width="1080" height="1" fill="#1e293b"/>
32
+ <rect x="234" y="98" width="196" height="56" rx="6" fill="#161b22" stroke="#21262d" stroke-width="1"/>
33
+ <rect x="234" y="98" width="2.5" height="56" rx="1" fill="#dc2626"/>
34
+ <text x="246" y="116" font-size="11" font-weight="700" fill="#f87171">silent-failure-hunter</text>
35
+ <text x="246" y="131" font-size="10.5" fill="#6e7681">Swallowed errors, bad fallbacks</text>
36
+ <text x="246" y="147" font-size="9" fill="#30363d">Error Propagation</text>
34
37
 
35
- <!-- Agent cards Row 1 -->
36
- <!-- Card 1: kodelyth-advisor -->
37
- <rect x="60" y="215" width="320" height="130" rx="8" fill="#0f172a" stroke="#1e293b" stroke-width="1"/>
38
- <rect x="60" y="215" width="4" height="130" rx="2" fill="#7c3aed"/>
39
- <text x="80" y="248" font-size="14" font-weight="700" fill="#a78bfa">kodelyth-advisor</text>
40
- <text x="80" y="270" font-size="12" fill="#475569">The Master Guide</text>
41
- <text x="80" y="298" font-size="12" fill="#94a3b8">Reads your situation. Tells you</text>
42
- <text x="80" y="316" font-size="12" fill="#94a3b8">exactly what to do. No guessing.</text>
43
- <text x="80" y="334" font-size="11" fill="#334155">Guidance · Direction · Clarity</text>
38
+ <rect x="440" y="98" width="232" height="56" rx="6" fill="#0d2b1d" stroke="#059669" stroke-opacity="0.4" stroke-width="1"/>
39
+ <rect x="440" y="98" width="2.5" height="56" rx="1" fill="url(#mem)"/>
40
+ <text x="452" y="116" font-size="11" font-weight="700" fill="#10b981">kodelyth-memory</text>
41
+ <rect x="568" y="102" width="36" height="14" rx="7" fill="#059669" fill-opacity="0.3" stroke="#059669" stroke-opacity="0.5" stroke-width="1"/>
42
+ <text x="586" y="113" font-size="8" fill="#10b981" text-anchor="middle" font-weight="700">NEW</text>
43
+ <text x="452" y="131" font-size="10.5" fill="#6e7681">Self-learning memory + BM25</text>
44
+ <text x="452" y="147" font-size="9" fill="#30363d">Memory · Auto-Recall</text>
44
45
 
45
- <!-- Card 2: debug-detective -->
46
- <rect x="400" y="215" width="320" height="130" rx="8" fill="#0f172a" stroke="#1e293b" stroke-width="1"/>
47
- <rect x="400" y="215" width="4" height="130" rx="2" fill="#dc2626"/>
48
- <text x="420" y="248" font-size="14" font-weight="700" fill="#f87171">debug-detective</text>
49
- <text x="420" y="270" font-size="12" fill="#475569">The Root Cause Hunter</text>
50
- <text x="420" y="298" font-size="12" fill="#94a3b8">Never guesses. Traces every bug</text>
51
- <text x="420" y="316" font-size="12" fill="#94a3b8">to its exact origin. Always.</text>
52
- <text x="420" y="334" font-size="11" fill="#334155">Debugging · Analysis · Evidence</text>
46
+ <!-- Category: Security & Quality -->
47
+ <text x="28" y="172" font-size="9.5" fill="#484f58" letter-spacing="1.5">SECURITY &amp; QUALITY</text>
48
+ <rect x="28" y="180" width="196" height="56" rx="6" fill="#161b22" stroke="#21262d" stroke-width="1"/>
49
+ <rect x="28" y="180" width="2.5" height="56" rx="1" fill="#f59e0b"/>
50
+ <text x="40" y="198" font-size="11" font-weight="700" fill="#fcd34d">security-reviewer</text>
51
+ <text x="40" y="213" font-size="10.5" fill="#6e7681">OWASP · secrets · injection</text>
52
+ <text x="40" y="229" font-size="9" fill="#30363d">Security</text>
53
53
 
54
- <!-- Card 3: ux-reviewer -->
55
- <rect x="740" y="215" width="320" height="130" rx="8" fill="#0f172a" stroke="#1e293b" stroke-width="1"/>
56
- <rect x="740" y="215" width="4" height="130" rx="2" fill="#0891b2"/>
57
- <text x="760" y="248" font-size="14" font-weight="700" fill="#67e8f9">ux-reviewer</text>
58
- <text x="760" y="270" font-size="12" fill="#475569">The Interface Guardian</text>
59
- <text x="760" y="298" font-size="12" fill="#94a3b8">Reviews UI for real users.</text>
60
- <text x="760" y="316" font-size="12" fill="#94a3b8">WCAG 2.1 AA. Never touches design.</text>
61
- <text x="760" y="334" font-size="11" fill="#334155">UX · Accessibility · Behavior</text>
54
+ <rect x="234" y="180" width="196" height="56" rx="6" fill="#161b22" stroke="#21262d" stroke-width="1"/>
55
+ <rect x="234" y="180" width="2.5" height="56" rx="1" fill="#8b5cf6"/>
56
+ <text x="246" y="198" font-size="11" font-weight="700" fill="#c4b5fd">code-reviewer</text>
57
+ <text x="246" y="213" font-size="10.5" fill="#6e7681">Quality, patterns, best practices</text>
58
+ <text x="246" y="229" font-size="9" fill="#30363d">Review</text>
62
59
 
63
- <!-- Agent cards Row 2 -->
64
- <!-- Card 4: api-guardian -->
65
- <rect x="60" y="360" width="320" height="130" rx="8" fill="#0f172a" stroke="#1e293b" stroke-width="1"/>
66
- <rect x="60" y="360" width="4" height="130" rx="2" fill="#f59e0b"/>
67
- <text x="80" y="393" font-size="14" font-weight="700" fill="#fcd34d">api-guardian</text>
68
- <text x="80" y="415" font-size="12" fill="#475569">The Contract Protector</text>
69
- <text x="80" y="443" font-size="12" fill="#94a3b8">Catches breaking API changes</text>
70
- <text x="80" y="461" font-size="12" fill="#94a3b8">before they reach production.</text>
71
- <text x="80" y="479" font-size="11" fill="#334155">API · Versioning · Contracts</text>
60
+ <rect x="440" y="180" width="232" height="56" rx="6" fill="#161b22" stroke="#21262d" stroke-width="1"/>
61
+ <rect x="440" y="180" width="2.5" height="56" rx="1" fill="#10b981"/>
62
+ <text x="452" y="198" font-size="11" font-weight="700" fill="#6ee7b7">pair-programmer</text>
63
+ <text x="452" y="213" font-size="10.5" fill="#6e7681">Catches wrong approach pre-code</text>
64
+ <text x="452" y="229" font-size="9" fill="#30363d">Planning</text>
72
65
 
73
- <!-- Card 5: pair-programmer -->
74
- <rect x="400" y="360" width="320" height="130" rx="8" fill="#0f172a" stroke="#1e293b" stroke-width="1"/>
75
- <rect x="400" y="360" width="4" height="130" rx="2" fill="#10b981"/>
76
- <text x="420" y="393" font-size="14" font-weight="700" fill="#6ee7b7">pair-programmer</text>
77
- <text x="420" y="415" font-size="12" fill="#475569">The Pre-Code Thinker</text>
78
- <text x="420" y="443" font-size="12" fill="#94a3b8">Catches the wrong approach</text>
79
- <text x="420" y="461" font-size="12" fill="#94a3b8">before a single line is written.</text>
80
- <text x="420" y="479" font-size="11" fill="#334155">Planning · Design · Prevention</text>
66
+ <!-- Category: Infrastructure -->
67
+ <text x="28" y="254" font-size="9.5" fill="#484f58" letter-spacing="1.5">INFRASTRUCTURE &amp; OPERATIONS</text>
68
+ <rect x="28" y="262" width="196" height="56" rx="6" fill="#161b22" stroke="#21262d" stroke-width="1"/>
69
+ <rect x="28" y="262" width="2.5" height="56" rx="1" fill="#22d3ee"/>
70
+ <text x="40" y="280" font-size="11" font-weight="700" fill="#a5f3fc">git-rescue</text>
71
+ <text x="40" y="295" font-size="10.5" fill="#6e7681">Recovers any broken git state</text>
72
+ <text x="40" y="311" font-size="9" fill="#30363d">Git</text>
81
73
 
82
- <!-- Card 6: migration-guide -->
83
- <rect x="740" y="360" width="320" height="130" rx="8" fill="#0f172a" stroke="#1e293b" stroke-width="1"/>
84
- <rect x="740" y="360" width="4" height="130" rx="2" fill="#8b5cf6"/>
85
- <text x="760" y="393" font-size="14" font-weight="700" fill="#c4b5fd">migration-guide</text>
86
- <text x="760" y="415" font-size="12" fill="#475569">The Migration Specialist</text>
87
- <text x="760" y="443" font-size="12" fill="#94a3b8">React, Next.js, Python, Node,</text>
88
- <text x="760" y="461" font-size="12" fill="#94a3b8">TypeScript, Java — all covered.</text>
89
- <text x="760" y="479" font-size="11" fill="#334155">Upgrades · Migrations · Planning</text>
74
+ <rect x="234" y="262" width="196" height="56" rx="6" fill="#161b22" stroke="#21262d" stroke-width="1"/>
75
+ <rect x="234" y="262" width="2.5" height="56" rx="1" fill="#f97316"/>
76
+ <text x="246" y="280" font-size="11" font-weight="700" fill="#fdba74">release-captain</text>
77
+ <text x="246" y="295" font-size="10.5" fill="#6e7681">Semver · changelog · publish</text>
78
+ <text x="246" y="311" font-size="9" fill="#30363d">Release</text>
90
79
 
91
- <!-- Bottom -->
92
- <text x="60" y="568" font-size="14" fill="#475569">Plus 47 more specialist agents — reviewers, builders, security experts, testers.</text>
93
- <text x="60" y="596" font-size="13" fill="#334155">github.com/sifxprime/kodelyth-ecc · Free · Open Source</text>
80
+ <rect x="440" y="262" width="232" height="56" rx="6" fill="#161b22" stroke="#21262d" stroke-width="1"/>
81
+ <rect x="440" y="262" width="2.5" height="56" rx="1" fill="#6366f1"/>
82
+ <text x="452" y="280" font-size="11" font-weight="700" fill="#a5b4fc">env-debugger</text>
83
+ <text x="452" y="295" font-size="10.5" fill="#6e7681">"Works on my machine" hunter</text>
84
+ <text x="452" y="311" font-size="9" fill="#30363d">Environment</text>
94
85
 
95
- <rect x="0" y="626" width="1200" height="4" fill="url(#acc2)"/>
86
+ <!-- Footer -->
87
+ <line x1="28" y1="334" x2="672" y2="334" stroke="#21262d" stroke-width="1"/>
88
+ <rect x="28" y="348" width="644" height="42" rx="6" fill="#161b22" stroke="#21262d" stroke-width="1"/>
89
+ <text x="350" y="364" font-size="11" fill="#484f58" text-anchor="middle">+ 47 more: ux-reviewer · tdd-guide · flake-hunter · api-guardian · dependency-doctor</text>
90
+ <text x="350" y="382" font-size="11" fill="#484f58" text-anchor="middle">performance-optimizer · typescript-reviewer · go-reviewer · rust-reviewer · and more</text>
96
91
  </svg>