@proxysoul/soulforge 2.13.1 → 2.14.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.
- package/README.md +157 -98
- package/dist/index.js +124218 -109347
- package/dist/workers/intelligence.worker.js +2689 -1006
- package/dist/workers/io.worker.js +367 -144
- package/package.json +7 -5
package/README.md
CHANGED
|
@@ -41,139 +41,162 @@
|
|
|
41
41
|
|
|
42
42
|
<img src="assets/separator.svg" width="100%" height="8" />
|
|
43
43
|
|
|
44
|
-
## The agent that
|
|
44
|
+
## The agent that treats code as code
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
<table>
|
|
47
|
+
<tr>
|
|
48
|
+
<td align="center" width="33%"><h3>~5 tokens</h3><sub>to change a function return type<br/>(AST edit vs ~100 lines of <code>oldString</code>)</sub></td>
|
|
49
|
+
<td align="center" width="33%"><h3>~$0</h3><sub>average compaction cost<br/>(V2 extracts as you go)</sub></td>
|
|
50
|
+
<td align="center" width="33%"><h3>34 → 5</h3><sub>messages after compaction<br/>with 0 LLM tokens spent</sub></td>
|
|
51
|
+
</tr>
|
|
52
|
+
</table>
|
|
47
53
|
|
|
48
|
-
|
|
54
|
+
Every other AI coding tool treats your codebase as text. It `grep`s, it pastes 500-line files into context, it builds `oldString`/`newString` blobs and prays the whitespace matches. Half the turn is orientation. The other half is string-matching roulette.
|
|
49
55
|
|
|
50
|
-
**
|
|
56
|
+
SoulForge treats code as code. On startup it parses your project into a **live Soul Map** — every file, symbol, import edge — ranked by PageRank and git co-change. Forge opens every turn oriented: it reads single symbols by name (not whole files), edits TS/JS through the AST (symbol kind + name, 65+ ops, zero text matching), and rewrites the rest with line-anchored edits that never drift.
|
|
57
|
+
|
|
58
|
+
**What that means in practice:**
|
|
59
|
+
|
|
60
|
+
- `ast_edit` changes a return type with `value: "Promise<User>"` — no `oldString`, no whitespace failures, no line-offset math.
|
|
61
|
+
- Reads pull one function by name, not an 800-line dump. Context stays lean.
|
|
62
|
+
- V2 compaction serializes structured state as the conversation happens — when context fills, it compacts for free.
|
|
63
|
+
- Sub-agents share a read cache, so 3 parallel explorers don't re-open the same file 3 times.
|
|
64
|
+
|
|
65
|
+
Same work, a fraction of the tokens, a fraction of the seconds.
|
|
51
66
|
|
|
52
67
|
<img src="assets/separator.svg" width="100%" height="8" />
|
|
53
68
|
|
|
54
|
-
##
|
|
69
|
+
## Not your average CLI
|
|
55
70
|
|
|
56
71
|
<table>
|
|
57
72
|
<tr>
|
|
58
73
|
<td width="50%" valign="top">
|
|
59
|
-
<h4
|
|
60
|
-
<p>
|
|
74
|
+
<h4>🧠 Live Soul Map</h4>
|
|
75
|
+
<p>SQLite graph of every file, symbol, and import — PageRank-ranked, git-co-change-aware, personalized per turn. Renders into the system prompt with <strong>blast radius</strong> tags so the agent knows which edits ripple. <a href="https://soulforge.proxysoul.com/concepts/repo-map">Learn more</a></p>
|
|
61
76
|
</td>
|
|
62
77
|
<td width="50%" valign="top">
|
|
63
|
-
<h4>🔪 Surgical reads</h4>
|
|
64
|
-
<p>
|
|
78
|
+
<h4>🔪 Surgical reads across 33 languages</h4>
|
|
79
|
+
<p>Read a single function by name. A 500-line file becomes a 20-line extraction. TypeScript, Python, Rust, Go, Java, Ruby, C/C++, Swift, Kotlin, Elixir, Zig, Solidity, and more. <a href="https://soulforge.proxysoul.com/concepts/intelligence">Learn more</a></p>
|
|
65
80
|
</td>
|
|
66
81
|
</tr>
|
|
67
82
|
<tr>
|
|
68
83
|
<td valign="top">
|
|
69
|
-
<h4>🤖
|
|
70
|
-
<p>
|
|
84
|
+
<h4>🤖 Parallel agents with shared cache</h4>
|
|
85
|
+
<p>Forge dispatches explore, code, and web-search agents in parallel. Files one reads are cached for the others — 3 agents don't re-read 3x. Real-time findings propagate between them. <a href="https://soulforge.proxysoul.com/agents/dispatch">Learn more</a></p>
|
|
71
86
|
</td>
|
|
72
87
|
<td valign="top">
|
|
73
|
-
<h4>💰
|
|
74
|
-
<p>
|
|
88
|
+
<h4>💰 Free compaction</h4>
|
|
89
|
+
<p>V2 compaction tracks structured state as the conversation happens — files touched, decisions, failures, tool results. When context fills up, serialization is instant and typically costs <strong>zero LLM tokens</strong>. <a href="https://soulforge.proxysoul.com/context/compaction">Learn more</a></p>
|
|
75
90
|
</td>
|
|
76
91
|
</tr>
|
|
77
92
|
<tr>
|
|
78
93
|
<td valign="top">
|
|
79
|
-
<h4
|
|
80
|
-
<p>LSP
|
|
94
|
+
<h4>🎯 One call, complete job</h4>
|
|
95
|
+
<p><code>rename_symbol</code> runs LSP rename, verifies zero dangling refs, reports back. <code>move_symbol</code> moves a symbol and updates every import across TS/JS, Python, and Rust. <code>project</code> auto-detects your toolchain across <strong>23 ecosystems</strong>. <a href="https://soulforge.proxysoul.com/concepts/compound-tools">Learn more</a></p>
|
|
81
96
|
</td>
|
|
82
97
|
<td valign="top">
|
|
83
|
-
<h4
|
|
84
|
-
<p><code>
|
|
98
|
+
<h4>🔬 AST-native editing</h4>
|
|
99
|
+
<p><code>ast_edit</code> addresses TS/JS symbols by name, not text. 65+ operations. Changing a return type costs <strong>~5 tokens</strong> instead of 100 lines of <code>oldString</code>. Atomic batches, auto-rollback. <a href="https://soulforge.proxysoul.com/tools/ast-edit">Learn more</a></p>
|
|
85
100
|
</td>
|
|
86
101
|
</tr>
|
|
87
102
|
<tr>
|
|
88
103
|
<td valign="top">
|
|
89
|
-
<h4
|
|
90
|
-
<p>
|
|
104
|
+
<h4>📝 Your Neovim, embedded</h4>
|
|
105
|
+
<p>Real Neovim in a PTY — your config, your plugins, your LSP servers. Agent edits route through the same editor you use. Over SSH, in tmux, wherever.</p>
|
|
91
106
|
</td>
|
|
92
107
|
<td valign="top">
|
|
93
|
-
<h4
|
|
94
|
-
<p>
|
|
108
|
+
<h4>🎚️ Mix-and-match models</h4>
|
|
109
|
+
<p>Haiku for exploration. Sonnet for code. Flash for compaction. The task router wires a different model to each job — cheap work goes to cheap models. <strong>21 providers</strong> + any OpenAI-compatible API.</p>
|
|
95
110
|
</td>
|
|
96
111
|
</tr>
|
|
97
|
-
</table>
|
|
98
|
-
|
|
99
|
-
<table>
|
|
100
112
|
<tr>
|
|
101
|
-
<td
|
|
102
|
-
<h4
|
|
103
|
-
<p>
|
|
113
|
+
<td valign="top">
|
|
114
|
+
<h4>📱 Reach your forge from anywhere</h4>
|
|
115
|
+
<p><strong>Hearth</strong> turns a running SoulForge into a remote agent. Telegram or Discord. Tap-to-approve for destructive ops, auto-redaction of secrets. Your code never leaves your host. <a href="https://soulforge.proxysoul.com/tools/hearth">Learn more</a></p>
|
|
104
116
|
</td>
|
|
105
|
-
<td
|
|
106
|
-
<h4
|
|
107
|
-
<p>
|
|
117
|
+
<td valign="top">
|
|
118
|
+
<h4>↶ Undo any turn</h4>
|
|
119
|
+
<p>Every prompt is a checkpoint. <code>Ctrl+B</code> / <code>Ctrl+F</code> walks history. Branching from any point rewrites the conversation AND restores files on disk. <a href="https://soulforge.proxysoul.com/tools/checkpoints">Learn more</a></p>
|
|
108
120
|
</td>
|
|
109
121
|
</tr>
|
|
110
122
|
<tr>
|
|
111
123
|
<td valign="top">
|
|
112
|
-
<h4
|
|
113
|
-
<p>
|
|
124
|
+
<h4>📑 Tab-aware file claims</h4>
|
|
125
|
+
<p>Up to 5 tabs per project with independent model, mode, session, and checkpoints. Tabs see each other's claimed files and active agents. Git hard-blocks during cross-tab dispatch, partial commits are impossible. <a href="https://soulforge.proxysoul.com/agents/cross-tab">Learn more</a></p>
|
|
114
126
|
</td>
|
|
115
127
|
<td valign="top">
|
|
116
|
-
<h4
|
|
117
|
-
<p>
|
|
128
|
+
<h4>🪝 Drop-in Claude Code hooks</h4>
|
|
129
|
+
<p>13 lifecycle events (PreToolUse, PostToolUse, compaction, subagents). Reads your existing <code>.claude/settings.json</code> — no rewrites. <a href="https://soulforge.proxysoul.com/tools/hooks">Learn more</a></p>
|
|
130
|
+
</td>
|
|
131
|
+
</tr>
|
|
132
|
+
<tr>
|
|
133
|
+
<td valign="top">
|
|
134
|
+
<h4>🔌 MCP-compatible</h4>
|
|
135
|
+
<p>Any <a href="https://modelcontextprotocol.io">Model Context Protocol</a> server works out of the box. stdio, HTTP, SSE. Auto-reconnect, namespaced tools. <a href="https://soulforge.proxysoul.com/tools/mcp">Learn more</a></p>
|
|
136
|
+
</td>
|
|
137
|
+
<td valign="top">
|
|
138
|
+
<h4>🧩 Skills</h4>
|
|
139
|
+
<p>Install domain-specific skills with <code>Ctrl+S</code>. Bun development, Three.js fundamentals, product marketing, whatever. Approval-gated, scoped per session.</p>
|
|
118
140
|
</td>
|
|
119
141
|
</tr>
|
|
120
142
|
</table>
|
|
121
143
|
|
|
122
144
|
<details>
|
|
123
|
-
<summary><strong>
|
|
145
|
+
<summary><strong>And a lot more</strong></summary>
|
|
124
146
|
<br/>
|
|
125
147
|
|
|
126
|
-
- **
|
|
127
|
-
- **Lock-in mode**
|
|
128
|
-
- **Inline images** pixel-perfect images and animated GIFs
|
|
129
|
-
- **24 themes** Catppuccin, Dracula, Gruvbox, Nord, Tokyo Night, and more.
|
|
130
|
-
- **
|
|
131
|
-
- **
|
|
148
|
+
- **Steering** — type while the agent works, messages inject mid-stream. [More](https://soulforge.proxysoul.com/agents/steering)
|
|
149
|
+
- **Lock-in mode** — hide narration, show only tool activity and final answer
|
|
150
|
+
- **Inline images** — pixel-perfect images and animated GIFs via Kitty graphics protocol
|
|
151
|
+
- **24 themes** — Catppuccin, Dracula, Gruvbox, Nord, Tokyo Night, Rose Pine, and more. Hot-reload custom themes. [More](https://soulforge.proxysoul.com/tools/themes)
|
|
152
|
+
- **Floating terminals** — Ghostty-powered PTYs next to the chat
|
|
153
|
+
- **Plan mode** — research, write a structured plan, you approve, then execute. [More](https://soulforge.proxysoul.com/recipes/plan-mode)
|
|
154
|
+
- **Memory** — persistent SQLite memory across sessions, scoped per project or global
|
|
155
|
+
- **Pre-commit enforcement** — `git commit` auto-runs lint + typecheck; fails block the commit
|
|
156
|
+
- **100 slash commands** — [full reference](https://soulforge.proxysoul.com/reference/commands)
|
|
132
157
|
|
|
133
158
|
</details>
|
|
134
159
|
|
|
135
160
|
<br/>
|
|
136
161
|
<img src="assets/separator.svg" width="100%" height="8" />
|
|
137
162
|
|
|
138
|
-
|
|
139
|
-
## Get started
|
|
140
|
-
|
|
141
|
-
macOS and Linux. First launch offers to install Neovim and Nerd Fonts if missing.
|
|
163
|
+
## Install
|
|
142
164
|
|
|
143
165
|
```bash
|
|
144
166
|
brew tap proxysoul/tap && brew install soulforge
|
|
145
167
|
```
|
|
146
168
|
|
|
169
|
+
macOS and Linux. Neovim and a Nerd Font auto-install on first launch.
|
|
170
|
+
|
|
147
171
|
<details>
|
|
148
172
|
<summary><strong>Other install methods</strong></summary>
|
|
149
173
|
<br/>
|
|
150
174
|
|
|
151
|
-
**Bun (global):**
|
|
152
175
|
```bash
|
|
176
|
+
# Bun (global)
|
|
153
177
|
bun install -g @proxysoul/soulforge
|
|
154
|
-
```
|
|
155
178
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
# Download from https://github.com/ProxySoul/soulforge/releases/latest
|
|
179
|
+
# Prebuilt binary
|
|
180
|
+
# download from https://github.com/ProxySoul/soulforge/releases/latest
|
|
159
181
|
tar xzf soulforge-*.tar.gz && cd soulforge-*/ && ./install.sh
|
|
160
|
-
```
|
|
161
182
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
git clone https://github.com/ProxySoul/soulforge.git && cd soulforge && bun install
|
|
165
|
-
bun run dev
|
|
183
|
+
# Source
|
|
184
|
+
git clone https://github.com/ProxySoul/soulforge.git && cd soulforge && bun install && bun run dev
|
|
166
185
|
```
|
|
167
186
|
|
|
168
187
|
</details>
|
|
169
188
|
|
|
189
|
+
## Get a key
|
|
190
|
+
|
|
191
|
+
Pick any one.
|
|
192
|
+
|
|
170
193
|
```bash
|
|
171
|
-
soulforge
|
|
172
|
-
soulforge --set-key anthropic sk-ant-...
|
|
173
|
-
soulforge
|
|
194
|
+
soulforge --set-key llmgateway sk-... # one key for every major model, up to 30% off frontier
|
|
195
|
+
soulforge --set-key anthropic sk-ant-... # or any individual provider you already have
|
|
196
|
+
soulforge # launch, Ctrl+L to pick a model
|
|
174
197
|
```
|
|
175
198
|
|
|
176
|
-
|
|
199
|
+
[All providers](https://soulforge.proxysoul.com/providers) · [Custom providers](https://soulforge.proxysoul.com/providers/custom)
|
|
177
200
|
|
|
178
201
|
<img src="assets/separator.svg" width="100%" height="8" />
|
|
179
202
|
|
|
@@ -182,93 +205,129 @@ See [GETTING_STARTED.md](GETTING_STARTED.md) for a full walkthrough, or the [ful
|
|
|
182
205
|
<table>
|
|
183
206
|
<thead>
|
|
184
207
|
<tr>
|
|
185
|
-
<th width="
|
|
208
|
+
<th width="170"></th>
|
|
186
209
|
<th>SoulForge</th>
|
|
187
210
|
<th>Claude Code</th>
|
|
188
211
|
<th>Codex CLI</th>
|
|
189
|
-
<th>
|
|
212
|
+
<th>OpenCode</th>
|
|
190
213
|
</tr>
|
|
191
214
|
</thead>
|
|
192
215
|
<tbody>
|
|
193
216
|
<tr>
|
|
194
217
|
<td><strong>Codebase awareness</strong></td>
|
|
195
|
-
<td>Live
|
|
218
|
+
<td>Live SQLite graph — PageRank + git co-change, blast-radius tags, per-turn personalization</td>
|
|
219
|
+
<td>File reads + grep</td>
|
|
220
|
+
<td>File reads + grep</td>
|
|
196
221
|
<td>File reads + grep</td>
|
|
197
|
-
<td>MCP plugins</td>
|
|
198
|
-
<td>Tree-sitter + PageRank</td>
|
|
199
222
|
</tr>
|
|
200
223
|
<tr>
|
|
201
|
-
<td><strong>Cost
|
|
202
|
-
<td>Surgical reads
|
|
224
|
+
<td><strong>Cost tactics</strong></td>
|
|
225
|
+
<td>Surgical reads, parallel shared cache, free V2 compaction, model-per-task router</td>
|
|
203
226
|
<td>Auto-compaction</td>
|
|
204
227
|
<td>Server-side compaction</td>
|
|
205
|
-
<td
|
|
228
|
+
<td>Auto-compaction</td>
|
|
206
229
|
</tr>
|
|
207
230
|
<tr>
|
|
208
231
|
<td><strong>Code intelligence</strong></td>
|
|
209
|
-
<td>
|
|
232
|
+
<td>LSP → ts-morph → tree-sitter → regex, 33 languages, Mason installer (576+ servers)</td>
|
|
210
233
|
<td>LSP via plugins</td>
|
|
211
|
-
<td
|
|
212
|
-
<td>
|
|
234
|
+
<td>—</td>
|
|
235
|
+
<td>LSP auto-load</td>
|
|
236
|
+
</tr>
|
|
237
|
+
<tr>
|
|
238
|
+
<td><strong>Editor</strong></td>
|
|
239
|
+
<td>Embedded Neovim — your config</td>
|
|
240
|
+
<td>—</td>
|
|
241
|
+
<td>—</td>
|
|
242
|
+
<td>—</td>
|
|
243
|
+
</tr>
|
|
244
|
+
<tr>
|
|
245
|
+
<td><strong>Remote control</strong></td>
|
|
246
|
+
<td>Hearth: Telegram, Discord</td>
|
|
247
|
+
<td>—</td>
|
|
248
|
+
<td>—</td>
|
|
249
|
+
<td>—</td>
|
|
213
250
|
</tr>
|
|
214
251
|
<tr>
|
|
215
252
|
<td><strong>Multi-agent</strong></td>
|
|
216
|
-
<td>Parallel dispatch
|
|
253
|
+
<td>Parallel dispatch + shared cache + edit coordination</td>
|
|
217
254
|
<td>Subagents + Teams</td>
|
|
218
255
|
<td>Multi-agent v2</td>
|
|
219
|
-
<td>
|
|
256
|
+
<td>Multi-session subagents</td>
|
|
220
257
|
</tr>
|
|
221
258
|
<tr>
|
|
222
|
-
<td><strong>
|
|
223
|
-
<td>
|
|
224
|
-
<td>
|
|
225
|
-
<td
|
|
226
|
-
<td
|
|
259
|
+
<td><strong>Hooks</strong></td>
|
|
260
|
+
<td>13 events, Claude Code drop-in compatible</td>
|
|
261
|
+
<td>Hooks (PreToolUse, etc.)</td>
|
|
262
|
+
<td>—</td>
|
|
263
|
+
<td>—</td>
|
|
227
264
|
</tr>
|
|
228
265
|
<tr>
|
|
229
266
|
<td><strong>Providers</strong></td>
|
|
230
|
-
<td>
|
|
267
|
+
<td>21 + any OpenAI-compatible</td>
|
|
231
268
|
<td>Anthropic only</td>
|
|
232
269
|
<td>OpenAI only</td>
|
|
233
|
-
<td>
|
|
270
|
+
<td>75+ via Models.dev</td>
|
|
234
271
|
</tr>
|
|
235
272
|
<tr>
|
|
236
273
|
<td><strong>License</strong></td>
|
|
237
|
-
<td>BSL 1.1</td>
|
|
274
|
+
<td>BSL 1.1 (converts to Apache 2.0 in 2030)</td>
|
|
238
275
|
<td>Proprietary</td>
|
|
239
276
|
<td>Apache 2.0</td>
|
|
240
|
-
<td>
|
|
277
|
+
<td>MIT</td>
|
|
241
278
|
</tr>
|
|
242
279
|
</tbody>
|
|
243
280
|
</table>
|
|
244
281
|
|
|
245
282
|
<sub>Verified April 2026. <a href="https://github.com/ProxySoul/soulforge/issues">Report inaccuracies.</a></sub>
|
|
246
283
|
|
|
247
|
-
|
|
248
284
|
<img src="assets/separator.svg" width="100%" height="8" />
|
|
249
285
|
|
|
250
|
-
##
|
|
286
|
+
## Real numbers
|
|
251
287
|
|
|
252
|
-
|
|
288
|
+
All from SoulForge's own codebase, on Claude Sonnet 4.6:
|
|
253
289
|
|
|
254
|
-
|
|
290
|
+
<table>
|
|
291
|
+
<tr>
|
|
292
|
+
<td><strong>Rename a class across 8 files</strong></td>
|
|
293
|
+
<td>19 steps, $0.228 (text edits) → <strong>3 steps, $0.036</strong> (<code>rename_symbol</code>)</td>
|
|
294
|
+
</tr>
|
|
295
|
+
<tr>
|
|
296
|
+
<td><strong>Change a function return type</strong></td>
|
|
297
|
+
<td>~100 lines of <code>oldString</code>/<code>newString</code> → <strong>~5 tokens</strong> with <code>ast_edit</code></td>
|
|
298
|
+
</tr>
|
|
299
|
+
<tr>
|
|
300
|
+
<td><strong>Compact a 34-message session</strong></td>
|
|
301
|
+
<td>V1 LLM summary: ~8k output tokens, 5-15s → V2: <strong>0 tokens, instant</strong></td>
|
|
302
|
+
</tr>
|
|
303
|
+
<tr>
|
|
304
|
+
<td><strong>Post-compaction conversation</strong></td>
|
|
305
|
+
<td>4.5M prompt tokens → <strong>7.5k tokens</strong> (context utilization 6% → 4%)</td>
|
|
306
|
+
</tr>
|
|
307
|
+
</table>
|
|
255
308
|
|
|
256
|
-
|
|
309
|
+
Claude Code's Explore subagent averages ~$0.70 per 5-minute research run with Haiku. SoulForge matches it when you route `spark` to Haiku via the task router — with the added benefit of full repo-map context.
|
|
257
310
|
|
|
258
311
|
<img src="assets/separator.svg" width="100%" height="8" />
|
|
259
312
|
|
|
260
|
-
##
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
313
|
+
## Try it
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
brew tap proxysoul/tap && brew install soulforge
|
|
317
|
+
cd your-project
|
|
318
|
+
soulforge
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
Then:
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
> rename AgentBus to CoordinationBus across the project
|
|
325
|
+
> run tests and commit
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Pair a Telegram/Discord bot once with `/hearth pair`, then keep chatting from your phone — the session auto-syncs both ways.
|
|
329
|
+
|
|
330
|
+
Full docs at **[soulforge.proxysoul.com](https://soulforge.proxysoul.com/introduction)**.
|
|
272
331
|
|
|
273
332
|
<img src="assets/separator.svg" width="100%" height="8" />
|
|
274
333
|
|