AutoCodeRover
One of the first coding agents, acquired by Sonar
early employee · research engineer · 2024–25
Why it exists
In early 2024, before Claude Code or Codex, coding agents were still a research question. AutoCodeRover was one of the first to answer it: give it a real GitHub issue, and it found the cause in the code and wrote the fix on its own.
What I built
I joined early and worked on lifting it to 51.6% on SWE-bench Verified. I built Self-Fix, which traces a rejected patch back to the step that went wrong and reruns from there. And I built the JetBrains plugin end to end, which put the agent inside the IDE and merges its fixes with the developer’s own edits.
ACR paper (ISSTA '24) (opens in new tab)SpecRover paper (ICSE ’25) (opens in new tab)Blog post
Impact
- 51.6% on SWE-bench Verified, January 2025.
- Acquired by Sonar (opens in new tab), February 2025.
- The same team’s Foundation Agent (opens in new tab) later reached 79.2% and the top of SWE-bench’s unfiltered leaderboard (opens in new tab).
- Its technology now powers SonarQube’s Remediation Agent (opens in new tab).
- Papers: ISSTA 2024 (opens in new tab) and ICSE 2025 (opens in new tab).
Scroll across to follow the full system
Follow the GumTree three-way AST merge
Working copy
findBlockIf · guard&&ReturngetBaseline
lookupBlockIf · guard&&ReturngetAgent patch
lookupBlockIf · guard||Returngetlookup → findKeep local&& → ||Take patchUser lookup(String key) {
if (key == null && key.isEmpty())
return User.missing();
return cache.get(key);
}Three versions become three syntax trees
The plugin parses the Git baseline, your working copy, and the repair applied to that baseline with GumTree’s JDT parser. The tree excerpt below follows one method.
How it works
The plugin
Kotlin, end to end. It has chat with live streaming and build and test failure capture. SonarLint findings go straight to the agent. Context from the code itself (references, cursor history, open files) narrows the agent’s search.
The merge
When the developer edits a file the agent is patching, the plugin compares the baseline, the working copy and the patch as Java syntax trees (GumTree). It keeps each side’s independent changes, and falls back to the baseline where they conflict.
Self-Fix and targeted replay
When the reviewer rejects a patch, Self-Fix works out which earlier step caused it, writes feedback for that agent and replays from there, keeping everything upstream. The same replay lets a developer comment on any step from the IDE.
Two repositories, one system
auto-code-rover
Repair backend · Python · my additionsMy additions to the team’s repair agent, which searches code in eight languages and runs reproducer, context, patch and review agents. When the reviewer rejects a patch, Self-Fix finds the step that caused it and replays from there; the same replay lets a developer correct any step.
Self-Fix
Targeted replay
Feedback continuity
Python · LiteLLM · tree-sitter · Claude 3.5 Sonnet · GPT-4o
Private repository
jetbrains-ide-plugin
IDE plugin · KotlinBrings the agent into the IDE. It reads the developer’s working state, sends build and test failures and SonarLint findings to the agent, streams the agent’s reasoning, and lands the fix without leaving the editor.
Three-way merge on the syntax tree
SonarLint findings, fixed by the agent
Context from the code
Build and test failures, captured
Kotlin · IntelliJ Platform SDK · PSI · GumTree · SonarLint Core 10.3 · OkHttp · JGit