Map the Rust repository
Codna builds a dependency and blast-radius graph of the repository from its import patterns. No model call, zero tokens.
Codna maps your Rust crate for zero tokens, fixes from evidence, and runs cargo test until it passes.
The problem
Codna builds a dependency and blast-radius graph of the repository from its import patterns. No model call, zero tokens. use paths are the edges, so the agent follows the call chain from the failing test to the function that should return an error instead of panicking.
How Codna fixes it
Codna builds a dependency and blast-radius graph of the repository from its import patterns. No model call, zero tokens.
The agent receives an evidence bundle scoped to the issue: the suspect files, the call paths, the failing test. Codna prints the raw-to-bundle token size on every run. Every fix reports root cause, confidence, blast radius and regression risk, and passes a risk gate before it is applied or a pull request opens.
Run codna fix --tests --apply and Codna runs your tests in a sandbox and re-fixes until they pass, up to the iteration limit you set. Set fix.test_command in codna.yaml, or pass --test-cmd, when your runner is not pytest. With --open-pr, or through the GitHub App, the pull request states the issue, the root cause, the symbols touched and a confidence score, and asks for review before merging. Codna never merges.
pip install codna codna fix . --issue "Config::from_str panics on empty TOML instead of returning Err" --tests --apply --test-cmd "cargo nextest run --profile ci"
What you get
Set fix.test_command or pass --test-cmd with a command that writes JUnit to $CODNA_JUNIT, such as cargo nextest with a JUnit profile.
On-device recall parses .rs files with tree-sitter.
The map spans the workspace, and codna impact narrows a diff to the tests it can affect.
The proof
Codna builds a dependency and blast-radius graph of the repository from its import patterns. No model call, zero tokens. The agent receives an evidence bundle scoped to the issue: the suspect files, the call paths, the failing test. Codna prints the raw-to-bundle token size on every run.
Yes, through your test command. Configure a JUnit-writing runner and Codna re-runs it until it passes.
The map follows use paths and the bundle carries call paths. The compiler and your tests verify the rest.
Yes. The map spans the workspace and codna impact lists the tests a diff can affect.
Codna ships as a CLI, an MCP server for Cursor and Claude, a GitHub Action (thyn-ai/codna-action@v1) and a GitHub App that reviews every pull request and opens fix PRs from a label, a comment or a red check.
On 87 matched bug-fix cases against Cursor, Codna averaged 16,159 total tokens and about $0.02 of model spend per verified fix, 5× fewer tokens and 1.7× faster. With your own key you pay your provider directly. Understanding runs on your machine and spends no tokens. Only the evidence bundle or the diff reaches your model provider, with your key from the OS keychain. Set privacy.egress to fail-closed in codna.yaml and Codna runs your tests only under kernel-level network denial. Secret redaction is always on.
Related