Model or dataset
proxysoul/Empryo avatar
proxysoul/Empryo

Empryo: A Symbol-Level Coding Agent That Refuses to Grep

Empryo issue tracker + SoulForge (v2). Empryo is the graph-powered AI coding agent that edits symbols, not strings: AST surgery, full LSP, a live code genome. Get it at https://empryo.com

1,175 stars93 forksTypeScriptNOASSERTION

At a glance

What is it?
Empryo (formerly SoulForge) builds a tree-sitter dependency graph before it edits anything, then applies AST operations instead of string patches. The design is coherent, the distribution is unusual, and the license status is unresolved.
Who is it for?
Adopt Empryo if you work in a typed, multi-file codebase where an agent's string patches keep breaking imports, and you are willing to install from the vendor's own script because there is no npm or Homebrew route.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 5 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The Problem Empryo Targets: Agents That Patch Strings Blind

The README makes a specific accusation against the category: most coding agents "grep, read whole files, and patch strings", and as a result they never know what depends on the code they just changed. That is a real failure mode for anyone who has watched an agent rename a function, miss three call sites in other directories, and leave the build broken. Empryo's answer is to build a map first. On launch, tree-sitter parses the repository into a graph of symbols, imports and call sites, ranked by PageRank and git co-change history. The intended audience is engineers working in larger, multi-file codebases where edits ripple, and who already pay for model tokens at a rate they notice. The README frames token spend as a first-class concern: the graph, not the model, does the navigation. This is a positioning choice with a cost, since the graph has to be built and kept current, and the target user is explicitly not someone editing a single script.

How the Genome, Blast Radius and AST Editing Fit Together

The mechanism described in the README has three layers. First, indexing: tree-sitter parses across 30+ languages into what the project calls a code genome, a live dependency graph with PageRank and git co-change ranking. Graph queries are stated to answer in milliseconds and to cost zero LLM tokens, which is the economic argument for the whole design. Second, blast radius: before an edit, the agent is told what imports a file, what historically changes alongside it, and how far a change propagates. Third, mutation: the agent applies one of 65+ symbol-level AST operations, supports atomic batches with all-or-nothing rollback, and gates the result on a typecheck. The claim that "nothing breaks on whitespace" follows directly from operating on the AST rather than on text. Above that sits a multi-agent layer: parallel explore and edit agents share an I/O cache, and a task router assigns ten roles (brain, spark, ember, explore, verify, goal review, desloppify, summarize, compact, web search) to any of 22 providers, per tab or per project. The README also states that routing keeps prompt-cache prefixes stable so sub-agents inherit the parent's cache line. That is a plausible design, but it is a claim from the vendor, not something I can verify from the repository layout.

Installing Empryo and the First Three Commands

Distribution is deliberately narrow. The README gives two install paths: curl -fsSL https://empryo.com/install.sh | bash on macOS and Linux, or irm https://empryo.com/install.ps1 | iex in PowerShell on Windows. It then states plainly that Empryo is not distributed through Homebrew, WinGet or npm, and warns against downloading binaries from GitHub Releases or third-party package managers. After install, the documented flow is empryo --set-key anthropic sk-ant-... to configure a provider key, then cd your-project followed by empryo to start. The README notes that a key is optional if you run locally through Ollama. The older SoulForge line keeps its original channels: brew tap proxysoul/tap && brew install soulforge, or bun install -g @proxysoul/soulforge. Three surfaces are offered from one engine: a native desktop app, a terminal UI, and a headless CLI for scripts and CI. Note the gap between the two products: Empryo has no package-manager route, so the install script is the only supported path, and it is the one piece of the setup you cannot audit through a registry.

The Benchmark Table and What It Does Not Tell You

The README publishes a head-to-head against a tool called pi, run on the same models, repositories and tasks. Round 1 covered 3 bugs across 3 models; Round 2 covered 5 real bugs in hono, zod and ky, pulled from merged PRs, with history scrubbed and regression tests injected after each run. The reported results are 8/9 versus 7/9 and 7/10 versus 6/10 on bugs fixed, 28% and 23% lower cost, 57% and 32% faster wall-clock, and 5.7x fewer input tokens in round 1. The README says full methodology and transcripts live at empryo.com/benchmarks and that the harness is reproducible at proxysoul/pi-vs-empryo-bench. Two things are worth flagging. The comparison is against a single named alternative, not a spread of agents, and the README does not state how many runs per task or how variance was handled. The token-efficiency number is the most interesting claim in the table, because it is the one the graph architecture is supposed to produce, and it is also the one most sensitive to how context is counted. Treat the table as a vendor result with a public harness, not as an independent measurement.

Where Empryo Is the Wrong Tool

The architecture assumes a codebase worth mapping. If your repository is a handful of files, or your work is exploratory scripting in a language tree-sitter handles poorly, the indexing pass buys you little and the graph is overhead. The README does not describe incremental re-indexing behaviour or what happens when the graph goes stale mid-session, so on very large monorepos the cost of keeping the genome current is unstated. There is a second, sharper limitation: the typecheck gate. The README presents a typecheck as the gate on edits, which is meaningful in typed languages and much weaker in dynamically typed ones, where a passing typecheck can still leave a runtime break. Third, the multi-agent router is a configuration surface with ten roles and 22 providers; the README describes per-tab and per-project overrides but does not describe defaults, so a new user has to decide routing before they have any evidence about which model belongs in which seat. Finally, the license. The repository is marked NOASSERTION, and the README says only that the archived SoulForge source remains under its existing license. If you need to know your rights before deploying, that is unresolved from the supplied material.

How Empryo Differs from Aider, Cursor and Plain LSP Tooling

The nearest well-known comparison is an edit-loop agent like Aider, which typically reads files and applies diffs to text. Empryo's stated difference is that the edit is expressed as an AST operation with rollback and a typecheck gate, so whitespace and formatting cannot break the patch. A second comparison is an IDE-integrated assistant: Empryo ships its own desktop app and terminal UI rather than living inside an editor, though it does speak LSP and the README claims 576+ language servers via Mason, plus MCP servers and 13 lifecycle hooks. That matters if you already run Neovim, since the topics list includes neovim and the LSP support suggests an editor can consume Empryo's intelligence rather than the other way round. The third difference is the routing model. Where most agents are one model in a loop, Empryo exposes ten named roles and lets you put a cheap model in the scout seat and a frontier model in the writing seat. The honest framing is that Empryo competes on context selection, not on model quality, and it inherits whatever the underlying providers do.

Maintenance Cost, Release Cadence and the SoulForge Split

The release history shows v2.20.23 through v2.20.25 shipped within roughly a week in July 2026, with the last push to the repository in September 2026. That cadence implies frequent version bumps, and since Empryo is not installed through a package manager, upgrades go through the same install script rather than a versioned registry command. Budget for that: there is no documented pinned-version install path in the README. The SoulForge situation is the other maintenance item. The README states that SoulForge remains downloadable and will keep receiving fixes for bugs and critical issues, while new features and active development have moved to Empryo. So the older line is in maintenance mode, not dead, and the install routes for it (Homebrew tap, bun global) still exist. If you are already on SoulForge, the migration is a reinstall rather than an in-place upgrade, and the repository you are reading is now an issue tracker for the new product, not the source of it.

Who Should Adopt Empryo, and What to Check First

The profile that fits is a team or solo engineer working in a typed, multi-file codebase, already paying per token for an agent, and frustrated by edits that break imports in files the agent never opened. The graph-first design is aimed exactly at that, and the published benchmark harness gives you a way to check the token claim yourself rather than take it. The profile that does not fit is anyone whose work is mostly single-file, anyone who needs a distro or registry to vet the binary, and anyone who needs a settled license before commercial deployment. Three things to verify before you commit. Run the install script on a disposable machine and confirm what it writes to disk. Check that empryo --set-key works against the provider you actually use, since the README lists 22 providers but only demonstrates Anthropic. And open LICENSE in the repository to see what the NOASSERTION marker is hiding, because the README does not answer that question and the answer determines whether Empryo can ship inside your product.

Editorial conclusion

Adopt Empryo if you work in a typed, multi-file codebase where an agent's string patches keep breaking imports, and you are willing to install from the vendor's own script because there is no npm or Homebrew route. Skip it if your work is mostly single-file scripts, if you need a package-manager-audited supply chain, or if you need a clear license before deploying commercially: the repository is marked NOASSERTION and the README only says the archived SoulForge source sits under its existing license. Before committing, run the install script on a scratch machine, confirm which providers your key works against with empryo --set-key, and read LICENSE in the repository rather than trusting the badge.

Official sources

  1. Issues
  2. Project website
  3. proxysoul/Empryo on GitHub
  4. README
  5. Releases
Community notes

Community notes