Map deterministically, for zero tokens
Codna parses the repo into a dependency and blast-radius graph — no LLM, no embeddings, ~60ms per repo. The same input always gives the same map.
Both help you understand a codebase before you change it. The difference is how that understanding is built. Windsurf generates a Codemap with a model. Codna builds the same graph deterministically — no LLM, no tokens — then gates every fix on your tests.
The problem
Windsurf is a full AI IDE, and its Codemaps feature is a genuinely useful way to orient in a large repo: an agent scans the codebase, resolves symbols and call paths, and synthesizes an annotated, clickable map with plain-English explanations of each node. Because that map is produced by a model (SWE-1.5 alongside Claude Sonnet 4.5), it is a description of the structure — informative for a human reading it, but generated, not derived. It costs tokens to build, can vary between runs, and the agent that then edits your code still works from a generated understanding rather than a verified one.
How Codna fixes it
Codna parses the repo into a dependency and blast-radius graph — no LLM, no embeddings, ~60ms per repo. The same input always gives the same map.
The agent receives a ~600-token bundle: the suspect files, the real call paths, the failing test — facts from the graph, not a model's summary of it.
The patch must pass your existing test suite. A fix that fails your tests never becomes a pull request.
codna fix . --issue "the checkout test is failing"
What you get
Windsurf is an AI IDE: a model synthesizes an annotated map of your repo. Codna derives the dependency and blast-radius graph deterministically instead — no LLM, no embeddings, about 60ms per repo, the same result every run.
Codna mapped 130 repos across 110 languages in 9.2s for 0 LLM tokens. The agent then fixes from a ~600-token evidence bundle — 162x less context than reading the codebase through a model.
A patch becomes a pull request only after it passes your existing suite. A fix that fails your tests never ships, so you review verified changes, not a model's best guess.
The proof
They serve different goals. A generated codemap is an AI explanation built to help a person navigate — clickable nodes, synthesized prose, produced by a model. Codna's graph is a deterministic dependency and blast-radius structure built to scope an agent precisely, for zero tokens, with the same result every run. One describes the structure; the other is derived from it.
It usually complements it. Windsurf is a full AI IDE; Codna is a precision and verification layer beneath the agent, not an editor. Codna supplies the deterministic map and the test-verified fix while you keep editing where you already do.
No. Run Codna through the MCP server inside Windsurf, Cursor, or Claude, as a CLI, or as a native GitHub App. You keep the editor you like; Codna adds the zero-token understanding and a fix your tests have already passed.
Codna is model-agnostic and bring-your-own-key, so you point it at the model you already pay for rather than a bundled one. The understanding step is deterministic and language-agnostic — it built the graph across 110 languages from source alone — and verification runs against whatever test runner your repo already uses.
Codna is bring-your-own-key and self-hostable with fail-closed egress at every tier, and it never trains on your code. The deterministic map runs locally before anything reaches a model. Windsurf is a full AI IDE with its own deployment and privacy options, so check its current plans for what fits your team.
Because Codna fixes from a ~600-token evidence bundle rather than reading the whole repo through a model, a verified fix runs about $0.04 at public model rates — roughly 28x cheaper than a typical agentic edit that reads the entire codebase. The deterministic understanding step itself costs zero tokens.
Related