Empryo: a graph-powered coding agent that edits symbols instead of strings
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
At a glance
- What is it?
- Empryo, formerly SoulForge, builds a tree-sitter dependency graph of your repository before it touches a file, then edits through the AST. Here is what the README claims, how it installs, and where the model breaks down.
- Who is it for?
- Empryo is aimed at engineers working in large, statically analyzable codebases who are already paying per token and want the navigation bill to drop. It is a poor fit for greenfield scripts, notebooks, or polyglot repos where tree-sitter coverage is thin, and for anyone who cannot run a curl-to-shell installer on a work machine.
- 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 4 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 October 1, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The problem Empryo targets: agents that grep and never look up
The README opens with a direct criticism of the category: most coding agents "grep, read whole files, and patch strings" and never learn what depends on the code they just changed. That is a real failure mode. A string patch succeeds at the text level and fails at the type level, and the agent only discovers the second failure on the next compile. Empryo's answer is to build a model of the repository first and consult it before mutating anything. The audience is engineers in repositories large enough that reading whole files is expensive, and the pitch is explicitly economic: the graph answers navigation questions for zero LLM tokens, so the agent reads less and the bill is smaller. Whether that trade pays off depends on how well tree-sitter parses your language and how much of your work is symbol-level rather than configuration or prose.
How the code genome is built and queried
On launch, tree-sitter parses the repository into a live graph of symbols, imports, and call sites. The README states that nodes are ranked by PageRank and by git co-change history, and that this ranking feeds a blast-radius view: before an edit, the agent can see what imports a file, what historically changes alongside it, and how far a change propagates. Graph queries are described as answering in milliseconds at zero token cost, which is the mechanism behind the token claim rather than a separate optimization. Editing then happens through the AST. The README lists 65+ symbol-level operations, atomic batches with all-or-nothing rollback, and a typecheck as the gate before an edit is accepted. The claim that "nothing breaks on whitespace" follows from that design: if the operation targets a symbol, reformatting the surrounding file does not invalidate the edit. The same mechanism explains the limitation. A symbol-level editor depends on a parser that can resolve your language, and a graph depends on imports being statically visible.
Installing Empryo and running a first session
The README gives two install paths, one for macOS and Linux and one for Windows PowerShell. Both pipe a remote script into a shell, so the reader should inspect the script before running it on a machine with credentials.
# macOS / Linux
curl -fsSL https://empryo.com/install.sh | bash
# Windows (PowerShell)
irm https://empryo.com/install.ps1 | iexThe README states that official installers and direct downloads are available only from empryo.com/download, and that Empryo is not distributed through Homebrew, WinGet, or npm. It also warns against downloading binaries from GitHub Releases or third-party package managers. Do not confuse this with the older SoulForge package, which is still installable through a Homebrew tap or the npm registry under a different name. After installation, the next step is to point Empryo at a model. The README shows a key being set for Anthropic, and notes that Ollama can be used locally with no key required.
empryo --set-key anthropic sk-ant-... # or run locally with Ollama — no key required
cd your-project
empryoRunning empryo inside a project directory is what triggers the initial parse and graph build. The README does not state how long that first index takes on a large repository, so treat the first launch as an unknown and measure it yourself.
Where the symbol-level model stops working
The design assumes your code is parseable and your dependencies are visible. Neither holds universally. Generated code, heavy metaprogramming, macros, and template-heavy files often defeat tree-sitter, and the README's "30+ languages" is a count, not a guarantee of depth in any one of them. A repository that is mostly YAML, Dockerfiles, SQL migrations, and shell glue has few symbols worth tracking, so the graph adds index time and returns little. The same applies to a monorepo whose packages communicate over a message bus: the call-site graph will not see the coupling, and the blast radius it reports will be understated. The README's benchmark table is also self-published, run against a single named competitor, with results hosted at empryo.com/benchmarks and a reproduction repository at proxysoul/pi-vs-empryo-bench. That is a more honest setup than a bare claim, but it is still one comparison on one task set, and the README does not report a case where Empryo lost.
Multi-agent routing and what it costs you in configuration
Empryo is not a single model in a loop. The README describes ten routable roles, including brain, spark (scout), ember (code), explore, verify, goal review, desloppify, summarize, compact, and web search, each of which can be assigned any model from any of the 22 providers the project lists. Routing can be set globally, per project, or per workspace tab, and custom agents can be defined with their own prompt, model, and tool policy. The stated benefit is cost shaping: a cheap model scouts, an expensive one writes, a reviewer judges with clean context. There is a second, less obvious benefit in prompt caching. The README says sub-agents inherit their parent's cache line so repeated context bills at cache-read rates. The cost of all this is configuration surface. Ten roles times 22 providers times per-tab overrides is a lot of knobs, and the README does not describe a default routing that works without tuning. A team that will not invest in that tuning is paying for flexibility it will not use.
Empryo compared with a plain terminal agent
The natural alternative is an agent with no index at all: it receives a prompt, greps, reads files, and patches text. That approach is simpler to reason about, has no first-launch indexing step, and works identically on a JavaScript monorepo and a directory of Terraform. It also fails differently. Without a dependency graph, the agent cannot answer "what breaks if I touch this" except by reading more files, which is exactly the token cost Empryo is trying to remove. The trade is index time and language coverage on one side, per-task token spend and edit precision on the other. Empryo also occupies a different position on surfaces: the README describes three, a native desktop app, a full terminal UI, and a headless CLI for scripts and CI, all sharing one genome. A plain grep-based agent typically ships one. If your workflow is a CI job that applies a narrow fix, the graph is overhead. If it is an afternoon of refactoring across a typed codebase, it is the whole point.
Licence, maintenance and upgrade cost
The repository's package.json declares "license": "BUSL-1.1", while the GitHub metadata reports NOASSERTION. Those are not contradictory so much as incomplete: the metadata did not classify the licence, and the manifest names the Business Source License 1.1. The repository also carries a COMMERCIAL_LICENSE.md and a THIRD_PARTY_LICENSES.md at the top level, which is where a commercial-licence path would be described. Read both files before shipping Empryo inside a product; this is a licence question, not a technical one, and it is worth a lawyer's time if the answer matters to your business. On maintenance, the repository is not archived and the last push was on 2026-09-09, which is recent. The release history is dense: v2.20.23 on 2026-07-08, v2.20.24 and v2.20.25 both on 2026-07-12. That cadence is the upgrade cost. Patch-level releases landing twice in one day mean you should pin a version and read CHANGELOG.md before moving, rather than tracking the installer script's latest. Note also that this repository is the issue tracker, not the product source: the README states that the SoulForge source remains archived here under its existing licence, and that new development has moved to Empryo.
Editorial conclusion
Empryo is aimed at engineers working in large, statically analyzable codebases who are already paying per token and want the navigation bill to drop. It is a poor fit for greenfield scripts, notebooks, or polyglot repos where tree-sitter coverage is thin, and for anyone who cannot run a curl-to-shell installer on a work machine. Before adopting it, verify three things: that your primary language is inside the advertised 30-plus set, that the BUSL-1.1 terms in LICENSE and COMMERCIAL_LICENSE.md are acceptable for your use, and that the install script at empryo.com/install.sh is what you expect, since the README states the project is not distributed through Homebrew, WinGet, or npm.
Frequently asked questions
Is Empryo free to use?
The README states that Empryo is free to use and that you bring your own model key, or run locally with Ollama or LM Studio with no key required. The package manifest declares the BUSL-1.1 licence, and the repository also contains a COMMERCIAL_LICENSE.md, so free to use and free to redistribute are separate questions.
Does Empryo work on Windows?
Yes. The README gives a PowerShell install command and lists macOS, Linux, and Windows as supported platforms, and the package.json os field lists darwin, linux, and win32.
Can I install Empryo with Homebrew or npm?
No. The README states that Empryo is not distributed through Homebrew, WinGet, or npm, and that official installers come only from empryo.com/download. The older SoulForge package is still installable through a Homebrew tap and the npm registry, but that is a different product.
What happened to SoulForge?
SoulForge was renamed to Empryo. The README says SoulForge remains available to download and install and continues to receive fixes for bugs and critical issues, while new features and active development have moved to Empryo.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/proxysoul-empryo)