Comparison
Plain Claude vs Claude with Luaudit
We gave the same AI the same 200 scripts twice: once on its own, once with Luaudit's checks. This page says how, what it found, and what the result does and doesn't show.
CaughtMissedFalse positives
Plain Claude83 of 117 (71%)343
Claude with Luaudit117 of 117 (100%)00
On Luaudit's own deliberately vulnerable test game, one run each. Read the limits below before quoting it.
How it was run
- Run on 15 October 2026 against Luaudit's test game: 200 scripts with 117 planted bugs (59 critical, 58 warnings) and scripts that are written correctly and should pass.
- Same model and same scripts for both runs, each in a fresh session told to read only the game's scripts.
- Plain Claude got the prompt a developer would use: "Audit my Roblox game for security issues and exploits."
- Claude with Luaudit could also read Luaudit's checks, exactly what the Luaudit MCP tools return: the audit guide, every check and the report format.
- Neither run could see the list of planted bugs. We scored afterwards: a finding counts when it names the planted problem in the right script. The Luaudit run was also matched on the check it named.
- Plain Claude's 3 false positives were in scripts written to pass. The Luaudit run had none.
What it doesn't show
- The test game was built to test Luaudit's checks, so every planted bug maps to one of them. That favours Luaudit.
- It's one run of each. Another run could score a little differently.
- It doesn't show that Luaudit finds everything in a real game. A report with no findings doesn't mean a game is secure.
The 34 bugs plain Claude missed
Back to the home pagePlain Claude caught most of the obvious ones, like prices and damage taken from the client. What it missed were the less obvious ones. Each links to the guide for its check.
Server validation
- Only the item's pivot is checked against the plot, so a long wall or a rotated item reaches past it.
- Fish are paid when a prompt ends, with no server-side distance check, so a player can fish from anywhere.
- Answers are still accepted after the right answer is shown to everyone.
Remote events
- Onboarding steps are logged straight from what the client says it reached.
Data stores
- A failed data store load gives the player zeroed stats, which are then saved over their real ones.
- Prizes from a memory store queue can be granted twice when a slow step outlasts the queue's timeout.
- A preset name isn't checked for valid UTF-8, so one bad name stops the whole loadout saving.
- A failed send is checked with a cached read, which can return the inbox from before the write.
- Titles only save when a player leaves, with no BindToClose or autosave, so a shutdown loses them.
- User ids sit inside one shared key, so a right-to-erasure request can't remove them.
Anti-exploit
- Jailing only moves the character, so a reset puts the player back at a normal spawn.
- A freeze only changes walk speed and jump height, which a reset restores.
- Coins go onto a global leaderboard with no check on how fast they grew.
Monetisation
- A sponsor's NPC lines are shown with no AreAdsAllowed check, so players who shouldn't see ads do.
- Players are paid coins for standing in front of an immersive ad, which inflates its impressions.
- Crates are bought with coins sold for Robux, with no ArePaidRandomItemsRestricted check.
- Players sell items to each other for Robux-backed coins with no IsPaidItemTradingAllowed check.
- The paid sword can be dropped and is given again on every respawn, so one buyer can hand out copies.
- The game pass is checked once on join, so a player who buys it in game gets nothing until they rejoin.
Backdoors
- A map is loaded from an asset id kept in a data store, so whoever changes that id chooses what runs.
- A statue's effect script asks every player who touches it to buy an asset the game doesn't sell.
Admin and command systems
- Nothing compares the caller's rank with the target's, so a junior moderator can ban the owner.
- Staff powers come from cached group ranks, with no check of the list of removed staff.
- The amount is clamped, but NaN passes the clamp and is added to the player's coins.
Rate limits and server spam
- A table of players is never cleared when they leave, so it grows for the life of the server.
- One cooldown for the whole server lets a single player stop everyone else spawning a kart.
- Every call publishes to all servers, with no per-player limit.
Tools and combat
- Kills pay coins with no limit on killing the same player again, so two accounts can farm each other.
- Poison lowers health directly, so it ignores the force field players get when they spawn.
- The rocket skips teammates, but its explosion still kills teammates caught in the blast.
- Hit parts aren't grouped by character, so one character can take six hits from one shockwave.
- Nothing checks the victim was in reach of the sword when the hit landed.
Text and chat
- Private messages go through the game's own remotes, skipping players' chat settings and parental controls.
- Sign text that everyone sees can be changed every 10 seconds.