kodelyth-ecc 1.7.5 → 1.8.0

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.
Files changed (44) hide show
  1. package/CHANGELOG.md +16 -3
  2. package/CLAUDE.md +1 -1
  3. package/README.md +8 -9
  4. package/SECURITY.md +5 -6
  5. package/bundles/enterprise.md +1 -1
  6. package/bundles/indie-hacker.md +1 -1
  7. package/bundles/red-team.md +1 -1
  8. package/hooks/hooks.json +13 -0
  9. package/hooks/memory/auto-resolve.js +68 -0
  10. package/hooks/memory/capture-correction.js +16 -0
  11. package/hooks/memory/capture-stop.js +70 -14
  12. package/package.json +1 -1
  13. package/rules/common/agents.md +1 -1
  14. package/rules/common/self-improvement-workflow.md +2 -2
  15. package/scripts/dashboard/data.js +1 -1
  16. package/scripts/dashboard/server.js +1 -1
  17. package/scripts/memory/instincts.js +282 -0
  18. package/scripts/memory/store.js +104 -0
  19. package/social/card-agents.svg +1 -1
  20. package/social/card-install.svg +1 -1
  21. package/social/card-main.svg +1 -1
  22. package/social/facebook-v150.svg +14 -13
  23. package/social/fb-ad-main.svg +128 -0
  24. package/social/fb-post-features.svg +118 -0
  25. package/social/fb-post-launch.svg +144 -0
  26. package/social/fb-post-platforms.svg +135 -0
  27. package/social/github-social-preview.svg +119 -28
  28. package/social/hype-compound-learning.svg +9 -9
  29. package/social/hype-devil-mode.svg +8 -8
  30. package/social/hype-mcp-server.svg +8 -8
  31. package/social/hype-parallel-agents.svg +8 -8
  32. package/social/hype-stats-hero.svg +3 -3
  33. package/social/og-image.svg +116 -30
  34. package/social/readme-hero.svg +4 -4
  35. package/social/section-mcp.svg +1 -1
  36. package/social/twitter-threads.md +3 -3
  37. package/social/x-card-agents-grid.svg +2 -2
  38. package/social/x-card-free.svg +2 -2
  39. package/social/x-card-hook.svg +5 -5
  40. package/tests/memory/instincts.test.js +258 -0
  41. package/tests/memory/store.test.js +82 -0
  42. package/wiki/FAQ.md +1 -1
  43. package/wiki/Home.md +3 -3
  44. package/wiki/Installation-Guide.md +2 -2
package/CHANGELOG.md CHANGED
@@ -2,9 +2,22 @@
2
2
 
3
3
  All notable changes to Kodelyth ECC are documented here.
4
4
 
5
- ## v1.7.5Brand identity + visual adjustments (May 2026)
5
+ ## v1.8.0Visual system overhaul + SVG polish (May 2026)
6
6
 
7
- Normal maintenance release. Ghost Depth mark applied across all social assets, favicon added, og-image added for kodelyth.com.
7
+ Comprehensive overhaul of all 31 social assets. GitHub social preview and OG image rebuilt with two-panel stat card layout. All text overflow issues fixed across the full SVG set. Test counts updated to 373. PNG exports regenerated at 4K only.
8
+
9
+ ### Changed
10
+
11
+ - `github-social-preview.svg`, `og-image.svg` — full redesign: two-panel layout (brand mark left, 2×2 stat cards right), dot grid texture, amber accent on SKILLS card and AGENTS top bar, platform rows in footer
12
+ - `og-image.svg`, `github-social-preview.svg` — KODELYTH wordmark font-size/letter-spacing reduced so text stays within the left panel (no overflow past separator)
13
+ - `facebook-v150.svg` — stat section overflow fix: "70" numeral baseline raised so cap-top sits below separator line; divider lines extended to fully contain the numeral
14
+ - `hype-compound-learning.svg`, `hype-devil-mode.svg`, `hype-mcp-server.svg`, `hype-parallel-agents.svg` — bottom bar rect and text shifted up 8 px to give descenders safe margin from canvas edge
15
+ - `hype-stats-hero.svg`, `fb-post-platforms.svg` — test counts updated: 336/348 → 373, 24 → 25 test files
16
+ - All 31 social SVGs: v1.7.5 → v1.8.0 version badge
17
+ - Ghost Depth Mark applied across all social assets; favicon and og-image added for kodelyth.com (carried from v1.7.5)
18
+ - PNG exports: all 31 assets regenerated at 4× scale (4K); fullhd 2× exports removed
19
+ - README test badge: 336 → 373 passing
20
+ - SECURITY.md supported versions table updated to reflect 1.8.x as current stable
8
21
 
9
22
  ## v1.7.4 — Real-time IDE-aware dashboard + cross-IDE memory protocol (May 2026)
10
23
 
@@ -17,7 +30,7 @@ The dashboard now sees what every IDE on the machine is doing in real time, not
17
30
  - New `KODELYTH_EXTRA_IDE_WATCH` env var (comma / semicolon / colon separated) so power users can wire arbitrary directories into the realtime watcher
18
31
  - New `KODELYTH_WINDSURF_NEXT_DIR`, `KODELYTH_CURSOR_DIR`, `KODELYTH_ANTIGRAVITY_DIR` env-var overrides for non-default IDE install paths
19
32
  - New section in `README.md` — **"Memory & dashboard reality per IDE"** — explicit truth table of what auto-recall, auto-capture, manual recall, and dashboard activity look like per platform
20
- - 12 new tests (`tests/dashboard/data.test.js` + `server.test.js`) covering windsurf-next, cursor, antigravity, custom watch paths, and SSE behaviour. Total: **336 → 348 tests, all passing**
33
+ - 12 new tests (`tests/dashboard/data.test.js` + `server.test.js`) covering windsurf-next, cursor, antigravity, custom watch paths, and SSE behaviour. Total: **336 → 373 tests, all passing**
21
34
 
22
35
  ### Changed
23
36
 
package/CLAUDE.md CHANGED
@@ -26,7 +26,7 @@ scripts/ → Node.js utilities: MCP server, dashboard, swarm, replay, router
26
26
  bundles/ → 3 power bundles (indie-hacker, red-team, enterprise)
27
27
  actions/ → GitHub Action (CI/CD integration for PR review)
28
28
  docs/ → Feature docs (mcp.md, dashboard.md, swarm.md, replay.md, evolve.md, supply-chain.md)
29
- tests/ → 336 passing tests across 24 test files
29
+ tests/ → 373 passing tests across 25 test files
30
30
  ```
31
31
 
32
32
  ## Running Tests
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  [![npm downloads](https://img.shields.io/npm/dm/kodelyth-ecc.svg)](https://www.npmjs.com/package/kodelyth-ecc)
7
7
  [![GitHub Stars](https://img.shields.io/github/stars/sifxprime/kodelyth-ecc?style=social)](https://github.com/sifxprime/kodelyth-ecc/stargazers)
8
8
  [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
9
- ![Tests](https://img.shields.io/badge/tests-336%20passing-brightgreen)
9
+ ![Tests](https://img.shields.io/badge/tests-373%20passing-brightgreen)
10
10
  ![Claude Code](https://img.shields.io/badge/Claude%20Code-Ready-8A2BE2)
11
11
  ![Windsurf](https://img.shields.io/badge/Windsurf-Ready-06b6d4)
12
12
  ![Antigravity](https://img.shields.io/badge/Antigravity-Ready-00ADD8)
@@ -77,7 +77,7 @@ You never typed `use debug-detective`. You didn't have to. The toolkit read the
77
77
  | Quality hooks | ✅ 22+ | Some | ❌ | ❌ |
78
78
  | IDE platforms | **11** (Claude Code, Windsurf, Cursor, Codex, Antigravity, OpenCode, Cline, Roo Code, Aider, Kimi, Gemini CLI) | 1-2 | 1 | Varies |
79
79
  | Telemetry | ❌ none | Varies | ❌ | Varies |
80
- | Test coverage | ✅ 348 tests | ❌ | ❌ | ❌ |
80
+ | Test coverage | ✅ 373 tests | ❌ | ❌ | ❌ |
81
81
  | Distributed via | `npx`, curl, clone | Manual | Manual | Manual |
82
82
 
83
83
  ---
@@ -789,13 +789,12 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for templates, checklists, and the full K
789
789
 
790
790
  ## Changelog
791
791
 
792
- See [CHANGELOG.md](CHANGELOG.md). v1.7.5 highlights:
792
+ See [CHANGELOG.md](CHANGELOG.md). v1.8.0 highlights:
793
793
 
794
- - **Real-time IDE-aware dashboard** — Sessions tab now surfaces live Claude Code / Windsurf / Windsurf-Next / Cursor / Antigravity activity; SSE poll 10 s 3 s; new `/api/ide-sessions` endpoint
795
- - **Cross-IDE memory protocol** — `rules/common/memory-protocol.md` now explicitly instructs non-Claude IDEs (Windsurf, Cursor, Codex, Antigravity) to call the `recall_memory` and `capture_memory` MCP tools proactively
796
- - **`KODELYTH_EXTRA_IDE_WATCH` env var** — add custom watch paths to the dashboard (comma/semicolon/colon-separated)
797
- - **Watch-path fixes** — broken `proposals.jsonl`-only watch now also watches `routing-misses.jsonl` and the `token-budget/` directory
798
- - **+12 dashboard tests** for IDE platform coverage and cross-platform path resolution
794
+ - **Visual system overhaul** — `github-social-preview.svg` and `og-image.svg` fully redesigned with two-panel layout: brand left, 2×2 stat cards right, dot grid texture, amber accent
795
+ - **SVG overflow fixes** — KODELYTH wordmark, bottom bar text, and stats numerals all corrected to stay within canvas bounds across all 31 social assets
796
+ - **Test count update** — 373 tests across 25 test files (up from 348)
797
+ - **4K PNG exports** — all 31 social assets regenerated at scale; fullhd exports removed
799
798
 
800
799
  v1.7.3 highlights:
801
800
 
@@ -806,7 +805,7 @@ v1.7.0 highlights:
806
805
  - **MCP Server** — 16 tools, 6 prompts, 377 resources; stdio JSON-RPC; zero telemetry; works with Claude Desktop, LangGraph, AutoGen, CrewAI, OpenAI Agents SDK
807
806
  - **Dashboard hardening** — DNS rebinding protection, shell injection fix (`execFileSync`), CSP on all responses, SSE client cap (max 10), TOCTOU fixes
808
807
  - **Devil Mode** — 8 adversarial agents, `--pre-public` / `--pre-launch` / `--all` flags, real bash-grep patterns and remediation playbooks
809
- - **336 tests** passing across 24 test files (now 348 at v1.7.5)
808
+ - **336 tests** passing across 25 test files (now 373 at v1.8.0)
810
809
 
811
810
  v1.5.8 highlights:
812
811
 
package/SECURITY.md CHANGED
@@ -4,12 +4,11 @@
4
4
 
5
5
  | Version | Supported |
6
6
  |---------|-----------|
7
- | 1.5.x | Yes — current stable |
8
- | 1.4.x | Yes — security fixes only |
9
- | 1.3.x | Yes — security fixes only |
10
- | 1.2.x | No — upgrade to 1.5.x |
11
- | 1.1.x | No — upgrade to 1.5.x |
12
- | 1.0.x | No — upgrade to 1.5.x |
7
+ | 1.8.x | Yes — current stable |
8
+ | 1.7.x | Yes — security fixes only |
9
+ | 1.6.x | Yes — security fixes only |
10
+ | 1.5.x | No — upgrade to 1.8.x |
11
+ | < 1.5 | No — upgrade to 1.8.x |
13
12
  | < 1.0 | No |
14
13
 
15
14
  ---
@@ -169,4 +169,4 @@ These provide additional audit playbooks on top of the enterprise baseline.
169
169
 
170
170
  ---
171
171
 
172
- **Powered by Kodelyth ECC v1.7.5 · Enterprise bundle**
172
+ **Powered by Kodelyth ECC v1.8.0 · Enterprise bundle**
@@ -103,4 +103,4 @@ Run `/devil-mode --all` or `use <agent-name>` any time to access the full crew.
103
103
 
104
104
  ---
105
105
 
106
- **Powered by Kodelyth ECC v1.7.5 · Indie Hacker bundle**
106
+ **Powered by Kodelyth ECC v1.8.0 · Indie Hacker bundle**
@@ -135,4 +135,4 @@ Each ~300 lines of real audit logic, not theatrical persona.
135
135
 
136
136
  ---
137
137
 
138
- **Powered by Kodelyth ECC v1.7.5 · Red Team bundle**
138
+ **Powered by Kodelyth ECC v1.8.0 · Red Team bundle**
package/hooks/hooks.json CHANGED
@@ -233,6 +233,19 @@
233
233
  }
234
234
  ],
235
235
  "PostToolUse": [
236
+ {
237
+ "matcher": "Edit|Write|MultiEdit",
238
+ "hooks": [
239
+ {
240
+ "type": "command",
241
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/memory/auto-resolve.js\"",
242
+ "async": true,
243
+ "timeout": 5
244
+ }
245
+ ],
246
+ "description": "Kodelyth Memory: mark unresolved memories as failed when a follow-up edit touches the same file (Improvement C — outcome tracking)",
247
+ "id": "kodelyth:post:edit:memory-auto-resolve"
248
+ },
236
249
  {
237
250
  "matcher": "Edit|Write|MultiEdit",
238
251
  "hooks": [
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+ // =============================================================================
3
+ // Kodelyth ECC — Memory Auto-Resolve Hook (PostToolUse: Write|Edit|MultiEdit)
4
+ //
5
+ // Improvement C — Outcome Tracking
6
+ //
7
+ // Fires after every file write or edit. Checks if the edited file appears in
8
+ // any unresolved memory's files[] list. If it does, that memory's outcome is
9
+ // marked resolved:false — a follow-up edit implies the previous solution
10
+ // didn't fully stick.
11
+ //
12
+ // The same event is propagated to instincts.js so that any structued instinct
13
+ // sourced from the same session gets its confidence downgraded (−0.30),
14
+ // enabling automatic pruning of bad patterns over time.
15
+ //
16
+ // This hook is deliberately silent:
17
+ // - It never emits output to stdout (would pollute the AI's context).
18
+ // - It always exits 0 (never blocks a session).
19
+ // - All writes are atomic enough for the append-only JSONL format.
20
+ //
21
+ // Output contract: pass stdin through to stdout unchanged. Never block.
22
+ // =============================================================================
23
+
24
+ 'use strict';
25
+
26
+ const fs = require('fs');
27
+ const path = require('path');
28
+
29
+ let raw = '';
30
+ process.stdin.setEncoding('utf8');
31
+ process.stdin.on('data', chunk => { raw += chunk; });
32
+ process.stdin.on('end', run);
33
+ setTimeout(() => { if (!process.stdin.readableEnded) run(); }, 150);
34
+
35
+ function run() {
36
+ // Always echo stdin — never block the tool result from reaching the AI
37
+ if (raw) process.stdout.write(raw);
38
+
39
+ try {
40
+ const payload = raw ? JSON.parse(raw) : {};
41
+ const toolName = payload.tool_name || payload.name || '';
42
+ const toolInput = payload.tool_input || payload.input || {};
43
+ const cwd = payload.cwd || process.cwd();
44
+
45
+ // Extract the file path from Write, Edit, or MultiEdit inputs
46
+ let filePath = toolInput.file_path || toolInput.path || null;
47
+ if (!filePath && Array.isArray(toolInput.edits) && toolInput.edits[0]) {
48
+ filePath = toolInput.edits[0].file_path || toolInput.edits[0].path || null;
49
+ }
50
+
51
+ if (!filePath) return; // no file path — nothing to resolve
52
+
53
+ const storePath = path.join(__dirname, '..', '..', 'scripts', 'memory', 'store.js');
54
+ if (!fs.existsSync(storePath)) return;
55
+
56
+ const store = require(storePath);
57
+ const resolved = store.autoResolveOnEdit(filePath, cwd);
58
+
59
+ if (resolved.length > 0) {
60
+ process.stderr.write(
61
+ `[ecc:auto-resolve] Marked ${resolved.length} memory/memories resolved:false` +
62
+ ` after edit to ${path.basename(filePath)}\n`
63
+ );
64
+ }
65
+ } catch (err) {
66
+ process.stderr.write(`[ecc:auto-resolve] ${err.message}\n`);
67
+ }
68
+ }
@@ -154,6 +154,22 @@ function writeToLessons(corrections, cwd) {
154
154
  process.stderr.write(
155
155
  `[ecc:correction-capture] ${corrections.length} lesson(s) written to tasks/lessons.md\n`
156
156
  );
157
+
158
+ // ── Improvement B: also write to structured instinct schema ──────────────
159
+ try {
160
+ const instinctsPath = path.join(__dirname, '..', '..', 'scripts', 'memory', 'instincts.js');
161
+ if (fs.existsSync(instinctsPath)) {
162
+ const instincts = require(instinctsPath);
163
+ for (const correction of corrections) {
164
+ instincts.captureFromCorrection(correction, cwd, 'project');
165
+ }
166
+ process.stderr.write(
167
+ `[ecc:correction-capture] ${corrections.length} instinct(s) written to structured schema\n`
168
+ );
169
+ }
170
+ } catch (instErr) {
171
+ process.stderr.write(`[ecc:correction-capture] Instinct schema write skipped: ${instErr.message}\n`);
172
+ }
157
173
  } catch (err) {
158
174
  process.stderr.write(`[ecc:correction-capture] Could not write lessons: ${err.message}\n`);
159
175
  }
@@ -10,6 +10,11 @@
10
10
  // /memory review-pending
11
11
  // or:
12
12
  // node scripts/memory/cli.js list-pending
13
+ //
14
+ // Improvement A: detects meaningful file writes / git commits in the session
15
+ // and emits a contextual "should I save what we learned?" prompt.
16
+ //
17
+ // Improvement D: runs instinct decay check — flags instincts unused 30+ days.
13
18
  // =============================================================================
14
19
 
15
20
  'use strict';
@@ -37,7 +42,11 @@ function main() {
37
42
 
38
43
  const { extractCandidates } = require(path.join(__dirname, '..', '..', 'scripts', 'memory', 'extract'));
39
44
  const candidates = extractCandidates(sessionJsonl);
40
- if (candidates.length === 0) {
45
+
46
+ // ── Improvement A: detect meaningful file writes or git commits ───────────
47
+ const hadFileWrites = detectFileWrites(sessionJsonl);
48
+
49
+ if (candidates.length === 0 && !hadFileWrites) {
41
50
  process.exit(0);
42
51
  }
43
52
 
@@ -45,22 +54,46 @@ function main() {
45
54
  || path.join(os.homedir(), '.kodelyth', 'memory');
46
55
  if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
47
56
 
48
- const queueFile = path.join(dir, 'pending-review.jsonl');
49
57
  const sessionId = data.session_id || path.basename(sessionJsonl, '.jsonl');
50
58
 
51
- const lines = candidates.map(c => JSON.stringify({
52
- ...c,
53
- session_id: sessionId,
54
- project_path: data.cwd || process.cwd(),
55
- queued_at: new Date().toISOString(),
56
- }));
59
+ if (candidates.length > 0) {
60
+ const queueFile = path.join(dir, 'pending-review.jsonl');
61
+ const lines = candidates.map(c => JSON.stringify({
62
+ ...c,
63
+ session_id: sessionId,
64
+ project_path: data.cwd || process.cwd(),
65
+ queued_at: new Date().toISOString(),
66
+ }));
67
+ fs.appendFileSync(queueFile, lines.join('\n') + '\n');
68
+ }
69
+
70
+ // ── Improvement A: build contextual advisory from session activity ────────
71
+ const parts = [];
72
+ if (candidates.length > 0) {
73
+ parts.push(`${candidates.length} memory candidate(s) queued — run "/memory review-pending" to confirm`);
74
+ }
75
+ if (hadFileWrites) {
76
+ parts.push('files written this session — run "/memory save" or "/learn-eval" to save what we learned');
77
+ }
78
+
79
+ // ── Improvement D: decay check — surface stale instincts for review ───────
80
+ try {
81
+ const instinctsPath = path.join(__dirname, '..', '..', 'scripts', 'memory', 'instincts.js');
82
+ if (fs.existsSync(instinctsPath)) {
83
+ const instincts = require(instinctsPath);
84
+ const stale = instincts.runDecayCheck();
85
+ if (stale.length > 0) {
86
+ parts.push(`${stale.length} instinct(s) unused 30+ days — run "/skill-health" to review stale rules`);
87
+ }
88
+ }
89
+ } catch { /* decay check is best-effort, never block a session */ }
57
90
 
58
- fs.appendFileSync(queueFile, lines.join('\n') + '\n');
91
+ if (parts.length > 0) {
92
+ process.stdout.write(JSON.stringify({
93
+ message: `Kodelyth Memory: ${parts.join(' | ')}`,
94
+ }));
95
+ }
59
96
 
60
- // Emit advisory message so user sees something happened
61
- process.stdout.write(JSON.stringify({
62
- message: `Kodelyth Memory: ${candidates.length} candidate(s) queued for review. Run "/memory review-pending" to confirm.`,
63
- }));
64
97
  process.exit(0);
65
98
  } catch (err) {
66
99
  process.stderr.write(`kodelyth-memory capture: ${err.message}\n`);
@@ -68,11 +101,34 @@ function main() {
68
101
  }
69
102
  }
70
103
 
104
+ // ── Improvement A: scan session JSONL for Write/Edit tool uses or git commits ─
105
+ function detectFileWrites(sessionJsonl) {
106
+ try {
107
+ const lines = fs.readFileSync(sessionJsonl, 'utf8').split('\n').filter(Boolean);
108
+ for (const line of lines) {
109
+ let event;
110
+ try { event = JSON.parse(line); } catch { continue; }
111
+
112
+ // Tool use events that write files
113
+ const toolName = event.name || event.tool_name || '';
114
+ if (/^(Write|Edit|MultiEdit|NotebookEdit)$/i.test(toolName)) return true;
115
+
116
+ // Bash events containing git commit
117
+ if (/^Bash$/i.test(toolName)) {
118
+ const input = JSON.stringify(event.input || event.tool_input || '');
119
+ if (/git\s+commit|git\s+push/i.test(input)) return true;
120
+ }
121
+ }
122
+ return false;
123
+ } catch {
124
+ return false;
125
+ }
126
+ }
127
+
71
128
  function findLatestClaudeSession(cwd) {
72
129
  try {
73
130
  const projectsDir = path.join(os.homedir(), '.claude', 'projects');
74
131
  if (!fs.existsSync(projectsDir)) return null;
75
- // Project dirs are encoded paths
76
132
  const encoded = '-' + cwd.replace(/\//g, '-');
77
133
  const matches = fs.readdirSync(projectsDir).filter(d => d.endsWith(encoded.slice(-30)));
78
134
  if (matches.length === 0) return null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kodelyth-ecc",
3
- "version": "1.7.5",
3
+ "version": "1.8.0",
4
4
  "description": "Production-grade AI coding toolkit — 70 agents (incl. devil-mode adversarial crew), 194 skills, 97 commands, parallel multi-agent commands, semantic intent routing, self-learning memory, and a built-in MCP server (16 tools / 6 prompts / 377 resources) that bridges to Claude Desktop, LangGraph, AutoGen, CrewAI, and OpenAI Agents SDK. Works with Claude Code, Windsurf, Cursor, Codex, Antigravity, OpenCode, Cline, RooCode, Aider, Kimi, and Gemini CLI.",
5
5
  "author": "Kodelyth <github.com/sifxprime>",
6
6
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  # Agent Orchestration
2
2
 
3
- 62 specialist agents are available. Intent routing is always-on — describe your problem in plain words and the right agent is invoked automatically. You can also invoke explicitly: `use <agent-name>`.
3
+ 70 specialist agents are available. Intent routing is always-on — describe your problem in plain words and the right agent is invoked automatically. You can also invoke explicitly: `use <agent-name>`.
4
4
 
5
5
  ## Kodelyth Exclusives
6
6
 
@@ -16,7 +16,7 @@ Enter plan mode for ANY non-trivial task (3+ steps, architectural decisions, or
16
16
 
17
17
  ## 2. Subagent Strategy
18
18
 
19
- The 61 ECC specialist agents exist so the main context window stays clean:
19
+ The 70 ECC specialist agents exist so the main context window stays clean:
20
20
 
21
21
  - Offload research, exploration, and parallel analysis to subagents
22
22
  - For complex problems: throw more compute via agents, not more tokens in main context
@@ -124,7 +124,7 @@ ECC uses three compounding memory layers — together they make Claude increasin
124
124
  - Example: "Last time you had a CORS issue in Express, you added this middleware..."
125
125
 
126
126
  ### Layer 3 — Intent Routing (`rules/common/agent-intent-routing.md`)
127
- - Always-on. 61 specialists. Zero setup.
127
+ - Always-on. 70 specialists. Zero setup.
128
128
  - Routes your message to the right expert from the first word
129
129
  - No agent names needed — just describe the problem
130
130
 
@@ -1,6 +1,6 @@
1
1
  // scripts/dashboard/data.js
2
2
  //
3
- // Local observability dashboard: pure aggregators (v1.7.5).
3
+ // Local observability dashboard: pure aggregators (v1.8.0).
4
4
  //
5
5
  // All data the dashboard renders comes from:
6
6
  // - The MCP catalog (filesystem reads of agents/, skills/, commands/, rules/, bundles/)
@@ -1,6 +1,6 @@
1
1
  // scripts/dashboard/server.js
2
2
  //
3
- // Local observability dashboard server (v1.7.5).
3
+ // Local observability dashboard server (v1.8.0).
4
4
  //
5
5
  // HTTP server using ONLY Node.js built-ins. Serves:
6
6
  // GET / → static index.html