@proxysoul/soulforge 1.9.0 → 2.0.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 (3) hide show
  1. package/README.md +151 -634
  2. package/dist/index.js +2005 -2104
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,15 +1,15 @@
1
1
  <h1 align="center">SoulForge</h1>
2
2
 
3
3
  <p align="center">
4
- <strong>Graph-Powered Code Intelligence</strong><br/>
5
- Multi-agent coding with codebase-aware AI embedded Neovim, 24 themes, terminal-native
4
+ <strong>The AI coding agent that already knows your codebase.</strong><br/>
5
+ Graph-powered intelligence · multi-agent dispatch · terminal-native
6
6
  </p>
7
7
 
8
8
  <p align="center">
9
9
  <a href="LICENSE"><img src="https://img.shields.io/badge/License-BSL%201.1-blue.svg" alt="License" /></a>
10
10
  <a href="#"><img src="https://img.shields.io/badge/version-1.7.0-brightgreen.svg" alt="Version" /></a>
11
11
  <a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-strict-blue.svg" alt="TypeScript" /></a>
12
- <a href="#testing"><img src="https://img.shields.io/badge/tests-2296%20passing-brightgreen.svg" alt="Tests" /></a>
12
+ <img src="https://img.shields.io/badge/tests-2296%20passing-brightgreen.svg" alt="Tests" />
13
13
  <a href="https://bun.sh"><img src="https://img.shields.io/badge/runtime-Bun-f472b6.svg" alt="Bun" /></a>
14
14
  </p>
15
15
 
@@ -17,318 +17,161 @@
17
17
  <em>Built by <a href="https://github.com/proxysoul">proxySoul</a></em>
18
18
  </p>
19
19
 
20
- ---
21
-
22
- ## Table of Contents
23
-
24
- - [What is SoulForge?](#what-is-soulforge)
25
- - [Highlights](#highlights)
26
- - [Architecture](#architecture)
27
- - [Installation](#installation)
28
- - [Usage](#usage)
29
- - [CLI Flags](#cli-flags)
30
- - [Keyboard Shortcuts](#keyboard-shortcuts)
31
- - [Slash Commands](#slash-commands)
32
- - [Forge Modes](#forge-modes)
33
- - [Tool Suite](#tool-suite)
34
- - [LLM Providers](#llm-providers)
35
- - [Custom Providers](#custom-providers)
36
- - [Task Router](#task-router)
37
- - [Repo Map](#repo-map)
38
- - [Context Management](#context-management)
39
- - [Project Toolchain Detection](#project-toolchain-detection)
40
- - [Project Instructions](#project-instructions)
41
- - [Configuration](#configuration)
42
- - [Testing](#testing)
43
- - [Documentation](#documentation)
44
- - [Roadmap](#roadmap)
45
- - [Inspirations](#inspirations)
46
- - [License](#license)
20
+ <p align="center">
21
+ <img src="assets/main-1.png" alt="SoulForge — Graph-Powered Code Intelligence" width="900" />
22
+ </p>
47
23
 
48
24
  ---
49
25
 
50
- ## What is SoulForge?
26
+ ## Why SoulForge?
51
27
 
52
- Your real Neovim config, plugins, LSP embedded in an AI agent that understands your codebase structurally. Graph-powered intelligence, multi-agent dispatch, 10 providers. Works over SSH.
28
+ Every AI coding tool starts blind. The agent reads files, greps around, slowly pieces together what your codebase looks like. You're paying for the agent to figure out what you already know.
53
29
 
54
- <p align="center">
55
- <img src="assets/main-1.png" alt="SoulForge — Graph-Powered Code Intelligence" width="900" />
56
- <img src="assets/main-2.png" alt="SoulForge — Graph-Powered Code Intelligence" width="900" />
57
- </p>
58
-
59
- ### How it compares
30
+ SoulForge doesn't work that way. On startup, it builds a **live dependency graph** of your entire codebase. Every file, symbol, import, and export, ranked by importance, enriched with git history, updated in real-time as files change. The agent already knows which files matter, what depends on what, and how far an edit will ripple. It doesn't need to explore. It just starts working.
60
31
 
61
- | | SoulForge | Claude Code | Copilot CLI | Codex CLI | Aider |
62
- |---|---|---|---|---|---|
63
- | **Editor** | Embedded Neovim (LazyVim, your config) | No editor | No editor | No editor | No editor |
64
- | **Code graph** | SQLite graph — PageRank, blast radius, cochange, clone detection, FTS5 search, unused export detection, file profiles, identifier frequency | None (file reads + grep) | None | None (MCP plugins available) | Tree-sitter repo map + PageRank |
65
- | **Code intelligence** | 4-tier fallback: LSP → ts-morph → tree-sitter → regex. Dual LSP (Neovim bridge + standalone). 30 languages | LSP via plugin marketplace (rename supported, no auto-install, no fallback chain) | LSP (VS Code engines) | MCP-based LSP via plugins | Tree-sitter AST |
66
- | **Compound tools** | `rename_symbol`, `move_symbol`, `refactor` — compiler-guaranteed, atomic, cross-file | Rename via LSP | — | -- | — |
67
- | **Semantic context** | AST summaries for top 500 symbols, dispatch auto-enrichment with symbol line ranges | — | — | -- | Tree-sitter tag summaries |
68
- | **Multi-agent** | Parallel dispatch (8 agents, 3 concurrent, shared file cache, edit ownership) | Subagents + Agent Teams | Subagents + Fleet | Multi-agent v2 + subagents | Single agent |
69
- | **Providers** | 10 (LLM Gateway, Anthropic, OpenAI, Google, xAI, Ollama, +4) | Anthropic models (API, Bedrock, Vertex) | Multi-model (Anthropic, OpenAI, Google) | OpenAI models | 100+ LLMs |
70
- | **Task routing** | Per-task model assignment (plan, code, explore, search, trivial, cleanup, compact) | Single model | Single model | Per-agent model assignment | Single model |
71
- | **Cost visibility** | Per task, per agent, per model | `/cost` per session | Request counts | Server-side tracking | Per message |
72
- | **Context management** | 2-layer: per-step pruning + V1 (LLM summary) / V2 (deterministic extraction) compaction | Auto-compaction | Context window management | Server-side compaction | — |
73
- | **MCP** | Roadmap | Yes | Yes | Yes | No |
74
- | **License** | BSL 1.1 (source-available) | Proprietary | Proprietary | Apache 2.0 | Apache 2.0 |
32
+ ### How SoulForge saves you 30-50% on API costs & in less time
75
33
 
76
- > *Competitor features verified as of March 29, 2026. This landscape moves fast — [let us know](https://github.com/ProxySoul/soulforge/issues) if something's changed.*
34
+ | | |
35
+ |---|---|
36
+ | **Live Soul Map** | The agent already knows where every symbol lives, what imports what, and which files are most important. No wasted tokens reading files just to orient itself. |
37
+ | **Surgical reads** | Instead of reading entire files, the agent pulls exactly the function or class it needs by name. A 500-line file becomes a 20-line symbol extraction. The Soul Map provides line numbers and signatures, so the agent always knows precisely what to ask for. |
38
+ | **Zero-cost compaction** | When conversations get long, SoulForge compacts context by replaying structured state it already tracked (files touched, decisions made, errors hit) without making an LLM call. Other tools spend thousands of tokens summarizing. SoulForge does it for free. |
39
+ | **Shared agent cache** | When multiple agents work in parallel, the first one to read a large file caches it. Others get a compact stub with symbol names and line ranges instead of the full content. Hundreds of lines become four. |
40
+ | **Mix-and-match models** | You choose which model handles which job. Put Opus on planning, Sonnet on coding, Haiku on search and cleanup. Or use one model for everything. The task router gives you full control. |
41
+ | **Prompt caching** | The Soul Map is stable across turns, so it stays cached. On Anthropic, that means the bulk of the system prompt costs a fraction of what it would otherwise. |
77
42
 
78
43
  ---
79
44
 
80
- ## Highlights
45
+ ## What makes SoulForge different
81
46
 
82
47
  <table>
83
48
  <tr>
84
49
  <td width="50%">
85
50
 
86
- ### Embedded Neovim + LazyVim
87
- Your actual Neovim LazyVim distribution with 30+ plugins, LSP servers auto-installed via Mason, Catppuccin theme, noice, lualine, treesitter highlighting. The AI reads, navigates, and edits through the same editor you use. Your config, your muscle memory.
51
+ ### Live Soul Map
52
+ A SQLite-backed graph of your entire codebase: files, symbols, imports, exports. Ranked by PageRank, enriched with git co-change history, updated in real-time as you edit. The agent knows what's in your project, what depends on what, and where everything lives. Not a static snapshot. It evolves with your code. [Deep dive →](docs/repo-map.md)
88
53
 
89
54
  </td>
90
55
  <td width="50%">
91
56
 
92
- ### Multi-Agent Dispatch
93
- Parallelize work across explore, code, and web search agents. Shared file cache prevents redundant reads. Edit coordination prevents conflicts. Up to 8 agents, 3 concurrent slots. [Deep dive →](docs/agent-bus.md)
57
+ ### Surgical Reads
58
+ The agent doesn't read whole files. It extracts exactly the function, class, or type it needs by name, powered by the Soul Map's symbol index and a 4-tier intelligence chain (LSP → ts-morph → tree-sitter → regex). A 500-line file becomes a 20-line read. Across 30 languages. [Deep dive →](docs/architecture.md)
94
59
 
95
60
  </td>
96
61
  </tr>
97
62
  <tr>
98
63
  <td>
99
64
 
100
- ### Graph-Powered Repo Map
101
- SQLite-backed codebase graph with PageRank ranking, cochange analysis, blast radius estimation, and clone detection. The agent understands which files matter, what changes together, and how far edits ripple before reading a single line. [Deep dive →](docs/repo-map.md)
102
-
103
- </td>
104
- <td>
105
-
106
- ### 4-Tier Code Intelligence
107
- LSP → ts-morph → tree-sitter → regex fallback chain. 30 languages with convention-based visibility detection. Dual LSP backend: bridges to Neovim's LSP when the editor is open, spawns standalone servers when it's not. [Deep dive →](docs/architecture.md)
108
-
109
- </td>
110
- </tr>
111
- <tr>
112
- <td>
113
-
114
- ### Compound Tools
115
- `rename_symbol`, `move_symbol`, `refactor`, `project` do the complete job in one call. Compiler-guaranteed renames. Atomic moves with import updates across all importers. [Deep dive →](docs/compound-tools.md)
116
-
117
- </td>
118
- <td>
119
-
120
- ### Task Router + Cost Transparency
121
- Assign models per task: Opus for planning, Sonnet for coding, Haiku for search. Token usage visible per task, per agent, per model — you see exactly what you're spending and the router optimizes it automatically.
122
-
123
- </td>
124
- </tr>
125
- <tr>
126
- <td>
127
-
128
- ### Context Management
129
- Two-layer compaction keeps long sessions productive: rolling tool-result pruning per step, plus V1 (LLM summary) or V2 (deterministic extraction) compaction on threshold. [Deep dive →](docs/compaction.md)
130
-
131
- </td>
132
- <td>
133
-
134
- ### User Steering
135
- Type messages while the agent is working — they queue up and inject into the next agent step. Steer without interrupting. Abort cleanly with Ctrl+X. [Deep dive →](docs/steering.md)
136
-
137
- </td>
138
- </tr>
139
- <tr>
140
- <td>
141
-
142
- ### 10 Providers, Any Model
143
- LLM Gateway, Anthropic, OpenAI, Google, xAI, Ollama (local), OpenRouter, Vercel AI Gateway, Proxy, and custom OpenAI-compatible APIs. You own the API keys. No vendor lock-in. [Deep dive →](docs/provider-options.md)
65
+ ### Multi-Agent Dispatch
66
+ Parallelize work across explore, code, and web search agents. When one agent reads a large file, others get a compact stub with symbol names and line ranges instead of re-reading the full content. Edit coordination prevents conflicts. [Deep dive →](docs/agent-bus.md)
144
67
 
145
68
  </td>
146
69
  <td>
147
70
 
148
- ### Cross-Tab Coordination
149
- Up to 5 concurrent tabs with per-tab model selection and advisory file claims. Run Opus in one tab for complex architecture, Haiku in another for quick searches. Agents see what other tabs are editing, get warnings on contested files, and git operations are blocked during active dispatch. [Deep dive →](docs/cross-tab-coordination.md)
71
+ ### Zero-Cost Compaction
72
+ State extraction runs as the conversation happens: files touched, decisions made, errors hit. All tracked deterministically. When context gets long, it compacts instantly from this pre-built state. No LLM call, no latency, no cost. [Deep dive →](docs/compaction.md)
150
73
 
151
74
  </td>
152
75
  </tr>
153
76
  <tr>
154
77
  <td>
155
78
 
156
- ### Project Toolchain
157
- Auto-detects lint, typecheck, test, and build commands across 23 ecosystems from config files. Pre-commit gate blocks `git commit` on lint/type errors. Monorepo package discovery. [Deep dive →](docs/project-tool.md)
79
+ ### Multi-Tab Coordination
80
+ Run multiple sessions side by side with different models and modes per tab. Agents see what other tabs are editing, get warnings on contested files, and git operations coordinate across tabs automatically. [Deep dive →](docs/cross-tab-coordination.md)
158
81
 
159
82
  </td>
160
83
  <td>
161
84
 
162
- ### Skills & Approval Gates
163
- Installable skill system for domain-specific capabilities. Destructive action approval `rm -rf`, `git push --force`, sensitive file edits individually prompted. Auto mode for full autonomy when you want it.
85
+ ### Compound Tools
86
+ `read` batches multiple files in parallel with surgical symbol extraction. `multi_edit` applies multiple edits to a file atomically (all-or-nothing). `rename_symbol`, `move_symbol`, `rename_file`, `refactor` are compiler-guaranteed and cross-file. `project` auto-detects lint/test/build across 23 ecosystems. [Deep dive →](docs/compound-tools.md)
164
87
 
165
88
  </td>
166
89
  </tr>
167
90
  </table>
168
91
 
169
- ---
170
-
171
- ## Architecture
172
-
173
- The Forge Agent is the orchestrator. It holds 33 tools including the `dispatch` tool, which creates an AgentBus and launches parallel subagents. Subagents share file/tool caches through the bus and coordinate edits via ownership tracking.
174
-
175
- ```mermaid
176
- graph TB
177
- User([User Input]) --> Chat[useChat Hook]
178
- Chat --> Forge[Forge Agent]
179
-
180
- subgraph Forge Tools
181
- Tools[33 Tools]
182
- Dispatch[dispatch tool]
183
- end
184
-
185
- Forge --> Tools
186
- Forge --> Dispatch
187
-
188
- Dispatch --> |creates| Bus[AgentBus<br/>file cache · tool cache<br/>findings · edit ownership]
189
-
190
- Bus --> |spawns| I[Investigate Agent<br/>broad analysis]
191
- Bus --> |spawns| E[Explore Agent<br/>targeted extraction]
192
- Bus --> |spawns| C[Code Agent<br/>edits]
92
+ ### And also
193
93
 
194
- I & E & C --> |read/write cache| Bus
94
+ - **Lock-in mode.** Hides agent narration during work, shows only tool activity and the final answer. Toggle via `/lock-in` or config.
95
+ - **Embedded Neovim.** Your actual config, plugins, and LSP servers. The AI works through the same editor you use. [Deep dive →](docs/architecture.md)
96
+ - **10 providers.** Anthropic, OpenAI, Google, xAI, Ollama, OpenRouter, LLM Gateway, Vercel AI Gateway, Proxy, and any OpenAI-compatible API. [Deep dive →](docs/provider-options.md)
97
+ - **Task router.** Assign different models to different jobs. Spark agents (explore/investigate) and ember agents (code edits) can each use different models. You pick what goes where. [Deep dive →](docs/architecture.md)
98
+ - **Code execution (Smithy).** Sandboxed code execution via Anthropic's `code_execution` tool. The agent can run Python to process data, do calculations, or batch tool calls programmatically.
99
+ - **User steering.** Type while the agent works. Messages queue up and reach the agent at the next step. [Deep dive →](docs/steering.md)
100
+ - **Skills & approval gates.** Installable skills for domain-specific work. Destructive actions require confirmation. Auto mode when you want full autonomy.
101
+ - **4-tier code intelligence.** LSP → ts-morph → tree-sitter → regex fallback across 30 languages. Dual LSP: Neovim bridge when the editor is open, standalone servers when it's not. [Deep dive →](docs/architecture.md)
195
102
 
196
- Tools --> Intel[Intelligence Router]
197
- Tools --> Nvim[Neovim<br/>msgpack-RPC]
198
- Tools --> RepoMap[(Repo Map<br/>SQLite · PageRank)]
199
- Tools --> Mem[(Memory<br/>SQLite · FTS5)]
200
-
201
- Intel --> LSP[LSP]
202
- Intel --> TSM[ts-morph]
203
- Intel --> TS[tree-sitter]
204
- Intel --> Regex[regex]
205
-
206
- style Forge fill:#9B30FF,color:#fff
207
- style Bus fill:#336,color:#fff
208
- style Dispatch fill:#663,color:#fff
209
- style RepoMap fill:#1a3,color:#fff
210
- style Mem fill:#1a3,color:#fff
211
- style Nvim fill:#57A143,color:#fff
212
- ```
213
-
214
- ### Intelligence Fallback Chain
215
-
216
- Queries route through backends by tier. Each backend reports what it supports; the router picks the highest-tier backend available for the operation.
103
+ <p align="center">
104
+ <img src="assets/main-2.png" alt="SoulForge — Multi-Agent Dispatch" width="900" />
105
+ </p>
217
106
 
218
- ```mermaid
219
- graph LR
220
- Query([Symbol Query]) --> LSP{LSP<br/>available?}
221
- LSP -->|yes| LSPResult[Precise<br/>types · refs · diagnostics]
222
- LSP -->|no| TSMorph{ts-morph<br/>available?}
223
- TSMorph -->|yes| TSMResult[AST<br/>signatures · exports]
224
- TSMorph -->|no| TreeSitter{tree-sitter<br/>grammar?}
225
- TreeSitter -->|yes| TSResult[Structural<br/>outlines · imports]
226
- TreeSitter -->|no| RegexResult[Best-effort<br/>pattern matching]
107
+ ---
227
108
 
228
- style LSPResult fill:#4a7,color:#fff
229
- style TSMResult fill:#47a,color:#fff
230
- style TSResult fill:#a74,color:#fff
231
- style RegexResult fill:#a47,color:#fff
232
- ```
109
+ ## How it compares
233
110
 
234
- ### Multi-Agent Dispatch
111
+ | | SoulForge | Claude Code | Copilot CLI | Codex CLI | Aider |
112
+ |---|---|---|---|---|---|
113
+ | **Codebase awareness** | Live SQLite graph: PageRank, blast radius, cochange, clone detection, FTS5, unused exports | None (file reads + grep) | None | None (MCP plugins) | Tree-sitter repo map + PageRank |
114
+ | **Cost optimization** | Soul Map + surgical reads + zero-cost compaction + shared agent cache + mix-and-match models + prompt caching | Auto-compaction | Context window management | Server-side compaction | — |
115
+ | **Code intelligence** | 4-tier fallback: LSP → ts-morph → tree-sitter → regex. Dual LSP. 30 languages | LSP via plugins (no fallback chain) | LSP (VS Code) | MCP-based LSP | Tree-sitter AST |
116
+ | **Multi-agent** | Parallel dispatch with shared file/tool cache and edit coordination | Subagents + Agent Teams | Subagents + Fleet | Multi-agent v2 | Single agent |
117
+ | **Multi-tab** | Concurrent tabs with per-tab models, file claim awareness, cross-tab git coordination | — | — | — | — |
118
+ | **Task routing** | Per-task model assignment (spark, ember, web search, verify, desloppify, compact) | Single model | Single model | Per-agent model | Single model |
119
+ | **Compound tools** | `read` (batch + surgical), `multi_edit` (atomic), `rename_symbol`, `move_symbol`, `rename_file`, `refactor`, `project` | Rename via LSP | — | — | — |
120
+ | **Editor** | Embedded Neovim (your config, your plugins) | No editor | No editor | No editor | No editor |
121
+ | **Providers** | 10 + custom OpenAI-compatible | Anthropic only | Multi-model | OpenAI only | 100+ LLMs |
122
+ | **License** | BSL 1.1 (source-available) | Proprietary | Proprietary | Apache 2.0 | Apache 2.0 |
235
123
 
236
- Up to 8 agents run concurrently (3 parallel slots) with staggered starts. All agents share a file cache through AgentBus — when one agent reads a file, others get it for free. Agents with `dependsOn` wait for their dependencies before starting.
237
-
238
- ```mermaid
239
- sequenceDiagram
240
- participant U as User
241
- participant F as Forge Agent
242
- participant D as dispatch tool
243
- participant B as AgentBus
244
- participant I as Investigate
245
- participant E as Explore
246
- participant C as Code Agent
247
-
248
- U->>F: "Audit auth and refactor middleware"
249
- F->>D: dispatch(3 tasks)
250
- D->>B: new AgentBus()
251
- par Concurrent (3 slots, staggered)
252
- D->>I: launch investigate (t=0ms)
253
- D->>E: launch explore (t=150ms)
254
- D->>C: launch code (dependsOn: I, E)
255
- end
256
- I->>B: soul_grep counts + soul_analyze + findings
257
- E->>B: targeted reads + findings
258
- Note over B: Code agent reads<br/>hit cache instantly
259
- B-->>C: dependencies resolved
260
- C->>C: Edit with full context
261
- C->>B: done (edits applied)
262
- D->>F: All agents complete → merged result
263
- ```
124
+ > *Competitor features verified as of March 29, 2026. [Let us know](https://github.com/ProxySoul/soulforge/issues) if something's changed.*
264
125
 
265
126
  ---
266
127
 
267
128
  ## Installation
268
129
 
269
- Pick the method that fits your workflow. SoulForge checks for prerequisites on first launch and offers to install Neovim and Nerd Fonts if missing.
270
-
271
- ### Prebuilt Binary (recommended)
130
+ macOS and Linux. SoulForge checks for prerequisites on first launch and offers to install Neovim and Nerd Fonts if missing.
272
131
 
273
- Download the latest release for your platform from [GitHub Releases](https://github.com/ProxySoul/soulforge/releases/latest), extract, and run the installer:
132
+ ### Homebrew (recommended)
274
133
 
275
134
  ```bash
276
- tar xzf soulforge-*.tar.gz
277
- cd soulforge-*/
278
- ./install.sh
135
+ brew tap proxysoul/tap
136
+ brew install soulforge
279
137
  ```
280
138
 
281
- The installer places everything in `~/.soulforge/` and adds it to your PATH. Then run `soulforge` (or `sf`).
282
-
283
139
  <details>
284
- <summary><strong>Homebrew</strong></summary>
140
+ <summary><strong>Bun (global install)</strong></summary>
285
141
 
286
142
  ```bash
287
- brew tap proxysoul/tap
288
- brew install soulforge
143
+ curl -fsSL https://bun.sh/install | bash
144
+ bun install -g @proxysoul/soulforge
145
+ soulforge
289
146
  ```
290
147
 
291
148
  </details>
292
149
 
293
150
  <details>
294
- <summary><strong>Bun (global install)</strong></summary>
151
+ <summary><strong>Prebuilt binary</strong></summary>
295
152
 
296
- Requires [Bun](https://bun.sh) >= 1.2 as the runtime — SoulForge uses Bun-specific APIs (Workers, native modules, PTY).
153
+ Download from [GitHub Releases](https://github.com/ProxySoul/soulforge/releases/latest), extract, and run the installer:
297
154
 
298
155
  ```bash
299
- # Install Bun if you don't have it
300
- curl -fsSL https://bun.sh/install | bash
301
-
302
- # Install SoulForge globally
303
- bun install -g @proxysoul/soulforge
304
-
305
- soulforge # or: sf
156
+ tar xzf soulforge-*.tar.gz && cd soulforge-*/ && ./install.sh
306
157
  ```
307
158
 
159
+ Installs to `~/.soulforge/`, adds to PATH.
160
+
308
161
  </details>
309
162
 
310
163
  <details>
311
- <summary><strong>Self-contained bundle (includes Neovim, ripgrep, fd, lazygit)</strong></summary>
164
+ <summary><strong>Self-contained bundle</strong></summary>
312
165
 
313
- The bundle ships everything Neovim 0.11, ripgrep, fd, lazygit, tree-sitter grammars, Nerd Font symbols, and a local LLM proxy. No system dependencies required. Build it from source:
166
+ Ships everything: Neovim 0.11, ripgrep, fd, lazygit, tree-sitter grammars, Nerd Font symbols. No system dependencies.
314
167
 
315
168
  ```bash
316
- git clone https://github.com/ProxySoul/soulforge.git
317
- cd soulforge
318
- bun install
319
-
320
- # Build bundle (macOS ARM64 by default)
321
- ./scripts/bundle.sh # → dist/bundle/soulforge-1.0.0-darwin-arm64/
169
+ git clone https://github.com/ProxySoul/soulforge.git && cd soulforge && bun install
170
+ ./scripts/bundle.sh # macOS ARM64
322
171
  ./scripts/bundle.sh x64 # Intel Mac
323
172
  ./scripts/bundle.sh x64 linux # Linux x64
324
173
  ./scripts/bundle.sh arm64 linux # Linux ARM64
325
-
326
- # Install
327
- cd dist/bundle/soulforge-*/
328
- ./install.sh # installs to ~/.soulforge, adds to PATH
329
-
330
- # Uninstall
331
- ~/.soulforge/uninstall.sh
174
+ cd dist/bundle/soulforge-*/ && ./install.sh
332
175
  ```
333
176
 
334
177
  </details>
@@ -339,17 +182,10 @@ cd dist/bundle/soulforge-*/
339
182
  Requires [Bun](https://bun.sh) >= 1.0 and [Neovim](https://neovim.io) >= 0.11.
340
183
 
341
184
  ```bash
342
- git clone https://github.com/ProxySoul/soulforge.git
343
- cd soulforge
344
- bun install
345
-
346
- # Run in development mode
347
- bun run dev
348
-
349
- # Or build and link globally
350
- bun run build
351
- bun link
352
- soulforge
185
+ git clone https://github.com/ProxySoul/soulforge.git && cd soulforge && bun install
186
+ bun run dev # development mode
187
+ # or
188
+ bun run build && bun link && soulforge
353
189
  ```
354
190
 
355
191
  </details>
@@ -357,457 +193,138 @@ soulforge
357
193
  ### Quick start
358
194
 
359
195
  ```bash
360
- soulforge # Launch select a model with Ctrl+L
361
- soulforge --set-key anthropic sk-ant-... # Or save a key first
362
- soulforge --list-providers # Check which providers are ready
196
+ soulforge # Launch, pick a model with Ctrl+L
197
+ soulforge --set-key anthropic sk-ant-... # Save a key
198
+ soulforge --headless "your prompt here" # Non-interactive mode
363
199
  ```
364
200
 
365
- See [GETTING_STARTED.md](GETTING_STARTED.md) for a full walkthrough — first launch, model setup, editor configuration, and tips.
201
+ See [GETTING_STARTED.md](GETTING_STARTED.md) for a full walkthrough.
366
202
 
367
203
  ---
368
204
 
369
205
  ## Usage
370
206
 
371
- ### CLI Flags
372
-
373
207
  ```bash
374
208
  soulforge # Launch TUI
375
- soulforge --session <id> # Resume a saved session
376
- soulforge --headless "your prompt here" # Stream to stdout
377
- soulforge --headless --json "prompt" # Structured JSON
378
- soulforge --headless --events "prompt" # JSONL event stream
379
- soulforge --headless --model provider/model # Override model
380
- soulforge --headless --mode architect # Read-only analysis
381
- soulforge --headless --system "role" "prompt"# Inject system prompt
382
- soulforge --headless --include file.ts # Pre-load files
383
- soulforge --headless --session <id> "prompt" # Resume session
384
- soulforge --headless --save-session "prompt" # Save for later
385
- soulforge --headless --max-steps 10 # Limit steps
386
- soulforge --headless --timeout 60000 # Abort after 60s
387
- soulforge --headless --no-repomap "prompt" # Skip repo map
388
- soulforge --headless --diff "fix the bug" # Show changed files
389
- soulforge --headless --no-render "prompt" # Raw output (no ANSI styling)
390
- soulforge --headless --chat # Interactive multi-turn chat
391
- soulforge --headless --chat --events # Chat with JSONL events
392
- echo "prompt" | soulforge --headless # Pipe from stdin
393
- soulforge --list-providers # Provider status
394
- soulforge --list-models [provider] # Available models
395
- soulforge --set-key <provider> <key> # Save API key
396
- soulforge --version # Version info
209
+ soulforge --headless "prompt" # Stream to stdout
210
+ soulforge --headless --json "prompt" # Structured JSON output
211
+ soulforge --headless --chat # Interactive multi-turn
212
+ soulforge --headless --model provider/model # Override model
213
+ soulforge --headless --mode architect # Read-only analysis
214
+ soulforge --headless --diff "fix the bug" # Show changed files
397
215
  ```
398
216
 
399
- [Headless mode deep dive →](docs/headless.md)
400
-
401
- ### Keyboard Shortcuts
402
-
403
- | Key | Action |
404
- |-----|--------|
405
- | `Ctrl+L` | Select LLM model |
406
- | `Ctrl+E` | Toggle editor panel |
407
- | `Ctrl+G` | Git menu |
408
- | `Ctrl+S` | Skills browser |
409
- | `Ctrl+K` | Command picker |
410
- | `Ctrl+T` | New tab |
411
- | `Ctrl+W` | Close tab |
412
- | `Ctrl+X` | Abort current generation |
413
- | `Tab` | Switch tabs |
414
- | `Escape` | Toggle chat/editor focus |
415
-
416
- ### Slash Commands
417
-
418
- 86 commands available — press `/` or `Ctrl+K` to browse. Key ones by category:
419
-
420
- **Models & Providers**
421
- `/model` `/router` `/provider` `/model-scope`
422
-
423
- **Agent & Modes**
424
- `/mode` `/plan` `/agent-features` `/reasoning`
425
-
426
- **Editor & Display**
427
- `/editor` `/split` `/diff-style` `/chat-style` `/vim-hints` `/open <file>`
428
-
429
- **Git** (all under `/git`)
430
- `/git` `/git commit` `/git push` `/git pull` `/git branch` `/git log` `/git diff` `/git stash` `/git lazygit` `/git co-author`
431
-
432
- **Intelligence & LSP**
433
- `/lsp` `/lsp-install` `/lsp-restart` `/diagnose` `/repo-map` `/web-search` `/keys`
434
-
435
- **Context & Memory**
436
- `/compact` `/context` `/memory` `/compaction` `/instructions`
437
-
438
- **Sessions & Tabs**
439
- `/sessions` `/tab` `/tab new` `/tab close` `/tab rename` `/claim`
440
-
441
- **Files & Changes**
442
- `/changes` `/files` `/open <file>`
443
-
444
- **System**
445
- `/setup` `/skills` `/privacy` `/storage` `/errors` `/status` `/proxy`
446
-
447
- [Full command reference →](docs/commands-reference.md)
448
-
449
- ### Forge Modes
450
-
451
- | Mode | Description |
452
- |------|-------------|
453
- | **default** | Full agent — reads and writes code |
454
- | **auto** | Full tool access, executes immediately, minimal questions |
455
- | **architect** | Read-only design and architecture |
456
- | **socratic** | Questions first, then suggestions |
457
- | **challenge** | Adversarial review, finds flaws |
458
- | **plan** | Research → structured plan → execute |
459
-
460
- ---
461
-
462
- ## Tool Suite
463
-
464
- SoulForge ships 33 tools organized by capability:
465
-
466
- ### Code Intelligence
467
-
468
- | Tool | What it does |
469
- |------|-------------|
470
- | `read_file` | Read files with optional `target` param for symbol extraction (LSP-powered) |
471
- | `navigate` | Definition, references, call hierarchy, implementations |
472
- | `analyze` | File diagnostics, unused symbols, complexity |
473
- | `rename_symbol` | Compiler-guaranteed rename across all files |
474
- | `move_symbol` | Move to another file + update all importers |
475
- | `rename_file` | Rename/move a file with import path updates |
476
- | `refactor` | Extract function/variable, organize imports |
477
-
478
- ### Codebase Analysis (zero LLM cost)
479
-
480
- | Tool | What it does |
481
- |------|-------------|
482
- | `soul_grep` | Count-mode ripgrep with repo map intercept |
483
- | `soul_find` | Fuzzy file/symbol search, PageRank-ranked, signatures included |
484
- | `soul_analyze` | Identifier frequency, unused exports, file profiles, top files by PageRank, external package usage, symbol lookup by kind/name with signatures |
485
- | `soul_impact` | Dependency graph — dependents, cochanges, blast radius |
486
-
487
- ### Project Management
488
-
489
- | Tool | What it does |
490
- |------|-------------|
491
- | `project` | Auto-detected lint, format, test, build, typecheck across [23 ecosystems](#project-toolchain-detection) |
492
- | `project(list)` | Discover monorepo packages with per-package capabilities |
493
- | `dispatch` | Parallel multi-agent execution (up to 8 agents, 3 concurrent) |
494
- | `git` | Structured git operations with auto co-author tracking |
495
-
496
- <details>
497
- <summary><strong>All tools</strong></summary>
498
-
499
- **Read/Write:** `read_file` (with `target` param for symbol extraction), `edit_file` (also handles create/write), `multi_edit`, `undo_edit`, `list_dir`, `glob`, `grep`
500
-
501
- **Shell:** `shell` (with pre-commit lint gate, co-author injection, project tool redirect)
502
-
503
- **Memory:** `memory` (actions: write, search, list, delete)
504
-
505
- **Agent:** `dispatch`, `web_search`, `fetch_page`
506
-
507
- **Editor:** `editor` (Neovim integration — read, edit, navigate, diagnostics, format)
508
-
509
- **Planning:** `plan`, `update_plan_step`, `task_list`, `ask_user`
510
-
511
- **Discovery:** `discover_pattern`, `test_scaffold`, `skills`
512
-
513
- **Tool Management:** `request_tools`, `release_tools` (agent-managed mode — disabled by default)
217
+ **Modes:** default (full agent), auto (no questions), architect (read-only), socratic, challenge, plan
514
218
 
515
- </details>
219
+ [Full CLI reference →](docs/headless.md) · [All 86 slash commands →](docs/commands-reference.md)
516
220
 
517
221
  ---
518
222
 
519
- ## LLM Providers
520
-
521
- | Provider | Models | Setup |
522
- |----------|--------|-------|
523
- | [**LLM Gateway**](https://llmgateway.io/?ref=6tjJR2H3X4E9RmVQiQwK) | Multi-model gateway (OpenAI, Claude, Gemini, DeepSeek) | `LLM_GATEWAY_API_KEY` |
524
- | [**Anthropic**](https://console.anthropic.com/) | Claude 4.6 Opus/Sonnet, Haiku 4.5 | `ANTHROPIC_API_KEY` |
525
- | [**OpenAI**](https://platform.openai.com/) | GPT-4.5, o3, o4-mini | `OPENAI_API_KEY` |
526
- | [**Google**](https://aistudio.google.com/) | Gemini 2.5 Pro/Flash | `GOOGLE_GENERATIVE_AI_API_KEY` |
527
- | [**xAI**](https://console.x.ai/) | Grok 3 | `XAI_API_KEY` |
528
- | [**Ollama**](https://ollama.ai) | Any local model | Auto-detected |
529
- | [**OpenRouter**](https://openrouter.ai) | 200+ models | `OPENROUTER_API_KEY` |
530
- | [**Vercel AI Gateway**](https://vercel.com/ai-gateway) | Unified gateway for 15+ providers with caching, fallbacks, rate limiting | `AI_GATEWAY_API_KEY` |
531
- | [**Proxy**](https://github.com/router-for-me/CLIProxyAPI) | Local proxy with auto-lifecycle management — starts/stops with SoulForge | `PROXY_API_KEY` |
532
- | **Custom** | Any OpenAI-compatible API — add via config | Any env var |
223
+ ## Providers
533
224
 
534
- ### Custom Providers
225
+ | Provider | Setup |
226
+ |----------|-------|
227
+ | [**LLM Gateway**](https://llmgateway.io/?ref=6tjJR2H3X4E9RmVQiQwK) | `LLM_GATEWAY_API_KEY` |
228
+ | [**Anthropic**](https://console.anthropic.com/) | `ANTHROPIC_API_KEY` |
229
+ | [**OpenAI**](https://platform.openai.com/) | `OPENAI_API_KEY` |
230
+ | [**Google**](https://aistudio.google.com/) | `GOOGLE_GENERATIVE_AI_API_KEY` |
231
+ | [**xAI**](https://console.x.ai/) | `XAI_API_KEY` |
232
+ | [**Ollama**](https://ollama.ai) | Auto-detected |
233
+ | [**OpenRouter**](https://openrouter.ai) | `OPENROUTER_API_KEY` |
234
+ | [**Vercel AI Gateway**](https://vercel.com/ai-gateway) | `AI_GATEWAY_API_KEY` |
235
+ | [**Proxy**](https://github.com/router-for-me/CLIProxyAPI) | `PROXY_API_KEY` |
236
+ | **Custom** | Any OpenAI-compatible API |
535
237
 
536
- Add any OpenAI-compatible API as a provider — no code changes needed:
238
+ Add custom providers in config, no code changes:
537
239
 
538
240
  ```json
539
- // ~/.soulforge/config.json (global) or .soulforge/config.json (project)
540
241
  {
541
- "providers": [
542
- {
543
- "id": "deepseek",
544
- "name": "DeepSeek",
545
- "baseURL": "https://api.deepseek.com/v1",
546
- "envVar": "DEEPSEEK_API_KEY",
547
- "models": ["deepseek-chat", "deepseek-coder"],
548
- "modelsAPI": "https://api.deepseek.com/v1/models"
549
- }
550
- ]
242
+ "providers": [{
243
+ "id": "deepseek",
244
+ "name": "DeepSeek",
245
+ "baseURL": "https://api.deepseek.com/v1",
246
+ "envVar": "DEEPSEEK_API_KEY",
247
+ "models": ["deepseek-chat", "deepseek-coder"]
248
+ }]
551
249
  }
552
250
  ```
553
251
 
554
- Then use `deepseek/deepseek-chat` as a model ID anywhere — TUI model picker, headless `--model`, task router slots. Custom providers show `[custom]` in listings. If a custom `id` conflicts with a built-in, it auto-renames to `{id}-custom`.
555
-
556
- [Custom providers reference →](docs/headless.md#custom-providers)
557
-
558
- ### Task Router
559
-
560
- Assign different models to different jobs. Configure via `/router`:
561
-
562
- | Slot | Default | Purpose |
563
- |------|---------|---------|
564
- | Planning | Sonnet | Architecture, design decisions |
565
- | Coding | Opus | Implementation, bug fixes |
566
- | Exploration | Opus | Research, code reading |
567
- | Web Search | Haiku | Search queries |
568
- | Trivial | Haiku | Small, simple tasks (auto-detected) |
569
- | De-sloppify | Haiku | Post-implementation cleanup pass |
570
- | Compact | Haiku | Context compaction summaries |
571
-
572
- ---
573
-
574
- ## Repo Map
575
-
576
- SQLite-backed graph of your entire codebase, updated in real-time as files are edited.
577
-
578
- ```mermaid
579
- graph LR
580
- Scan[File Scanner<br/>watches edits] --> Parse[tree-sitter<br/>30 languages]
581
- Parse --> Symbols[(Symbols<br/>name · kind · line · exports)]
582
- Parse --> Refs[(References<br/>cross-file imports)]
583
- Refs --> Graph[Dependency Graph]
584
- Graph --> PR[PageRank]
585
- Graph --> CC[Cochange<br/>git log analysis]
586
- Graph --> BR[Blast Radius]
587
- Symbols --> FTS[FTS5 Search]
588
- Symbols --> Clones[Clone Detection<br/>minhash signatures]
589
-
590
- style Symbols fill:#1a3,color:#fff
591
- style Refs fill:#1a3,color:#fff
592
- style PR fill:#47a,color:#fff
593
- style CC fill:#47a,color:#fff
594
- style BR fill:#47a,color:#fff
595
- ```
596
-
597
- **Powers:** `soul_find` (PageRank-ranked search with signatures), `soul_grep` (zero-cost identifier counts), `soul_analyze` (unused exports with dead code vs unnecessary export classification, file profiles, top files, external packages, symbol-by-kind queries with signatures), `soul_impact` (blast radius, dependency chains), dispatch enrichment (auto-injects symbol line ranges), AST semantic summaries (docstrings for top 500 symbols).
598
-
599
- **Language support:** Convention-based visibility detection for 30 languages. Export inference via Go capitalization, Rust/Zig `pub`, Python/Dart underscore convention, Java/Kotlin/Swift/C#/Scala not-private, PHP, Elixir `def`/`defp`, C/C++/ObjC header files, Solidity, and more. Identifier extraction patterns cover camelCase, PascalCase, snake_case, and hyphenated (Elisp) naming conventions across all supported languages.
600
-
601
- **Monorepo support:** Partial. The repo map indexes files within the working directory. Cross-package dependencies within a monorepo are not yet tracked — each package is treated as an independent unit. The `project` tool handles monorepo workspace discovery separately.
602
-
603
- [Full reference →](docs/repo-map.md)
604
-
605
- ---
606
-
607
- ## Context Management
608
-
609
- ```mermaid
610
- graph TB
611
- subgraph "Per-Step — every API call"
612
- Pruning[Tool Result Pruning<br/>last 4 full · older → summaries]
613
- end
614
-
615
- subgraph "On Threshold — auto-triggered"
616
- V1[V1 Compaction<br/>LLM summarization]
617
- V2[V2 Compaction<br/>deterministic extraction<br/>+ 2k token gap-fill]
618
- end
619
-
620
- subgraph "Always Active"
621
- Steering[User Steering<br/>queue + inject mid-stream]
622
- Sessions[Session Save<br/>incremental · crash-resilient]
623
- PreCommit[Pre-Commit Gate<br/>lint + typecheck before commit]
624
- end
625
-
626
- style Pruning fill:#47a,color:#fff
627
- style V1 fill:#a74,color:#fff
628
- style V2 fill:#4a7,color:#fff
629
- style PreCommit fill:#a47,color:#fff
630
- ```
631
-
632
- - **Tool result pruning** — older tool results become one-line summaries enriched with repo map symbols
633
- - **V1 compaction** — full LLM summarization when context exceeds threshold
634
- - **V2 compaction** — deterministic state extraction from tool calls, cheap LLM gap-fill
635
- - **User steering** — type while the agent works, messages inject at the next step
636
- - **Pre-commit gate** — auto-runs native lint + typecheck before allowing `git commit`
637
-
638
- [Compaction deep dive →](docs/compaction.md) · [Steering deep dive →](docs/steering.md)
639
-
640
- ---
641
-
642
- ## Project Toolchain Detection
643
-
644
- The `project` tool auto-detects your toolchain from config files — no setup required:
645
-
646
- | Ecosystem | Lint | Typecheck | Test | Build |
647
- |-----------|------|-----------|------|-------|
648
- | **JS/TS (Bun)** | biome / oxlint / eslint | tsc | bun test | bun run build |
649
- | **JS/TS (Node)** | biome / oxlint / eslint | tsc | npm test | npm run build |
650
- | **Deno** | deno lint | deno check | deno test | — |
651
- | **Rust** | cargo clippy | cargo check | cargo test | cargo build |
652
- | **Go** | golangci-lint / go vet | go build | go test | go build |
653
- | **Python** | ruff / flake8 | pyright / mypy | pytest | — |
654
- | **PHP** | phpstan / psalm | phpstan / psalm | phpunit | — |
655
- | **Ruby** | rubocop | — | rspec / rails test | — |
656
- | **Swift** | swiftlint | swift build | swift test | swift build |
657
- | **Elixir** | credo | dialyzer | mix test | mix compile |
658
- | **Java/Kotlin** | gradle check | javac / kotlinc | gradle test | gradle build |
659
- | **C/C++** | clang-tidy | cmake build | ctest | cmake build |
660
- | **Dart/Flutter** | dart analyze | dart analyze | flutter test | flutter build |
661
- | **Zig** | — | zig build | zig build test | zig build |
662
- | **Haskell** | hlint | stack build | stack test | stack build |
663
- | **Scala** | — | sbt compile | sbt test | sbt compile |
664
- | **.NET/C#** | dotnet format | dotnet build | dotnet test | dotnet build |
665
- | **iOS/Xcode** | swiftlint | xcodebuild build | xcodebuild test | xcodebuild build |
666
- | **Java (Maven)** | checkstyle | mvn compile | mvn test | mvn package |
667
- | **C/C++ (Make)** | — | — | make test | make |
668
- | **Clojure** | clj-kondo | — | lein test / clj -M:test | lein uberjar |
669
-
670
- **Monorepo support:** `project(action: "list")` discovers workspace packages across pnpm, npm/yarn, Cargo, and Go workspaces.
671
-
672
- [Full reference →](docs/project-tool.md)
673
-
674
- ---
675
-
676
- ## Project Instructions
677
-
678
- SoulForge loads `SOULFORGE.md` from your project root as project-specific instructions — conventions, architecture notes, toolchain preferences — injected into every prompt.
679
-
680
- You can also load instruction files from other AI tools to reduce friction when migrating or working across tools:
681
-
682
- | File | Source | Default |
683
- |------|--------|---------|
684
- | `SOULFORGE.md` | SoulForge | **on** |
685
- | `CLAUDE.md` | Claude Code | off |
686
- | `.cursorrules` | Cursor | off |
687
- | `.github/copilot-instructions.md` | GitHub Copilot | off |
688
- | `.clinerules` | Cline | off |
689
- | `.windsurfrules` | Windsurf | off |
690
- | `.aider.conf.yml` | Aider | off |
691
- | `AGENTS.md` | OpenAI Codex | off |
692
- | `.opencode/instructions.md` | OpenCode | off |
693
- | `AMPLIFY.md` | Amp | off |
694
-
695
- Toggle via `/instructions` in the TUI or set `"instructionFiles"` in config:
696
-
697
- ```json
698
- { "instructionFiles": ["soulforge", "claude", "cursorrules"] }
699
- ```
252
+ [Provider options →](docs/provider-options.md) · [Custom providers ](docs/headless.md#custom-providers)
700
253
 
701
254
  ---
702
255
 
703
256
  ## Configuration
704
257
 
705
- Layered config: global (`~/.soulforge/config.json`) + project (`.soulforge/config.json`).
258
+ Layered: global (`~/.soulforge/config.json`) + project (`.soulforge/config.json`).
706
259
 
707
260
  ```json
708
261
  {
709
262
  "defaultModel": "anthropic/claude-sonnet-4-6",
710
263
  "thinking": { "mode": "adaptive" },
711
264
  "repoMap": true,
712
- "semanticSummaries": "ast",
713
- "diffStyle": "default",
714
- "chatStyle": "accent",
715
- "vimHints": true,
716
- "providers": [
717
- {
718
- "id": "deepseek",
719
- "name": "DeepSeek",
720
- "baseURL": "https://api.deepseek.com/v1",
721
- "envVar": "DEEPSEEK_API_KEY",
722
- "models": ["deepseek-chat", "deepseek-coder"]
723
- }
724
- ]
265
+ "taskRouter": {
266
+ "spark": "anthropic/claude-sonnet-4-6",
267
+ "ember": "anthropic/claude-opus-4-6",
268
+ "webSearch": "anthropic/claude-haiku-4-5",
269
+ "desloppify": "anthropic/claude-haiku-4-5",
270
+ "compact": "google/gemini-2.0-flash"
271
+ },
272
+ "instructionFiles": ["soulforge", "claude", "cursorrules"]
725
273
  }
726
274
  ```
727
275
 
728
- See [GETTING_STARTED.md](GETTING_STARTED.md) for the full reference.
729
-
730
- ---
276
+ **Project instructions:** Drop a `SOULFORGE.md` in your project root with conventions, architecture notes, preferences. Also supports `CLAUDE.md`, `.cursorrules`, `AGENTS.md`, and others. Toggle via `/instructions`.
731
277
 
732
- ## Testing
733
-
734
- ```bash
735
- bun test # 2296 tests across 49 files
736
- bun run typecheck # tsc --noEmit
737
- bun run lint # biome check (lint + format)
738
- bun run lint:fix # auto-fix
739
- ```
278
+ See [GETTING_STARTED.md](GETTING_STARTED.md) for the full config reference.
740
279
 
741
280
  ---
742
281
 
743
282
  ## Documentation
744
283
 
745
- | Document | Description |
746
- |----------|-------------|
747
- | **[Command Reference](docs/commands-reference.md)** | All 86 commands by category |
748
- | **[Headless Mode](docs/headless.md)** | Non-interactive CLI for CI/CD, scripting, automation |
749
- | **[Architecture](docs/architecture.md)** | System overview, data flow, component lifecycle |
750
- | **[Repo Map](docs/repo-map.md)** | PageRank, cochange, blast radius, clone detection |
751
- | **[Agent Bus](docs/agent-bus.md)** | Multi-agent coordination, shared cache, edit ownership |
752
- | **[Compound Tools](docs/compound-tools.md)** | rename_symbol, move_symbol, refactor internals |
753
- | **[Compaction](docs/compaction.md)** | V1/V2 context management strategies |
754
- | **[Project Tool](docs/project-tool.md)** | Toolchain detection, pre-commit checks, monorepo discovery |
755
- | **[Steering](docs/steering.md)** | Mid-stream user input injection |
756
- | **[Provider Options](docs/provider-options.md)** | Thinking modes, context management, degradation |
757
- | **[Prompt System](docs/prompt-system.md)** | Per-family prompts, Soul Map injection, mode overlays |
758
- | [Getting Started](GETTING_STARTED.md) | Installation, configuration, first steps |
759
- | [Contributing](CONTRIBUTING.md) | Dev setup, project structure, PR guidelines |
760
- | [Security](SECURITY.md) | Security policy, forbidden file management, responsible disclosure |
284
+ | | |
285
+ |---|---|
286
+ | [Architecture](docs/architecture.md) | System overview, intelligence router, agent system, tool design |
287
+ | [Repo Map](docs/repo-map.md) | PageRank, cochange, blast radius, clone detection, language support |
288
+ | [Agent Bus](docs/agent-bus.md) | Multi-agent coordination, shared cache, edit ownership |
289
+ | [Compaction](docs/compaction.md) | V1/V2 context management, working state extraction |
290
+ | [Compound Tools](docs/compound-tools.md) | read, multi_edit, rename_symbol, move_symbol, refactor, project |
291
+ | [Project Tool](docs/project-tool.md) | 23 ecosystems, pre-commit checks, monorepo discovery |
292
+ | [Headless Mode](docs/headless.md) | CLI flags, JSON/JSONL output, CI/CD integration |
293
+ | [Commands](docs/commands-reference.md) | All 86 slash commands |
294
+ | [Steering](docs/steering.md) | Mid-stream user input |
295
+ | [Provider Options](docs/provider-options.md) | Thinking modes, context management |
296
+ | [Prompt System](docs/prompt-system.md) | Per-family prompts, mode overlays |
297
+ | [Getting Started](GETTING_STARTED.md) | First launch walkthrough |
298
+ | [Contributing](CONTRIBUTING.md) | Dev setup, PR guidelines |
761
299
 
762
300
  ---
763
301
 
764
302
  ## Roadmap
765
303
 
766
- **SoulForge beyond the TUI** — the intelligence layer is being extracted into reusable packages:
304
+ The intelligence layer is being extracted into reusable packages:
767
305
 
768
- ```
769
- @soulforge/intelligence Core library repo map, tools, agent loop
770
-
771
- @soulforge/mcp MCP server — plug into Claude Code, Cursor, Copilot
772
-
773
- sf --headless CLI mode — CI/CD, scripts, automation ✓ shipped
774
-
775
- SoulForge TUI Full experience (what you're looking at now)
776
- ```
306
+ - **`@soulforge/intelligence`**: graph intelligence, tools, and agent orchestration as an importable library
307
+ - **`@soulforge/mcp`**: expose Soul Map tools as MCP servers for Claude Code, Cursor, Copilot, or any MCP client
308
+ - **`sf --headless`**: shipped. Non-interactive mode for CI/CD, automation, and scripting. [Docs →](docs/headless.md)
777
309
 
778
- - **`@soulforge/intelligence`** graph intelligence, 33 tools, and agent orchestration as an importable package. Build your own AI tools on top of SoulForge's brain.
779
- - **`@soulforge/mcp`** — expose soul_grep, soul_find, soul_analyze, soul_impact, navigate, read_code as MCP tools. Any AI tool that supports MCP gets SoulForge's graph intelligence.
780
- - **`sf --headless`** — non-interactive mode. Pipe in a prompt, get back results. For CI/CD, automation, and benchmarks. [Documentation →](docs/headless.md)
310
+ **In progress:** MCP support · repo map visualization · GitHub CLI integration · dispatch worktrees · [ACP support](https://agentclientprotocol.com/)
781
311
 
782
- **In progress:**
783
- - **MCP support** — consume external MCP servers from within SoulForge + expose tools as an MCP server
784
- - **Repo Map visualization** — interactive dependency graph, PageRank heatmap, blast radius explorer
785
- - **GitHub CLI integration** — native `gh_pr`, `gh_issue`, `gh_status` tools with structured output
786
- - **Dispatch worktrees** — git worktree per code agent for conflict-free parallel edits
787
- - **[ACP support](https://agentclientprotocol.com/)** — Agent Client Protocol integration. Run SoulForge as a coding agent inside Zed, JetBrains, Neovim (agentic.nvim), or any ACP-compatible editor. Headless mode already covers 80% of the protocol surface — `sf --acp` would expose graph intelligence, multi-agent dispatch, and all 33 tools via JSON-RPC 2.0 over stdio
788
-
789
- **Planned:**
790
- - **Monorepo graph support** — cross-package dependency tracking for pnpm/npm/yarn workspaces, Cargo workspaces, Go workspaces (`go.work`), Nx/Turborepo, and Bazel/Buck. Currently the repo map treats each workspace root as an isolated unit — cross-package imports resolve as external dependencies instead of internal edges. This means PageRank, blast radius, and unused export detection don't span package boundaries.
791
- - **Benchmarks** — side-by-side comparisons: tool calls, edit accuracy, token efficiency on large codebases
792
- - **Orchestrated workflows** — sequential agent handoffs (planner → TDD → reviewer → security)
312
+ **Planned:** monorepo graph support · benchmarks · orchestrated workflows (planner → TDD → reviewer → security)
793
313
 
794
314
  ---
795
315
 
796
316
  ## Inspirations
797
317
 
798
- SoulForge builds on ideas from projects we respect:
799
-
800
- - **[Aider](https://github.com/Aider-AI/aider)** tree-sitter repo maps with PageRank for code context. Similar approach to SoulForge's repo map, though SoulForge adds cochange analysis, blast radius, clone detection, and real-time graph updates.
801
- - **[OpenCode](https://github.com/opencode-ai/opencode)** per-provider prompt routing. SoulForge's family-specific prompt system takes a similar approach with separate base prompts for Claude, OpenAI, Gemini, and a generic fallback.
802
- - **[Everything Claude Code (ECC)](https://github.com/affaan-m/everything-claude-code)** — design philosophy: enforce behavior with code, not prompt instructions. Our `targetFiles` schema validation, pre-commit lint gates, confident tool output, and auto-enrichment patterns come from this thinking.
803
- - **[Vercel AI SDK](https://sdk.vercel.ai)** — the multi-provider abstraction layer that makes 9 providers possible with a single tool loop interface.
804
- - **[Neovim](https://neovim.io)** — the editor. SoulForge embeds it via msgpack-RPC rather than reimplementing it, because your config and muscle memory shouldn't be a compromise.
318
+ - **[Aider](https://github.com/Aider-AI/aider)**: tree-sitter repo maps with PageRank. SoulForge adds cochange analysis, blast radius, clone detection, and live updates.
319
+ - **[Everything Claude Code](https://github.com/affaan-m/everything-claude-code)**: enforce behavior with code, not prompts. Our schema validation, pre-commit gates, and auto-enrichment patterns come from this thinking.
320
+ - **[Vercel AI SDK](https://sdk.vercel.ai)**: the multi-provider abstraction that makes 10 providers possible.
321
+ - **[Neovim](https://neovim.io)**: embedded via msgpack-RPC. Your config and muscle memory shouldn't be a compromise.
805
322
 
806
323
  ---
807
324
 
808
325
  ## License
809
326
 
810
- [Business Source License 1.1](LICENSE). Free for personal and internal use. Commercial use requires a [commercial license](COMMERCIAL_LICENSE.md). Converts to Apache 2.0 on March 15, 2030. Third-party licenses in [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md).
327
+ [Business Source License 1.1](LICENSE). Free for personal and internal use. Commercial use requires a [commercial license](COMMERCIAL_LICENSE.md). Converts to Apache 2.0 on March 15, 2030.
811
328
 
812
329
  <p align="center">
813
330
  <sub>Built with care by <a href="https://github.com/proxysoul">proxySoul</a></sub>