@soleri/forge 9.4.0 → 9.6.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 (33) hide show
  1. package/dist/compose-claude-md.js +34 -18
  2. package/dist/compose-claude-md.js.map +1 -1
  3. package/dist/domain-manager.js +1 -0
  4. package/dist/domain-manager.js.map +1 -1
  5. package/dist/knowledge-installer.js +3 -1
  6. package/dist/knowledge-installer.js.map +1 -1
  7. package/dist/scaffold-filetree.js +42 -0
  8. package/dist/scaffold-filetree.js.map +1 -1
  9. package/dist/scaffolder.js +9 -3
  10. package/dist/scaffolder.js.map +1 -1
  11. package/dist/skills/agent-issues/SKILL.md +38 -15
  12. package/dist/skills/discovery-phase/SKILL.md +6 -6
  13. package/dist/skills/finishing-a-development-branch/SKILL.md +7 -7
  14. package/dist/skills/mcp-doctor/SKILL.md +22 -16
  15. package/dist/skills/subagent-driven-development/SKILL.md +22 -20
  16. package/dist/skills/using-git-worktrees/SKILL.md +9 -8
  17. package/dist/skills/yolo-mode/SKILL.md +7 -7
  18. package/dist/templates/shared-rules.js +32 -0
  19. package/dist/templates/shared-rules.js.map +1 -1
  20. package/package.json +1 -1
  21. package/src/compose-claude-md.ts +35 -18
  22. package/src/domain-manager.ts +1 -0
  23. package/src/knowledge-installer.ts +3 -1
  24. package/src/scaffold-filetree.ts +42 -0
  25. package/src/scaffolder.ts +10 -3
  26. package/src/skills/agent-issues/SKILL.md +38 -15
  27. package/src/skills/discovery-phase/SKILL.md +6 -6
  28. package/src/skills/finishing-a-development-branch/SKILL.md +7 -7
  29. package/src/skills/mcp-doctor/SKILL.md +22 -16
  30. package/src/skills/subagent-driven-development/SKILL.md +22 -20
  31. package/src/skills/using-git-worktrees/SKILL.md +9 -8
  32. package/src/skills/yolo-mode/SKILL.md +7 -7
  33. package/src/templates/shared-rules.ts +33 -0
@@ -8,7 +8,6 @@ description: >
8
8
  structured work items from conversation context.
9
9
  ---
10
10
 
11
-
12
11
  # Agent-Optimized Issue Creation
13
12
 
14
13
  Create GitHub issues that AI agents can parse, execute, and verify without ambiguity. Every issue is a self-contained work order — an agent reading it has everything needed to start, execute, and prove completion.
@@ -33,32 +32,40 @@ An agent cannot act on "improve avatar handling." It can act on: "Add PNG upload
33
32
 
34
33
  ```markdown
35
34
  # Objective
35
+
36
36
  <one sentence: what's broken and what "fixed" looks like>
37
37
 
38
38
  ## Type: bug
39
+
39
40
  ## Component: <package or module name>
41
+
40
42
  ## Priority: P0 | P1 | P2 | P3
41
43
 
42
44
  ## Context
45
+
43
46
  - Impact: <who/what is affected>
44
47
  - Related: <links to issues, PRs, vault entries>
45
48
  - First seen: <date or commit>
46
49
 
47
50
  ## Steps to Reproduce
51
+
48
52
  1. <exact command or action>
49
53
  2. <exact command or action>
50
54
  3. Observe: <what happens>
51
55
 
52
56
  ## Expected vs Actual
53
- | | Behavior |
54
- |--|----------|
57
+
58
+ | | Behavior |
59
+ | ------------ | ------------------ |
55
60
  | **Expected** | <correct behavior> |
56
- | **Actual** | <broken behavior> |
61
+ | **Actual** | <broken behavior> |
57
62
 
58
63
  ## Error Output
59
64
  ```
65
+
60
66
  <paste exact error, stack trace, or log output>
61
- ```
67
+
68
+ ````
62
69
 
63
70
  ## Root Cause (if known)
64
71
  - File: `path/to/file.ts` — `functionName()` or line reference
@@ -85,8 +92,9 @@ An agent cannot act on "improve avatar handling." It can act on: "Add PNG upload
85
92
  ```bash
86
93
  <exact test command>
87
94
  <exact build/lint command>
88
- ```
89
- ```
95
+ ````
96
+
97
+ ````
90
98
 
91
99
  ### Feature
92
100
 
@@ -132,14 +140,16 @@ An agent cannot act on "improve avatar handling." It can act on: "Add PNG upload
132
140
  ```bash
133
141
  <exact test command>
134
142
  <exact build command>
135
- ```
143
+ ````
136
144
 
137
145
  ## Definition of Done
146
+
138
147
  - [ ] Acceptance criteria satisfied
139
148
  - [ ] `npm test` passes
140
149
  - [ ] `npm run typecheck` passes
141
150
  - [ ] Changes scoped to "In Scope" only
142
- ```
151
+
152
+ ````
143
153
 
144
154
  ### Milestone
145
155
 
@@ -165,16 +175,16 @@ An agent cannot act on "improve avatar handling." It can act on: "Add PNG upload
165
175
  - [ ] All sub-issues closed
166
176
  - [ ] Integration test passes end-to-end
167
177
  - [ ] <milestone-level verification>
168
- ```
178
+ ````
169
179
 
170
180
  ## Field Guide
171
181
 
172
182
  ### Writing Good Objectives
173
183
 
174
- | Bad | Good |
175
- |-----|------|
176
- | "Fix the login" | "Login returns 401 instead of session token when OAuth callback has valid code" |
177
- | "Add dark mode" | "Add `prefers-color-scheme` media query support to all semantic color tokens" |
184
+ | Bad | Good |
185
+ | --------------------- | ------------------------------------------------------------------------------- |
186
+ | "Fix the login" | "Login returns 401 instead of session token when OAuth callback has valid code" |
187
+ | "Add dark mode" | "Add `prefers-color-scheme` media query support to all semantic color tokens" |
178
188
  | "Improve performance" | "Reduce cold-start vault search from 800ms to <200ms by lazy-loading FTS index" |
179
189
 
180
190
  ### Writing Good Acceptance Criteria
@@ -182,9 +192,11 @@ An agent cannot act on "improve avatar handling." It can act on: "Add PNG upload
182
192
  Use Given/When/Then for behavioral criteria. Use plain checkboxes for structural criteria.
183
193
 
184
194
  **Behavioral:**
195
+
185
196
  - [ ] Given a user with valid OAuth code, when POST /auth/callback, then returns 200 with session token
186
197
 
187
198
  **Structural:**
199
+
188
200
  - [ ] Unit test covers happy path + error case
189
201
  - [ ] No new `any` types introduced
190
202
  - [ ] Public API documented in JSDoc
@@ -192,6 +204,7 @@ Use Given/When/Then for behavioral criteria. Use plain checkboxes for structural
192
204
  ### Writing Good Code Locations
193
205
 
194
206
  Always include:
207
+
195
208
  1. **File path** — repo-root relative
196
209
  2. **Anchor** — function name, class name, route, or config key
197
210
  3. **Context** — what the agent should look at there
@@ -228,27 +241,36 @@ When creating issues from a plan, the plan is the source of truth — GitHub iss
228
241
 
229
242
  ### Plan-Sourced Task Template
230
243
 
231
- ```markdown
244
+ ````markdown
232
245
  # Objective
246
+
233
247
  <one sentence: what this task delivers>
234
248
 
235
249
  ## Plan: `<plan-id>` | Task <N> of <total>
250
+
236
251
  ## Parent: #<epic-issue-number>
252
+
237
253
  ## Complexity: Low | Medium | High
254
+
238
255
  ## Depends on: <task dependencies or "nothing">
239
256
 
240
257
  ## Code Locations
258
+
241
259
  - `path/to/file.ts` — `symbolOrFunction`
242
260
 
243
261
  ## Acceptance Criteria
262
+
244
263
  - [ ] <testable outcome>
245
264
  - [ ] <testable outcome>
246
265
  - [ ] Tests pass
247
266
 
248
267
  ## Verification
268
+
249
269
  ```bash
250
270
  <exact command>
251
271
  ```
272
+ ````
273
+
252
274
  ```
253
275
 
254
276
  ### Rules for Plan-Sourced Issues
@@ -266,3 +288,4 @@ Always apply at least:
266
288
  - Type: `bug`, `feature`, `refactor`, `chore`
267
289
  - Priority: `P0`, `P1`, `P2`, `P3` (if using priority labels)
268
290
  - Component: package or module name (if using component labels)
291
+ ```
@@ -30,13 +30,13 @@ Do NOT create a plan, write code, or take any implementation action until the di
30
30
 
31
31
  For each option:
32
32
 
33
- | Field | Content |
34
- | ----- | ------- |
33
+ | Field | Content |
34
+ | ------------ | -------------------- |
35
35
  | **Approach** | One-sentence summary |
36
- | **Pros** | What it gives us |
37
- | **Cons** | What it costs |
38
- | **Risk** | What could go wrong |
39
- | **Effort** | S / M / L |
36
+ | **Pros** | What it gives us |
37
+ | **Cons** | What it costs |
38
+ | **Risk** | What could go wrong |
39
+ | **Effort** | S / M / L |
40
40
 
41
41
  ## After Discovery
42
42
 
@@ -33,16 +33,16 @@ Verify no uncommitted changes: `git status` should be clean. Commit or stash bef
33
33
  - **Reviewers**: add if the user specifies or the repo has CODEOWNERS
34
34
  - **Labels/milestone**: add if relevant
35
35
 
36
- Keep the description focused on *why* the change exists, not a file-by-file diff recap.
36
+ Keep the description focused on _why_ the change exists, not a file-by-file diff recap.
37
37
 
38
38
  ## Step 3: Squash vs Merge Commit
39
39
 
40
- | Signal | Strategy | Rationale |
41
- |--------|----------|-----------|
42
- | Many WIP/fixup commits | **Squash** | Clean history, one logical change |
43
- | Each commit is a meaningful unit | **Merge commit** | Preserves granular history |
44
- | Single commit on branch | Either | No difference |
45
- | Team convention exists | **Follow it** | Consistency wins |
40
+ | Signal | Strategy | Rationale |
41
+ | -------------------------------- | ---------------- | --------------------------------- |
42
+ | Many WIP/fixup commits | **Squash** | Clean history, one logical change |
43
+ | Each commit is a meaningful unit | **Merge commit** | Preserves granular history |
44
+ | Single commit on branch | Either | No difference |
45
+ | Team convention exists | **Follow it** | Consistency wins |
46
46
 
47
47
  Default to **squash** unless the user or repo convention says otherwise.
48
48
 
@@ -19,6 +19,7 @@ cat .mcp.json
19
19
  ```
20
20
 
21
21
  For each server entry, record:
22
+
22
23
  - Server name
23
24
  - Command (`command` field)
24
25
  - Arguments (`args` field)
@@ -41,11 +42,13 @@ If the binary is missing, report it and suggest installation.
41
42
  ### 2b. Entry point exists?
42
43
 
43
44
  For `node` commands, check the script file exists:
45
+
44
46
  ```bash
45
47
  ls -la <args[0]>
46
48
  ```
47
49
 
48
50
  For `npx`/`uvx` commands, check the package resolves:
51
+
49
52
  ```bash
50
53
  npx --yes <package> --help 2>&1 | head -5
51
54
  # or
@@ -63,6 +66,7 @@ kill %1 2>/dev/null
63
66
  ```
64
67
 
65
68
  Look for:
69
+
66
70
  - Startup success messages (e.g. "Starting MCP server", "tools loaded")
67
71
  - Error messages (missing dependencies, port conflicts, config errors)
68
72
  - Crash/exit codes
@@ -80,6 +84,7 @@ If a stale process holds the port, report the PID and suggest killing it.
80
84
  ### 2e. Dependencies met?
81
85
 
82
86
  For Node.js servers, check if `node_modules` exist:
87
+
83
88
  ```bash
84
89
  ls <cwd>/node_modules/.package-lock.json 2>/dev/null
85
90
  ```
@@ -92,15 +97,15 @@ For Python (uvx) servers, the virtual env is managed by uvx — check if the pac
92
97
 
93
98
  For each issue found, apply the appropriate fix:
94
99
 
95
- | Issue | Fix |
96
- |-------|-----|
97
- | Binary not found | Suggest install command |
98
- | Entry point missing | `npm run build` or check path |
99
- | Port conflict (stale process) | `kill <PID>` (ask user first) |
100
- | Missing node_modules | `npm install` in the right directory |
101
- | Config error in .mcp.json | Show the fix, apply with user approval |
102
- | Package resolution failure | Clear cache, retry install |
103
- | Server crashes on start | Show error log, diagnose root cause |
100
+ | Issue | Fix |
101
+ | ----------------------------- | -------------------------------------- |
102
+ | Binary not found | Suggest install command |
103
+ | Entry point missing | `npm run build` or check path |
104
+ | Port conflict (stale process) | `kill <PID>` (ask user first) |
105
+ | Missing node_modules | `npm install` in the right directory |
106
+ | Config error in .mcp.json | Show the fix, apply with user approval |
107
+ | Package resolution failure | Clear cache, retry install |
108
+ | Server crashes on start | Show error log, diagnose root cause |
104
109
 
105
110
  **IMPORTANT:** Never kill processes without user confirmation. Always show the PID and process name first.
106
111
 
@@ -109,6 +114,7 @@ For each issue found, apply the appropriate fix:
109
114
  After repairs, instruct the user:
110
115
 
111
116
  > Repairs complete. Please restart MCP connections:
117
+ >
112
118
  > 1. Type `/mcp` in the prompt
113
119
  > 2. Toggle the repaired server(s) off and back on
114
120
  > 3. Verify tools appear with a ToolSearch
@@ -145,10 +151,10 @@ Present findings as a table:
145
151
 
146
152
  ## Quick Reference
147
153
 
148
- | Check | Command | What it tells you |
149
- |-------|---------|-------------------|
150
- | Binary exists | `which <cmd>` | Is the runtime installed? |
151
- | Script exists | `ls <path>` | Is the entry point built? |
152
- | Port free | `lsof -i :<port>` | Is something blocking the port? |
153
- | Deps installed | `ls node_modules` | Are npm packages present? |
154
- | Server starts | `timeout 10 <cmd>` | Does initialization succeed? |
154
+ | Check | Command | What it tells you |
155
+ | -------------- | ------------------ | ------------------------------- |
156
+ | Binary exists | `which <cmd>` | Is the runtime installed? |
157
+ | Script exists | `ls <path>` | Is the entry point built? |
158
+ | Port free | `lsof -i :<port>` | Is something blocking the port? |
159
+ | Deps installed | `ls node_modules` | Are npm packages present? |
160
+ | Server starts | `timeout 10 <cmd>` | Does initialization succeed? |
@@ -14,14 +14,14 @@ Decompose work into isolated units, dispatch subagents via the Agent tool, merge
14
14
 
15
15
  ## When to Dispatch
16
16
 
17
- | Signal | Dispatch? |
18
- |--------|-----------|
17
+ | Signal | Dispatch? |
18
+ | --------------------------------------------- | ---------------------------------------- |
19
19
  | 2+ independent tasks touching different files | Yes — no conflict risk, parallel speedup |
20
- | Risky/experimental work (spike, prototype) | Yes — isolate blast radius in a worktree |
21
- | Large refactor across unrelated modules | Yes — each module is a clean unit |
22
- | Single-file change or trivial fix | **No** — overhead exceeds benefit |
23
- | Tasks with sequential dependencies | **No** — cannot parallelize |
24
- | Tasks modifying the same file | **No** — guaranteed merge conflicts |
20
+ | Risky/experimental work (spike, prototype) | Yes — isolate blast radius in a worktree |
21
+ | Large refactor across unrelated modules | Yes — each module is a clean unit |
22
+ | Single-file change or trivial fix | **No** — overhead exceeds benefit |
23
+ | Tasks with sequential dependencies | **No** — cannot parallelize |
24
+ | Tasks modifying the same file | **No** — guaranteed merge conflicts |
25
25
 
26
26
  ## The Process
27
27
 
@@ -42,12 +42,14 @@ Launch all independent subagents in a **single message** so they run in parallel
42
42
  ### Step 3: Review and Merge
43
43
 
44
44
  For each returning subagent:
45
+
45
46
  1. **Review** — read actual file changes (do not trust self-reports alone), verify tests pass, check scope compliance
46
47
  2. **Merge** — `git merge` or `git cherry-pick` from the worktree branch, one at a time
47
48
  3. **Test** — run the full suite after each merge; only proceed if green
48
49
  4. **Conflicts** — resolve manually, re-run tests, capture as anti-pattern for future planning
49
50
 
50
51
  After all merges, capture learnings:
52
+
51
53
  ```
52
54
  YOUR_AGENT_core op:capture_quick params:{
53
55
  title: "subagent dispatch outcome",
@@ -57,21 +59,21 @@ YOUR_AGENT_core op:capture_quick params:{
57
59
 
58
60
  ## Anti-Patterns
59
61
 
60
- | Anti-Pattern | Why It Fails |
61
- |-------------|--------------|
62
- | Dispatching for a 5-line fix | Startup overhead exceeds the work |
63
- | Parallel dispatch of dependent tasks | Second agent works on stale assumptions |
64
- | Skipping worktree isolation for nearby files | Silent overwrites between agents |
65
- | Trusting self-reports without reading code | Agents miss edge cases or misunderstand scope |
66
- | Dispatching 10+ agents at once | Review bottleneck shifts to the controller |
62
+ | Anti-Pattern | Why It Fails |
63
+ | -------------------------------------------- | --------------------------------------------- |
64
+ | Dispatching for a 5-line fix | Startup overhead exceeds the work |
65
+ | Parallel dispatch of dependent tasks | Second agent works on stale assumptions |
66
+ | Skipping worktree isolation for nearby files | Silent overwrites between agents |
67
+ | Trusting self-reports without reading code | Agents miss edge cases or misunderstand scope |
68
+ | Dispatching 10+ agents at once | Review bottleneck shifts to the controller |
67
69
 
68
70
  ## Merge Strategy
69
71
 
70
- | Situation | Strategy |
71
- |-----------|----------|
72
- | Completely separate directories | Fast-forward merge, no conflicts expected |
73
- | Different files in the same package | Merge one by one, test after each |
74
- | Unexpected conflict | Resolve manually, re-run tests, capture as anti-pattern |
75
- | Subagent result fails review | Dispatch fix subagent into same worktree (max 2 retries) |
72
+ | Situation | Strategy |
73
+ | ----------------------------------- | -------------------------------------------------------- |
74
+ | Completely separate directories | Fast-forward merge, no conflicts expected |
75
+ | Different files in the same package | Merge one by one, test after each |
76
+ | Unexpected conflict | Resolve manually, re-run tests, capture as anti-pattern |
77
+ | Subagent result fails review | Dispatch fix subagent into same worktree (max 2 retries) |
76
78
 
77
79
  **Related skills:** parallel-execute, executing-plans, verification-before-completion
@@ -60,6 +60,7 @@ git worktree list # confirm removal
60
60
  ```
61
61
 
62
62
  ## Anti-Patterns
63
+
63
64
  - Creating worktrees for single-file changes or one-liner fixes
64
65
  - Leaving orphan worktrees after tasks complete — always clean up
65
66
  - Deleting the worktree directory manually instead of `git worktree remove`
@@ -68,13 +69,13 @@ git worktree list # confirm removal
68
69
 
69
70
  ## Quick Reference
70
71
 
71
- | Action | Command |
72
- | ---------------- | ------------------------------------------------ |
73
- | Create | `git worktree add ../<name> -b <branch>` |
74
- | List | `git worktree list` |
75
- | Remove | `git worktree remove ../<name>` |
76
- | Prune | `git worktree prune` |
77
- | Check unpushed | `git log origin/<branch>..<branch>` |
78
- | Claude Code | Sub-agent with `isolation: "worktree"` parameter |
72
+ | Action | Command |
73
+ | -------------- | ------------------------------------------------ |
74
+ | Create | `git worktree add ../<name> -b <branch>` |
75
+ | List | `git worktree list` |
76
+ | Remove | `git worktree remove ../<name>` |
77
+ | Prune | `git worktree prune` |
78
+ | Check unpushed | `git log origin/<branch>..<branch>` |
79
+ | Claude Code | Sub-agent with `isolation: "worktree"` parameter |
79
80
 
80
81
  **Related skills:** executing-plans, parallel-execute
@@ -69,12 +69,12 @@ YOLO mode deactivates when any of these occur:
69
69
 
70
70
  ## Quick Reference
71
71
 
72
- | Op | When to Use |
73
- | --------------------- | ------------------------------------ |
74
- | `admin_health` | Verify safety hook pack is installed |
75
- | `morph` | Activate/deactivate YOLO mode |
76
- | `orchestrate_complete`| After every task (never skip) |
77
- | `search_intelligent` | Before every decision (never skip) |
78
- | `plan_reconcile` | After execution (never skip) |
72
+ | Op | When to Use |
73
+ | ---------------------- | ------------------------------------ |
74
+ | `admin_health` | Verify safety hook pack is installed |
75
+ | `morph` | Activate/deactivate YOLO mode |
76
+ | `orchestrate_complete` | After every task (never skip) |
77
+ | `search_intelligent` | Before every decision (never skip) |
78
+ | `plan_reconcile` | After execution (never skip) |
79
79
 
80
80
  **Related skills:** executing-plans, writing-plans
@@ -407,6 +407,23 @@ const ENGINE_RULES_LINES = [
407
407
  "- Results you browse but don't act on",
408
408
  '- Duplicate feedback for the same entry in the same task',
409
409
  '',
410
+ // ─── Model Routing Guidance ─────────────────────────────
411
+ '## Model Routing Guidance',
412
+ '<!-- soleri:model-routing -->',
413
+ '',
414
+ 'Different workflow stages benefit from different model strengths. Use this as a default when multiple models are available.',
415
+ '',
416
+ '| Stage | Recommended Model | Why |',
417
+ '|-------|------------------|-----|',
418
+ '| Research / Exploration | Opus | Cross-file reasoning, broad context synthesis |',
419
+ '| Planning / Architecture | Opus | Complex tradeoff analysis, alternative evaluation |',
420
+ '| Implementation | Sonnet | Speed, cost-efficiency for focused coding |',
421
+ '| Code Review / Verification | Opus | Deep analysis, false-positive filtering |',
422
+ '| Validation Gates | Haiku | Fast, cheap pass/fail checks |',
423
+ '| Knowledge Capture | Sonnet | Structured extraction, good enough quality |',
424
+ '',
425
+ 'This is guidance, not enforcement. Use the best model available. When only one model is available, use it for all stages.',
426
+ '',
410
427
  // ─── Cross-Project Memory ────────────────────────────────
411
428
  '## Cross-Project Memory',
412
429
  '<!-- soleri:cross-project -->',
@@ -514,6 +531,21 @@ const ENGINE_RULES_LINES = [
514
531
  'A PreCompact hook calls `op:session_capture` before context compaction.',
515
532
  'Manual capture: `op:session_capture params:{ summary: "..." }`',
516
533
  '',
534
+ '### Handoff Protocol',
535
+ '',
536
+ 'Before crossing a context window boundary (`/clear`, context compaction, or switching tasks), generate a handoff document:',
537
+ '',
538
+ '1. **Before transition**: `op:handoff_generate` — produces a structured markdown document with active plan state, recent decisions, and pending tasks.',
539
+ '2. **After restart**: Reference the handoff document to restore context. It contains plan IDs, task status, decisions, and next actions.',
540
+ '',
541
+ 'Handoff documents are **ephemeral** — they are returned as markdown, not persisted to vault or memory. They are a snapshot for context transfer only.',
542
+ '',
543
+ '| Trigger | Action |',
544
+ '|---------|--------|',
545
+ '| `/clear` or manual reset | `op:handoff_generate` before clearing |',
546
+ '| Context compaction warning | `op:handoff_generate` (alongside `op:session_capture`) |',
547
+ '| Switching to a different task mid-plan | `op:handoff_generate` to bookmark state |',
548
+ '',
517
549
  // ─── Soleri CLI ─────────────────────────────────────────
518
550
  '## Soleri CLI',
519
551
  '<!-- soleri:cli -->',
@@ -1 +1 @@
1
- {"version":3,"file":"shared-rules.js","sourceRoot":"","sources":["../../src/templates/shared-rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared-rules.js","sourceRoot":"","sources":["../../src/templates/shared-rules.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soleri/forge",
3
- "version": "9.4.0",
3
+ "version": "9.6.0",
4
4
  "description": "Scaffold AI agents that learn, remember, and grow with you.",
5
5
  "keywords": [
6
6
  "agent",
@@ -56,10 +56,19 @@ export function composeClaudeMd(agentDir: string, tools?: ToolEntry[]): Composed
56
56
  // 5. Essential tools table
57
57
  sections.push(composeToolsTable(agentYaml, tools));
58
58
 
59
- // 6. Engine rules (from instructions/_engine.md)
59
+ // 6. Engine rules — NOT inlined (they are injected once into ~/.claude/CLAUDE.md
60
+ // or project CLAUDE.md via `soleri install`). Including them here would
61
+ // triple-load the rules (~8k tokens duplicated per layer).
62
+ // We emit a short reference so the agent knows rules exist.
60
63
  const enginePath = join(agentDir, 'instructions', '_engine.md');
61
64
  if (existsSync(enginePath)) {
62
- sections.push(readFileSync(enginePath, 'utf-8').trim());
65
+ sections.push(
66
+ '<!-- soleri:engine-rules-ref -->\n' +
67
+ '> **Engine rules** are loaded from the global or project-level CLAUDE.md ' +
68
+ '(injected by `soleri install`). See `instructions/_engine.md` for the full rules.\n' +
69
+ '<!-- /soleri:engine-rules-ref -->',
70
+ );
71
+ // Note: _engine.md is still tracked as a source for change detection
63
72
  sources.push(enginePath);
64
73
  }
65
74
 
@@ -304,6 +313,23 @@ function extractSkillDescription(content: string): string | null {
304
313
  return parts.length > 0 ? parts.join(' ') : null;
305
314
  }
306
315
 
316
+ /**
317
+ * Truncate a skill description to a short trigger phrase.
318
+ * Full descriptions are already loaded by Claude Code from SKILL.md files,
319
+ * so CLAUDE.md only needs enough to match intent.
320
+ */
321
+ function truncateSkillDesc(desc: string, maxLen = 80): string {
322
+ // Take up to first " — " dash separator (trigger phrase before the details)
323
+ const dashIdx = desc.indexOf(' — ');
324
+ const candidate = dashIdx > 0 ? desc.slice(0, dashIdx) : desc;
325
+ // Also try first sentence
326
+ const dotIdx = candidate.indexOf('. ');
327
+ const sentence = dotIdx > 0 ? candidate.slice(0, dotIdx) : candidate;
328
+ // Truncate to maxLen
329
+ if (sentence.length <= maxLen) return sentence;
330
+ return sentence.slice(0, maxLen - 1) + '…';
331
+ }
332
+
307
333
  function composeSkillsIndex(skillsDir: string): string | null {
308
334
  const dirs = readdirSync(skillsDir, { withFileTypes: true })
309
335
  .filter((d) => d.isDirectory())
@@ -318,7 +344,7 @@ function composeSkillsIndex(skillsDir: string): string | null {
318
344
  if (existsSync(skillPath)) {
319
345
  const content = readFileSync(skillPath, 'utf-8');
320
346
  const desc = extractSkillDescription(content) ?? dir.name;
321
- skillMap.set(dir.name, desc);
347
+ skillMap.set(dir.name, truncateSkillDesc(desc));
322
348
  }
323
349
  }
324
350
 
@@ -327,34 +353,25 @@ function composeSkillsIndex(skillsDir: string): string | null {
327
353
  const lines: string[] = [
328
354
  '## Available Skills',
329
355
  '',
330
- 'Skills are specialized workflows that activate automatically when you describe a matching task.',
331
- 'Each skill provides a structured, step-by-step approach backed by vault knowledge and brain patterns.',
356
+ 'Skills activate automatically on matching intent. Full descriptions in each SKILL.md.',
332
357
  '',
333
358
  ];
334
359
 
335
- // Group skills into categories
360
+ // Group skills into categories — compact table per category
336
361
  const categorized = new Set<string>();
337
362
 
338
363
  for (const [_key, category] of Object.entries(SKILL_CATEGORIES)) {
339
364
  const categorySkills = category.skills.filter((s) => skillMap.has(s));
340
365
  if (categorySkills.length === 0) continue;
341
366
 
342
- lines.push(`### ${category.label}`, '');
343
- for (const skill of categorySkills) {
344
- lines.push(`- **${skill}**: ${skillMap.get(skill)!}`);
345
- categorized.add(skill);
346
- }
347
- lines.push('');
367
+ lines.push(`**${category.label}:** ${categorySkills.map((s) => `\`${s}\``).join(', ')}`);
368
+ for (const s of categorySkills) categorized.add(s);
348
369
  }
349
370
 
350
- // Any uncategorized skills go into an "Other" section
371
+ // Any uncategorized skills
351
372
  const uncategorized = [...skillMap.keys()].filter((s) => !categorized.has(s)).sort();
352
373
  if (uncategorized.length > 0) {
353
- lines.push('### Other', '');
354
- for (const skill of uncategorized) {
355
- lines.push(`- **${skill}**: ${skillMap.get(skill)!}`);
356
- }
357
- lines.push('');
374
+ lines.push(`**Other:** ${uncategorized.map((s) => `\`${s}\``).join(', ')}`);
358
375
  }
359
376
 
360
377
  return lines.join('\n').trimEnd();
@@ -149,6 +149,7 @@ export async function addDomain(params: AddDomainParams): Promise<AddDomainResul
149
149
  encoding: 'utf-8',
150
150
  timeout: 60_000,
151
151
  stdio: ['pipe', 'pipe', 'pipe'],
152
+ shell: process.platform === 'win32',
152
153
  });
153
154
  } catch (err) {
154
155
  const stderr = (err as { stderr?: string }).stderr ?? '';
@@ -318,12 +318,14 @@ export async function installKnowledge(
318
318
 
319
319
  let buildOutput = '';
320
320
  try {
321
- // Using execFileSync with npx to avoid shell injection — command is hardcoded
321
+ // Using execFileSync with npx to avoid shell injection — command is hardcoded.
322
+ // shell: true is needed on Windows where npm is installed as npm.cmd.
322
323
  buildOutput = execFileSync('npm', ['run', 'build'], {
323
324
  cwd: agentPath,
324
325
  encoding: 'utf-8',
325
326
  timeout: 60_000,
326
327
  stdio: ['pipe', 'pipe', 'pipe'],
328
+ shell: process.platform === 'win32',
327
329
  });
328
330
  } catch (err) {
329
331
  const stderr = (err as { stderr?: string }).stderr ?? '';