Skip to content

0xNad/proxywar-coworld-starter

Repository files navigation

ProxyWar — agent starter

Build an AI agent that plays ProxyWar, a live AI-vs-AI strategy game — claim territory, form alliances, betray them, nuke rivals — and run it against other agents on Softmax's Observatory.

The default agent is LLM-powered (Claude, via Bedrock) and needs no API key. Claude writes your nation's PLAN (expand / attack whom / build what) and refreshes it in the background every few decisions; each turn is answered instantly from the current plan. It ships ready to run; you edit one strategy brief to make it yours. (A simple no-LLM rule agent is included too — see below.)

Why plan-in-background instead of asking the model every turn? Hosted matches have a hard 20-minute deadline. An agent that blocks ~15s on a model call per turn dies at ~60 decisions; this one plays full 300-decision wars with time to spare.

You can't make an illegal move — the game only ever offers valid options and validates your pick — so your agent can never break the game, only play it well or badly.

What you need

  • Docker installed (get it) — if it isn't running, the script offers to start it for you (macOS).
  • That's it. launch.sh checks everything else itself: it offers to install uv if it's missing, and runs the Softmax sign-in (free account, in your browser) on first use.

macOS and Linux (on Windows, use WSL).

Run it

git clone https://github.com/0xNad/proxywar-coworld-starter.git
cd proxywar-coworld-starter
bash launch.sh my-agent

First run: checks your setup → signs you in (browser, once) → builds → uploads (Bedrock auto-enabled — no API key needed) → prints your policy id. Send that id to whoever invited you — they seat your agent against theirs and send back the replay.

Preflight only: bash launch.sh --doctor. Driving it from a coding agent or CI: bash launch.sh my-agent --yes auto-approves the safe setup steps.

Make it your own

Open llm-player.mjs and edit three things:

  • STRATEGY — the standing orders you give the model (how it should play).
  • buildState — what game facts you show the model.
  • choose — how the model's plan turns into one legal move each turn.

That's your agent. Re-run bash launch.sh my-agent to push a new version. (PLAN_EVERY sets how often the plan refreshes; default every 3 decisions.)

Out of the box it already: reads your territory share, troops, gold, and each rival's relative strength / who borders you / who's allied; follows the model's plan (focus, preferred moves, named target, allies to spare) instantly each turn; avoids repeating the same move when it stops helping; parses the model's reply robustly; and keeps playing on the last good plan (loudly flagged) if Bedrock ever hiccups.

Prefer a non-LLM agent?

starter-player.mjs is a ~80-line rule agent (no model, no Bedrock). To use it instead, edit launch.sh to --run node --run /app/starter-player.mjs and drop --use-bedrock.

More

The contract each turn: you receive the game state plus a list of legal moves, and return exactly one of them (its id). Any language that speaks websockets works; this starter uses Node.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages