@prestyj/cli 4.3.34 → 4.3.55

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 (99) hide show
  1. package/README.md +2 -2
  2. package/dist/cli.js +248 -59
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +122 -3
  6. package/dist/config.js.map +1 -1
  7. package/dist/core/agent-session.d.ts.map +1 -1
  8. package/dist/core/agent-session.js +2 -0
  9. package/dist/core/agent-session.js.map +1 -1
  10. package/dist/core/auto-update.d.ts +8 -0
  11. package/dist/core/auto-update.d.ts.map +1 -1
  12. package/dist/core/auto-update.js +20 -2
  13. package/dist/core/auto-update.js.map +1 -1
  14. package/dist/core/compaction/compactor.d.ts.map +1 -1
  15. package/dist/core/compaction/compactor.js +4 -1
  16. package/dist/core/compaction/compactor.js.map +1 -1
  17. package/dist/core/compaction/compactor.test.js +5 -5
  18. package/dist/core/compaction/compactor.test.js.map +1 -1
  19. package/dist/core/compaction/token-estimator.d.ts.map +1 -1
  20. package/dist/core/compaction/token-estimator.js +14 -1
  21. package/dist/core/compaction/token-estimator.js.map +1 -1
  22. package/dist/core/logger.d.ts +7 -2
  23. package/dist/core/logger.d.ts.map +1 -1
  24. package/dist/core/logger.js +48 -4
  25. package/dist/core/logger.js.map +1 -1
  26. package/dist/core/model-registry.d.ts.map +1 -1
  27. package/dist/core/model-registry.js +57 -25
  28. package/dist/core/model-registry.js.map +1 -1
  29. package/dist/core/prompt-commands.d.ts.map +1 -1
  30. package/dist/core/prompt-commands.js +224 -3
  31. package/dist/core/prompt-commands.js.map +1 -1
  32. package/dist/core/skills.d.ts.map +1 -1
  33. package/dist/core/skills.js +29 -14
  34. package/dist/core/skills.js.map +1 -1
  35. package/dist/modes/agent-home-mode.js +6 -6
  36. package/dist/modes/agent-home-mode.js.map +1 -1
  37. package/dist/system-prompt.d.ts +5 -1
  38. package/dist/system-prompt.d.ts.map +1 -1
  39. package/dist/system-prompt.js +74 -104
  40. package/dist/system-prompt.js.map +1 -1
  41. package/dist/tools/edit.d.ts +2 -2
  42. package/dist/tools/edit.d.ts.map +1 -1
  43. package/dist/tools/edit.js +16 -3
  44. package/dist/tools/edit.js.map +1 -1
  45. package/dist/tools/plan-mode.test.js +20 -4
  46. package/dist/tools/plan-mode.test.js.map +1 -1
  47. package/dist/tools/prompt-hints.d.ts +10 -0
  48. package/dist/tools/prompt-hints.d.ts.map +1 -0
  49. package/dist/tools/prompt-hints.js +45 -0
  50. package/dist/tools/prompt-hints.js.map +1 -0
  51. package/dist/tools/read.d.ts.map +1 -1
  52. package/dist/tools/read.js +32 -6
  53. package/dist/tools/read.js.map +1 -1
  54. package/dist/tools/read.test.js +23 -4
  55. package/dist/tools/read.test.js.map +1 -1
  56. package/dist/tools/write.test.js +13 -1
  57. package/dist/tools/write.test.js.map +1 -1
  58. package/dist/ui/App.d.ts +6 -1
  59. package/dist/ui/App.d.ts.map +1 -1
  60. package/dist/ui/App.js +95 -24
  61. package/dist/ui/App.js.map +1 -1
  62. package/dist/ui/components/EyesOverlay.d.ts +10 -0
  63. package/dist/ui/components/EyesOverlay.d.ts.map +1 -0
  64. package/dist/ui/components/EyesOverlay.js +220 -0
  65. package/dist/ui/components/EyesOverlay.js.map +1 -0
  66. package/dist/ui/components/Footer.d.ts.map +1 -1
  67. package/dist/ui/components/Footer.js +6 -5
  68. package/dist/ui/components/Footer.js.map +1 -1
  69. package/dist/ui/components/InputArea.d.ts +4 -1
  70. package/dist/ui/components/InputArea.d.ts.map +1 -1
  71. package/dist/ui/components/InputArea.js +4 -3
  72. package/dist/ui/components/InputArea.js.map +1 -1
  73. package/dist/ui/components/ModelSelector.d.ts.map +1 -1
  74. package/dist/ui/components/ModelSelector.js +1 -1
  75. package/dist/ui/components/ModelSelector.js.map +1 -1
  76. package/dist/ui/components/PlanOverlay.d.ts.map +1 -1
  77. package/dist/ui/components/PlanOverlay.js +7 -1
  78. package/dist/ui/components/PlanOverlay.js.map +1 -1
  79. package/dist/ui/components/SelectList.d.ts +3 -1
  80. package/dist/ui/components/SelectList.d.ts.map +1 -1
  81. package/dist/ui/components/SelectList.js +15 -2
  82. package/dist/ui/components/SelectList.js.map +1 -1
  83. package/dist/ui/components/SkillsOverlay.d.ts.map +1 -1
  84. package/dist/ui/components/SkillsOverlay.js +6 -59
  85. package/dist/ui/components/SkillsOverlay.js.map +1 -1
  86. package/dist/ui/components/SlashCommandMenu.d.ts.map +1 -1
  87. package/dist/ui/components/SlashCommandMenu.js +18 -8
  88. package/dist/ui/components/SlashCommandMenu.js.map +1 -1
  89. package/dist/ui/login.js +5 -5
  90. package/dist/ui/login.js.map +1 -1
  91. package/dist/ui/utils/token-to-ansi.d.ts.map +1 -1
  92. package/dist/ui/utils/token-to-ansi.js +9 -1
  93. package/dist/ui/utils/token-to-ansi.js.map +1 -1
  94. package/dist/utils/image.d.ts +18 -1
  95. package/dist/utils/image.d.ts.map +1 -1
  96. package/dist/utils/image.js +80 -31
  97. package/dist/utils/image.js.map +1 -1
  98. package/dist/utils/session-title.js +1 -1
  99. package/package.json +9 -7
@@ -1,3 +1,5 @@
1
+ // Provider display order — mirrors `PROVIDERS` in ui/login.tsx so the
2
+ // /model selector and login selector sort models identically.
1
3
  export const MODELS = [
2
4
  // ── Anthropic ──────────────────────────────────────────
3
5
  {
@@ -30,18 +32,27 @@ export const MODELS = [
30
32
  supportsImages: true,
31
33
  costTier: "low",
32
34
  },
33
- // ── Xiaomi (MiMo) ──────────────────────────────────────
35
+ // ── OpenAI (Codex) ─────────────────────────────────────
34
36
  {
35
- id: "mimo-v2-pro",
36
- name: "MiMo-V2-Pro",
37
- provider: "xiaomi",
37
+ id: "gpt-5.5",
38
+ name: "GPT-5.5",
39
+ provider: "openai",
38
40
  contextWindow: 1_000_000,
39
- maxOutputTokens: 131_072,
41
+ maxOutputTokens: 128_000,
40
42
  supportsThinking: true,
41
- supportsImages: false,
42
- costTier: "medium",
43
+ supportsImages: true,
44
+ costTier: "high",
45
+ },
46
+ {
47
+ id: "gpt-5.5-pro",
48
+ name: "GPT-5.5 Pro",
49
+ provider: "openai",
50
+ contextWindow: 1_000_000,
51
+ maxOutputTokens: 128_000,
52
+ supportsThinking: true,
53
+ supportsImages: true,
54
+ costTier: "high",
43
55
  },
44
- // ── OpenAI (Codex) ─────────────────────────────────────
45
56
  {
46
57
  id: "gpt-5.4",
47
58
  name: "GPT-5.4",
@@ -82,7 +93,18 @@ export const MODELS = [
82
93
  supportsImages: true,
83
94
  costTier: "low",
84
95
  },
85
- // ── GLM (Z.AI) ───────────────────────────────────────────
96
+ // ── Moonshot (Kimi) ────────────────────────────────────
97
+ {
98
+ id: "kimi-k2.6",
99
+ name: "Kimi K2.6",
100
+ provider: "moonshot",
101
+ contextWindow: 262_144,
102
+ maxOutputTokens: 16_384,
103
+ supportsThinking: true,
104
+ supportsImages: true,
105
+ costTier: "medium",
106
+ },
107
+ // ── Z.AI (GLM) ─────────────────────────────────────────
86
108
  {
87
109
  id: "glm-5v-turbo",
88
110
  name: "GLM-5V-Turbo",
@@ -123,7 +145,7 @@ export const MODELS = [
123
145
  supportsImages: false,
124
146
  costTier: "low",
125
147
  },
126
- // ── MiniMax ───────────────────────────────────────────────
148
+ // ── MiniMax ────────────────────────────────────────────
127
149
  {
128
150
  id: "MiniMax-M2.7",
129
151
  name: "MiniMax M2.7",
@@ -144,28 +166,38 @@ export const MODELS = [
144
166
  supportsImages: false,
145
167
  costTier: "medium",
146
168
  },
147
- // ── OpenRouter ────────────────────────────────────────────
169
+ // ── Xiaomi (MiMo) ──────────────────────────────────────
148
170
  {
149
- id: "qwen/qwen3.6-plus",
150
- name: "Qwen3.6-Plus",
151
- provider: "openrouter",
171
+ id: "mimo-v2.5-pro",
172
+ name: "MiMo-V2.5-Pro",
173
+ provider: "xiaomi",
152
174
  contextWindow: 1_000_000,
153
- maxOutputTokens: 65_536,
175
+ maxOutputTokens: 131_072,
154
176
  supportsThinking: true,
155
177
  supportsImages: false,
156
- costTier: "medium",
178
+ costTier: "high",
157
179
  },
158
- // ── Moonshot (Kimi) ──────────────────────────────────────
159
180
  {
160
- id: "kimi-k2.5",
161
- name: "Kimi K2.5",
162
- provider: "moonshot",
163
- contextWindow: 200_000,
164
- maxOutputTokens: 16_384,
181
+ id: "mimo-v2.5",
182
+ name: "MiMo-V2.5",
183
+ provider: "xiaomi",
184
+ contextWindow: 1_000_000,
185
+ maxOutputTokens: 131_072,
165
186
  supportsThinking: true,
166
187
  supportsImages: true,
167
188
  costTier: "medium",
168
189
  },
190
+ // ── OpenRouter ─────────────────────────────────────────
191
+ {
192
+ id: "qwen/qwen3.6-plus",
193
+ name: "Qwen3.6-Plus",
194
+ provider: "openrouter",
195
+ contextWindow: 1_000_000,
196
+ maxOutputTokens: 65_536,
197
+ supportsThinking: true,
198
+ supportsImages: false,
199
+ costTier: "medium",
200
+ },
169
201
  ];
170
202
  export function getModel(id) {
171
203
  return MODELS.find((m) => m.id === id);
@@ -175,13 +207,13 @@ export function getModelsForProvider(provider) {
175
207
  }
176
208
  export function getDefaultModel(provider) {
177
209
  if (provider === "xiaomi")
178
- return MODELS.find((m) => m.id === "mimo-v2-pro");
210
+ return MODELS.find((m) => m.id === "mimo-v2.5-pro");
179
211
  if (provider === "openai")
180
- return MODELS.find((m) => m.id === "gpt-5.4");
212
+ return MODELS.find((m) => m.id === "gpt-5.5");
181
213
  if (provider === "glm")
182
214
  return MODELS.find((m) => m.id === "glm-5.1");
183
215
  if (provider === "moonshot")
184
- return MODELS.find((m) => m.id === "kimi-k2.5");
216
+ return MODELS.find((m) => m.id === "kimi-k2.6");
185
217
  if (provider === "minimax")
186
218
  return MODELS.find((m) => m.id === "MiniMax-M2.7");
187
219
  if (provider === "openrouter")
@@ -1 +1 @@
1
- {"version":3,"file":"model-registry.js","sourceRoot":"","sources":["../../src/core/model-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-registry.js","sourceRoot":"","sources":["../../src/core/model-registry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-commands.d.ts","sourceRoot":"","sources":["../../src/core/prompt-commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,eAAe,EAAE,aAAa,EA8mB1C,CAAC;AAEF,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAExE"}
1
+ {"version":3,"file":"prompt-commands.d.ts","sourceRoot":"","sources":["../../src/core/prompt-commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,eAAe,EAAE,aAAa,EAy0B1C,CAAC;AAEF,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAExE"}
@@ -214,7 +214,13 @@ Create a concise tree structure showing key directories and files with brief des
214
214
 
215
215
  Create CLAUDE.md with: project description, project structure tree, organization rules (one file per component, single responsibility), and zero-tolerance code quality checks with the exact commands for this project.
216
216
 
217
- Keep total file under 100 lines. If updating, preserve any custom sections the user added.`,
217
+ Keep total file under 100 lines. If updating, preserve any custom sections the user added.
218
+
219
+ ## Step 6: Restart Notice
220
+
221
+ End your reply with this exact notice so the user doesn't miss it:
222
+
223
+ > ⚠️ CLAUDE.md was created/updated. ezcoder loads it at startup, so **exit and restart ezcoder** (\`/quit\` then run \`ezcoder\` again) before continuing. Without a restart, I won't see the new context.`,
218
224
  },
219
225
  {
220
226
  name: "setup-lint",
@@ -466,11 +472,127 @@ Replace all placeholders with the actual commands for the detected project type
466
472
  ## Step 3: Confirm
467
473
 
468
474
  Report that /update is now available with dependency updates, security audits, and deprecation fixes.`,
475
+ },
476
+ {
477
+ name: "setup-eyes",
478
+ aliases: [],
479
+ description: "Set up project perception probes and document them",
480
+ prompt: `# Eyes: Set Up or Expand Project Perception
481
+
482
+ Build the perception probes this project needs and document them in CLAUDE.md so any future agent can use them. The \`ezcoder eyes\` CLI does the mechanical work (detect, install, verify); your job is **judgment** (which capabilities matter for THIS project) and **prose** (the project-specific triggers in CLAUDE.md). Re-run this command anytime to add or fix probes.
483
+
484
+ ## Steps
485
+
486
+ 1. \`ezcoder eyes list\` — see what's already installed/verified. **Resume**, don't restart. Skip verified probes; re-run failed ones.
487
+ 2. \`ezcoder eyes detect\` — emits JSON of \`{capability: {candidates, primary}}\` for this project.
488
+ 3. **Pick 3–8 capabilities to install this run.** Heuristics:
489
+ - Universal: \`http\` for any API/backend, \`runtime_logs\` for anything with a server.
490
+ - UI: \`visual\` — for multi-stack projects (e.g. React Native), install all primary candidates with distinct names: \`install visual --impl playwright --as visual-web\`, \`install visual --impl adb --as visual-android\`, \`install visual --impl simctl --as visual-ios\`.
491
+ - Backend with email/webhooks: \`capture_email\`, \`capture_webhook\`.
492
+ - **Always defer** opt-ins: \`load\`, \`chaos\`, \`remote\`, \`apm\` — unless the user explicitly asked.
493
+ 4. For each pick: \`ezcoder eyes install <cap> [--impl <name>] [--as <name>]\`. On failure: retry once, then mark and continue — don't abort the whole run.
494
+ 5. \`ezcoder eyes verify\` — runs every installed probe's self-test. Some failures (\`adb\` no device, \`simctl\` no booted simulator) are expected; they get recorded.
495
+ 6. **Write/update the \`## Eyes\` section in CLAUDE.md** (create CLAUDE.md if missing; do NOT clobber other sections). Use the template below. The triggers are the load-bearing piece — make them project-specific and actionable.
496
+ 7. **Report**: list verified ✓ / failed ✗ / deferred. End with the restart notice.
497
+
498
+ ## CLAUDE.md \`## Eyes\` template
499
+
500
+ \`\`\`markdown
501
+ ## Eyes
502
+
503
+ Perception probes live in \`.ezcoder/eyes/\`. All headless. Artifacts → \`.ezcoder/eyes/out/\` (gitignored). Invoke probes yourself; don't ask the user to verify what you can verify.
504
+
505
+ ### Available probes
506
+
507
+ | Need | Run | Then |
508
+ |---|---|---|
509
+ | <one-line need> | \`.ezcoder/eyes/<id>.sh <args>\` | <how to consume the output> |
510
+ | ... | ... | ... |
511
+
512
+ ### When to use these eyes (automatically, without being asked)
513
+
514
+ Reach for probes ON YOUR OWN INITIATIVE when any of these apply:
515
+
516
+ - <project-specific trigger 1, e.g. "After editing any \`.tsx\` file under \`src/components/\`, screenshot the affected page with \`.ezcoder/eyes/visual.sh http://localhost:3000/<path>\`.">
517
+ - <trigger 2, e.g. "After adding/modifying a route under \`src/routes/\`, hit it with \`.ezcoder/eyes/http.sh\` and confirm the response shape.">
518
+ - <trigger 3>
519
+
520
+ If a probe fails or returns unexpected results, investigate the artifact directly before assuming the probe itself is broken.
521
+
522
+ ### When NOT to use
523
+
524
+ - Docs-only changes, comments, formatting.
525
+ - Refactors covered by tests.
526
+ - Dev server / simulator / sink isn't up AND the task doesn't require runtime verification.
527
+ - Same probe already ran this turn on the same artifact — reuse the output.
528
+
529
+ ### When to escalate a capability gap (the self-improvement loop)
530
+
531
+ If you're about to **guess**, **skip verification**, or **hand-wave** about something a better probe would show you — STOP and surface the tradeoff inline. Phrasing like:
532
+
533
+ > "I tried screenshotting but the failure is a JS error I can only see in the browser console — and there's no \`browser_console\` probe. Two paths: (a) ~3 min to add it, then I can diagnose properly. (b) Workaround: I'd guess from the DOM state. Your call?"
534
+
535
+ Wait for the user's choice. **Don't escalate more than once per request** — if the user picked the workaround, don't re-ask in the same turn.
536
+
537
+ For minor friction (worked around it but wished it were better), don't interrupt — log it for later review:
538
+ - \`ezcoder eyes log rough "<reason>" [--probe <name>]\` — minor friction, you handled it
539
+ - \`ezcoder eyes log wish "<gap>"\` — capability you wished existed
540
+ - \`ezcoder eyes log blocked "<reason>"\` — call this AFTER the user approves an inline-escalation fix, for the audit trail
541
+
542
+ These accumulate quietly. The user reviews them periodically. Open signals will appear in your context on future turns until they're acked.
543
+ \`\`\`
544
+
545
+ ## Trigger writing rules
546
+
547
+ The "When to use" triggers are project-specific and the load-bearing piece — without them the agent has probes but no instinct to use them. Rules:
548
+ - For each verified probe, write at least one trigger that names a real **file pattern** or **task type** the agent will recognize ("after editing \`*.tsx\` under \`src/ui/\`", not "after UI changes").
549
+ - Be **actionable** ("screenshot the page", "hit the endpoint") not **vague** ("verify it works").
550
+ - Match density to the project: a UI-heavy app warrants strong visual triggers; a pure backend library does not.
551
+
552
+ ## Restart notice
553
+
554
+ End your report with:
555
+
556
+ > ⚠ CLAUDE.md was updated. ezcoder loads CLAUDE.md at startup, so **exit and restart ezcoder** (\`/quit\` then \`ezcoder\` again) before asking me to use these probes. Without a restart, I won't see the new instructions in my context.`,
557
+ },
558
+ {
559
+ name: "eyes-improve",
560
+ aliases: [],
561
+ description: "Triage eyes signals and apply approved probe fixes",
562
+ prompt: `# Eyes Improve: Triage Accumulated Signals
563
+
564
+ Read the open signals in \`.ezcoder/eyes/journal.jsonl\`, group related ones, propose concrete fixes, and apply what the user approves. This isn't unbounded refactoring — it's incremental probe improvement driven by real use.
565
+
566
+ ## Steps
567
+
568
+ 1. \`ezcoder eyes log list --status open\` — if zero entries, say "nothing to triage" and stop.
569
+ 2. **Group** signals by likely fix:
570
+ - Multiple \`rough\` entries naming the same probe / same frustration → one patch to that probe.
571
+ - \`wish\` entries naming a capability not installed → one \`ezcoder eyes install <cap>\` proposal.
572
+ - \`blocked\` entries are historical (user already resolved inline) → ack them, no new work.
573
+ 3. **Cap at 5 proposals this run.** If more would apply, mention them and stop — they'll resurface next run.
574
+ 4. For each group, propose ONE concrete change:
575
+ - **Probe tweak**: read \`.ezcoder/eyes/<name>.sh\`, show a diff, explain what it fixes.
576
+ - **New probe**: \`ezcoder eyes install <cap>\` with a one-line justification.
577
+ - **New/updated trigger**: bullet added under \`## Eyes → When to use\` in CLAUDE.md.
578
+ 5. Present all proposals as a numbered list with diffs inline. Ask: **"Accept which? Reply with numbers (e.g. '1, 3') or 'none'."**
579
+ 6. On user reply:
580
+ - For accepted: apply the change. Then \`ezcoder eyes log ack <id>\` for every journal entry the proposal covers.
581
+ - For unmentioned / rejected: \`ezcoder eyes log defer <id>\` so they stop appearing in context every turn. The user can resurrect deferred entries later.
582
+ 7. **Report**: applied changes (one line each), entries acked, entries deferred.
583
+
584
+ ## Rules
585
+
586
+ - **No fishing.** Only act on entries already in the journal. Don't scan the repo for hypothetical gaps.
587
+ - **No scope creep.** "Add a \`--wait-for-selector\` flag to the visual probe" is in scope. "Rewrite the probe in TypeScript" is not.
588
+ - **Preserve user edits.** If \`.ezcoder/eyes/<name>.sh\` has diverged from the shipped impl (user hand-edited), point this out and ask before overwriting.
589
+ - **Be honest about tradeoffs.** If a proposed fix might break existing invocations, say so in the proposal.
590
+ - **Decline when appropriate.** If open signals are all vague or low-value, say so and defer them — don't manufacture fixes.`,
469
591
  },
470
592
  {
471
593
  name: "simplify",
472
594
  aliases: [],
473
- description: "Review changed code for reuse, quality, and efficiency, then fix any issues found",
595
+ description: "Review changed code and fix issues found",
474
596
  prompt: `# Simplify: Code Review and Cleanup
475
597
 
476
598
  Review all changed files for reuse, quality, and efficiency. Fix any issues found.
@@ -524,7 +646,7 @@ When done, briefly summarize what was fixed (or confirm the code was already cle
524
646
  {
525
647
  name: "batch",
526
648
  aliases: [],
527
- description: "Research and plan a large-scale change, then execute it in parallel across branch-isolated workers that each open a PR",
649
+ description: "Plan a large change, execute in parallel PRs",
528
650
  prompt: `# Batch: Parallel Work Orchestration
529
651
 
530
652
  You are orchestrating a large, parallelizable change across this codebase.
@@ -622,6 +744,105 @@ Style preferences and subjective improvements are not valid findings. Only repor
622
744
 
623
745
  If the code aligns well with real-world patterns, say so. That's a good outcome.`,
624
746
  },
747
+ {
748
+ name: "setup-skills",
749
+ aliases: [],
750
+ description: "Audit project, recommend skills ranked by impact",
751
+ prompt: `# Skills Audit: Find useful skills for this project
752
+
753
+ Analyze this project and recommend skills from the open ecosystem that would make **working on this project more efficient, easier, and safer**. That is the goal, full stop. Every recommendation must pass the test: does this skill save real time, lower real cognitive load, or prevent real mistakes for someone working on THIS project, repeatedly?
754
+
755
+ Ranked by real impact, not volume.
756
+
757
+ This project could be anything — a web app, a CLI, a mobile app, a game, firmware, a data pipeline, a library, a scientific tool. Do not assume a stack. Let the codebase tell you what it is, then decide what to look for.
758
+
759
+ ## Phase 1: Understand what this project is
760
+
761
+ Read just enough to know what kind of project this is. Look at whichever signals actually apply:
762
+
763
+ - Build / manifest files: \`package.json\`, \`pyproject.toml\`, \`Cargo.toml\`, \`go.mod\`, \`pubspec.yaml\`, \`Podfile\`, Xcode project, Gradle build, \`*.csproj\`, \`CMakeLists.txt\`, Unity/Unreal project files, Makefile — whatever exists.
764
+ - Any README, CLAUDE.md, or AGENTS.md.
765
+ - Top-level directory layout and obvious entry points.
766
+ - Any CI config, lockfile, or config directory that hints at workflow.
767
+
768
+ **Do NOT read source code yet.** You need only a coarse answer to: what kind of project is this, what platform/stack/language, what stage (greenfield vs mature), and what does the surrounding workflow look like (build, test, release, distribute, deploy — whatever applies for THIS project type).
769
+
770
+ ## Phase 2: Decide which domains to investigate
771
+
772
+ Based on Phase 1, pick 4–6 domain slices that represent the **recurring work someone actually does on this project** — not abstract "areas of the codebase," but the real activities that eat time, attention, or trust. Do not use a fixed template. The right domains for a Rust CLI are different from an iOS app, a Unity game, a Django backend, a Kubernetes operator, or an ML notebook.
773
+
774
+ Illustrative only (not prescriptive):
775
+
776
+ - Web app → shipping features, API changes, handling data safely, deploys
777
+ - Mobile app → building screens, store releases, platform quirks, crash & accessibility triage
778
+ - CLI tool → adding commands, packaging & distribution, user-facing UX, error handling
779
+ - Game → adding content, platform ports, perf passes, build pipeline
780
+ - Library → designing public APIs, cutting releases, downstream compatibility, docs/examples
781
+ - Data / ML → running experiments, pipeline orchestration, reproducibility, serving models
782
+ - Embedded → adding peripherals, size/memory passes, flashing, hardware bring-up
783
+
784
+ **Announce your chosen domains to the user in one line before spawning agents**, so they can see what you're looking at (e.g. \`Domains: adding content, platform ports, perf passes, build pipeline\`).
785
+
786
+ ## Phase 3: Parallel sweep
787
+
788
+ Spawn one sub-agent per domain you chose, in parallel using the subagent tool (call it N times in a single response, one task per domain). Each explores its assigned domain and returns skill-worthy opportunities.
789
+
790
+ **Skill-worthy means**: a recurring activity someone will do on THIS project — shipping, reviewing, migrating, debugging, onboarding, whatever applies — where a reusable instruction set would make it **faster** (efficient), **lower-effort** (easier), or **less likely to break something** (safer). The test is: will this skill save real time, reduce real cognitive load, or prevent real mistakes, repeatedly, on this project? If no, drop it. A domain returning zero candidates is a valid outcome.
791
+
792
+ Each sub-agent must return candidates in this exact shape, nothing else:
793
+
794
+ \`\`\`
795
+ [domain] — candidate title
796
+ Why: one sentence on the real friction observed in THIS project
797
+ Search terms: 2–3 keywords the parent should feed to find-skills
798
+ \`\`\`
799
+
800
+ Don't invent. Don't pad.
801
+
802
+ ## Phase 4: Ecosystem search
803
+
804
+ After all sub-agents complete, use the **skill** tool to invoke the \`find-skills\` skill. Feed it the aggregated candidate list with search terms. Let find-skills drive discovery across skills.sh, vercel-labs/agent-skills, and anthropics/skills.
805
+
806
+ For each candidate, record the best 0–1 ecosystem match: skill name, source repo URL. If no fit exists, record "no match". **Do NOT install anything yet.**
807
+
808
+ ## Phase 5: Prioritized recommendation
809
+
810
+ Rank every candidate that returned a real match by **crucial factor** — a 0–100% score combining:
811
+
812
+ - **Frequency** — how often someone will do this work on this project
813
+ - **Lift** — how much the skill makes it faster (efficient), lower-effort (easier), or safer (fewer mistakes, broken builds, bad releases) per hit
814
+ - **Fit** — how well the ecosystem match actually matches this project
815
+
816
+ Present highest first, in this exact format:
817
+
818
+ \`\`\`
819
+ # Skills Audit
820
+
821
+ 1. <skill-name> — 92%
822
+ Benefit: <one sentence on what it does for this project>
823
+ Source: <repo URL>
824
+ Scope: project
825
+
826
+ 2. <skill-name> — 78%
827
+ Benefit: …
828
+ Source: …
829
+ Scope: project
830
+ \`\`\`
831
+
832
+ Cap the list at 8. If you'd list more, you're padding. Default scope is \`project\` per find-skills' rules; only mark \`global\` when the skill is genuinely cross-cutting.
833
+
834
+ If strong candidates had no ecosystem match, list them at the bottom:
835
+
836
+ \`\`\`
837
+ ## Gaps worth authoring
838
+
839
+ - <candidate title> — <why it matters for this project> — consider scaffolding a custom SKILL.md
840
+ \`\`\`
841
+
842
+ ## Phase 6: Wait for the user
843
+
844
+ After presenting the list, ask which (if any) to install. Install nothing without explicit confirmation. Once confirmed, hand off to find-skills to perform the actual install.`,
845
+ },
625
846
  ];
626
847
  /** Look up a prompt command by name or alias */
627
848
  export function getPromptCommand(name) {
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-commands.js","sourceRoot":"","sources":["../../src/core/prompt-commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,2CAA2C;QACxD,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uFAuC2E;KACpF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,6CAA6C;QAC1D,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8FAiDkF;KAC3F;IACD;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,yCAAyC;QACtD,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oDA6DwC;KACjD;IACD;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,+CAA+C;QAC5D,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2FAwC+E;KACxF;IACD;QACE,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,sDAAsD;QACnE,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8EA8DkE;KAC3E;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,gDAAgD;QAC7D,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2FA2C+E;KACxF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,6CAA6C;QAC1D,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yFA4D6E;KACtF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,oDAAoD;QACjE,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sGA8D0F;KACnG;IACD;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,EAAE;QACX,WAAW,EACT,mFAAmF;QACrF,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qFAgDyE;KAClF;IACD;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,EAAE;QACX,WAAW,EACT,wHAAwH;QAC1H,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mHA0EuG;KAChH;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,8DAA8D;QAC3E,MAAM,EAAE;;;;;;;;;;;;;;;iFAeqE;KAC9E;CACF,CAAC;AAEF,gDAAgD;AAChD,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACxF,CAAC"}
1
+ {"version":3,"file":"prompt-commands.js","sourceRoot":"","sources":["../../src/core/prompt-commands.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAenB;AA+BD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAwBjE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAY7D"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAenB;AA6CD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAwBjE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAY7D"}
@@ -18,27 +18,42 @@ export async function discoverSkills(options) {
18
18
  }
19
19
  async function loadSkillsFromDir(dir, source) {
20
20
  const skills = [];
21
- let files;
21
+ let dirents;
22
22
  try {
23
- files = await fs.readdir(dir);
23
+ dirents = await fs.readdir(dir, { withFileTypes: true });
24
24
  }
25
25
  catch {
26
26
  return skills;
27
27
  }
28
- for (const file of files) {
29
- if (!file.endsWith(".md"))
30
- continue;
31
- const filePath = path.join(dir, file);
32
- try {
33
- const content = await fs.readFile(filePath, "utf-8");
34
- const skill = parseSkillFile(content, source);
35
- if (!skill.name) {
36
- skill.name = path.basename(file, ".md");
28
+ for (const entry of dirents) {
29
+ const entryPath = path.join(dir, entry.name);
30
+ // Flat layout: ~/.ezcoder/skills/foo.md
31
+ if (entry.isFile() && entry.name.endsWith(".md")) {
32
+ try {
33
+ const content = await fs.readFile(entryPath, "utf-8");
34
+ const skill = parseSkillFile(content, source);
35
+ if (!skill.name)
36
+ skill.name = path.basename(entry.name, ".md");
37
+ skills.push(skill);
38
+ }
39
+ catch {
40
+ // Skip unreadable files
37
41
  }
38
- skills.push(skill);
42
+ continue;
39
43
  }
40
- catch {
41
- // Skip unreadable files
44
+ // Directory layout (skills.sh ecosystem): ~/.ezcoder/skills/foo/SKILL.md
45
+ if (entry.isDirectory()) {
46
+ const skillFile = path.join(entryPath, "SKILL.md");
47
+ try {
48
+ const content = await fs.readFile(skillFile, "utf-8");
49
+ const skill = parseSkillFile(content, source);
50
+ if (!skill.name)
51
+ skill.name = entry.name;
52
+ skills.push(skill);
53
+ }
54
+ catch {
55
+ // No SKILL.md — skip
56
+ }
42
57
  }
43
58
  }
44
59
  return skills;
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"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"}
@@ -67,7 +67,7 @@ export async function runAgentHomeMode(options) {
67
67
  token: options.agentHome.token,
68
68
  agent: {
69
69
  id: "ezcoder",
70
- name: "GG Coder",
70
+ name: "EZ Coder",
71
71
  description: `AI coding agent — ${options.model}`,
72
72
  },
73
73
  });
@@ -152,7 +152,7 @@ export async function runAgentHomeMode(options) {
152
152
  const currentModel = state?.session.getState().model ?? options.model;
153
153
  const modelInfo = MODELS.find((m) => m.id === currentModel);
154
154
  let text = "";
155
- text += `**GG Coder**\n`;
155
+ text += `**EZ Coder**\n`;
156
156
  text += `Project: **${path.basename(currentCwd)}** \u00b7 Model: **${modelInfo?.name ?? currentModel}**\n\n`;
157
157
  text += `**Commands**\n`;
158
158
  text += `\`/m\` \u2014 Switch model\n`;
@@ -382,7 +382,7 @@ export async function runAgentHomeMode(options) {
382
382
  // ── Forward to agent loop ────────────────────────────
383
383
  const state = await getOrCreateSession(targetSessionId);
384
384
  if (state.isProcessing) {
385
- stream.error("GG Coder is still processing a previous message. Please wait.");
385
+ stream.error("EZ Coder is still processing a previous message. Please wait.");
386
386
  return;
387
387
  }
388
388
  state.isProcessing = true;
@@ -500,17 +500,17 @@ export async function runAgentHomeMode(options) {
500
500
  const GAP = " ";
501
501
  console.log();
502
502
  console.log(` ${gradientText(LOGO[0])}${GAP}` +
503
- chalk.hex("#60a5fa").bold("GG Coder") +
503
+ chalk.hex("#60a5fa").bold("EZ Coder") +
504
504
  chalk.hex("#6b7280")(` v${options.version}`) +
505
505
  chalk.hex("#6b7280")(" \u00b7 By ") +
506
- chalk.white.bold("Ken Kai"));
506
+ chalk.white.bold("Nolan Grout"));
507
507
  console.log(` ${gradientText(LOGO[1])}${GAP}` + chalk.hex("#a78bfa")(modelName));
508
508
  console.log(` ${gradientText(LOGO[2])}${GAP}` + chalk.hex("#6b7280")(displayPath));
509
509
  console.log();
510
510
  console.log(chalk.hex("#6b7280")(" Mode ") +
511
511
  chalk.hex("#a78bfa")("Agent Home") +
512
512
  chalk.hex("#6b7280")(" \u00b7 Agent ") +
513
- chalk.white("GG Coder"));
513
+ chalk.white("EZ Coder"));
514
514
  console.log();
515
515
  console.log(chalk.hex("#6b7280")(" Connecting to relay..."));
516
516
  console.log();