AI Engineer World's Fair 2025
Agents reported thousands of bugs, how many were real? - Ian Butler and Nick Gregory
Read the talk
Agents reported thousands of bugs. How many were real?
SM100 separates finding a known defect from producing believable bug reports, exposing the gap between coding ability and reliable software maintenance.
From a talk by Ian Butler and Nick Gregory
Before you start: Familiarity with pull requests, basic agent tool loops, and application state will help; no security-research background is required.
Can agents maintain the software they help write?
Can a software agent reliably find and fix bugs in an existing codebase? Generating a feature is only part of the job. Once software exists, someone must understand its behavior, identify failures, and repair them without breaking something else. That is the maintenance question Ian Butler and Nick Gregory bring to their benchmark work at Bismuth.
Butler introduces himself as Bismuth’s CEO, with a background in data engineering, machine learning, search, and Zillow’s A/B testing platform. He and Gregory previously built a technical-documentation search product in 2019, indexing hundreds of millions of documents for IDE use and applying AI summarization to internal knowledge bases. Gregory, Bismuth’s CTO, brings experience building endpoint-security tools at Google and researching software-exploitation detection—work whose techniques transfer to inspecting code with agents. Baseten supplied credits and compute for the benchmark’s DeepSeek R1 and Llama 4 Maverick runs.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Where coding evaluations leave gaps
Existing evaluations include HumanEval, SWE-bench, aider’s Polyglot benchmark, and LiveCodeBench. They cover different coding tasks; SWE-bench, in particular, evaluates resolving existing GitHub issues. The useful distinction here is therefore not simply new code versus old code. Repairing a described issue and discovering an unknown defect are different tasks.
The rest of the software development lifecycle introduces responsibilities that a coding score does not automatically measure:
- Planning: Understand business requirements, existing systems and designs, and potential solutions before choosing what to build.
- Development and testing: Implement behavior and check it—the area Gregory describes as relatively well covered by existing evaluations.
- Code review: Inspect a proposed change for problems. Gregory identifies this as a comparatively unbenchmarked area despite growing adoption of LLM review tools.
- Deployment: Write configuration, establish monitoring, and integrate with other systems.
- Maintenance: Fix bugs, upgrade dependencies, and perform migrations within an established codebase.
Bismuth concentrates on code review and maintenance: work that still involves writing code, but starts from different information and demands different judgments.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Finding a bug means understanding the system
Feature development and debugging both require an understanding of architecture, connections between components, and data flow. Debugging can demand an even deeper understanding than writing the original feature: the investigator must establish not only what a function does, but which inputs reach it and how its outputs affect the rest of the system.
Butler reports that agents often inspect only part of that behavioral space. A run finds a subset of the bugs; thinking models help somewhat, but still explore a limited number of possibilities. This produces errors in both directions: agents miss defects a human would notice quickly and endorse supposed bugs a human would dismiss. Patching the bugs they do find is usually easier, but the discovered bugs are relatively simple. That success says less about repairing difficult defects than it first appears.
Existing bug-detection benchmarks from software security do not fully address this gap either. Gregory describes evaluations built for static analysis and program repair that emphasize familiar patterns: null-pointer dereferences, buffer overflows, or SQL injection. Some concentrate on a single language, such as Java. Their security focus also leaves out ordinary functional failures. A copy-paste mistake can break an application for its users without creating an authentication bypass. SM100 is designed to broaden that evaluation.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
What counts as a bug?
Butler describes SM100 as 100 triaged, validated, and classified bugs from over 84 public repositories. All had already been remediated in their projects. The selection spans obvious defects requiring little domain knowledge through problems demanding substantial project expertise at a senior or staff engineering level. Python, TypeScript, and JavaScript were selected for their popularity and presumed model strength; Go provides a systems-language comparison.
The inclusion rule is an objective defect: an explicit security or logic problem with a concrete failure consequence, such as data loss or a crash. Context determines whether that consequence can actually occur. A function might lack a bounds check, yet every caller might guarantee that its input stays within bounds. Reporting the missing check alone does not establish a reachable system failure. Feature requests, optimization opportunities, style, formatting, and design preferences are excluded to avoid turning the evaluation into a debate about taste.
Each bug is annotated along several separate dimensions:
- Severity and context: How serious the defect is, where the relevant code is defined, and where it is called.
- Required knowledge: How much project-specific understanding a human would need to identify it.
- Discovery difficulty: How difficult it remains to find even for someone with that understanding.
- Consequence: Whether the failure causes data loss, a crash, a security problem, or another concrete outcome.
Separating knowledge from difficulty matters. An expert can understand a subsystem well and still need considerable investigation to locate a defect within it.
These classifications aim to measure repeatable capability rather than exceptional success. Butler invokes a reported o3 zero-day discovery and an experiment involving roughly 100 runs over the same context. The useful distinction is between demonstrating that a model can discover a vulnerability and establishing how reliably it does so in ordinary use; the run budget alone does not establish that discovery required every attempt.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Four outputs, with a bounded search
SM100 separates four questions that would be obscured by a single coding score:
| Evaluation | Question |
|---|---|
| Needle discovery | Can the agent find the target defect without being told what it is? |
| Report validity | How many of its reported bugs survive manual assessment? |
| Introduction-time review | Can it spot the defect in the PR or commit introducing it? |
| Remediation | Can it fix a discovered bug without breaking the rest of the codebase? |
The distinction between discovery and report validity is essential. An agent can find the target and still burden a developer with many incorrect reports. Review changes the starting conditions: the agent receives the introducing change, reducing the search problem and supplying immediate context. Remediation is assessed only after a bug has been discovered.
Searching an entire large repository for one target would be prohibitively slow, but pointing directly at the defective lines would make discovery too easy. The benchmark narrows the search through subsystems:
- Divide the repository into groups of related files, such as a frontend area or a particular API subsystem.
- Identify the subsystems containing files modified by the known corrective PR or commit.
- Supply the files from those subsystems to the agent without describing the target bug.
- Have the agent inspect the selected subsystem as a whole, rather than only the changed lines.
This withholds the defect description while keeping exploration tractable. It is still a scoped discovery task: the known fix influences which subsystem the agent receives, even though it does not explicitly reveal the defect.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Finding the target is not the same as producing useful reports
A basic agent is easy to assemble: put a model in a loop with shell access, code editing, a thinking tool, bug reporting, and a finish action. It can navigate files and report plausible problems. Butler says the basic loop found five or six bugs while producing a 97% false-positive rate. A useful detector therefore depends on more than tool access: model choice, prompting, information delivery, system design, and navigation strategy all contribute.
In the reported SM100 discovery evaluation, Bismuth found 10 of 100 target bugs; the next-leading system found seven. Even the leading result leaves most targets undiscovered, making this an evaluation with substantial room for improvement.
The presentation calls the share of valid reports the true positive rate. Here that means report precision—valid bug reports divided by all bug reports—not recall over all defects in the codebase. Butler reports the following historical results:
| Agent | Valid reports / all reports |
|---|---|
| Claude Code | 16% |
| Bismuth | 25% |
| Codex | 45% |
These systems also produced fewer irrelevant findings, which Butler attributes to tighter scoping. Devin, Cursor Agent, and Cosine reportedly produced roughly 900–1,200 findings, with Cursor reaching about 1,300, while only 3–10% of their reports were valid. Producing a larger list is not equivalent to finding more useful bugs.
PR review improves the starting position by supplying the introducing change. Butler gives Codex a corrected figure of 27, followed by Devin at 21 and Bismuth at 17. He presents these as percentages, but their units remain unresolved: the published protocol specifies 80 eligible PR-review problems, and the historical result table is unavailable. These figures should not be converted into counts or recalculated percentages. The comparison also excludes false-positive accounting; it asks only whether the review found the known target.
Bismuth is model-agnostic, although Butler says it typically uses Anthropic models because they have been easier to serve to customers through Vertex. He reports that Bismuth outperformed Claude Code in multiple categories while using Anthropic’s underlying models. The surrounding agent system can therefore materially affect the result even within the same model family.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
What changes when the model runs in a basic loop?
The basic-loop comparison strips the system back to the simple tool loop described earlier. DeepSeek R1 and Llama 4 Maverick generated hundreds of findings but had very low report precision. Sonnet 4 and o3 did better, though their findings remained noisy:
| Model in basic loop | Target bugs found | Valid reports / all reports |
|---|---|---|
| DeepSeek R1 | 1 | 1% |
| Llama 4 Maverick | Not stated | 2% |
| Sonnet 4 | 6 | 3% |
| o3 | 2 | 6% |
The last column uses the speaker’s corrected wording: these are true-positive shares, not false-positive rates. Model choice changes both target discovery and the usefulness of the resulting report list.
Butler emphasizes that the best popular agent outside the newly launching Bismuth reached only 7% on target discovery. He treats this as a warning about maintaining complex software, describing maintenance as the back 90% of engineering work. That is his framing of the workload, rather than a measured allocation of engineering time. The quantitative results presented here establish difficulty discovering defects; they do not provide a separate ranking of complex-bug repair success.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Seventy reports, and a missed state transition
Report quality becomes a practical limit when a human must inspect the output. Butler reports that three of six agents had valid-report shares of 10% or less, and one agent produced 70 reports for a single issue. Even if the correct finding appears somewhere in that list, the developer must still separate it from dozens of distractions.
The concrete example is an ordinary form-state defect. Only Bismuth and Codex found the illustrated issue. After submission, isDirty was never set to false; Butler describes the form as failing to clear and continuing to indicate that it contained filled-out state. This is not a spectacular security failure, but it directly affects the user’s experience of whether submission completed correctly.
A compact TypeScript example isolates the missing transition. Here isDirty represents unsaved edits; a successful save should clear that flag, while a failed save should leave it unchanged:
typescript
type FormState = {
values: { message: string };
isDirty: boolean;
};
async function submitForm(
state: FormState,
save: (values: FormState["values"]) => Promise<void>,
): Promise<void> {
await save({ ...state.values });
state.isDirty = false;
}
For a form containing message: "Hello" with isDirty: true, successful submission changes the flag to false. Omitting the final assignment leaves it true. The example preserves the field value to isolate the dirty-state transition; clearing input values is a separate UI operation. This is the kind of small state inconsistency an agent must follow through the surrounding behavior to recognize.
The dirty flag after a successful submission
Constructed example: The message field, Hello value, TypeScript function, and successful-save operation are teaching details. Preserving the field value isolates the source-grounded dirty-state transition; this is an expected repaired outcome, not an executed test.
{"values":{"message":"Hello"},"isDirty":true}Operation: Apply the illustrated submitForm repair: await a successful save, then assign isDirty = false.
values.message
"Hello"
"Hello"
isDirty
true
false
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Broader search, deeper reasoning
Across the tested agents, Butler sees a common limitation: reasoning is narrow, including with thinking models, and often does not go deeply enough even along the paths it selects. The proposed improvement has two parts—consider more possible failure paths, then investigate selected paths more thoroughly.
Repeated runs expose the problem in another way. The total number of reported bugs stays roughly consistent, but the identities of those bugs change. That pattern suggests the agent is not building a comprehensive inventory of a file’s behavior on each run. Butler hypothesizes that context biases the model toward one interpretation or avenue of investigation at the expense of others. The team mentions possible remedies but does not specify an algorithm in this presentation.
Butler contrasts SM100’s weak results with SWE-bench scores he cites in the 60–80% range, without identifying the systems, benchmark variants, or evaluation dates behind that range. The distinction is the task: strong performance resolving a supplied issue does not establish reliable discovery of an unknown failure in deployed software. Maintenance demands targeted search, program comprehension, cross-file reasoning, and recognition of bug patterns within the actual system.
There are encouraging signs in the more focused findings from Codex and Bismuth, including occasional complex issues and the form-state defect. But these are early capabilities. A maintenance agent must connect a suspicious local pattern to a reachable failure, and then report it precisely enough that a developer can act on it.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Making maintenance progress measurable
Gregory closes with a warning that widely used agents can introduce bugs, alongside cautious optimism about newer systems’ ability to reason through code and use context effectively. The presentation does not separately measure bug-introduction rates, but its discovery results make the maintenance challenge concrete: code generation alone does not supply dependable ongoing inspection.
SM100 gives teams a way to track whether different techniques improve that inspection over time. Better discovery, more accurate reports, and dependable repairs would benefit developers across the lifecycle, not just benchmark standings. Gregory points viewers to the benchmark’s numbers and details and names bismuth.sh as the company’s site. The next advance must make the reports more useful to the engineer who has to decide what to fix.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Resources
From the talk
Definitions of bug discovery, report validity, remediation, and PR-review metrics, including the single-run evaluation protocol.
The benchmark for resolving real-world GitHub issues, useful context for distinguishing issue-guided repair from bug discovery.
Coding benchmark results with detailed model configurations, dated runs, and pass results.
Code and instructions for evaluating generated programs through functional correctness and pass@k.
Official project hub linking the coding benchmark’s paper, implementation, dataset, and leaderboard.
Read the complete timestamped transcript
- 0:00
AI agents for software engineering have been exploding in popularity over the last year, and we wanted to find out just how good are they at finding and fixing bugs.
- 0:06
Can you even rely on them for maintenance? Well, that's what we're gonna tell you here today at AI Engineers World Fair. Uh, hey guys, we're Bismuth, and we've been working on software agents for the last year and some change.
- 0:15
My name is Ian, and I'm the CEO of Bismuth. So my background was in data engineering, machine learning, and search. Previously, I was at Zillow as a senior eng on the AV testing platform, uh, and this is my second time working deeply on dev tooling at a startup.
- 0:26
Um, I started a technical documentation search in 2019, along with Nick here, building an index of hundreds of millions of technical documents for inline IDE use, along with AI summarization for internal knowledge bases.
- 0:37
Hey, so I'm Nick, CTO of Bismuth. Um, I was primarily in the software security space before starting Bismuth with Ian. Um, I was at Google just prior on an internal tools team building endpoint security software, and before that, I was a research scientist focused on detecting software exploitation.
- 0:55
Um, there's a lot of tools and techniques from that space that transfer to building intelligent agentic code tools, it turns out.
- 1:01
Before we get started, just wanna shout out Baseten for helping provide credits and compute for running our benchmark across both DeepSeek R1 and Llama 4 Maverick. Thanks, guys. We really appreciate it.
- 1:09
Thank you. So to dive right in, we wanted to share with you all the benchmark we've been building for a few months now to explore just how good software agents are at coding tasks outside of the normal feature development.
- 1:22
There's a handful of benchmarks already to measure how effective LLMs are for writing code, HumanEval, SWE-bench, aider's Polyglot benchmark, uh, and LiveCodeBench just to name a few. But of course, that's only one part of the software development life cycle and what developers do.
- 1:39
So what about the rest of the SDLC? Well, uh, initial scoping and planning is kind of an entirely different task, right? It requires broader business context, knowledge of existing systems and designs, exploring potential existing solutions, and so on.
- 1:53
Um, it's basically a completely different task from development. Um, next we have the feature dev and testing, which are already pretty well covered by the existing benchmarks. Um, and then there's the code review process, which is pretty much un-benchmarked by existing work, even though we're seeing more and more LLM-based tools in the space.
- 2:13
Uh, and this is actually the first part of our benchmark. Deployment is a pretty separate task requiring not just writing configuration but also setting up monitoring, integrating with other existing systems, et cetera.
- 2:25
It's also pretty distinct. Um, uh, last and las- last and not least though, we have software maintenance tasks, so think things like bug fixes, dependency upgrades, migrations, et cetera.
- 2:37
Um, this is another part of the SDLC that at its core is still generally writing code but is in a distinctly different way than feature development.
- 2:47
So the ability to reason through a code base deeply to find bugs is directly transferable to being able to produce features. You can think about how, like, when you're dividing a feature, you're gonna learn the architecture of the code base.
- 2:58
You're gonna learn, you know, how everything connects, the data flow, and stuff like that. So that's the same for finding bugs. In both cases, you need an understanding of the system architecture and its connectedness.
- 3:08
Um, in the case of finding bugs, you even often need to understand the system more deeply than when you originally wrote the feature in the first place. Um, to that end, maintenance requires the ability to first deeply reason through a system and identify if bugs are potentially present.
- 3:21
We found agents struggle with holistic evaluation of files and systems, only finding subsets of bugs per run. Thinking models alleviate this somewhat, but reasoning appears to be somewhat narrow, only exploring a limited number of potential avenues at a single time.
- 3:33
This is translated directly to LLMs missing bugs that human developers would pick up almost immediately and confirming bugs that human developers would discard almost immediately. While there is value here, the ability is clearly still in its infancy.
- 3:47
When it comes to patching of these bugs, because of the relative simplicity that we have seen from them, they usually get it, uh, without much of an effort. But again, because the bugs themselves are not particularly complex, this isn't really saying much.
- 3:57
Yeah. So there are some existing bug detection benchmarks from the software security space, but there are some big limitations that don't really make them suitable for evaluating these new agentic AI systems, since they were built to benchmark kind of classic static analysis or program repair tools.
- 4:16
Uh, they focus on relatively simplistic bugs in common patterns, things like null pointer dereferences, buffer overflows, maybe SQL injection in a web app, which could all be found statically.
- 4:28
Um, a lot of the benchmarks are also really limited in the languages that they pull from, so many of them are only Java, for instance, because that's where the vast majority of enterprise complicated software was and honestly still is written.
- 4:44
Um, there's also a bias towards security issues in the existing benchmarks, partly as a result of that being where the classic static analysis tools are focused. Um, but bugs appear in many more ways than just security defects, right?
- 4:58
Copy-paste bugs are a really simple example where they don't often result in an auth bypass, for example, but it breaks the software to end users all the same, right?
- 5:09
So how does our benchmark, SM100, compare?
- 5:12
So we painstakingly gathered 100 bugs that we triaged, validated, and classified in over 84 public repositories. These are bugs that have all been remediated already but are represented in the wild and work in open source by various developers across all levels.
- 5:27
Our goal when assembling these bugs was to provide a range of issue types from obvious low specific domain knowledge all the way to senior staff level engineering knowledge with significant depth of understanding for a given project.
- 5:38
We also wanted to make sure we provide a multi-language benchmark, as LLMs have notably different performance across them. Here we focused on Python, TypeScript, JavaScript, and Go, first because Python and TypeScript, uh, slash JavaScript are languages that are the most popular, and LLMs are supposedly better at performing on them.
- 5:54
Then we chose Go as kind of a control to balance performance on a low-level systems engineering language.
- 6:01
So looking ahead, here's an example of what we mean by an objective bug. Um, this is anything, an explicit security issue or logical issue that could cause data loss or system crashes.
- 6:11
The reason we went for these types of bugs is it removes anything, uh, that is ambiguous, um, or harmless in the context of the system, uh, or performs correctly if you look one level up and the thing that calls it kind of bounds the problem anyway.
- 6:23
Um, an example of this, uh, is a function that doesn't check bounds, uh, but the code is called, uh, but the code that it's called from ensures the input never goes over those bounds anyway.
- 6:33
So in isolation, that's a bug, but in the context of the system, there's, there's no failure point. Um, we explicitly did not include feature requests, optimization, style formatting, or design decisions.
- 6:45
Uh, this is also to reduce ambiguity. Uh, frankly, humans still debate these to today. There's no actual objective kind of discourse around them. It's whatever your, like, uh, cadre decides they want to use.
- 6:57
It also helps make it reproducible across evaluations, and as alluded to earlier, uh, we annotated each bug with metadata such as the severity and context, where it was defined and called, uh, how much system-specific domain knowledge a human would require to find the bug, how difficult even with said knowledge it would be to find it, so even
- 7:14
if you're an expert in the system, how long it would take you to navigate and get that bug, and finally, the implication of the bug itself. Was it a data loss?
- 7:21
Was it a crash? Is it a security exploit? Et cetera.
- 7:25
These classifications allow us to understand what level of bugs these AI agents are capable of finding regularly. We note that every once in a while they surprise us, such in that recent blog post where o3 was able to find, um, a zero-day exploit.
- 7:38
Uh, but notably there it took about 100 runs to actually get it over the same context each time. Um, so while that's still useful to know they're possible, it's more useful to know in everyday usage, how are they capable, um, on just everyday tasks?
- 7:51
So for each system that we benchmarked, there's four numbers to get out of the benchmark. The first is just can the system discover the bugs without any prior knowledge?
- 8:00
Uh, we call this the needle in the haystack result, and we'll talk a bit more about the specifics of our methodology for this in just a second. Um, of course, though, when the agents produce a list of bugs, there's a lot more than just the one that we're looking for, so we also manually measure the false positive
- 8:16
rate of the bugs that come out to get an overall sense of how effective it is, uh, broadly. Um, we also look at whether the system can find the bug at the time of introduction.
- 8:29
So given the pull request or commit that introduces the bug, can the agent point it out at that point? Um, of course, here the agent doesn't have to go searching to find issues and has a lot more kind of immediate context around it, so with a bit more of an optimistic starting point, how good can they be?
- 8:48
Um, and finally, we still do wanna see how the agents, uh, do with suggesting remediations for the things that it identifies. Uh, and so for each bug that it discovers, we ask it to fix the bug, uh, and see if the result does indeed fix the bug without breaking the rest of the code base.
- 9:08
So jumping back, uh, to needle in the haystack now, we don't wanna just tell agents, you know, go find bugs somewhere in the repository because frankly, most of the things that we're measuring are big enough, we're exploring all of the code to find the single bug that we're interested in would take way too long.
- 9:27
Uh, and we also don't though want to hint at what the actual bug is in the evaluation. We don't wanna bias them in any way. So how do we solve this?
- 9:36
Uh, well, we've broken up the repositories into subsystems containing files that are likely all interrelated, so think, you know, maybe part of a front end or some specific, uh, API, uh, point.
- 9:49
We then feed the list of files in that subsystem, uh, or sorry, we then filter the subsystems that were c- that contain the files that were modified kind of in the golden PR commit and just feed the files in those subsystems to the LLM.
- 10:06
So it's getting a reduced list of files in the entire repository. This way we're not biasing it in any way, but we're still scoping it down so it doesn't have to look through everything, uh, and we can still get an idea of what this works or how well this works in like a non-benchmark capacity.
- 10:27
It's just looking at one part of the code but that in its entirety.
- 10:31
Okay, so what does it take to actually get a system up to a level of beating some of the biggest companies and labs in the world? So basic implementations are trivial.
- 10:39
Give it a shell tool, surreplace, think, report bug, you know, a finish tool, put it in a loop and press play. So you do have an agent here. It's running, it's looking at code files, um, and you might even find some bugs.
- 10:49
We actually found five or six in the basic loop here, uh, but they also had a 97% false positive rate. So almost every basic agent that's just equipped with these tools from like the Anthropic model card releases or OpenAI methodology releases, um, are not up to the task of really finding bugs and triaging systems.
- 11:07
So it's actually really hard to build a good agent for identifying bugs and working on code. It's a combination of model, system, prompting, information, the way you feed that information to a model, and navigation strategy.
- 11:21
Um, if you look at our numbers for performance comparisons, you can see right off the bat that Bismuth leads the pack for needle in a haystack. Um, we found ten of our needles, uh, the next leading solution finding seven.
- 11:34
So we do note off the bat there's a lot of room to grow here, but if anything, we're excited that we found an unsaturated benchmark to work on, uh, as we build our product and as other labs build theirs.
- 11:44
I will say we are starting to see some exciting things on true positive rate and detection though, uh, with Claude Code starting out at sixteen percent, us at twenty-five percent in second place, and Codex at forty-five percent.
- 11:55
You'll also note that for these three solutions I just mentioned, we find significantly less, like, random nonsense compared to the rest of the pack. Like, we just have a tighter scoping.
- 12:05
Uh, Devin, Cursor Agent, uh, and Cosine all found between nine hundred and twelve hundred items or thirteen hundred items for Cursor, uh, with between a three and ten percent true positive rate.
- 12:18
So there's a lot of, um- headway for those agents to go. On PR review, uh, Codex was quite strong, uh, with 20% ... uh, 27% of the needle in haystack found, then Devin at [REDACTED:age], and then us at [REDACTED:age].
- 12:32
So one thing to note there is that those do not include any false positives that had been found, uh, during those PR reviews. This is just did it find the needle in the haystack?
- 12:43
And even there, you'll note that the best model only got 27, so about a third. Uh, there's a long way to go on both PR review and bug detection.
- 12:52
I wanna note that given the models here, uh, Bismuth itself is agnostic, uh, but we typically run on top of Anthrodi- uh, Anthropic models, and they've been easier to serve for our customers from Vertex.
- 13:06
Uh, in this instance, our solution was able to beat, uh, their own solution, Claude Code, in multiple categories, uh, while improving on their base model.
- 13:17
So let's move on to looking at what we call basic agents. Uh, these are agents that are the simple loop we described earlier, and we were able to actually look at a couple open source models here as well.
- 13:27
And we'll note just off the bat, um, open source has a long way to come in this space. Um, R1 only had a 1% true positive rate, um, over what?
- 13:35
Like, hundreds?
- 13:37
Uh, yeah.
- 13:37
Yeah, over hundreds of bugs. Um, same with Llama Maverick at a 2%. Um, R1 did manage to find, um, a needle in a haystack, um, but both of these were lapped by Sonnet 4 and o3 in a loop, um, where Sonnet 4 found six, uh, and o3 found two, with a 3% and 6%, uh, false ...
- 13:56
uh, true positive rate respectively. The hard truth here is that the highest popular agent score outside of us, who are just launching now, uh, scored 7% on SM100. Um, that means the most used agents in the world are the worst at finding and fixing complex bugs.
- 14:14
Uh, this is a problem for the industry that we're hoping to bring to light, and we're hoping to see that these teams will begin to work on this to increase their score in what represents the back 90% of work for software engineering.
- 14:26
It's also important to note that three out of six agents got 10% or less true positives out of a massive number of reports. Uh, on one issue, an agent gave us an astounding 70 reports, and nobody's going to actually sift through that many, right?
- 14:43
Like, no engineer's gonna look through 70 bugs and be like, "Oh, yeah, that one for sure is the right one." So there's a long way to go on tightening how much information these agents are reporting and the accuracy of that information itself.
- 14:57
I think that, you know, in context, that even some simple bugs are missed. Um, only two agents, Bismuth and Codex, found this state issue, and the consequence of the state issue is pretty simple, right?
- 15:10
When you submit a form, um, usually they clear. In this particular case, uh, isDirty was never set to false, uh, so it would never clear the form, and it would say you still had things filled out.
- 15:20
You know, that's not the biggest bug in the world, but that has real consequences for users and user experience, and that's the type of things a human developer would immediately catch.
- 15:29
So we think there is a large way to go.
- 15:33
So after examining, uh, all of the performance across all these different agents, there was a notable commonality between them. These agents are very narrow in their thinking, even when using thinking models.
- 15:44
This is actually a problem. It's more of a problem on non-thinking models, but thinking models themselves are very narrow in the types of things they're evaluating, and we find that even with that narrowness, they don't go deep enough.
- 15:55
So from our perspective, broader thinking chains and deeper thinking along selected chains is going to be required to actually find bugs in these files. It's also interesting to note that on a per run basis, the total number of bugs remains roughly consistent, but the bugs themselves change.
- 16:17
So that means from any one particular run, an LLM is not looking holistically at a file and inventorying everything that's happening. Um, we suspect there's different biases occurring, uh, in that and that the models themselves, you know, through whatever context had been provided, are looking at a file one way and not another way.
- 16:35
Um, there's methodologies we thought of to solve that, but right now it seems like that is a pervasive problem across every agent in the industry, and no one has quite solved that.
- 16:44
So there's a broader problem here, right? Despite 60 to 70%, 80% in some cases, scores on SWE-bench, agents still struggle with SM100. What does that mean? Existing agents are able to create software upfront, but to manage and fix software after it's been deployed will be a major struggle as far as we see it.
- 17:04
And this is a hard problem that teams are working on across the board, us included, but it demands targeted search, better program comprehension, cross-file reasoning, bug pattern recognition that we just don't see in deep capacity from many of these solutions.
- 17:21
Now, we're hopeful here because Codex, for instance, and us are starting to show tighter, narrow ... uh, tighter, more narrow bands of the bugs that it's solving. We do get some complex issues.
- 17:33
We are one of the two agents that found that bug I mentioned earlier. So as we progress here, we hope the industry evolves and focuses more on this problem.
- 17:43
So to wrap things up, we know that the most frequently used agents today have a high risk of introducing bugs, though as we just said, a few of the newer agents as part of this new generation, including us, are starting to show an increased ability to reason through code and more effectively use their context to evaluate concerns.
- 18:01
This ability is nascent, but so far what we've seen has been encouraging, uh, and with this benchmark, we can now clearly show as things progress. Um, with effort and some different techniques, you can do better, and improvements here will have benefits across the entire industry.
- 18:18
We have many things that we wanna try, and I'm sure other labs do, uh, and we're really excited to be on the forefront of this new generation of agents.
- 18:28
So thanks for watching. Uh, you can dive into numbers and get more details on the benchmark, uh, at the website, uh, and be sure to check us out at bismuth.sh.
- 18:36
Thank you.
- 18:37
Thanks