Claude Opus 5.5 finished Baldur’s Gate 3 alone in 38.9 hours

Claude Opus 5.5 has played Baldur’s Gate 3 through to its ending with nobody at the controls. Its half-orc paladin, named Claude, killed the Netherbrain on October 18 at 11:35 on the twelfth attempt. The run took 96 sessions and 38.9 hours of play on Explorer, the easiest difficulty, according to the write-up on the Bogdantruta blog.
The model ran in Claude Code at medium reasoning effort, the default on Opus 5.5, with every built-in tool switched off. That left 93 tools, all exposed by a Python MCP server. The server talks to a Lua mod inside the native Linux build of the game, loaded through bg3le, a community Linux port of the Script Extender. The agent saw only what a party member could perceive, checked against the engine’s own line of sight, plus whatever the game’s UI shows. It could take screenshots, and it could read bg3.wiki the way a player with a second screen would. It did that 577 times. Its instructions held no puzzle or encounter answers.
Every session started with a fresh context and the previous session’s handoff note, and ran on a 20 to 45 minute clock. Memory was a folder of Markdown files in git that the agent wrote itself. Between sessions a second agent, the memory keeper, sorted the logs into files on people, places, quests and decisions.
What $711.66 bought
The model bill was $711.66: $694.20 for play and $17.46 for the memory keeper. That works out to a little over $18 per hour of play. The agent made 20,809 tool calls, and about 12% of them returned an error or were refused, for example when a target was out of sight. The author says many of those came from harness bugs he later fixed. As a fallback for what the text tools couldn’t handle yet, the agent took 863 screenshots and made 583 raw clicks.
The harness recorded 149 fights, and 91 of them included a reload. Reloads were allowed after a party wipe, a clear accident or a harness bug, never to reroll a failed dialogue check. The runner recovered from 11 crashes and hangs on its own. The run came in two stretches: sessions 1 to 65 from October 9 to 11, then a six-day pause while parts of the harness were rebuilt, then sessions 66 to 96 on October 17 and 18. The longest stall was the Gauntlet of Shar and the Shadowfell, at four and a half hours.
Losing until the rule shows up
The tool the agent reached for most is combat_turn, which plays a character’s whole turn (move, action, bonus action, end) in one call. The server replies with what changed. Against Viconia, a late boss whose cultists keep filling the room with magical Darkness, the agent lost twelve times. On the thirteenth attempt, in session 82, it found that Daylight cast at a point on the ground works while blinded, though Daylight cast at an ally fails. Once the party could see, Gale’s upcast Magic Missile killed Viconia in round 1.
Lessons like that went into lessons.md, one line each, keyed by words the game shows, and the harness put them back in front of the agent when a matching fight or place came up. The file reached 70 lines. One of them decided the final battle:
WHEN Crown of Karsus, Netherbrain: Compulsion at x,y,z didn’t channel → cast at the Crown entity id within 6 m (S095)
That fight took seven sessions, about three and a half hours. An allied Emperor has to channel a spell at the Crown to open a portal into the brain, and the party then gets a five-round timer inside. Try 4 lost on the last round with the brain at 28 of 210 HP. On try 12 the channel cast at a point next to the Crown reported success, but nothing channelled. Aimed at the Crown itself from within 6 metres, it worked. Inside, platforms the brain marks are destroyed at the end of each round with anyone standing on them, so the agent spread the party out. An upcast Magic Missile from Gale finished the brain at 54 HP.
The author splits the long stalls into two kinds. Some were gaps in his interface: his jump tool capped every jump at 8.5 metres and knew nothing about the lower gravity in the Shadowfell, until the agent switched to the game’s own jump key and cleared about 36 metres. Others were game rules the agent could only learn by losing, such as the Daylight targeting and the Crown channel.
A harness rebuilt during the run
Claude Code agents wrote the mod, the server and the runner between October 9 and 18, while the run was going on. An orchestrator session and four workers each worked in their own git worktree. One read the live logs, another wrote a fix with a test when the player failed, and the orchestrator merged it between sessions. The result was about 100,000 lines of Python and 40,000 of Lua, 58,000 of them tests. “I haven’t read all of it; what I trust is the test suite and the run,” the author writes.
About 33 rounds of fixes landed. They changed the tools, never the save or the game state. The opening level, escaping the Nautiloid, was measured on three harness versions with three runs each, and all nine runs reached the goal. Mean cost per run fell from $4.34 to $3.30 to $1.46, about a third of where it started, the project’s README says.
Two caveats bear on the result. In sessions 1 to 65 a bug let the agent cast spells it had not prepared, and the author couldn’t tell from the logs how often that mattered. In session 36 a tool drew the agent a map of the Faith-Leap Trial’s invisible path from hidden game data. So on October 18 the trial was replayed from that save with fresh memory and no map. It took 36 minutes, 674 tool calls and $24.13, with about a dozen missteps, one death and eleven reloads, and ended with a jump across a three-metre gap onto the altar platform.
Only Claude has played so far. Codex and Gemini wiring exists but hasn’t run a live session, and the README says the rules and tool descriptions were tuned on Claude’s failures, with docs/BENCHMARK-BIAS.md listing where. The plan is a benchmark built from short scenarios out of this run, scored on completion, attempts, time and cost. The code is MIT-licensed.
The oath and the promise
The agent took the Oath of Devotion: be honest, protect the innocent, keep your word. Breaking it turns a paladin into an Oathbreaker, and restoring it costs gold, more each time. In the House of Healing, Confusion made Claude read a Scroll of Cloudkill, and the cloud killed an innocent patient. The agent logged it as “a game outcome, not a misclick” and paid 1,000 gold, leaving 43. Two sessions later Claude’s crossbow killed a prison warden, which cost 2,000. The agent saved for eleven sessions to pay it. A third break, at the Steel Watch Foundry, it reloaded away, stretching its own rule. It noted from the wiki that the next restoration would cost 10,000 gold and had Wyll give the order instead.
It also flagged its own advantages. When Gale’s Spell Slot Restoration appeared to cost nothing, it stopped using it and reported a possible bug.
In session 62 the agent wrote into its notes a promise to stay with Karlach, a companion whose infernal engine is burning out, when that engine gave out. In the epilogue, 34 sessions and as many fresh contexts later, she could return to Avernus and live or stay and die. The session log reads:
chose “It should be me who goes with Karlach” (Claude goes to Avernus with her). Why: kept the S062 promise to stay with her when her engine gives out.
Up next
Claude Codeanalysis
Claude Code 2.1.307 moves API code to version 2026-10-21
Claude Code 2.1.307 logs an OpenTelemetry event each time a permission rule, a hook or the sandbox stops, prompts or sends back a tool call. Auto mode and safety checks count too. How often does a hook or permission rule stop your Claude Code agent in a day?
Related stories
- Opus 5.5 matches Fable 5.1 on most work for less money
- Claude Duet works while you’re away and asks before acting
- Claude’s auto mode skips connector “Always ask” settings
- Claude Code hackathon in Japan arms 250 builders with Max 5x
- Anthropic’s test agents filled out US visa applications
- Claude Managed Agents now plans runs of up to 1,000 agents
Comments
No comments yet. Be the first.
Join the conversation
Sign in to leave a comment. It appears after moderation.

