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.
- package/AGENTS.md +5 -3
- package/CHANGELOG.md +110 -0
- package/CLAUDE.md +1 -1
- package/KODELYTH.md +46 -8
- package/README.md +20 -7
- package/SECURITY.md +6 -2
- package/VERSION +1 -1
- package/agents/incident-commander.md +227 -0
- package/agents/load-tester.md +283 -0
- package/hooks/hooks.json +28 -2
- package/hooks/memory/capture-correction.js +185 -0
- package/hooks/memory/read-lessons.js +190 -0
- package/install.sh +1 -1
- package/package.json +4 -2
- package/rules/common/agent-intent-routing.md +33 -1
- package/rules/common/self-improvement-workflow.md +126 -0
- package/social/card-agents.svg +71 -76
- package/social/card-install.svg +43 -77
- package/social/card-main.svg +36 -109
- package/social/facebook-v150.svg +119 -0
- package/social/github-social-preview.svg +110 -103
- package/social/readme-agents.svg +125 -138
- package/social/readme-hero.svg +91 -92
- package/social/x-card-agents-grid.svg +94 -70
- package/social/x-card-free.svg +37 -83
- package/social/x-card-hook.svg +37 -66
- package/wiki/Agent-Reference.md +398 -199
- package/wiki/FAQ.md +229 -142
- package/wiki/Home.md +114 -50
- package/wiki/Hook-Reference.md +197 -101
- package/wiki/Installation-Guide.md +208 -126
- package/wiki/Platform-Support.md +187 -106
- package/wiki/Skill-Reference.md +211 -103
|
@@ -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}
|
|
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
|
-
"description": "Production-grade AI coding toolkit
|
|
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
|
-
### `
|
|
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.
|
package/social/card-agents.svg
CHANGED
|
@@ -1,96 +1,91 @@
|
|
|
1
|
-
<svg
|
|
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="
|
|
4
|
-
<stop offset="0%" style="stop-color:#
|
|
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="
|
|
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="
|
|
14
|
-
<rect x="0" y="0" width="
|
|
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="
|
|
30
|
-
<text x="
|
|
31
|
-
|
|
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="
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
<
|
|
38
|
-
<rect x="
|
|
39
|
-
<text x="
|
|
40
|
-
<text x="
|
|
41
|
-
<text x="
|
|
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
|
-
<!--
|
|
46
|
-
<
|
|
47
|
-
<rect x="
|
|
48
|
-
<
|
|
49
|
-
<text x="
|
|
50
|
-
<text x="
|
|
51
|
-
<text x="
|
|
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 & 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
|
-
|
|
55
|
-
<rect x="
|
|
56
|
-
<
|
|
57
|
-
<text x="
|
|
58
|
-
<text x="
|
|
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
|
-
|
|
64
|
-
|
|
65
|
-
<
|
|
66
|
-
<
|
|
67
|
-
<text x="
|
|
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
|
-
<!--
|
|
74
|
-
<
|
|
75
|
-
<rect x="
|
|
76
|
-
<
|
|
77
|
-
<text x="
|
|
78
|
-
<text x="
|
|
79
|
-
<text x="
|
|
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 & 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
|
-
|
|
83
|
-
<rect x="
|
|
84
|
-
<
|
|
85
|
-
<text x="
|
|
86
|
-
<text x="
|
|
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
|
-
|
|
92
|
-
<
|
|
93
|
-
<text x="
|
|
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
|
-
|
|
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>
|