Build a game with the Claude Code plugin

pithy-games adds a game team to the pithy plugin. Game design, a Unity client, and playtests with simulated players, built on Pithy’s game capabilities — auth, multiplayer, matchmaking, leaderboard, rating and ledger — and on the socket contract every engine plays against.

Install it

You need the pithy CLI first, from Install. Then, inside Claude Code:

/plugin marketplace add pithy-sh/pithy#release
/plugin install pithy-games@pithy

pithy-games depends on pithy, so installing it installs pithy with it. Both carry the pithy CLI’s version, so they always match. #release is deliberate, for the reason the base plugin’s page gives, and the release branch caveat there applies here too.

Install from one source. pithy-games@pithy brings pithy@pithy. If pithy@synced, from Anthropic’s plugin directory, is installed as well, every pithy agent and skill appears twice. Remove one.

The team

It reuses the base team — pithy:server, pithy:client-web, pithy:client-mobile and pithy:runner — and adds one agent. A web game is pithy:client-web as it is. A React Native game is pithy:client-mobile.

AgentDefaultJob
client-unitySonnet, mediumThe Unity client in C#. Generates the HTTP layer from openapi.json, writes the socket layer against asyncapi.json, and knows IL2CPP stripping and WebGL. Compiling is yours, in your own Unity project

Unity is the same work done by hand: the generator, its pinned version, and the command.

Choose its model

client_unity_model and client_unity_effort are this plugin’s settings, with the defaults above. Change them with /plugin, or from a shell:

echo '{"client_unity_model": "opus", "client_unity_effort": "high"}' | claude plugin configure pithy-games@pithy --values-stdin

A plugin’s settings reach only its own skills. So the base team’s — server_model, runner_model and the rest — stay pithy’s, set on pithy@pithy, and /new-game brings that team in through pithy’s own /new-app so they apply. /playtest dispatches the runner on its own default, Haiku at low effort.

The skills

/new-game is /new-app with a game’s capabilities and a Unity target. It asks which clients play — web, mobile, Unity — runs /app-design and /game-design, scaffolds through /new-app, has the server agent add the capabilities the design calls for, and dispatches client-unity once the contract exists. A Unity client is an API client, like a mobile app, so a Unity-only game is pithy init --target mobile with no mobile agent.

/game-design settles what the server is the authority for, what the room holds, the game’s action and view schemas, and anti-cheat, before any code. It runs in the main session, because those are the decisions a cheaper model should not make.

/playtest has pithy:runner sign in simulated players against pithy dev, join them to one room, play the moves the design implies, and return a summary: per move, which players got a state or the refusal’s code, then the final phase and outcome. Its script runs on Node 22.18 or later.

A gap in the kit is filed with the base plugin’s /report-kit-gap.

The agents build against both documents

pithy contract writes openapi.json, and asyncapi.json beside it for a Worker that serves a socket, with each game’s <gameKey>.action and <gameKey>.view schemas in it. The server agent keeps both current. client-unity generates from the first and writes its socket against the second, so it never guesses a route or a frame.

ESC