Chapter 24: tools, programs about the build, not the game
Everything in apps/ plays or tests the game. Everything here is for the
person (or agent) working on it: getting an MCP client connected to the
window in milliseconds, checking from a cron job that Jev is still being
asked, and swapping new code into a running window without losing the
game.
They have one thing in common: they talk to the window from outside, over
its MCP endpoint (http://127.0.0.1:7637/mcp, chapter 8) or, for the MCP
launcher, by starting the stdio proxy that talks to it.
flowchart LR client["MCP client (Claude Code)"] -->|"stdio"| launch["tools/mcp/launch.sh"] launch -->|"execs"| proxy["run/bin/native mcp"] proxy -->|"HTTP"| window["the window, :7637"] watch["tools/watch/budget.sh"] -->|"HTTP"| window patch["tools/hotpatch/patch.sh"] -->|"HTTP: dev_mode, hot_patch"| window
Aside: shell where it is small, Rust where it is not.
tools/mcpandtools/watchare bash, kept shellcheck-clean, andbudget.shkeeps every piece of parsing in a small function its self-test can call. When something outgrows that (building an ELF shared object from object files, say), it is Rust, astools/hotpatchis.
Try it.
nix develop -c shellcheck tools/mcp/*.sh tools/watch/*.shprints nothing: both are kept clean. (tools/hotpatch/patch.shhas oneinfo-level note aboutls, as of 2026-10-02.)
For the people who maintain it
In this folder
| Path | Chapter | What |
|---|---|---|
| mcp/ | 25 | What .mcp.json starts: a launcher that execs a kept copy of native as the stdio MCP proxy, never building, and the script that refreshes the copy. |
| watch/ | 26 | A one-line status from the running window (task, mode, position, questions in the last minute, what is stopping questions), with exit codes for a watchdog. |
| hotpatch/ | 27 | Builds a Dioxus-subsecond patch from objects buck2 just rebuilt, and the script that drives the whole rebuild-and-patch cycle. |
| README.md | This chapter. | |
| CLAUDE.md | How to build and run tools here, for agents. |
← Previous: Chapter 23, fixtures/ · Up: jevsnes · Next: Chapter 25, mcp/ →