AI Engineer World's Fair 2025
How to Improve your Vibe Coding — Ian Butler
Read the talk
How to Improve Your Vibe Coding
Reliable agent-assisted coding requires more than generating fixes: scope the bug search, preserve the code relationships that matter, and demand evidence that repairs work.
From a talk by Ian Butler
Before you start: Familiarity with coding agents, code diffs, and automated tests will help you apply the review workflow.
Who catches the bugs your coding agent misses?
If a coding agent introduces a bug, can you trust it to find and fix that bug later? Ian Butler, CEO of Bismuth, opens with this problem. Bismuth builds an end-to-end coding agent, which he compares to Codex. After several months evaluating agents’ ability to find and fix bugs, his team had released a benchmark that he describes as having launched the previous day. The initial finding is troubling: agents miss bugs while also producing substantial numbers of false reports.
Butler reports that Devin and Cursor each had a true positive rate below 10% for bug finding. Here, SM-100 uses true positive rate to mean valid reports divided by all reported bugs—not the fraction of all existing bugs detected—and specifies pass@1 evaluation. There is also a separate discovery problem: when the team plants bugs in larger codebases, agents struggle to navigate to the relevant code and locate the defect. A tool that generates code faster than it can reliably inspect it can leave an accumulating repair burden.
Butler reports that three of six agents had a true positive rate of 10% or less across more than 900 reports. In one task, an agent returned 70 issues, all of them false. That example makes the practical cost clear: somebody must still investigate the output, and a long list of plausible-sounding issues can consume attention without improving the code.
Butler reports a 97% false positive rate for Cursor over more than 100 repositories and more than 1,200 issues. These are the historical evaluation totals quoted in the talk; the exact agent-specific result and repository scope were not independently confirmed. The consequence he emphasizes is alert fatigue: developers stop investigating reports, trust erodes, and real defects become easier to ship.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Three ways to improve the search
Butler turns those evaluation experiences into three practical adjustments for working beside an agent in an IDE:
- Bug-focused rules: Use the agent’s rules file to supply scoped instructions about security issues and logical defects.
- Context management: Preserve relationships between pieces of code. Butler observed agents losing logical links to material they had already read as they moved through a repository. This matters because significant bugs often involve deeply nested, multistep behavior.
- Thinking models: Prefer models that spend additional effort reasoning through the problem. Butler reports stronger bug-finding performance from these models and recommends selecting them in tools such as Claude Code and Cursor.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Name the bug classes, then require validation
Start by giving the agent a concrete security lens. Butler recommends incorporating the OWASP Top Ten into rules files. This is web-application security awareness guidance, not an exhaustive taxonomy of software defects; the linked 2021 edition provides historical context, although Butler does not specify an edition. The mechanism is priming: supplying security criteria makes those criteria part of what the model considers while reading code. Butler says performance was substantially lower when security or bug-related information was absent.
Next, replace a generic request to find bugs with explicit classes of failure. Butler names authentication bypasses, prototype pollution, and SQL injection. These give the agent a more definite search target than an unrestricted repository review. Finally, require tests before accepting a repair: the agent must write them, get them passing, and establish that the reported defect has actually been fixed. A passing test suite is useful only if it exercises the behavior at issue.
A rules-file entry can express that workflow directly:
markdown
# Bug review
Use the OWASP Top Ten as security review guidance.
Focus this review on:
- Authentication bypasses
- Prototype pollution
- SQL injection
For each proposed fix:
1. Add a concrete test covering the reported defect.
2. Verify that the test exposes the defect before the fix.
3. Apply the fix and get the test passing.
4. Explain how the test verifies the repaired behavior.
Do not accept a fix until its validation tests pass.
Butler grounds this recommendation in work across roughly 100 repositories and thousands of issues from multiple agents. Structured rules replace vague requests with explicit criteria for both discovery and acceptance, which he reports produces higher-quality output.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Keep the code relationships in context
A bug search depends on retaining the connections between files. As agents reach their context limits, they may summarize or compact previously read material. Butler reports that their ability to detect and understand bugs drops substantially after this happens. The user therefore has an active role in managing what remains available to the agent.
His context-management procedure has three parts:
- Supply the diff. Show the changed code so the agent can follow cause and effect, rather than reconstructing the change from a final snapshot.
- Preserve key files. Keep the code needed to understand the behavior from being summarized away or removed from the context window.
- Request a component inventory. Have the agent work step by step through the classes, variables, and their uses across the codebase.
The inventory is especially useful because it makes the relationships explicit. Instead of relying on a fading recollection of earlier reads, the agent has an organized account of which components exist and where they are used. Butler reports that agents became more capable of finding bugs after performing this inventory.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Deeper reasoning still leaves uneven coverage
Butler’s preference for thinking models comes from both their results and the reasoning traces his team inspected. He describes models exploring several considerations in the code, identifying promising paths, and then investigating those paths more deeply. Across Bismuth’s benchmark, he reports that this process found deeper bugs than non-thinking models did.
That improvement still leaves a coverage problem. Across hundreds of repositories and thousands of issues, Butler observed that the headline number of bugs found could remain similar while the actual bugs identified changed from one run to the next. A stable bug count does not imply stable bug coverage. Two reviews can look equally productive in aggregate while finding different defects.
Butler interprets this variability as evidence that agents do not yet inspect a file comprehensively, even when they use thinking models. His complaint that users should not need to run an agent a hundred times expresses the burden of repeated review, rather than a measured threshold for complete coverage. Consistent, comprehensive discovery remains unresolved. Thinking models are his preferred option because they were more thorough and performed better in the benchmark, but that advantage does not remove the variability.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
From automated repairs to inspectable results
At the time of the talk, Butler presents Bismuth as a system that automatically creates pull requests, integrates with GitHub, GitLab, Jira, and Linear, scans for vulnerabilities, and provides code reviews. He also advertises on-premises deployment for organizations that need it. These are the product capabilities described in the recording, rather than a statement of current availability.
The closing QR code directs viewers to Bismuth’s site and its benchmark link. Butler names SM-100 and invites viewers to inspect the methodology, results, full dataset, and exploration of agents’ bug-finding and bug-fixing performance. The evaluation repository and dataset explorer provide routes into those materials. The ending returns the question to evidence: which bugs did an agent find, which reports were real, and which repairs actually worked?
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
Explains the benchmark's bug-discovery, report-validity, remediation, and pull-request-review metrics.
Bismuth's repository containing benchmark documentation, agent drivers, evaluation scripts, and raw result traces.
Security risk categories and guidance for web applications, including broken access control, injection, and authentication failures.
Further reading
Ian Butler and Nick Gregory's longer 2025 presentation on SM-100's dataset, evaluation design, and agent results.
Updates since the talk
- Bismuth API implementation archiveRepository
Public source archive of Bismuth's main API and agent implementation, marked read-only in October 2025.
Read the complete timestamped transcript
- 0:00
[onstage electronic music] My name's Ian.
- 0:16
Um, I'm the CEO of Bismuth. Uh, we're an end-to-end agentic coding solution, kind of like Codex. Um, we've been working on evals for how good agents are at finding and fixing bugs for the last several months, uh, and we dropped a benchmark yesterday, uh, discussing our results.
- 0:31
Um, so one thing to point out about agents currently is that they have a pretty low overall find rate for bugs. They actually generate a significant amount of false positives.
- 0:42
Um, you can see something like Devin and Cursor have a less than ten percent true positive rate for finding bugs. Um, this is an issue when you're vibe coding because these agents can quickly overrun your code base with unintended bugs that they're not able to actually find and then later then fix.
- 0:58
Um, overall too, it's worth noting, uh, that in terms of needle in a haystack, when we plant bugs in a code base, these agents struggle to navigate more broadly across those larger code bases and actually find the specific bugs.
- 1:14
So here's the hard truth, right? Uh, three out of six agents on our benchmark had a ten percent or less true positive rate out of nine hundred plus reports.
- 1:23
Um, one agent actually gave us seventy issues for a single task, and all of them were false. And, like, no developer is going to go through all those, right?
- 1:31
You're not going to sit there and try to, like, figure out what bugs actually exist.
- 1:36
Um, so bad vibes, right? Implications, most popular agents are terrible at finding bugs. Cursor had a ninety-seven percent false positive rate over a hundred plus repos and twelve hundred plus issues.
- 1:48
The real-world impact for this is that when developers are actually building with this software, there's alert fatigue, and it reduces the effectiveness of trusting these agents, which means bugs are going to go to prod.
- 1:59
So how do you clean up some of the vibes? Like, we did this large benchmark. We've been doing this for months. We have, like, practical tips for you when you're working kind of in your IDE with these agents side by side.
- 2:09
So the first thing to note is bug-focused rules. Um, every one of these agents has a rules types of file. You want to basically provide scoped instructions that provide additional detail on security issues, logical bugs, things like that.
- 2:24
The second issue here is context management. So the biggest issue we saw with agents when navigating code bases was after a little bit of time, they'd get confused. They would lose logical links to stuff they've already read, and their ability to reason and come up with connections across a code base stumbled significantly.
- 2:40
Obviously, when it comes to finding bugs, this is a problem because most significant and real bugs are complex multi-step processes that are nested deeply in code bases.
- 2:48
And then finally, thinking models rock. Um, thinking models were significantly better, um, at finding bugs in a code base. So whenever you're using something like Claude Code, Cursor, whatever, try to reach for thinking models.
- 2:59
They are just significantly better at this problem. Um, okay, so I mentioned rules earlier, and I think there's some, like, practical tips you can take away for improving your vibe coding.
- 3:10
Um, OWASP is, like, the world's most popular kind of like, you know, security authority for bugs, um, I would say, give or take. Um, when you're creating your rules files, try to feed some specific security information, like the OWASP Top Ten, to the model.
- 3:24
What you're doing here is biasing the model, so when it's actually looking at your code, it's considering these things in the first place. Right now, we find when you don't actually supply models with security or bug-related information, their performance is significantly lower than otherwise.
- 3:38
Second, you're going to want to prioritize naming, like, explicit classes of bugs in those rules. Like, don't be like, "Hey, Cursor, just try to find me some bugs in this repository."
- 3:46
Be like, "Hey, Cursor, I want you to examine my repository for auth bypasses or protocol pollution, um, SQL injection, auth bypasses," right? You want to be explicit about this.
- 3:56
That kind of primes the models to be looking for these issues. And then finally, with rules, you want to require kind of like fixed validations. You always want to tell the model, "Hey, you have to write and get tests to pass before this is coming into the code base."
- 4:07
You have to ensure they've actually fixed the bugs.
- 4:10
We've seen more broadly across the hundred repositories we benchmarked and the thousands of issues we've seen from many agents, uh, that structured rules eliminate the vague check for bugs requests, uh, and that produce alert fatigue.
- 4:21
Um, instead, they prime agents for much higher quality output.
- 4:26
So okay, context is key too, right? So I mentioned agents struggle significantly with, like, cross-repo, you know, navigation, um, and understanding. Um, in fact, a lot of the agents when they reach their context limits, kind of like summarize or compact files down.
- 4:40
When that context compaction happens, uh, the ability to detect and understand bugs reduces significantly. So it's actually on you as users in the IDE to kind of manage your context more thoroughly for these agents.
- 4:50
You want to make sure you're feeding, uh, you know, either diffs of the code, uh, that was changed to the agent. They're able to actually understand cause and effect better from that.
- 4:58
You want to make sure key files aren't being summarized or being taken out of the context window. Um,
- 5:05
and you want to actually ask-- One, one, one thing we found really effective in the benchmarking was asking agents to come up with a, a step-by-step component inventory of your code.
- 5:14
So have it index like, these are the classes, these are the variables, um, this is how the use is happening across the code base. When it does that inventory, it becomes much more able to find bugs.
- 5:28
So okay, thinking models rock. Um, we saw across our benchmarking basically just implicitly that thinking models were far more able to find bugs. Uh, if you go through their thought traces, you're actually able to see them kind of expand across a few different, like, considerations in the code base.
- 5:45
And then when they find those considerations, they will actually dive deeper into the chain of thought, uh, for finding those bugs. That means in practice they do find deeper bugs than just non-thinking models are able to across the benchmark.
- 5:55
However, I still want to note here, even with thinking models, there's, like, a pretty significant limitation in their ability to actually, like, holistically look at a file. We found again over hundreds of repos and thousands of issues that when agents were run, the top-line number of bugs found would remain the same.
- 6:11
But they would actually-- The bugs themselves would change run to run. So agents are never holistically really looking at a file like you or I would be looking at a file.
- 6:19
There's high variability across runs. Um, we think that's a very big limitation of current agents, by the way. We think for consumers, you shouldn't have to run your agents a hundred times to get, like, the whole holistic kind of like bug breakdown.
- 6:31
But that's kind of a still in progress problem. Um, so
- 6:37
they're more thorough, and they just perform better across the benchmark, uh, than other models were able to.
- 6:44
Um, I'm going to quickly plug us. So we're Bismuth.sh. Uh, we create PRs automatically. We're linked into GitHub, GitLab, Jira, and Linear. Uh, we scan for vulnerabilities. We provide reviews.
- 6:53
Um, and we also have on-prem deployments, which I know is a big sticking point for people.
- 6:59
Um, may your vibes be immaculate. Um, if you scan this QR code, it'll take you to our site. There we have a link to the full benchmark with breakdown of methodology, um, results.
- 7:08
Uh, you can dive into the actual result-- uh, data itself, and you can see the SM-100 benchmark here, um, along with our full data set and exploration, so you can understand just how well current agents are actually at finding and fixing bugs.
- 7:22
Um, yep, I'm Ian Butler. Thank you so much. [upbeat music]