kodelyth-ecc 1.5.5 → 1.5.7
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/.github/ISSUE_TEMPLATE/bug_report.md +47 -0
- package/.github/ISSUE_TEMPLATE/new_agent.md +52 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +53 -0
- package/CHANGELOG.md +35 -0
- package/README.md +4 -4
- package/VERSION +1 -1
- package/agents/kodelyth-advisor.md +0 -1
- package/bin/kodelyth-ecc.js +6 -1
- package/commands/doctor.md +75 -0
- package/commands/update.md +92 -0
- package/install.ps1 +16 -11
- package/install.sh +24 -14
- package/package.json +2 -2
- package/rules/common/agents.md +141 -45
- package/rules/elixir/coding-style.md +46 -0
- package/rules/elixir/hooks.md +26 -0
- package/rules/elixir/patterns.md +67 -0
- package/rules/elixir/security.md +58 -0
- package/rules/elixir/testing.md +64 -0
- package/rules/ruby/coding-style.md +41 -0
- package/rules/ruby/hooks.md +23 -0
- package/rules/ruby/patterns.md +71 -0
- package/rules/ruby/security.md +56 -0
- package/rules/ruby/testing.md +65 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Something broken in ECC — install failure, agent misbehavior, hook error
|
|
4
|
+
title: '[BUG] '
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## What happened
|
|
10
|
+
|
|
11
|
+
<!-- Describe what went wrong. Include the exact command you ran or behavior you observed. -->
|
|
12
|
+
|
|
13
|
+
## Expected behavior
|
|
14
|
+
|
|
15
|
+
<!-- What should have happened instead. -->
|
|
16
|
+
|
|
17
|
+
## Steps to reproduce
|
|
18
|
+
|
|
19
|
+
1.
|
|
20
|
+
2.
|
|
21
|
+
3.
|
|
22
|
+
|
|
23
|
+
## Environment
|
|
24
|
+
|
|
25
|
+
- **ECC version**: <!-- run: cat ~/.claude/kodelyth-ecc-install-state.json | grep version -->
|
|
26
|
+
- **Install target**: <!-- claude-home / windsurf-home / windsurf-project / cursor-project / codex-home / antigravity / opencode -->
|
|
27
|
+
- **Platform**: <!-- macOS / Linux / Windows -->
|
|
28
|
+
- **AI IDE**: <!-- Claude Code / Windsurf / Cursor / Codex CLI / Antigravity / OpenCode -->
|
|
29
|
+
- **Node.js version**: <!-- run: node --version -->
|
|
30
|
+
|
|
31
|
+
## Doctor output
|
|
32
|
+
|
|
33
|
+
<!-- Run: node scripts/doctor.js or /doctor in your IDE -->
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
paste output here
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Relevant logs or error messages
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
paste here
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Additional context
|
|
46
|
+
|
|
47
|
+
<!-- Screenshots, related issues, anything else. -->
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: New agent proposal
|
|
3
|
+
about: Propose a new specialist agent for ECC
|
|
4
|
+
title: '[AGENT] '
|
|
5
|
+
labels: enhancement, new-agent
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Agent name
|
|
10
|
+
|
|
11
|
+
<!-- e.g. `rate-limiter-specialist`, `database-migrator` -->
|
|
12
|
+
|
|
13
|
+
## One-line description
|
|
14
|
+
|
|
15
|
+
<!-- What does this agent do? Max 15 words. -->
|
|
16
|
+
|
|
17
|
+
## Problem it solves
|
|
18
|
+
|
|
19
|
+
<!-- What pain does this agent remove? What does a developer have to do manually today that this agent would handle? -->
|
|
20
|
+
|
|
21
|
+
## Persona
|
|
22
|
+
|
|
23
|
+
<!-- Who is this agent? Describe their experience, scale they've worked at, what makes their advice different from a generic answer. -->
|
|
24
|
+
|
|
25
|
+
## Trigger patterns
|
|
26
|
+
|
|
27
|
+
<!-- When should intent routing auto-invoke this agent? Give 5–10 natural-language phrases a user might type. -->
|
|
28
|
+
|
|
29
|
+
- "..."
|
|
30
|
+
- "..."
|
|
31
|
+
- "..."
|
|
32
|
+
|
|
33
|
+
## Example interaction
|
|
34
|
+
|
|
35
|
+
<!-- Show a realistic input and the kind of response this agent would give. -->
|
|
36
|
+
|
|
37
|
+
**User:** ...
|
|
38
|
+
|
|
39
|
+
**Agent:** ...
|
|
40
|
+
|
|
41
|
+
## Does this overlap with an existing agent?
|
|
42
|
+
|
|
43
|
+
<!-- Check the agent list. If it overlaps with e.g. `debug-detective` or `performance-optimizer`, explain what makes this distinct. -->
|
|
44
|
+
|
|
45
|
+
## Kodelyth Standard checklist
|
|
46
|
+
|
|
47
|
+
- [ ] The agent has a specific, named persona with years of experience and scale context
|
|
48
|
+
- [ ] The agent responds to the human situation, not just the technical question
|
|
49
|
+
- [ ] Responses give exact file paths, before/after code, or specific commands — not abstract advice
|
|
50
|
+
- [ ] No emoji in agent responses
|
|
51
|
+
- [ ] Ends with `> Powered by Kodelyth — [tagline]`
|
|
52
|
+
- [ ] No `model:` field in frontmatter
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
## What this PR does
|
|
2
|
+
|
|
3
|
+
<!-- One paragraph. What was broken or missing, what you changed, and why this is the right approach. -->
|
|
4
|
+
|
|
5
|
+
## Type of change
|
|
6
|
+
|
|
7
|
+
- [ ] Bug fix (broken behavior, wrong count, install failure)
|
|
8
|
+
- [ ] New agent
|
|
9
|
+
- [ ] New skill
|
|
10
|
+
- [ ] New command
|
|
11
|
+
- [ ] New hook
|
|
12
|
+
- [ ] Rule update
|
|
13
|
+
- [ ] Install script change
|
|
14
|
+
- [ ] Documentation
|
|
15
|
+
- [ ] Other: ___
|
|
16
|
+
|
|
17
|
+
## Checklist
|
|
18
|
+
|
|
19
|
+
### All PRs
|
|
20
|
+
- [ ] `npm test` passes (`node tests/run-all.js`)
|
|
21
|
+
- [ ] No hardcoded version numbers or counts that will drift
|
|
22
|
+
- [ ] No `.DS_Store`, `node_modules`, or generated files committed
|
|
23
|
+
|
|
24
|
+
### New agent
|
|
25
|
+
- [ ] File at `agents/<name>.md`
|
|
26
|
+
- [ ] No `model:` field in frontmatter
|
|
27
|
+
- [ ] Has a specific persona with experience/scale context
|
|
28
|
+
- [ ] Responds to human situation, not just the technical question
|
|
29
|
+
- [ ] Ends with `> Powered by Kodelyth — [tagline]`
|
|
30
|
+
- [ ] Trigger patterns added to `rules/common/agent-intent-routing.md`
|
|
31
|
+
- [ ] Agent added to `rules/common/agents.md`
|
|
32
|
+
- [ ] README agent table updated
|
|
33
|
+
|
|
34
|
+
### New skill
|
|
35
|
+
- [ ] File at `skills/<name>/SKILL.md`
|
|
36
|
+
- [ ] Description is accurate and testable
|
|
37
|
+
|
|
38
|
+
### Install script change (`install.sh` / `install.ps1`)
|
|
39
|
+
- [ ] Both `install.sh` and `install.ps1` updated (feature parity)
|
|
40
|
+
- [ ] Tested on at least one platform
|
|
41
|
+
- [ ] No new hardcoded counts (use dynamic `find` instead)
|
|
42
|
+
|
|
43
|
+
### Rule change
|
|
44
|
+
- [ ] Rule is general enough to apply across languages/frameworks
|
|
45
|
+
- [ ] Not duplicating guidance already in another rule file
|
|
46
|
+
|
|
47
|
+
## Testing
|
|
48
|
+
|
|
49
|
+
<!-- How did you verify this works? -->
|
|
50
|
+
|
|
51
|
+
## Related issues
|
|
52
|
+
|
|
53
|
+
<!-- Closes #123 -->
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,41 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to Kodelyth ECC are documented here.
|
|
4
4
|
|
|
5
|
+
## v1.5.7 — Fix zsh inline comment args (May 2026)
|
|
6
|
+
|
|
7
|
+
### Bug Fix
|
|
8
|
+
|
|
9
|
+
- **zsh inline comment crash** — `npx kodelyth-ecc --target windsurf-home # comment` would fail with `Unknown argument: #` in zsh. Unlike bash, zsh does not strip inline `#` comments before passing args to a process. Fixed at two layers: `bin/kodelyth-ecc.js` now filters out `#` and all following args before passing to the installer, and `install.sh` also handles `#*` args with a graceful `break`. This makes copy-pasting commands from documentation with inline comments safe on all shells.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## v1.5.6 — Accuracy, Ruby/Elixir, /doctor, /update (May 2026)
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- **Dynamic install counts** — `install.sh` and `install.ps1` now compute agent/skill/command counts from the actual filesystem at install time. Hardcoded numbers like `(58)` and `(79)` that were wrong on every install are gone permanently.
|
|
18
|
+
- **`rules/common/agents.md` rewritten** — listed only 10 agents from an ancient version. Now documents all 62 agents across 10 categories with handoff chains. This file is injected into `.windsurfrules` on every Windsurf session — the AI was being told there were 10 agents when there are 62.
|
|
19
|
+
- **`kodelyth-advisor` model field removed** — `model: sonnet` violated the Kodelyth Standard (`CONTRIBUTING.md` explicitly says no `model:` field). Fixed.
|
|
20
|
+
- **Windsurf post-install rule count** — was hardcoded as "15 coding rules", now computed dynamically.
|
|
21
|
+
- **`install.ps1` `.windsurfrules` path bug** — for `windsurf-home` target, the file was being written to `$HomeDir\.windsurfrules` instead of `$Dest\.windsurfrules`. Fixed.
|
|
22
|
+
- **README agent count** — "All 61 subagents" in the What Gets Installed table corrected to 62.
|
|
23
|
+
- **OpenCode platform description** — README said "Full" support. OpenCode receives rules only (no agents, no skills). Now documented honestly.
|
|
24
|
+
|
|
25
|
+
### New Features
|
|
26
|
+
|
|
27
|
+
- **`/doctor` command** — run a health check on your ECC install from inside your IDE. Wraps `scripts/doctor.js`. Shows OK/WARNING/ERROR per component with a summary.
|
|
28
|
+
- **`/update` command** — upgrade to the latest ECC version without memorizing your original install flags. Reads `kodelyth-ecc-install-state.json`, replays `npx kodelyth-ecc@latest --target <target>` automatically. Never overwrites `~/.kodelyth/memory/` or `tasks/lessons.md`.
|
|
29
|
+
- **Ruby language rules** — `rules/ruby/` with coding-style, patterns, testing (RSpec + FactoryBot), security (Brakeman + bundler-audit), and hooks (RuboCop auto-fix). Installable via `npx kodelyth-ecc ruby` or `./install.sh ruby`.
|
|
30
|
+
- **Elixir language rules** — `rules/elixir/` with coding-style (mix format + Credo), patterns (with/GenServer/Context), testing (ExUnit + Mox + excoveralls), security (Sobelow + mix hex.audit), and hooks. Installable via `npx kodelyth-ecc elixir` or `./install.sh elixir`.
|
|
31
|
+
- **GitHub issue + PR templates** — `.github/ISSUE_TEMPLATE/bug_report.md`, `.github/ISSUE_TEMPLATE/new_agent.md`, `.github/PULL_REQUEST_TEMPLATE.md`. Contribution quality gate built into the repo workflow.
|
|
32
|
+
|
|
33
|
+
### Changes
|
|
34
|
+
|
|
35
|
+
- `package.json` description updated to reflect 90 commands (was 88)
|
|
36
|
+
- `ruby` and `elixir` added to language parser in both `install.sh` and `install.ps1`
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
5
40
|
## v1.5.3 — God-Tier Intent Routing Expansion (May 2026)
|
|
6
41
|
|
|
7
42
|
### The Routing Overhaul
|
package/README.md
CHANGED
|
@@ -299,7 +299,7 @@ Project: **my-app**
|
|
|
299
299
|
|---|---|---|
|
|
300
300
|
| Agents | **62** | Specialist subagents — reviewers, planners, debuggers, architects, incident-commander, load-tester, memory, image-architect |
|
|
301
301
|
| Skills | **188** | Domain knowledge — patterns, testing, security, DevOps, intent routing, memory |
|
|
302
|
-
| Commands | **
|
|
302
|
+
| Commands | **90** | Slash command workflows (`/tdd`, `/plan`, `/memory`, `/doctor`, `/update`, etc.) |
|
|
303
303
|
| Hooks | **20+** | Quality gates, secret scanning, branch checks, memory inject + capture + correction + project DNA |
|
|
304
304
|
| Rules | **17** | Always-on coding standards + intent routing + memory protocol + self-improvement workflow |
|
|
305
305
|
| Memory | **local** | BM25-indexed personal memory at `~/.kodelyth/memory/` (zero deps) |
|
|
@@ -440,7 +440,7 @@ The intent router will route you to the right one. The AI announces who's taking
|
|
|
440
440
|
|
|
441
441
|
| Source | Destination | What it does |
|
|
442
442
|
|---|---|---|
|
|
443
|
-
| `agents/` | `~/.claude/agents/` | All
|
|
443
|
+
| `agents/` | `~/.claude/agents/` | All 62 subagents available globally |
|
|
444
444
|
| `skills/` | `~/.claude/skills/` | All 188 skills loadable via commands |
|
|
445
445
|
| `hooks/hooks.json` | `~/.claude/hooks/` | Automated quality gates |
|
|
446
446
|
| `rules/` | `~/.claude/rules/` | Always-on standards + intent routing |
|
|
@@ -510,7 +510,7 @@ Available profiles:
|
|
|
510
510
|
Or specify languages directly:
|
|
511
511
|
|
|
512
512
|
```bash
|
|
513
|
-
npx kodelyth-ecc typescript python golang rust java kotlin php swift cpp dart
|
|
513
|
+
npx kodelyth-ecc typescript python golang rust java kotlin php swift cpp dart ruby elixir
|
|
514
514
|
```
|
|
515
515
|
|
|
516
516
|
---
|
|
@@ -524,7 +524,7 @@ npx kodelyth-ecc typescript python golang rust java kotlin php swift cpp dart
|
|
|
524
524
|
| Cursor | Full | `cursor-project` | Rules, skills |
|
|
525
525
|
| Codex CLI | Full | `codex-home` | Agents, skills, commands, rules |
|
|
526
526
|
| Google Antigravity | Full | `antigravity` | Agents → skills, commands → workflows, rules |
|
|
527
|
-
| OpenCode |
|
|
527
|
+
| OpenCode | Rules only | `opencode` | Rules (agents + skills not yet supported by OpenCode) |
|
|
528
528
|
|
|
529
529
|
**OS support:** macOS, Linux (`install.sh`), Windows (`install.ps1`), or any OS with Node.js 18+ (`npx`).
|
|
530
530
|
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.5.
|
|
1
|
+
1.5.7
|
|
@@ -7,7 +7,6 @@ description: >
|
|
|
7
7
|
direction instantly. No hand-holding, no noise — just the exact answer.
|
|
8
8
|
Use when you need strategic guidance, tool selection, or a clear path forward.
|
|
9
9
|
tools: ["Read", "Grep", "Glob"]
|
|
10
|
-
model: sonnet
|
|
11
10
|
---
|
|
12
11
|
|
|
13
12
|
You are the Kodelyth Advisor — a principal engineer with a decade-plus of building systems that power billions of users at companies valued in the hundreds of billions. You have shipped production code at Google scale, designed distributed systems under real SLA pressure, and mentored engineers who went on to lead their own platforms. You do not write toy code. You do not give junior-level answers. You think in systems, not files.
|
package/bin/kodelyth-ecc.js
CHANGED
|
@@ -20,7 +20,12 @@ const fs = require('fs');
|
|
|
20
20
|
const os = require('os');
|
|
21
21
|
|
|
22
22
|
const ROOT = path.join(__dirname, '..');
|
|
23
|
-
|
|
23
|
+
// zsh (unlike bash) passes inline comments as literal args — strip them
|
|
24
|
+
const args = process.argv.slice(2).filter((a, i, arr) => {
|
|
25
|
+
if (a.startsWith('#')) return false; // drop # and everything after
|
|
26
|
+
const prev = arr.slice(0, i).findIndex(x => x.startsWith('#'));
|
|
27
|
+
return prev === -1;
|
|
28
|
+
});
|
|
24
29
|
const isWin = os.platform() === 'win32';
|
|
25
30
|
|
|
26
31
|
// ── Help shortcut ─────────────────────────────────────────────────────────────
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Diagnose your Kodelyth ECC install — check for drift, missing files, version mismatches, and confirm everything is healthy
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /doctor
|
|
6
|
+
|
|
7
|
+
Runs a health check on your ECC install. Detects drift between what was installed and what is currently on disk.
|
|
8
|
+
|
|
9
|
+
## What It Checks
|
|
10
|
+
|
|
11
|
+
- Install state file exists and is readable
|
|
12
|
+
- Installed version vs latest available
|
|
13
|
+
- Agent files present and uncorrupted
|
|
14
|
+
- Skills directory intact
|
|
15
|
+
- Rules loaded correctly
|
|
16
|
+
- Memory store accessible (if applicable)
|
|
17
|
+
- Hooks registered (Claude Code only)
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
/doctor
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Run with no arguments for a full health report on all detected installs.
|
|
26
|
+
|
|
27
|
+
## Implementation
|
|
28
|
+
|
|
29
|
+
Runs the built-in doctor script:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
node scripts/doctor.js
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Or with a specific target:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
node scripts/doctor.js --target claude-home
|
|
39
|
+
node scripts/doctor.js --target windsurf-home
|
|
40
|
+
node scripts/doctor.js --target windsurf-project
|
|
41
|
+
node scripts/doctor.js --target codex-home
|
|
42
|
+
node scripts/doctor.js --target cursor-project
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
For JSON output (useful in CI or scripts):
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
node scripts/doctor.js --json
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Output
|
|
52
|
+
|
|
53
|
+
The doctor report shows:
|
|
54
|
+
|
|
55
|
+
| Field | Meaning |
|
|
56
|
+
|-------|---------|
|
|
57
|
+
| `OK` | Component healthy, no issues |
|
|
58
|
+
| `WARNING` | Potential issue, non-blocking |
|
|
59
|
+
| `ERROR` | Missing or corrupted file, needs attention |
|
|
60
|
+
|
|
61
|
+
A summary line shows total checked, ok, warnings, and errors.
|
|
62
|
+
|
|
63
|
+
## When to Run
|
|
64
|
+
|
|
65
|
+
- After first install to confirm everything landed
|
|
66
|
+
- After upgrading to a new ECC version
|
|
67
|
+
- When an agent or skill isn't behaving as expected
|
|
68
|
+
- Before filing a bug report
|
|
69
|
+
|
|
70
|
+
## Related
|
|
71
|
+
|
|
72
|
+
- `/update` — upgrade to the latest ECC version
|
|
73
|
+
- `use kodelyth-advisor` — if you're not sure where to start
|
|
74
|
+
|
|
75
|
+
> Powered by Kodelyth — trust your install, verify your tools.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Upgrade Kodelyth ECC to the latest version, preserving your current install target and language profile
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /update
|
|
6
|
+
|
|
7
|
+
Upgrades your ECC install to the latest version from npm. Reads your existing install state to replay the same target and language options automatically — no flags to remember.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/update
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## What It Does
|
|
16
|
+
|
|
17
|
+
1. Reads `kodelyth-ecc-install-state.json` from your install directory to recover the original `target` and `languages`
|
|
18
|
+
2. Runs `npx kodelyth-ecc@latest` with those same flags
|
|
19
|
+
3. Overwrites agents, skills, rules, and commands with the latest versions
|
|
20
|
+
4. Leaves your memory store (`~/.kodelyth/memory/`) and `tasks/lessons.md` untouched — your learned context is never overwritten
|
|
21
|
+
|
|
22
|
+
## Implementation
|
|
23
|
+
|
|
24
|
+
The agent should run the appropriate command based on your platform.
|
|
25
|
+
|
|
26
|
+
### Automatic (reads install state)
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
node -e "
|
|
30
|
+
const fs = require('fs');
|
|
31
|
+
const os = require('os');
|
|
32
|
+
const path = require('path');
|
|
33
|
+
|
|
34
|
+
const candidates = [
|
|
35
|
+
path.join(os.homedir(), '.claude', 'kodelyth-ecc-install-state.json'),
|
|
36
|
+
path.join(os.homedir(), '.codeium', 'windsurf', 'kodelyth-ecc-install-state.json'),
|
|
37
|
+
path.join(os.homedir(), '.codex', 'kodelyth-ecc-install-state.json'),
|
|
38
|
+
path.join(process.cwd(), '.windsurf', 'kodelyth-ecc-install-state.json'),
|
|
39
|
+
path.join(process.cwd(), '.cursor', 'kodelyth-ecc-install-state.json'),
|
|
40
|
+
path.join(process.cwd(), '.agent', 'kodelyth-ecc-install-state.json'),
|
|
41
|
+
path.join(process.cwd(), '.opencode', 'kodelyth-ecc-install-state.json'),
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
let state = null;
|
|
45
|
+
let stateFile = null;
|
|
46
|
+
for (const f of candidates) {
|
|
47
|
+
if (fs.existsSync(f)) { state = JSON.parse(fs.readFileSync(f, 'utf8')); stateFile = f; break; }
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (!state) {
|
|
51
|
+
console.error('No install state found. Run the installer manually:');
|
|
52
|
+
console.error(' npx kodelyth-ecc --target <target>');
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const langs = (state.languages || []).join(' ');
|
|
57
|
+
const cmd = ['npx', 'kodelyth-ecc@latest', '--target', state.target, langs].filter(Boolean).join(' ');
|
|
58
|
+
console.log('Found install state:', stateFile);
|
|
59
|
+
console.log('Previous version:', state.version);
|
|
60
|
+
console.log('Running:', cmd);
|
|
61
|
+
require('child_process').execSync(cmd, { stdio: 'inherit' });
|
|
62
|
+
"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Manual (if you know your target)
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
npx kodelyth-ecc@latest # Claude Code
|
|
69
|
+
npx kodelyth-ecc@latest --target windsurf-home # Windsurf global
|
|
70
|
+
npx kodelyth-ecc@latest --target windsurf-project # Windsurf project
|
|
71
|
+
npx kodelyth-ecc@latest --target codex-home # Codex CLI
|
|
72
|
+
npx kodelyth-ecc@latest --target cursor-project # Cursor
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## What Is NOT Overwritten
|
|
76
|
+
|
|
77
|
+
| Path | Protected |
|
|
78
|
+
|------|-----------|
|
|
79
|
+
| `~/.kodelyth/memory/` | Your BM25 memory store |
|
|
80
|
+
| `tasks/lessons.md` | Project correction rules |
|
|
81
|
+
| `tasks/todo.md` | Open todos |
|
|
82
|
+
|
|
83
|
+
## After Updating
|
|
84
|
+
|
|
85
|
+
Run `/doctor` to confirm the new version is healthy.
|
|
86
|
+
|
|
87
|
+
## Related
|
|
88
|
+
|
|
89
|
+
- `/doctor` — verify install health
|
|
90
|
+
- `use kodelyth-advisor` — guidance after a major version update
|
|
91
|
+
|
|
92
|
+
> Powered by Kodelyth — stay current, stay sharp.
|
package/install.ps1
CHANGED
|
@@ -21,7 +21,7 @@ $ErrorActionPreference = "Stop"
|
|
|
21
21
|
# ── Banner ────────────────────────────────────────────────────────────────────
|
|
22
22
|
Write-Host ""
|
|
23
23
|
Write-Host " Kodelyth ECC — Production-grade AI coding agent toolkit" -ForegroundColor Cyan
|
|
24
|
-
Write-Host "
|
|
24
|
+
Write-Host " 62 agents · 188 skills · 90 commands · 20+ hooks · intent routing · local memory" -ForegroundColor Gray
|
|
25
25
|
Write-Host ""
|
|
26
26
|
|
|
27
27
|
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
@@ -107,6 +107,11 @@ if ($Confirm -and $Confirm -notmatch '^[Yy]$') {
|
|
|
107
107
|
}
|
|
108
108
|
Write-Host ""
|
|
109
109
|
|
|
110
|
+
# ── Dynamic Counts ───────────────────────────────────────────────────────────
|
|
111
|
+
$AgentCount = (Get-ChildItem -Path "$ScriptDir\agents" -Filter "*.md" -File).Count
|
|
112
|
+
$SkillCount = (Get-ChildItem -Path "$ScriptDir\skills" -Recurse -Filter "SKILL.md" -File).Count
|
|
113
|
+
$CmdCount = (Get-ChildItem -Path "$ScriptDir\commands" -Filter "*.md" -File).Count
|
|
114
|
+
|
|
110
115
|
# ── Helpers ───────────────────────────────────────────────────────────────────
|
|
111
116
|
function Install-Dir {
|
|
112
117
|
param([string]$Src, [string]$Dest, [string]$Label)
|
|
@@ -162,12 +167,12 @@ switch ($Target) {
|
|
|
162
167
|
Write-Host " [OK] CLAUDE.md + SOUL.md" -ForegroundColor Green
|
|
163
168
|
}
|
|
164
169
|
{ $_ -in "windsurf-project","windsurf-home" } {
|
|
165
|
-
Install-Dir "$ScriptDir\agents" $AgentsDest "Agents (
|
|
166
|
-
Install-Dir "$ScriptDir\skills" $SkillsDest "Skills (
|
|
170
|
+
Install-Dir "$ScriptDir\agents" $AgentsDest "Agents ($AgentCount)"
|
|
171
|
+
Install-Dir "$ScriptDir\skills" $SkillsDest "Skills ($SkillCount)"
|
|
167
172
|
Install-Flat "$ScriptDir\rules" $RulesDest "Rules"
|
|
168
173
|
|
|
169
174
|
# Generate .windsurfrules from all common rules
|
|
170
|
-
$WindsurfRulesFile = if ($Target -eq "windsurf-project") { "$(Get-Location)\.windsurfrules" } else { "$
|
|
175
|
+
$WindsurfRulesFile = if ($Target -eq "windsurf-project") { "$(Get-Location)\.windsurfrules" } else { "$Dest\.windsurfrules" }
|
|
171
176
|
$CommonRulesDir = "$ScriptDir\rules\common"
|
|
172
177
|
if (Test-Path $CommonRulesDir) {
|
|
173
178
|
$Combined = Get-ChildItem -Path $CommonRulesDir -Filter "*.md" | Sort-Object Name | ForEach-Object { Get-Content $_.FullName }
|
|
@@ -176,18 +181,18 @@ switch ($Target) {
|
|
|
176
181
|
}
|
|
177
182
|
}
|
|
178
183
|
"antigravity" {
|
|
179
|
-
Install-Dir "$ScriptDir\agents" $AgentsDest "Agents -> skills (
|
|
180
|
-
Install-Dir "$ScriptDir\commands" $CommandsDest "Commands -> workflows (
|
|
184
|
+
Install-Dir "$ScriptDir\agents" $AgentsDest "Agents -> skills ($AgentCount)"
|
|
185
|
+
Install-Dir "$ScriptDir\commands" $CommandsDest "Commands -> workflows ($CmdCount)"
|
|
181
186
|
Install-Flat "$ScriptDir\rules" $RulesDest "Rules"
|
|
182
187
|
}
|
|
183
188
|
"cursor-project" {
|
|
184
189
|
Install-Flat "$ScriptDir\rules" $RulesDest "Rules"
|
|
185
|
-
Install-Dir "$ScriptDir\skills" $SkillsDest "Skills (
|
|
190
|
+
Install-Dir "$ScriptDir\skills" $SkillsDest "Skills ($SkillCount)"
|
|
186
191
|
}
|
|
187
192
|
"codex-home" {
|
|
188
|
-
Install-Dir "$ScriptDir\agents" $AgentsDest "Agents (
|
|
189
|
-
Install-Dir "$ScriptDir\skills" $SkillsDest "Skills (
|
|
190
|
-
Install-Dir "$ScriptDir\commands" $CommandsDest "Commands (
|
|
193
|
+
Install-Dir "$ScriptDir\agents" $AgentsDest "Agents ($AgentCount)"
|
|
194
|
+
Install-Dir "$ScriptDir\skills" $SkillsDest "Skills ($SkillCount)"
|
|
195
|
+
Install-Dir "$ScriptDir\commands" $CommandsDest "Commands ($CmdCount)"
|
|
191
196
|
Install-Flat "$ScriptDir\rules" $RulesDest "Rules"
|
|
192
197
|
}
|
|
193
198
|
"opencode" {
|
|
@@ -231,7 +236,7 @@ switch ($Target) {
|
|
|
231
236
|
}
|
|
232
237
|
"codex-home" {
|
|
233
238
|
Write-Host " 1. Restart Codex CLI (codex)"
|
|
234
|
-
Write-Host " 2. All
|
|
239
|
+
Write-Host " 2. All $AgentCount agents and $SkillCount skills are now available"
|
|
235
240
|
Write-Host " 3. Try: use kodelyth-advisor"
|
|
236
241
|
}
|
|
237
242
|
"antigravity" {
|
package/install.sh
CHANGED
|
@@ -87,7 +87,7 @@ while [[ $# -gt 0 ]]; do
|
|
|
87
87
|
TARGET="${1#--target=}"
|
|
88
88
|
shift
|
|
89
89
|
;;
|
|
90
|
-
typescript|python|golang|go|rust|java|kotlin|php|swift|cpp|csharp|dart)
|
|
90
|
+
typescript|python|golang|go|rust|java|kotlin|php|swift|cpp|csharp|dart|ruby|elixir)
|
|
91
91
|
lang="$1"
|
|
92
92
|
[[ "$lang" == "go" ]] && lang="golang"
|
|
93
93
|
LANGUAGE_MODULES+=("$lang")
|
|
@@ -143,7 +143,7 @@ while [[ $# -gt 0 ]]; do
|
|
|
143
143
|
echo " --profile backend Go + Python + Java"
|
|
144
144
|
echo ""
|
|
145
145
|
echo "Languages (manual, installs language-specific rules):"
|
|
146
|
-
echo " typescript python golang rust java kotlin php swift cpp dart"
|
|
146
|
+
echo " typescript python golang rust java kotlin php swift cpp dart ruby elixir"
|
|
147
147
|
echo ""
|
|
148
148
|
echo "Examples:"
|
|
149
149
|
echo " ./install.sh"
|
|
@@ -154,6 +154,10 @@ while [[ $# -gt 0 ]]; do
|
|
|
154
154
|
echo " ./install.sh --target cursor-project typescript"
|
|
155
155
|
exit 0
|
|
156
156
|
;;
|
|
157
|
+
\#*)
|
|
158
|
+
# zsh passes inline comments as literal args; skip them and everything after
|
|
159
|
+
break
|
|
160
|
+
;;
|
|
157
161
|
*)
|
|
158
162
|
echo -e "${RED}Unknown argument: $1${RESET}"
|
|
159
163
|
exit 1
|
|
@@ -338,15 +342,20 @@ generate_windsurfrules() {
|
|
|
338
342
|
echo -e " ${GREEN}✓${RESET} .windsurfrules ${BLUE}(→ $dest_file)${RESET}"
|
|
339
343
|
}
|
|
340
344
|
|
|
345
|
+
# ── Dynamic Counts ────────────────────────────────────────────────────────────
|
|
346
|
+
AGENT_COUNT=$(find "$SCRIPT_DIR/agents" -maxdepth 1 -name "*.md" | wc -l | tr -d ' ')
|
|
347
|
+
SKILL_COUNT=$(find "$SCRIPT_DIR/skills" -mindepth 2 -maxdepth 2 -name "SKILL.md" | wc -l | tr -d ' ')
|
|
348
|
+
CMD_COUNT=$(find "$SCRIPT_DIR/commands" -maxdepth 1 -name "*.md" | wc -l | tr -d ' ')
|
|
349
|
+
|
|
341
350
|
# ── Install ───────────────────────────────────────────────────────────────────
|
|
342
351
|
echo -e "${BOLD}Installing components...${RESET}"
|
|
343
352
|
echo ""
|
|
344
353
|
|
|
345
354
|
case "$TARGET" in
|
|
346
355
|
claude-home)
|
|
347
|
-
install_dir "$SCRIPT_DIR/agents" "$AGENTS_DEST" "Agents (
|
|
348
|
-
install_dir "$SCRIPT_DIR/skills" "$SKILLS_DEST" "Skills (
|
|
349
|
-
install_dir "$SCRIPT_DIR/commands" "$COMMANDS_DEST" "Commands (
|
|
356
|
+
install_dir "$SCRIPT_DIR/agents" "$AGENTS_DEST" "Agents ($AGENT_COUNT)"
|
|
357
|
+
install_dir "$SCRIPT_DIR/skills" "$SKILLS_DEST" "Skills ($SKILL_COUNT)"
|
|
358
|
+
install_dir "$SCRIPT_DIR/commands" "$COMMANDS_DEST" "Commands ($CMD_COUNT)"
|
|
350
359
|
install_hooks "$HOOKS_DEST"
|
|
351
360
|
# Rules: install common + selected languages
|
|
352
361
|
mkdir -p "$RULES_DEST"
|
|
@@ -369,9 +378,9 @@ case "$TARGET" in
|
|
|
369
378
|
|
|
370
379
|
antigravity)
|
|
371
380
|
# Agents → .agent/skills/
|
|
372
|
-
install_dir "$SCRIPT_DIR/agents" "$AGENTS_DEST" "Agents → skills (
|
|
381
|
+
install_dir "$SCRIPT_DIR/agents" "$AGENTS_DEST" "Agents → skills ($AGENT_COUNT)"
|
|
373
382
|
# Commands → .agent/workflows/
|
|
374
|
-
install_dir "$SCRIPT_DIR/commands" "$COMMANDS_DEST" "Commands → workflows (
|
|
383
|
+
install_dir "$SCRIPT_DIR/commands" "$COMMANDS_DEST" "Commands → workflows ($CMD_COUNT)"
|
|
375
384
|
# Rules → .agent/rules/ (flattened)
|
|
376
385
|
install_flat "$SCRIPT_DIR/rules" "$RULES_DEST" "Rules (flattened)"
|
|
377
386
|
# Kodelyth skills → .agent/rules/ (flattened — Antigravity has no skills system)
|
|
@@ -387,19 +396,19 @@ case "$TARGET" in
|
|
|
387
396
|
|
|
388
397
|
cursor-project)
|
|
389
398
|
install_flat "$SCRIPT_DIR/rules" "$RULES_DEST" "Rules (flattened)"
|
|
390
|
-
install_dir "$SCRIPT_DIR/skills" "$SKILLS_DEST" "Skills (
|
|
399
|
+
install_dir "$SCRIPT_DIR/skills" "$SKILLS_DEST" "Skills ($SKILL_COUNT)"
|
|
391
400
|
;;
|
|
392
401
|
|
|
393
402
|
codex-home)
|
|
394
|
-
install_dir "$SCRIPT_DIR/agents" "$AGENTS_DEST" "Agents (
|
|
395
|
-
install_dir "$SCRIPT_DIR/skills" "$SKILLS_DEST" "Skills (
|
|
396
|
-
install_dir "$SCRIPT_DIR/commands" "$COMMANDS_DEST" "Commands (
|
|
403
|
+
install_dir "$SCRIPT_DIR/agents" "$AGENTS_DEST" "Agents ($AGENT_COUNT)"
|
|
404
|
+
install_dir "$SCRIPT_DIR/skills" "$SKILLS_DEST" "Skills ($SKILL_COUNT)"
|
|
405
|
+
install_dir "$SCRIPT_DIR/commands" "$COMMANDS_DEST" "Commands ($CMD_COUNT)"
|
|
397
406
|
install_flat "$SCRIPT_DIR/rules" "$RULES_DEST" "Rules (flattened)"
|
|
398
407
|
;;
|
|
399
408
|
|
|
400
409
|
windsurf-project|windsurf-home)
|
|
401
|
-
install_dir "$SCRIPT_DIR/agents" "$AGENTS_DEST" "Agents (
|
|
402
|
-
install_dir "$SCRIPT_DIR/skills" "$SKILLS_DEST" "Skills (
|
|
410
|
+
install_dir "$SCRIPT_DIR/agents" "$AGENTS_DEST" "Agents ($AGENT_COUNT)"
|
|
411
|
+
install_dir "$SCRIPT_DIR/skills" "$SKILLS_DEST" "Skills ($SKILL_COUNT)"
|
|
403
412
|
install_flat "$SCRIPT_DIR/rules" "$RULES_DEST" "Rules (flattened)"
|
|
404
413
|
generate_windsurfrules "$SCRIPT_DIR/rules" "$WINDSURFRULES_DEST"
|
|
405
414
|
;;
|
|
@@ -472,10 +481,11 @@ case "$TARGET" in
|
|
|
472
481
|
echo " use kodelyth-advisor"
|
|
473
482
|
;;
|
|
474
483
|
windsurf-project|windsurf-home)
|
|
484
|
+
RULE_COUNT=$(find "$SCRIPT_DIR/rules/common" -maxdepth 1 -name "*.md" ! -name "agent-intent-routing.md" | wc -l | tr -d ' ')
|
|
475
485
|
echo -e "${BOLD} Windsurf — what to do now:${RESET}"
|
|
476
486
|
echo ""
|
|
477
487
|
echo " Open your project in Windsurf (Cascade)."
|
|
478
|
-
echo " .windsurfrules is active —
|
|
488
|
+
echo " .windsurfrules is active — $RULE_COUNT coding rules + intent routing loaded automatically."
|
|
479
489
|
echo " Agents available in .windsurf/agents/"
|
|
480
490
|
echo ""
|
|
481
491
|
echo " use kodelyth-advisor ← not sure where to start"
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kodelyth-ecc",
|
|
3
|
-
"version": "1.5.
|
|
4
|
-
"description": "Production-grade AI coding toolkit — 62 agents, 188 skills,
|
|
3
|
+
"version": "1.5.7",
|
|
4
|
+
"description": "Production-grade AI coding toolkit — 62 agents, 188 skills, 90 commands, parallel multi-agent commands, semantic intent routing, self-learning memory. Works with Claude Code, Windsurf, Cursor, Codex, Antigravity, and OpenCode.",
|
|
5
5
|
"author": "Kodelyth <github.com/sifxprime>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|