Watch Claude Code inside RollerCoaster Tycoon on Youtube.
The park rating is climbing. Your flagship coaster is printing money. Guests are happy, for now. But you know what’s coming: the inevitable cascade of breakdowns, the trash piling up by the exits, the queue times spiraling out of control. You could stay glued to the screen, frantically clicking through management windows. Or you could let an AI agent take the wheel.
In a terminal window in the corner of the screen, Claude Code springs to life. It scans 100 data points you haven’t had time to read: park financials, ride breakdowns, guest complaints about bathroom lines. Within seconds, it compiles a task list: build more Drink Stalls near high-traffic areas, hire mechanics before the coasters start failing, and raise the p…
Watch Claude Code inside RollerCoaster Tycoon on Youtube.
The park rating is climbing. Your flagship coaster is printing money. Guests are happy, for now. But you know what’s coming: the inevitable cascade of breakdowns, the trash piling up by the exits, the queue times spiraling out of control. You could stay glued to the screen, frantically clicking through management windows. Or you could let an AI agent take the wheel.
In a terminal window in the corner of the screen, Claude Code springs to life. It scans 100 data points you haven’t had time to read: park financials, ride breakdowns, guest complaints about bathroom lines. Within seconds, it compiles a task list: build more Drink Stalls near high-traffic areas, hire mechanics before the coasters start failing, and raise the park entrance fee while satisfaction is high.
In this article we’ll tell you why we decided to put Claude Code into RollerCoaster Tycoon, and what lessons it taught us about B2B SaaS.
At Ramp, we’re building agents across product surfaces and internal operations. Our current approach is small multiples: task-specific agents with tightly scoped system access. This is a security posture as well as an optimization around the current limits of agent intelligence and context windows.
But with each task-specific agent we build, there’s a Promethean urge to create the One Agent with unfettered access to everything. It’s still too early to build this way, but the latest models are pushing this limit; it’s increasingly a security and integrations issue, not an agent limitation. This is why now is the perfect time to start experimenting with broadly scoped agents in toy environments.
There’s plenty of precedent for AI experimentation in videogames; from DeepMind’s work in Atari games and StarCraft to more recent demos in Minecraft and Pokemon. But each of these games is a poor representation of the kind of environment Ramp and our customers exist in. Minecraft is an open sandbox lacking any capitalist structure. Pokemon is about a child too young to open an LLC or apply for a credit card. StarCraft incorporates economics, competition and workforce management, but it’s not very customer-centric.
Ramp needed a game that closely approximates customer-centric business operations and SaaS-powered digital feedback loops. There was simply no other choice. We had to put Claude Code in RollerCoaster Tycoon.
A common misconception about RollerCoaster Tycoon is that it is first and foremost a game about “rollercoaster game”. In reality, the rollercoasters often fade into the background of a sea of park management windows. The game is a Montessori play kit of B2B SaaS interfaces.
And the vibes match is perfect; coding agents like Claude Code, in their humble terminal windows, convey a retro-futurism and Claude in particular brings serious playfulness. It’s a great agent to send back in time so that we can begin to understand how to re-write two decades of business software.
OpenRCT2 is an open-source re-implementation of RollerCoaster Tycoon 2. We forked the project to add a new kind of window into the game; a terminal running Claude Code.
In order for Claude Code to play the game, we had to create an expansive CLI covering all the actions the user has available in the game, from reviewing guest feedback to changing umbrella prices and everything in between, The CLI is called rctctl and follows the patterns and conventions of kubectl, the expansive CLI behind Kubernetes, one of the most complicated pieces of software ever created.
The CLI replicates every important data point, control and action the user has available, plus some additional commands to review park tiles.
In place of ‘seeing’ the map, Claude can request ASCII grid print-outs of the map at multiple levels of granularity, from ‘hot regions’ to tile grids, to single tiles.
Here’s an example of a dense region of the park.
$ rctctl map area --x 44 --y 38
Map Area
--------
Anchor : (44, 38) top-left
Span : 16x16 tiles
X:44 45 46 47 48 49 50 51 52 53 54
Y 38 R P P P P . . E E . T
39 P P . S P S T P Q S .
40 P R S R P P . P Q S .
41 P S S S . P P P P P P
42 P . S S S P . . . . .
43 P S T T S P . . . . .
44 P S S S S P . . . . R
45 P . R R R R R R R R R
46 P R R R P P P P P P P
47 R R R S Q Q S Q Q Q Q
48 R R S S E Q Q Q Q Q Q
Legend
------
- R = Ride track/support
- P = Footpath
- . = Owned ground
- E = Ride or park entrance
- T = Tree or foliage
- Q = Queue path
- S = Scenery/building
So Claude is at a pretty steep visuo-spatial disadvantage, and this is most of the intuition you’ll need to appreciate Claude’s relative strengths and weaknesses in the game.
Where Claude excels:
Game knowledge. Claude is surprisingly familiar with all things RCT, and also completely unfazed by the premise that it has been ‘hacked into’ a late-90’s computer game. This was surprising, but fits with Claude’s playful personality and flexible disposition.
Gathering information. Claude excels at trawling through the game’s diverse metrics and observability features. Claude switches between empathizing with aggregate guest thoughts and scrutinizing ride financials. It’s great at creating insightful reports with specific recommendations.
Pulling Digital Levers. Claude is rock solid at adjusting configurations. Opening and closing rides, setting prices, hiring staff (which are automatically placed in RCT2), and starting marketing campaigns. These actions don’t require spatial reasoning, and they’re most similar to traditional CLI operations.
Placing Shops/Stalls and Flat Rides. Nearing the edge of Claude’s in-game competencies are tasks that require a basic spatial understanding of the park. Even finding main pathways can take several iterative steps and cumulative reasoning. Claude can reliably place Bathrooms, Drink Stalls and other stalls. It can even take a swing at flat rides like the Carousel which requires the additional complexities of placing a ride entrance, exit and connective pathways. But flat rides are where things start to feel sketchy and the success rate is closer to 80% with a high risk of small failures with park consequences.
Where Claude struggles:
Pathways and connections. Locating main pathways, routing new paths, and connecting ride entrances/exits are all serious challenges for Claude. The added complexities of obstacles like rides, trees, fences, and terrain slopes can quickly combine to overwhelm Claude’s loose grasp on the spatial reality.
Roller coasters. Placing larger pre-built rollercoasters is another heavily visual task in the game. Ride placement requires spatial reasoning at multiple scales, from relative distance to paths, to individual scenery obstacles, and large barrier structures like hills. Claude often gives up on optimal positioning and just flings rides to greenfield territories far away from main paths, and then fails to build the necessary long pathways to connect these endeavors. It’s an expensive mode of failure, and Claude’s main obstacle to a full playthrough.
Verticality. Claude’s spatial reasoning in the game is already at its limits in two dimensions. The third spatial dimension of inclined ground, underground construction, and any custom rollercoaster design work is basically out of the question. Unfortunately, this is some of the game’s richest gameplay.
The key insight: The informational interfaces of RollerCoaster Tycoon are extremely clean, and Claude is super sharp with them. The digital levers are well within Claude’s capability. And Claude is capable of managing park staff and dropping down simple amenities like Drink Stalls, Restrooms, and Benches. Claude falls short on the big moves, like large new coasters and pathway thoroughfares. But these deficits clearly stem from the awkward spatial interface.
As a mirror to real-world agent design: the limiting factor for general-purpose agents is the legibility of their environments, and the strength of their interfaces. For this reason, we prefer to think of agents as automating diligence, rather than intelligence, for operational challenges.
OpenRCT2 is an open-source re-implementation of RollerCoaster Tycoon 2 in C++, extended with fixes and features for nearly a decade by a passionate community.
We don’t know any C++ at all, and we vibe-coded the entire project over a few weeks. The core pieces of the build are….
A new menu item in the game’s menu bar
A new window type displaying a terminal mirroring a remote terminal running Claude Code.
An expansive CLI (rctctl) that Claude uses to interface with the game.
RPC layer to transmit CLI commands into the game state.
Tests (or so we think)
We started with a plan from ChatGPT o3-Pro Deep Research (read: ChatGPT on max settings), broke it down into a roadmap with Claude Code, and got to work managing four terminals of Claude Code to execute against the roadmap
After three hours the build was stuck, so we threw the whole thing away and started over.
We started the second iteration with Codex on GPT-5.1-codex. We also broke things down into smaller chunks, used careful planning phases, and kept the context above the ~60% remaining level where coding models perform at their absolute best. The only other notable setback came was an accidental use of the word “revert” which Codex took literally, and ran git revert on a file where 1-2 hours of progress had been accumulating.
Keeping all four agents busy took a lot of mental bandwidth. Each implementation phase produces a summary of the work done, and the planning phases output ~500 words. Research tasks produce lots of prose to critically review, and sometimes we couldn’t remember what the initial questions or work threads were by the time we were reviewing them. The experience overall is less like programming and more like… a management simulation game. It’s vaguely addicting. The speed of progress and looseness of focus amplifies the reward of each new feature shipped.
The full project took ~40 hours over several weeks, which was far more time than we initially expected, but this time included planning, design, and tons of scope creep, all playing out in the terminals. The biggest accelerant to coding progress would have been tighter feedback loops; ways for each coding agent to QA its own work, and not just think that the feature was working as described.
Like any large vibe coded project, it’s very hard to tell what works, and what doesn’t.
In-game Claude was my diligent playtester, and an integrated bug-report tool let it write bug reports directly into the repo for easy review by coding agents. This feedback loop was invaluable for ironing out help text, inconsistencies in the CLI, and observed bugs.
It’s likely that several surfaces have strange or incomplete behaviors. However, at this point, in-game Claude rarely has any bugs to report on, which I take as a moderately reliable signal that the implementation is working.
Building this project reinforced a few principles we’ve seen elsewhere in agent development:
Environment legibility is a key. Claude thrives with the clean and well-structured omniscience of RCT’s built-in monitoring and control surfaces, and clearly struggles with text-based renderings of game space. Inventive text-based representations are fun to imagine, but probably impractical in most cases. This is a boundary for many agent tasks, and is probably best tackled with stuff-as-code arrangements rather than simple text-based representations (like chess notations and markdown-mermaid diagrams).
Coding Agents are a tremendous tailwind; build sails. By putting ‘raw’ Claude Code at the center of the project we automatically and immediately benefited from several Anthropic releases even in the short span of the project. Claude Opus 4.5, fast auto-compaction, custom status lines, and fixes to terminal flickering all came in clutch and ‘for free’ (well, not the Opus upgrade).
Development Loops. Coding agents thrive on feedback loops where they can prove to themselves that the implementation is complete and correct. This project was hampered by a broken iteration loop in which we had to manually QA the in-game terminal experience and functionality. Vibe coding is slow and frustrating when QA is a manual process.
Experience beats study. LLMs may be Big Black Boxes to science, but each of us has in our own head a Bigger Black Box. Anybody with a few hours of experience with LLMs has already begun building an intuitive understanding of LLM capabilities. The best way to continue to develop this intuition is through play.
RollerCoaster Tycoon taught a generation of adults how to mind-meld with a graphical user interface. In this period of transition between GUIs and the future of intelligent computers, RCT makes for an interesting case study of the messy middle we occupy.
The park is running. Claude is at the controls. The guests say they are happy.
The code is open source. Here’s how to get started.
Prerequisites
macOS (Sonoma or newer) with Xcode, CMake 3.24+, and Ninja
RollerCoaster Tycoon 2 (purchase on Steam)
libvterm for terminal rendering: brew install libvterm pkg-config
Quick Start
# Clone the branch
git clone -b claude https://github.com/jaysobel/OpenRCT2.git
cd OpenRCT2
# Configure
cmake -S . -B build -G Ninja -DOPENRCT2_PREFER_STATIC=ON
# Build everything (game + CLI tools + terminal)
cmake --build build --target agent_bundle -j8
# Run
./build/OpenRCT2.app/Contents/MacOS/OpenRCT2
Once the game launches, click the Claude toolbar button to open the AI terminal.
What Gets Built
The agent_bundle target compiles:
OpenRCT2 - The game itself with embedded terminal window
rctctl - CLI tool that Claude uses to control the game via JSON-RPC
Sprite assets - Graphics and UI elements
How It Works
The terminal spawns Claude Code with access to rctctl, a purpose-built CLI that communicates with the running game over JSON-RPC on localhost:9876. Claude sees the same information a player would—ride stats, guest happiness, park finances—and issues commands through this CLI rather than clicking buttons.
For more details, see:
SETUP.md - Full setup guide
CODING_AGENT.md - Technical deep dive
RCTCTL.md - Complete CLI reference
Requires game assets from a legitimate RCT2 purchase. Copy game files to ~/Library/Application Support/OpenRCT2/ after installation.
Watch the livestream: On Twitch Read the code: On Github Join us: At Ramp Labs
No posts