@proxysoul/soulforge 1.9.0 → 2.1.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 +159 -656
- package/dist/index.js +26156 -16994
- package/dist/workers/intelligence.worker.js +24 -4
- package/dist/workers/io.worker.js +35 -10
- package/package.json +9 -8
package/README.md
CHANGED
|
@@ -1,45 +1,37 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://paypal.me/waeru"><img src="https://img.shields.io/badge/%E2%9A%94%EF%B8%8F_Fuel_the_Forge-PayPal-9B30FF.svg?style=for-the-badge&logo=paypal&logoColor=white" alt="Fuel the Forge" /></a>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
1
5
|
<h1 align="center">SoulForge</h1>
|
|
2
6
|
|
|
3
7
|
<p align="center">
|
|
4
|
-
<strong>
|
|
5
|
-
|
|
8
|
+
<strong>The AI coding agent that already knows your codebase.</strong><br/>
|
|
9
|
+
Graph-powered intelligence · multi-agent dispatch · terminal-native
|
|
6
10
|
</p>
|
|
7
11
|
|
|
8
12
|
<p align="center">
|
|
9
13
|
<a href="LICENSE"><img src="https://img.shields.io/badge/License-BSL%201.1-blue.svg" alt="License" /></a>
|
|
10
14
|
<a href="#"><img src="https://img.shields.io/badge/version-1.7.0-brightgreen.svg" alt="Version" /></a>
|
|
11
15
|
<a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-strict-blue.svg" alt="TypeScript" /></a>
|
|
12
|
-
<
|
|
16
|
+
<img src="https://img.shields.io/badge/tests-2296%20passing-brightgreen.svg" alt="Tests" />
|
|
13
17
|
<a href="https://bun.sh"><img src="https://img.shields.io/badge/runtime-Bun-f472b6.svg" alt="Bun" /></a>
|
|
14
18
|
</p>
|
|
15
19
|
|
|
20
|
+
|
|
16
21
|
<p align="center">
|
|
17
|
-
<
|
|
22
|
+
<img src="assets/main-1.png" alt="SoulForge — Graph-Powered Code Intelligence" width="900" />
|
|
18
23
|
</p>
|
|
19
24
|
|
|
20
25
|
---
|
|
21
26
|
|
|
22
27
|
## Table of Contents
|
|
23
28
|
|
|
24
|
-
- [
|
|
25
|
-
- [
|
|
26
|
-
- [Architecture](#architecture)
|
|
29
|
+
- [Why SoulForge?](#why-soulforge)
|
|
30
|
+
- [How it compares](#how-it-compares)
|
|
27
31
|
- [Installation](#installation)
|
|
28
32
|
- [Usage](#usage)
|
|
29
|
-
|
|
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)
|
|
33
|
+
- [Providers](#providers)
|
|
41
34
|
- [Configuration](#configuration)
|
|
42
|
-
- [Testing](#testing)
|
|
43
35
|
- [Documentation](#documentation)
|
|
44
36
|
- [Roadmap](#roadmap)
|
|
45
37
|
- [Inspirations](#inspirations)
|
|
@@ -47,288 +39,109 @@
|
|
|
47
39
|
|
|
48
40
|
---
|
|
49
41
|
|
|
50
|
-
##
|
|
51
|
-
|
|
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.
|
|
53
|
-
|
|
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
|
|
60
|
-
|
|
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 |
|
|
75
|
-
|
|
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.*
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## Highlights
|
|
81
|
-
|
|
82
|
-
<table>
|
|
83
|
-
<tr>
|
|
84
|
-
<td width="50%">
|
|
85
|
-
|
|
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.
|
|
42
|
+
## Why SoulForge?
|
|
88
43
|
|
|
89
|
-
|
|
90
|
-
<td width="50%">
|
|
44
|
+
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.
|
|
91
45
|
|
|
92
|
-
|
|
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)
|
|
46
|
+
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.
|
|
94
47
|
|
|
95
|
-
|
|
96
|
-
</tr>
|
|
97
|
-
<tr>
|
|
98
|
-
<td>
|
|
48
|
+
### How SoulForge saves you 30-50% on API costs & in less time
|
|
99
49
|
|
|
100
|
-
|
|
101
|
-
|
|
50
|
+
| | |
|
|
51
|
+
|---|---|
|
|
52
|
+
| **[Live Soul Map](docs/repo-map.md)** | A SQLite-backed graph of every file, symbol, import, and export — ranked by PageRank, enriched with git co-change history, updated in real-time. The agent already knows where everything lives and how far an edit will ripple. No wasted tokens orienting itself. |
|
|
53
|
+
| **[Surgical reads](docs/architecture.md)** | Instead of reading entire files, the agent extracts exactly the function or class it needs by name via a 4-tier intelligence chain (LSP → ts-morph → tree-sitter → regex) across 30 languages. A 500-line file becomes a 20-line symbol extraction. |
|
|
54
|
+
| **[Zero-cost compaction](docs/compaction.md)** | State extraction runs as the conversation happens: files touched, decisions made, errors hit. When context gets long, it compacts instantly from this pre-built state. No LLM call, no latency, no cost. |
|
|
55
|
+
| **[Multi-agent dispatch](docs/agent-bus.md)** | Parallelize work across explore, code, and web search agents. The first agent to read a large file caches it — others get a compact stub with symbol names and line ranges. Edit coordination prevents conflicts. |
|
|
56
|
+
| **[Multi-tab coordination](docs/cross-tab-coordination.md)** | Run concurrent sessions with different models and modes per tab. Agents see what other tabs are editing, get warnings on contested files, and git operations coordinate automatically. |
|
|
57
|
+
| **[Compound tools](docs/compound-tools.md)** | `read` batches files in parallel with surgical extraction. `multi_edit` applies changes atomically. `rename_symbol`, `move_symbol`, `rename_file` are compiler-guaranteed and cross-file. `project` auto-detects lint/test/build across 23 ecosystems. |
|
|
58
|
+
| **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. |
|
|
59
|
+
| **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. |
|
|
102
60
|
|
|
103
|
-
|
|
104
|
-
<td>
|
|
61
|
+
### And also
|
|
105
62
|
|
|
106
|
-
|
|
107
|
-
|
|
63
|
+
- **Lock-in mode.** Hides agent narration during work, shows only tool activity and the final answer. Toggle via `/lock-in` or config.
|
|
64
|
+
- **Embedded Neovim.** Your actual config, plugins, and LSP servers. The AI works through the same editor you use. [Deep dive →](docs/architecture.md)
|
|
65
|
+
- **12 providers.** Anthropic, OpenAI, Google, xAI, GitHub Copilot, GitHub Models, Ollama, OpenRouter, LLM Gateway, Vercel AI Gateway, Proxy, and any OpenAI-compatible API.
|
|
66
|
+
- **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)
|
|
67
|
+
- **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.
|
|
68
|
+
- **User steering.** Type while the agent works. Messages queue up and reach the agent at the next step. [Deep dive →](docs/steering.md)
|
|
69
|
+
- **Skills & approval gates.** Installable skills for domain-specific work. Destructive actions require confirmation. Auto mode when you want full autonomy.
|
|
70
|
+
- **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)
|
|
108
71
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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)
|
|
144
|
-
|
|
145
|
-
</td>
|
|
146
|
-
<td>
|
|
147
|
-
|
|
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)
|
|
150
|
-
|
|
151
|
-
</td>
|
|
152
|
-
</tr>
|
|
153
|
-
<tr>
|
|
154
|
-
<td>
|
|
155
|
-
|
|
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)
|
|
158
|
-
|
|
159
|
-
</td>
|
|
160
|
-
<td>
|
|
161
|
-
|
|
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.
|
|
164
|
-
|
|
165
|
-
</td>
|
|
166
|
-
</tr>
|
|
167
|
-
</table>
|
|
72
|
+
<p align="center">
|
|
73
|
+
<img src="assets/main-2.png" alt="SoulForge — Multi-Agent Dispatch" width="900" />
|
|
74
|
+
</p>
|
|
168
75
|
|
|
169
76
|
---
|
|
170
77
|
|
|
171
|
-
##
|
|
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]
|
|
78
|
+
## How it compares
|
|
179
79
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
Bus --> |spawns| C[Code Agent<br/>edits]
|
|
193
|
-
|
|
194
|
-
I & E & C --> |read/write cache| Bus
|
|
195
|
-
|
|
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.
|
|
217
|
-
|
|
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]
|
|
227
|
-
|
|
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
|
-
```
|
|
80
|
+
| | SoulForge | Claude Code | Copilot CLI | Codex CLI | Aider |
|
|
81
|
+
|---|---|---|---|---|---|
|
|
82
|
+
| **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 |
|
|
83
|
+
| **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 | — |
|
|
84
|
+
| **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 |
|
|
85
|
+
| **Multi-agent** | Parallel dispatch with shared file/tool cache and edit coordination | Subagents + Agent Teams | Subagents + Fleet | Multi-agent v2 | Single agent |
|
|
86
|
+
| **Multi-tab** | Concurrent tabs with per-tab models, file claim awareness, cross-tab git coordination | — | — | — | — |
|
|
87
|
+
| **Task routing** | Per-task model assignment (spark, ember, web search, verify, desloppify, compact) | Single model | Single model | Per-agent model | Single model |
|
|
88
|
+
| **Compound tools** | `read` (batch + surgical), `multi_edit` (atomic), `rename_symbol`, `move_symbol`, `rename_file`, `refactor`, `project` | Rename via LSP | — | — | — |
|
|
89
|
+
| **Editor** | Embedded Neovim (your config, your plugins) | No editor | No editor | No editor | No editor |
|
|
90
|
+
| **Providers** | 12 + custom OpenAI-compatible | Anthropic only | Multi-model | OpenAI only | 100+ LLMs |
|
|
91
|
+
| **License** | BSL 1.1 (source-available) | Proprietary | Proprietary | Apache 2.0 | Apache 2.0 |
|
|
233
92
|
|
|
234
|
-
|
|
235
|
-
|
|
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
|
-
```
|
|
93
|
+
> *Competitor features verified as of March 29, 2026. [Let us know](https://github.com/ProxySoul/soulforge/issues) if something's changed.*
|
|
264
94
|
|
|
265
95
|
---
|
|
266
96
|
|
|
267
97
|
## Installation
|
|
268
98
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
### Prebuilt Binary (recommended)
|
|
99
|
+
macOS and Linux. SoulForge checks for prerequisites on first launch and offers to install Neovim and Nerd Fonts if missing.
|
|
272
100
|
|
|
273
|
-
|
|
101
|
+
### Homebrew (recommended)
|
|
274
102
|
|
|
275
103
|
```bash
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
./install.sh
|
|
104
|
+
brew tap proxysoul/tap
|
|
105
|
+
brew install soulforge
|
|
279
106
|
```
|
|
280
107
|
|
|
281
|
-
The installer places everything in `~/.soulforge/` and adds it to your PATH. Then run `soulforge` (or `sf`).
|
|
282
|
-
|
|
283
108
|
<details>
|
|
284
|
-
<summary><strong>
|
|
109
|
+
<summary><strong>Bun (global install)</strong></summary>
|
|
285
110
|
|
|
286
111
|
```bash
|
|
287
|
-
|
|
288
|
-
|
|
112
|
+
curl -fsSL https://bun.sh/install | bash
|
|
113
|
+
bun install -g @proxysoul/soulforge
|
|
114
|
+
soulforge
|
|
289
115
|
```
|
|
290
116
|
|
|
291
117
|
</details>
|
|
292
118
|
|
|
293
119
|
<details>
|
|
294
|
-
<summary><strong>
|
|
120
|
+
<summary><strong>Prebuilt binary</strong></summary>
|
|
295
121
|
|
|
296
|
-
|
|
122
|
+
Download from [GitHub Releases](https://github.com/ProxySoul/soulforge/releases/latest), extract, and run the installer:
|
|
297
123
|
|
|
298
124
|
```bash
|
|
299
|
-
|
|
300
|
-
curl -fsSL https://bun.sh/install | bash
|
|
301
|
-
|
|
302
|
-
# Install SoulForge globally
|
|
303
|
-
bun install -g @proxysoul/soulforge
|
|
304
|
-
|
|
305
|
-
soulforge # or: sf
|
|
125
|
+
tar xzf soulforge-*.tar.gz && cd soulforge-*/ && ./install.sh
|
|
306
126
|
```
|
|
307
127
|
|
|
128
|
+
Installs to `~/.soulforge/`, adds to PATH.
|
|
129
|
+
|
|
308
130
|
</details>
|
|
309
131
|
|
|
310
132
|
<details>
|
|
311
|
-
<summary><strong>Self-contained bundle
|
|
133
|
+
<summary><strong>Self-contained bundle</strong></summary>
|
|
312
134
|
|
|
313
|
-
|
|
135
|
+
Ships everything: Neovim 0.11, ripgrep, fd, lazygit, tree-sitter grammars, Nerd Font symbols. No system dependencies.
|
|
314
136
|
|
|
315
137
|
```bash
|
|
316
|
-
git clone https://github.com/ProxySoul/soulforge.git
|
|
317
|
-
|
|
318
|
-
bun install
|
|
319
|
-
|
|
320
|
-
# Build bundle (macOS ARM64 by default)
|
|
321
|
-
./scripts/bundle.sh # → dist/bundle/soulforge-1.0.0-darwin-arm64/
|
|
138
|
+
git clone https://github.com/ProxySoul/soulforge.git && cd soulforge && bun install
|
|
139
|
+
./scripts/bundle.sh # macOS ARM64
|
|
322
140
|
./scripts/bundle.sh x64 # Intel Mac
|
|
323
141
|
./scripts/bundle.sh x64 linux # Linux x64
|
|
142
|
+
./scripts/bundle.sh x64-baseline linux # Linux x64 (older CPUs without AVX)
|
|
324
143
|
./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
|
|
144
|
+
cd dist/bundle/soulforge-*/ && ./install.sh
|
|
332
145
|
```
|
|
333
146
|
|
|
334
147
|
</details>
|
|
@@ -339,17 +152,10 @@ cd dist/bundle/soulforge-*/
|
|
|
339
152
|
Requires [Bun](https://bun.sh) >= 1.0 and [Neovim](https://neovim.io) >= 0.11.
|
|
340
153
|
|
|
341
154
|
```bash
|
|
342
|
-
git clone https://github.com/ProxySoul/soulforge.git
|
|
343
|
-
|
|
344
|
-
|
|
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
|
|
155
|
+
git clone https://github.com/ProxySoul/soulforge.git && cd soulforge && bun install
|
|
156
|
+
bun run dev # development mode
|
|
157
|
+
# or
|
|
158
|
+
bun run build && bun link && soulforge
|
|
353
159
|
```
|
|
354
160
|
|
|
355
161
|
</details>
|
|
@@ -357,457 +163,154 @@ soulforge
|
|
|
357
163
|
### Quick start
|
|
358
164
|
|
|
359
165
|
```bash
|
|
360
|
-
soulforge
|
|
361
|
-
soulforge --set-key anthropic sk-ant-... #
|
|
362
|
-
soulforge --
|
|
166
|
+
soulforge # Launch, pick a model with Ctrl+L
|
|
167
|
+
soulforge --set-key anthropic sk-ant-... # Save a key
|
|
168
|
+
soulforge --headless "your prompt here" # Non-interactive mode
|
|
363
169
|
```
|
|
364
170
|
|
|
365
|
-
See [GETTING_STARTED.md](GETTING_STARTED.md) for a full walkthrough
|
|
171
|
+
See [GETTING_STARTED.md](GETTING_STARTED.md) for a full walkthrough.
|
|
366
172
|
|
|
367
173
|
---
|
|
368
174
|
|
|
369
175
|
## Usage
|
|
370
176
|
|
|
371
|
-
### CLI Flags
|
|
372
|
-
|
|
373
177
|
```bash
|
|
374
178
|
soulforge # Launch TUI
|
|
375
|
-
soulforge --
|
|
376
|
-
soulforge --headless "
|
|
377
|
-
soulforge --headless --
|
|
378
|
-
soulforge --headless --
|
|
379
|
-
soulforge --headless --
|
|
380
|
-
soulforge --headless --
|
|
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
|
|
179
|
+
soulforge --headless "prompt" # Stream to stdout
|
|
180
|
+
soulforge --headless --json "prompt" # Structured JSON output
|
|
181
|
+
soulforge --headless --chat # Interactive multi-turn
|
|
182
|
+
soulforge --headless --model provider/model # Override model
|
|
183
|
+
soulforge --headless --mode architect # Read-only analysis
|
|
184
|
+
soulforge --headless --diff "fix the bug" # Show changed files
|
|
397
185
|
```
|
|
398
186
|
|
|
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
187
|
| Mode | Description |
|
|
452
188
|
|------|-------------|
|
|
453
|
-
|
|
|
454
|
-
|
|
|
455
|
-
|
|
|
456
|
-
|
|
|
457
|
-
|
|
|
458
|
-
|
|
|
189
|
+
| `default` | Full agent with all tools |
|
|
190
|
+
| `auto` | Executes immediately, no questions |
|
|
191
|
+
| `architect` | Read-only analysis and review |
|
|
192
|
+
| `socratic` | Guided learning through questions |
|
|
193
|
+
| `challenge` | Pushes back on your assumptions |
|
|
194
|
+
| `plan` | Planning mode, no code changes |
|
|
459
195
|
|
|
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)
|
|
514
|
-
|
|
515
|
-
</details>
|
|
196
|
+
[Full CLI reference](docs/headless.md)
|
|
516
197
|
|
|
517
198
|
---
|
|
518
199
|
|
|
519
|
-
##
|
|
200
|
+
## Providers
|
|
201
|
+
|
|
202
|
+
| Provider | Setup |
|
|
203
|
+
|----------|-------|
|
|
204
|
+
| [**LLM Gateway**](https://llmgateway.io/?ref=6tjJR2H3X4E9RmVQiQwK) | `LLM_GATEWAY_API_KEY` |
|
|
205
|
+
| [**Anthropic**](https://console.anthropic.com/) | `ANTHROPIC_API_KEY` |
|
|
206
|
+
| [**OpenAI**](https://platform.openai.com/) | `OPENAI_API_KEY` |
|
|
207
|
+
| [**Google**](https://aistudio.google.com/) | `GOOGLE_GENERATIVE_AI_API_KEY` |
|
|
208
|
+
| [**xAI**](https://console.x.ai/) | `XAI_API_KEY` |
|
|
209
|
+
| [**GitHub Copilot**](https://github.com/features/copilot) | OAuth token from IDE ([setup](docs/copilot-provider.md)) |
|
|
210
|
+
| [**GitHub Models**](https://github.com/marketplace/models) | `GITHUB_MODELS_API_KEY` (PAT with `models:read`) |
|
|
211
|
+
| [**Ollama**](https://ollama.ai) | Auto-detected |
|
|
212
|
+
| [**OpenRouter**](https://openrouter.ai) | `OPENROUTER_API_KEY` |
|
|
213
|
+
| [**Vercel AI Gateway**](https://vercel.com/ai-gateway) | `AI_GATEWAY_API_KEY` |
|
|
214
|
+
| [**Proxy**](https://github.com/router-for-me/CLIProxyAPI) | `PROXY_API_KEY` |
|
|
215
|
+
| **Custom** | Any OpenAI-compatible API |
|
|
520
216
|
|
|
521
|
-
|
|
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 |
|
|
217
|
+
**GitHub Copilot**: Sign in via your IDE (VS Code, JetBrains), copy `oauth_token` from `~/.config/github-copilot/apps.json`, save with `/keys` or `--set-key copilot`. [Full setup guide](docs/copilot-provider.md).
|
|
533
218
|
|
|
534
|
-
|
|
219
|
+
**GitHub Models**: Free playground API with per-token billing. Create a fine-grained PAT with `models:read` scope. Lower rate limits than Copilot.
|
|
535
220
|
|
|
536
|
-
Add
|
|
221
|
+
Add custom providers in config, no code changes:
|
|
537
222
|
|
|
538
223
|
```json
|
|
539
|
-
// ~/.soulforge/config.json (global) or .soulforge/config.json (project)
|
|
540
224
|
{
|
|
541
|
-
"providers": [
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
"modelsAPI": "https://api.deepseek.com/v1/models"
|
|
549
|
-
}
|
|
550
|
-
]
|
|
225
|
+
"providers": [{
|
|
226
|
+
"id": "deepseek",
|
|
227
|
+
"name": "DeepSeek",
|
|
228
|
+
"baseURL": "https://api.deepseek.com/v1",
|
|
229
|
+
"envVar": "DEEPSEEK_API_KEY",
|
|
230
|
+
"models": ["deepseek-chat", "deepseek-coder"]
|
|
231
|
+
}]
|
|
551
232
|
}
|
|
552
233
|
```
|
|
553
234
|
|
|
554
|
-
|
|
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
|
-
```
|
|
235
|
+
[Custom providers](docs/headless.md#custom-providers) · [Provider options](docs/provider-options.md)
|
|
700
236
|
|
|
701
237
|
---
|
|
702
238
|
|
|
703
239
|
## Configuration
|
|
704
240
|
|
|
705
|
-
Layered
|
|
241
|
+
Layered: global (`~/.soulforge/config.json`) + project (`.soulforge/config.json`).
|
|
706
242
|
|
|
707
243
|
```json
|
|
708
244
|
{
|
|
709
245
|
"defaultModel": "anthropic/claude-sonnet-4-6",
|
|
710
246
|
"thinking": { "mode": "adaptive" },
|
|
711
247
|
"repoMap": true,
|
|
712
|
-
"
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
"baseURL": "https://api.deepseek.com/v1",
|
|
721
|
-
"envVar": "DEEPSEEK_API_KEY",
|
|
722
|
-
"models": ["deepseek-chat", "deepseek-coder"]
|
|
723
|
-
}
|
|
724
|
-
]
|
|
248
|
+
"taskRouter": {
|
|
249
|
+
"spark": "anthropic/claude-sonnet-4-6",
|
|
250
|
+
"ember": "anthropic/claude-opus-4-6",
|
|
251
|
+
"webSearch": "anthropic/claude-haiku-4-5",
|
|
252
|
+
"desloppify": "anthropic/claude-haiku-4-5",
|
|
253
|
+
"compact": "google/gemini-2.0-flash"
|
|
254
|
+
},
|
|
255
|
+
"instructionFiles": ["soulforge", "claude", "cursorrules"]
|
|
725
256
|
}
|
|
726
257
|
```
|
|
727
258
|
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
---
|
|
259
|
+
**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
260
|
|
|
732
|
-
|
|
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
|
-
```
|
|
261
|
+
See [GETTING_STARTED.md](GETTING_STARTED.md) for the full config reference.
|
|
740
262
|
|
|
741
263
|
---
|
|
742
264
|
|
|
743
265
|
## Documentation
|
|
744
266
|
|
|
745
|
-
|
|
|
746
|
-
|
|
747
|
-
|
|
|
748
|
-
|
|
|
749
|
-
|
|
|
750
|
-
|
|
|
751
|
-
|
|
|
752
|
-
|
|
|
753
|
-
|
|
|
754
|
-
|
|
|
755
|
-
|
|
|
756
|
-
|
|
|
757
|
-
|
|
|
758
|
-
| [
|
|
759
|
-
| [
|
|
760
|
-
| [
|
|
267
|
+
| | |
|
|
268
|
+
|---|---|
|
|
269
|
+
| [Architecture](docs/architecture.md) | System overview, intelligence router, agent system, tool design |
|
|
270
|
+
| [Repo Map](docs/repo-map.md) | PageRank, cochange, blast radius, clone detection, language support |
|
|
271
|
+
| [Agent Bus](docs/agent-bus.md) | Multi-agent coordination, shared cache, edit ownership |
|
|
272
|
+
| [Compaction](docs/compaction.md) | V1/V2 context management, working state extraction |
|
|
273
|
+
| [Compound Tools](docs/compound-tools.md) | read, multi_edit, rename_symbol, move_symbol, refactor, project |
|
|
274
|
+
| [Project Tool](docs/project-tool.md) | 23 ecosystems, pre-commit checks, monorepo discovery |
|
|
275
|
+
| [Headless Mode](docs/headless.md) | CLI flags, JSON/JSONL output, CI/CD integration |
|
|
276
|
+
| [Commands](docs/commands-reference.md) | All 86 slash commands |
|
|
277
|
+
| [Steering](docs/steering.md) | Mid-stream user input |
|
|
278
|
+
| [Provider Options](docs/provider-options.md) | Thinking modes, context management |
|
|
279
|
+
| [Copilot Provider](docs/copilot-provider.md) | Setup, legal review |
|
|
280
|
+
| [Cross-Tab Coordination](docs/cross-tab-coordination.md) | Multi-tab file claims, git coordination |
|
|
281
|
+
| [Themes](docs/themes.md) | 24 themes, custom themes, hot reload |
|
|
282
|
+
| [Prompt System](docs/prompt-system.md) | Per-family prompts, mode overlays |
|
|
283
|
+
| [Getting Started](GETTING_STARTED.md) | First launch walkthrough |
|
|
284
|
+
| [Contributing](CONTRIBUTING.md) | Dev setup, PR guidelines |
|
|
761
285
|
|
|
762
286
|
---
|
|
763
287
|
|
|
764
288
|
## Roadmap
|
|
765
289
|
|
|
766
|
-
|
|
290
|
+
The intelligence layer is being extracted into reusable packages:
|
|
767
291
|
|
|
768
|
-
|
|
769
|
-
|
|
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
|
-
```
|
|
292
|
+
- **`@soulforge/intelligence`**: graph intelligence, tools, and agent orchestration as an importable library
|
|
293
|
+
- **`@soulforge/mcp`**: expose Soul Map tools as MCP servers for Claude Code, Cursor, Copilot, or any MCP client
|
|
294
|
+
- **`sf --headless`**: shipped. Non-interactive mode for CI/CD, automation, and scripting. [Docs →](docs/headless.md)
|
|
777
295
|
|
|
778
|
-
|
|
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)
|
|
296
|
+
**In progress:** MCP support · repo map visualization · GitHub CLI integration · dispatch worktrees · [ACP support](https://agentclientprotocol.com/)
|
|
781
297
|
|
|
782
|
-
**
|
|
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)
|
|
298
|
+
**Planned:** monorepo graph support · benchmarks · orchestrated workflows (planner → TDD → reviewer → security)
|
|
793
299
|
|
|
794
300
|
---
|
|
795
301
|
|
|
796
302
|
## Inspirations
|
|
797
303
|
|
|
798
|
-
SoulForge
|
|
799
|
-
|
|
800
|
-
- **[
|
|
801
|
-
- **[
|
|
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.
|
|
304
|
+
- **[Aider](https://github.com/Aider-AI/aider)**: tree-sitter repo maps with PageRank. SoulForge adds cochange analysis, blast radius, clone detection, and live updates.
|
|
305
|
+
- **[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.
|
|
306
|
+
- **[Vercel AI SDK](https://sdk.vercel.ai)**: the multi-provider abstraction that makes 12 providers possible.
|
|
307
|
+
- **[Neovim](https://neovim.io)**: embedded via msgpack-RPC. Your config and muscle memory shouldn't be a compromise.
|
|
805
308
|
|
|
806
309
|
---
|
|
807
310
|
|
|
808
311
|
## License
|
|
809
312
|
|
|
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.
|
|
313
|
+
[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
314
|
|
|
812
315
|
<p align="center">
|
|
813
316
|
<sub>Built with care by <a href="https://github.com/proxysoul">proxySoul</a></sub>
|