Demo

Try rdbg in 3 commands.

Zero Delphi knowledge required — and no Delphi compiler either. The DelphiQuake mirror ships both the source and a pre-built bin/dquake.exe with its .map file, so you can clone, run, and debug without installing Delphi 12 CE (or any Delphi). Install the plugin, clone the demo target, ask your AI agent to debug a frame-render — the agent downloads the data, sets the breakpoint, drives the menu, and walks you through the BSP load that fires when E1M1 starts.

Install the plugin Skip to the demo prompt

The 3 commands

Two prerequisites: a Windows host with an interactive RDP desktop (the rdbg daemon needs GDI for capture and input), and an AI agent with the rdbg plugin installed (Claude Code is the only shipped install path today; see Getting started for the details).

You do not need Delphi installed. The dquake.git mirror ships the source and the pre-built bin/dquake.exe (with its bin/dquake.map for symbol resolution). Delphi 12 CE only enters the picture if you want to recompile the source after editing it — the demo as written never touches the compiler.

Install the rdbg plugin

Two slash commands inside Claude Code (the only shipped install path) — the marketplace + the install:

/plugin marketplace add https://sundaymorning.app/rdbg/.claude-plugin/marketplace.json
/plugin install rdbg-debugger@rdbg

The plugin bundles all five rdbg binaries (daemons, CLI, GUI, MCP bridge) — nothing else to download. Already installed? Skip to step 2. Need the long version? See Getting started → Install in 2 steps.

Clone the dquake demo target

One git clone. ~5 MB of source plus a working bin/dquake.exe (the DelphiQuake port of id Software's Quake 1 engine). Static-file git mirror — no GitHub auth, plain HTTPS:

git clone https://sundaymorning.app/rdbg/dquake.git
cd dquake

Inside you'll find Pascal source (rendering, BSP loader, networking, the lot), bundled binaries under bin/, and scripts/fetch-quake-data.cmd — a small helper your agent will run for you in step 3 to grab the freely-redistributable Quake shareware data file.

Ask your agent to run the demo

Paste this into your agent's chat (Claude Code, etc.):

Demo prompt

Set up the dquake demo: run scripts\fetch-quake-data.cmd to download the Quake shareware data, then launch bin\dquake.exe under rdbg, set a breakpoint at Mod_LoadBrushModel in model.pas, drive the menu to start episode 1 mission 1, and walk me through the BSP load when it hits.

First run downloads ~18 MB of Quake shareware data (one time, cached); the BP fires within seconds of E1M1 starting. The transcript below shows what your agent actually does.

What your agent does

Real chat transcript shape — the same MCP tool calls your agent makes when you paste the prompt above. Compressed for readability; actual session is a couple of minutes end-to-end.

Agent: Setting up the demo. First, the data file.

tool: Bash(cmd /c scripts\\fetch-quake-data.cmd)

[fetch-quake-data] Downloading...

[fetch-quake-data] SHA1 OK.

[fetch-quake-data] id1\\pak0.pak ready (18689235 bytes).

Agent: Data fetched. Setting the BP and launching.

tool: mcp__rdbg__set_breakpoint(source="model.pas", symbol="Mod_LoadBrushModel")

{"ok":true, "bp_id":1, "resolved":"Mod_LoadBrushModel+0x0 at model.pas:984"}

tool: mcp__rdbg__launch(exe="bin\\dquake.exe")

tool: mcp__rdbg__continue()  (past the loader BP)

…dquake comes up to the main menu…

Agent: Menu's up. Driving it: New Game → Easy → Episode 1 → The Slipgate Complex (E1M1).

tool: mcp__rdbg__send_keys(target="dquake", text="\\n") ×3  (menu nav: New Game / Easy / Episode 1)

tool: mcp__rdbg__events(timeout=30)

{"event":"breakpoint_hit", "bp_id":1, "tid":7892, ...}

   Frames: model.pas:984 Mod_LoadBrushModel+0x0 → model.pas:712 Mod_LoadModel+0x14a → cl_main.pas:382 CL_ParseServerInfo+0x4c

Agent: Hit. Inspecting the model_t struct mid-load.

tool: mcp__rdbg__get_self()RCX = model_t* at 0x023f9a0c1080

tool: mcp__rdbg__inspect_object(addr="0x023f9a0c1080", max_depth=2)

model_t {

   name = "maps/e1m1.bsp"

   numvertexes = 1789, numedges = 2742, numfaces = 1289

   numleafs = 678, numplanes = 821, numclipnodes = 1543

   flags = 0x00, type = mod_brush

   mins = (-2096, -1376, -296) maxs = (2128, 1408, 384)

   }

Agent: Paused at the BSP load for E1M1 (The Slipgate Complex). The map has 1,789 vertices, 2,742 edges, 1,289 faces, 678 leaves, and a bounding box of about 4200×2800×680 units — typical Quake 1 map complexity. The lump-parsing loop is right above us in the call stack; if you want to step into a specific lump (faces, planes, clipnodes) I can break in Mod_LoadFaces / Mod_LoadPlanes / etc. Or I can continue through the load and break in R_RenderView to walk a frame render once the map's fully ready. Which do you want?

Try your own prompts

dquake exercises every interesting corner of a real engine. Once you've run the BSP-load demo, here are five other things to ask your agent:

Walk a frame render

"Set a BP at R_RenderView in r_main.pas, let dquake reach gameplay, then step me through one frame — show me the BSP traversal and which faces fall in the view frustum."

Watch the network code

"Break in CL_SendCmd in cl_input.pas and show me what one user-input tick looks like on the wire — movement, view angles, button bits."

Catch every exception

"Run dquake.exe with set_exception_filter(first_chance: true) and tell me about every exception that fires during a 60-second gameplay session, even the ones the engine catches."

Screenshot the menu

"Launch dquake, wait for the main menu to paint, screenshot the main form and describe what you see."

For multi-step investigations, ask your agent to invoke the bundled bug-hunter subagent — it runs the read → hypothesise → reproduce → inspect loop autonomously and returns a tight diagnosis. Full recipe library in the Agent guide.

Troubleshooting

Quake data download failed

The fetch script prints a clear error if the Internet Archive request fails (firewall, DNS, IA outage). Manual fallback: download QUAKE_SW.zip in a browser, extract QUAKE_SW/ID1/PAK0.PAK, copy it to id1\pak0.pak in the dquake clone. Re-run the demo prompt — the script detects the pre-existing pak0.pak and skips the download.

Daemon unreachable

Run /rdbg:status in Claude Code to confirm. If it says daemon unreachable, run /rdbg:start-daemon for the manual start instructions, and make sure your agent's host is running from inside an interactive RDP desktop (Session 2+, not Session 0 — the daemon refuses to spawn from headless / service contexts).

Breakpoint won't resolve

The dquake.git mirror ships bin/dquake.map (built with dcc32 -GD) alongside bin/dquake.exe. Confirm both files are present after the clone. If the symbol your agent tries to break on doesn't resolve, ask it to list_breakpoints — the response shows what the daemon was actually able to find.

Game window renders black

dquake uses DirectDraw for the game viewport, which bypasses the GDI compositor that capture_window reads from — so screenshots of the gameplay viewport come back as a black PNG. Workaround: drive the engine's text console (BP at Con_Printf) for state inspection, or screenshot the menu (which is GDI-rendered and captures correctly).

Like what you see?

The same workflow runs against any Delphi target you can launch — your own apps, third-party tools, anything with a .map file. Get rdbg, point your agent at your codebase, describe the bug.

Install the plugin Read the Agent guide