So I was at home playing BG3 after a full day of vibe coding at work, and thought: why should Claude only do the boring stuff at work? I could automate the fun too and let my brain rot at home as well.
Nine days and $712 later, Opus 5.5 killed the Netherbrain on its 12th try and the ending rolled. Nobody touched the controls.
The setup is Claude Code (claude -p) with all built-in tools turned off. Its only tools come from an MCP server I wrote in Python, which talks over TCP to a Lua mod inside the game. The mod only reports what the party can perceive, using the engine’s own sight checks. Screenshots come from a Vulkan layer when it asks for one, and clicks go through an SDL shim. A runner launches the game, starts each session and recovered from all 11 crashes without me.
Most of my time went into memory. Every session is a fresh claude -p with a deadline:
- 99 sessions, median 24 minutes, zero context compactions. A clock in every tool result tells it when to wrap up
- It starts with a briefing: character sheet, playthrough summary and the last session’s HANDOFF.md
- It can only touch its own memory folder, through MCP tools. It made 1,075 memory calls, but only 155 were reads or searches. It writes far more than it reads back
end_sessionlints the memory and commits it to git, and sends it back to work if the handoff is missing- Between sessions a keeper pass (same model, low effort) folds the session log into the curated files
By the end the memory repo had 157 commits, about 23k words of curated notes, and a
lessons.md
with 67 rules in a
WHEN situation: what happened → what to doformat, distilled from fight records. The most interesting part was the Faith-Leap trial in the Gauntlet of Shar. You have to cross a chasm on an invisible floor, and the only hint is a mosaic on the ground showing the path. Step wrong and you fall. An audit later showed my route tools had been leaking the hidden walkway, so the first crossing had help. I fixed that and reran it from the same save, with nothing but screenshots of the mosaic to go on. It took 36 minutes, 674 tool calls, $24, one death and eleven reloads, but it got across. Overall: 20,809 tool calls (about 12% failed or were refused), 862 screenshots, and over 2.2 billion cached input tokens against 3.5 million output tokens. Without caching it would have cost several times more. Next I want to turn it into a benchmark: short scenarios any MCP client can play with the same tools, scored on success, attempts, time and cost. The Nautiloid opening already runs 9 of 9 at about $1.50 a run, and a boss fight, an exploration leg and Faith-Leap are next. Unlike a coding benchmark, the model has to get around a 3D world mostly from text, and its fight decisions carry over: a spell slot spent now is gone until the next long rest, and a dead companion can stay dead (Jaheira did). Codex and Gemini are wired up but haven’t played yet, and I want to see how they do. Write-up: https://bogdantruta.com/blog/claude-finished-baldurs-gate-3/ Code: https://github.com/Bogzx/bg3-agent-harness EDIT: I know I am stupid I didn’t record this but I have the screenshots the agents took as proof for anyone asking( https://github.com/Bogzx/bg3-agent-harness/tree/proof-screenshots/proof ). Also what this means is that I have to run this again 😄 submitted by /u/Bogdanilaa
Originally posted by u/Bogdanilaa on r/ClaudeCode
