Kotlin

Fix Kotlin bugs with Codna

Codna maps your Kotlin project for zero tokens, fixes from evidence, and runs your Gradle tests until they pass.

The problem

A null after a coroutine refactor is a suspend point away from its cause.

Codna builds a dependency and blast-radius graph of the repository from its import patterns. No model call, zero tokens. Imports are the edges, so the agent follows the call chain from the failing test to the function whose result stopped being awaited.

How Codna fixes it

How Codna fixes it

1

Map the Kotlin repository

Codna builds a dependency and blast-radius graph of the repository from its import patterns. No model call, zero tokens.

2

Fix from evidence

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.

3

Verify with Gradle

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 "fetchUser() returns null after coroutine refactor" --tests --apply --test-cmd "./gradlew test"

What you get

Built for Kotlin

Gradle, JUnit and Kotest

Set fix.test_command to your Gradle test task; JUnit XML is read from $CODNA_JUNIT.

Map from imports

The repository map does not depend on a per-language grammar, so Kotlin is in the graph.

Recall note

On-device recall does not yet index Kotlin. The map and the fix loop do not depend on it.

The proof

Fewer tokens. Faster. Verified.

Codna16K
Cursor81K
Average tokens per fix on 87 matched bug-fix cases: Codna and Cursor.

Frequently asked

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.

A fix tool. It returns a patch with root cause, confidence, blast radius and regression risk, and opens a pull request if you ask.

Yes, through fix.test_command or --test-cmd. Any runner that writes JUnit XML works.

The map follows imports across Kotlin and Java files. Your tests verify the behaviour.

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.

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.

Understand. Fix. Evolve.