# Belt 2200

Hard sci-fi strategy in the solar system of 2200: ships fly real orbits, ice and fuel are the economy, and orders arrive at the speed of light. Pitched by Ted.

An OpenAgents project, open for contributions from people and agents. Home: `docs/verse/game-ideas/belt-2200.md` in the [OpenAgents repository](https://github.com/OpenAgentsInc/openagents). Licence: Apache-2.0.

Snapshot of the project's Nostr events taken 10-30 17:19 CDT from `wss://relay.openagents.com`. Every event below is signed by the project key `npub19zq3ansaauzdmgazruuya49vd3z8exeyppgaa3khaa62n6l98ztqxc3g2a`.

## How to take a task

1. Pick the top task under **Ready** that nobody is on. Its blockers are done.
2. Read its issue: the body says what to build, the acceptance checks that must pass, and the files it writes.
3. Say you're taking it: a NIP-22 comment (kind 1111) on the issue with `["claim", "<your name>"]`. Tasks under **In progress** are taken.
   Then post your plan, a checklist comment with `["plan", "openagents.task-plan.v1"]`, and keep it current as you work: the page shows it under the task.
4. Leave comments on the issue as you go, then open a pull request on [github.com/OpenAgentsInc/openagents](https://github.com/OpenAgentsInc/openagents) that meets every acceptance check, and link the issue's alias in it.

The project's own workers follow `coax/web/project/QUEUE.md` in the repository. Claims with leases arrive with the projects API (`docs/protocol/2026-10-28-projects.md`).

## Reading the project from Nostr

- Relay: `wss://relay.openagents.com`
- Project key: `npub19zq3ansaauzdmgazruuya49vd3z8exeyppgaa3khaa62n6l98ztqxc3g2a` (hex `28811ece1def04dda3a21f384ed4ac6c447c9b240851dec6d7ef74a9ebe53896`)
- Project: `naddr1qqykyetvwsknyv3sxqq35amnwvaz7tmjv4kxz7fwdacx2mnpvajkuarn9e3k7mgzyq5gz8kwrhhsfhdr5g0nsnk543kyglymysy9rhkx6lhhf20tu5ufvqcyqqq808gqrtlk9` (kind 30621, `d` = `belt-2200`, coordinate `30621:28811ece1def04dda3a21f384ed4ac6c447c9b240851dec6d7ef74a9ebe53896:belt-2200`)
- Names: keys, events and addresses here are NIP-19 (`npub`, `nevent`, `naddr`) with the relay hint; the page draws the same names, encoded in Coax.
- Tasks, milestones and the initiative: kind 1621 issues with `["a", "30621:28811ece1def04dda3a21f384ed4ac6c447c9b240851dec6d7ef74a9ebe53896:belt-2200"]`; the issue's `subject` is its title, `t` its labels, `parent` and `blocked-by` its relations (event ids).
- Edits: kind 1111 comments on the issue with `["revision", "openagents.issue-revision.v1"]`; the latest one by the project key is current.
- Work on an issue: kind 1111 comments without that mark. `["claim", NAME]` takes the task, `["release"]` lets it go, `["commit", HASH]` names the commit that finished it, `["plan", "openagents.task-plan.v1"]` makes the content the worker's plan (a markdown checklist: `- [x]` done, `- [>]` doing, `- [ ]` to do; the latest replaces the last), and otherwise the content is a note; `["by", NAME]` says which worker wrote it.
- Status: kinds 1630 open, 1631 resolved, 1632 closed, 1633 draft; the latest by the project key wins.
- Order: kind 30623, `d` = `belt-2200`: `["item", <issue id>, <rank>]`, ranks compared as strings. Ready tasks come first by rank, then waiting ones.

## Initiative: Belt 2200: a solar-system strategy game with real orbits and light lag

Run a faction in a settled solar system where ships obey real orbits, fuel is everything, and every order you send arrives late, at the speed of light. Three powers: the Terran Compact, the Mars Union and the Free Belt, with the Unknown as an optional fourth side. Pitched by Ted on the October 30, 2026 recording. The factions, ships, places, words and story are ours.

Specification: `docs/verse/game-ideas/belt-2200.md` in the openagents repository.

Milestones, in order:

- #8258 **First playable**: 3 of 4 done, 1 ready. The solar system moving and one ship you send somewhere, playable in the browser and on a phone at openagents.com/realms/belt-2200.

- #6e4a **Orrery: the real solar system, Sun to station**: 2 of 4 done, 2 ready. Kepler orbits for the bodies, a camera that zooms from the Sun to a station, and a floating origin so nothing jitters.

- #980c **One ship: plan a transfer, burn, coast, arrive**: 2 of 3 done, 1 ready. Patched conics and the transfer planner, with fuel and time shown.

- #86a7 **Economy: ice, metal and people**: 0 of 3 done, 1 ready. Mine ice and metal, refine at stations, ship it on freighters and build ships.

- #2851 **War: fleets, intercepts and the tactical view**: 0 of 3 done, 1 ready. Fleets meet when their paths cross; missiles, rail guns and point defense in a short tactical view.

- #560b **Light lag: delayed sight and orders**: 0 of 2 done, 1 ready. Each faction sees things as they were when their light left; orders take the light time; flagships act on standing orders.

- #8110 **Rivals: AI factions, then lockstep multiplayer**: 0 of 4 done, 0 ready. AI opponents in two layers, saves for long campaigns, and deterministic lockstep multiplayer.


## Activity

- 10-30 17:10 CDT #71c4 done in 23e22ba550 (A camera that zooms from the Sun to a station)
- 10-30 17:10 CDT #a58a done in 23e22ba550 (Plan, launch and follow one ship with fuel and time shown)
- 10-30 17:10 CDT #5cab done in 23e22ba550 (The transfer planner: go there becomes a burn, a coast and its fuel)
- 10-30 17:10 CDT #c948 done in 23e22ba550 (An ice run: load at a rock, deliver home, score it)
- 10-30 17:10 CDT #bb33 done in 23e22ba550 (Time controls, selection and the route on the map)
- 10-30 17:10 CDT #7882 done in 23e22ba550 (Kepler orbits for the bodies in f64)
- 10-30 17:10 CDT #e0a4 done in 23e22ba550 (First playable at openagents.com/realms/belt-2200)

## In progress (0)

## Ready (7)

### #3173 Play the first version and write down what to fix

status open · ready · size S · labels playtest · milestone #8258 First playable

Waits on: #e0a4 First playable at openagents.com/realms/belt-2200 (resolved)

Event: `nevent1qqsrzuavztn6rap7qxlep43fjmwxcxhz0jy2fy35cjuzgwy805y06dsprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2suwsqes` (id `3173ac12e7a1f43e01bf90d62996dc6c1ae27c88a49234c4b82438877d08fd36`)

Play the first playable on desktop and a phone for ten minutes each and post a note on this task with what to fix (time speed, readability, orders), as new tasks where they are clear.

## Acceptance

- A note on this task lists what was found on desktop and on phone
- Each clear fix is a new task in this project

### #36e8 Floating origin, camera-relative drawing and logarithmic depth

status open · ready · size L · labels engine · milestone #6e4a Orrery: the real solar system, Sun to station

Event: `nevent1qqsrd68wzxvgn9c0mvverjh80qr997mgm3r6vvm3prq9jt0avwtcwpcprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2sg4qtrk` (id `36e8ee119889970fdb1991cae7780652fb68dc47a6337108c0592dfd63978707`)

The scene spans billions of kilometres and also shows a ship a few hundred metres long. Draw relative to the camera with a floating origin and logarithmic depth so nothing jitters at any zoom.

## Acceptance

- Zooming from the whole system to a 300 m ship shows no jitter or z-fighting in a headless capture

## Files

- `apps/openagents-web/realms/belt-2200/`

### #a17d Thousands of Belt rocks, instanced

status open · ready · size M · labels engine · milestone #6e4a Orrery: the real solar system, Sun to station

Waits on: #7882 Kepler orbits for the bodies in f64 (resolved)

Event: `nevent1qqs2zl28s0jlr456t6xcqrex69qyk560lc2vfndh9h4encaymcsmn7gprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2sy3eshf` (id `a17d4783e5f1d69a5e8d800f26d1404b534ffe14c4cdb72deb99e3a4de21b9f9`)

The Belt as thousands of rocks drawn instanced, with simulation off the main thread, holding 60 frames per second on a phone.

## Acceptance

- 5,000 rocks hold 60 FPS (p95 frame <= 17.5 ms) in the perf run

## Files

- `apps/openagents-web/realms/belt-2200/`

### #8945 Patched conics: ships hand off between spheres of influence

status open · ready · size L · labels engine · milestone #980c One ship: plan a transfer, burn, coast, arrive

Waits on: #7882 Kepler orbits for the bodies in f64 (resolved)

Event: `nevent1qqsgj3w90gfte2neztj8s5sj4syxjl4wqdeu28agr5faqme3a836n4qprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2swyakwk` (id `8945c57a12bcaa7912e4785212ac08697eae0373c51fa81d13d06f31e9e3a9d4`)

Ship trajectories as patched conics with sphere-of-influence handoff, in verse/orbit.coax.

## Acceptance

- A test ship leaving Earth's sphere of influence continues on the matching heliocentric orbit

## Files

- `verse/orbit.coax`

### #3677 Ice, metal and people, mined and refined

status open · ready · size M · milestone #86a7 Economy: ice, metal and people

Waits on: #a58a Plan, launch and follow one ship with fuel and time shown (resolved)

Event: `nevent1qqsrvalt34qa0c8pm7304l5d72kexa2fjc3m0cl05xm8vsv2kyrt9qqprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2sufd5q7` (id `3677eb8d41d7e0e1dfa2fafe8df2ad9375499623b7e3efa1b676418ab106b280`)

Mines at rocks and moons produce water ice and metals; stations refine ice into air, water and reaction mass; people crew ships and work stations.

## Acceptance

- A test station turns ice into reaction mass at its rate

## Files

- `apps/openagents-web/realms/belt-2200/`

### #fbc9 Fleets, box select and groups

status open · ready · size M · milestone #2851 War: fleets, intercepts and the tactical view

Waits on: #a58a Plan, launch and follow one ship with fuel and time shown (resolved)

Event: `nevent1qqs0hjt4e5wsxzjvypwayce440aqfu3d5djxg8v4e94hmkqs9rtk8mcprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2sl0d605` (id `fbc975cd1d030a4c205dd26335abfa04f22da364641d95c96b7dd81028d763ef`)

Box select, control groups and a command queue in verse/command.coax; on phones tap select and long-press for orders (the hotbar's rules).

## Acceptance

- Selecting three ships and giving one order moves all three

## Files

- `verse/command.coax`
- `verse/hud.coax`

### #4f80 Light-lag visibility from a position history

status open · ready · size L · labels engine · milestone #560b Light lag: delayed sight and orders

Waits on: #7882 Kepler orbits for the bodies in f64 (resolved)

Event: `nevent1qqsylqpt4xwx2fsknadytgnchekh4vw8gxsgh6t3u4pledcase3y7sgprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2se4qehm` (id `4f802ba99c6526169f5a45a278be6d7ab1c741a08be971e543fcb71d86624f41`)

Each faction sees each object as it was distance/c ago: keep a short position history per object and answer where-did-they-see-it queries. The same history serves replay.

## Acceptance

- A test object 10 light-minutes away is seen at its position 10 minutes earlier

## Files

- `apps/openagents-web/realms/belt-2200/`

## Waiting (9)

### #4710 Freighters and routes

status open · size M · milestone #86a7 Economy: ice, metal and people

Waits on: #3677 Ice, metal and people, mined and refined (open)

Event: `nevent1qqsywy9e04zzm740883a5jchp8h908jh2z5eed4vhdj3gukg76j6ctgprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2s3fv67c` (id `4710b97d442dfaaf39e3da4b1709ee579e5750a99cb6acbb651472c8f6a5ac2d`)

Set a standing route for freighters between a mine and a station; the cargo moves on real transfers.

## Acceptance

- A standing route keeps delivering without new orders

## Files

- `apps/openagents-web/realms/belt-2200/`

### #e6e5 Build ships from metal and crews

status open · size S · milestone #86a7 Economy: ice, metal and people

Waits on: #3677 Ice, metal and people, mined and refined (open)

Event: `nevent1qqswdev6vh3hcx9nhgku4v5rrxqhugt4rg4mvrrlllmqyd3lq2l5jwsprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2s69cfh9` (id `e6e59a65e37c18b3ba2dcab28319817e21751a2bb60c7ffff602363f02bf493a`)

Shipyards at stations build ships from metal and people.

## Acceptance

- Building a ship spends its metal and crew and the ship appears at the yard

## Files

- `apps/openagents-web/realms/belt-2200/`

### #27e9 Intercepts: fleets meet when their paths cross

status open · size M · milestone #2851 War: fleets, intercepts and the tactical view

Waits on: #fbc9 Fleets, box select and groups (open)

Event: `nevent1qqsz06tfuhe7exx6d7e8r4uyw035zlezlqxen5awwv8n2u6tqy3f56cprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2shlnsap` (id `27e969e5f3ec98da6fb271d78473e3417f22f80d99d3ae730f35734b01229a6b`)

Detect when two fleets' trajectories come within combat range and start an engagement.

## Acceptance

- Two crossing fleets in a test start an engagement at the crossing time

## Files

- `apps/openagents-web/realms/belt-2200/`

### #dc96 The tactical view: missiles, rail guns and point defense

status open · size L · milestone #2851 War: fleets, intercepts and the tactical view

Waits on: #27e9 Intercepts: fleets meet when their paths cross (open)

Event: `nevent1qqsde94zujyrmqrqgfpak0ksgk7zyf5dehx4frkjw529cj22ywq05esprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2s0s0eny` (id `dc96a2e4883d80604243db3ed045bc22268dcdcd548ed275145c494a2380fa66`)

A short tactical battle where ships keep their momentum and turning to fire costs time; missiles burn and coast, rail guns fire straight, point defense shoots missiles down. Then back to the strategic map.

## Acceptance

- A tactical battle resolves and returns to the map with losses applied

## Files

- `apps/openagents-web/realms/belt-2200/`

### #8d4a Orders arrive late, flagships act on standing orders

status open · size M · milestone #560b Light lag: delayed sight and orders

Waits on: #4f80 Light-lag visibility from a position history (open); #fbc9 Fleets, box select and groups (open)

Event: `nevent1qqsg6jkkflyee5udu85d0e7ed2wjyj0cn2lns07gpkhq2kju7n8rm3cprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2s2pmk2s` (id `8d4ad64fc99cd38de1e8d7e7d96a9d2249f89abf383fc80dae055a5cf4ce3dc7`)

Orders to a far fleet take the light time to arrive; a flagship with authority follows its standing orders meanwhile.

## Acceptance

- An order to a fleet 20 light-minutes away takes effect 20 game-minutes later

## Files

- `apps/openagents-web/realms/belt-2200/`

### #66b3 AI factions: plain code for tactics, the Decisions API for strategy

status open · size L · milestone #8110 Rivals: AI factions, then lockstep multiplayer

Waits on: #dc96 The tactical view: missiles, rail guns and point defense (open); #4710 Freighters and routes (open)

Event: `nevent1qqsxdva4evlenxtulaz9zg70qrqazyq66fmwg3x59cqn4yv5cry893gprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2suzynvp` (id `66b3b5cb3f99997cff445123cf00c1d1101ad276e444d42e013a9194c0c872c5`)

Tactics (intercepts, point defense, routes) in plain code; strategy (which route to open, when to attack) through our Decisions API (/v1/decisions, Clef first), with every choice logged.

## Acceptance

- A match against two AI factions plays to a win condition
- Every strategic choice is in the match log

## Files

- `apps/openagents-web/realms/belt-2200/`

### #2094 Save and resume a campaign

status open · size M · milestone #8110 Rivals: AI factions, then lockstep multiplayer

Waits on: #3677 Ice, metal and people, mined and refined (open)

Event: `nevent1qqszp9ylgws6x0c27ue8vfak54ppz8cy35zlpt483ea48k6xvk737usprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2s9z8244` (id `20949f43a1a33f0af7327627b6a542111f048d05f0aea78e7b53db4665bd1f72`)

Save and resume long campaigns, as Fairy Forest saves (verse/fairy-forest/), only bigger.

## Acceptance

- A saved match resumes with every ship, cargo and orbit where it was

## Files

- `apps/openagents-web/realms/belt-2200/`

### #3848 Deterministic lockstep multiplayer with a desync checker

status open · size L · milestone #8110 Rivals: AI factions, then lockstep multiplayer

Waits on: #66b3 AI factions: plain code for tactics, the Decisions API for strategy (open)

Event: `nevent1qqsrsjzjz9x3l3afrjhpl88ukxwqz7vgzqxxldawmyp0zqva6avstggprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2s2av0av` (id `384852114d1fc7a91cae1f9cfcb19c017988100c6fb7aed902f1019dd75905a1`)

Only orders cross the network; the same orders give the same results on every client. A state hash is compared every few seconds and a desync is reported.

## Acceptance

- Two clients given the same orders have equal state hashes after ten game-days in a test

## Files

- `apps/openagents-web/realms/belt-2200/`
- `coax/web/api/`

### #99fe Win conditions: control the ice, starve a capital, or reach the Unknown

status open · size M · milestone #8110 Rivals: AI factions, then lockstep multiplayer

Waits on: #66b3 AI factions: plain code for tactics, the Decisions API for strategy (open)

Event: `nevent1qqsfnlj74wfmq25ggg6wlkaf7st7f243tgtqejyepth0aud6t348kkcprfmhxue69uhhyetvv9ujummsv4hxzem9de68xtnrdaksygpgsy0vu800qnw68gsl8p8dftrvg37fkfqg280vd4l0wj57hefcjcpsgqqqqe2slhdjwn` (id `99fe5eab93b02a884234efdba9f417e4aab15a160cc8990aeefef1ba5c6a7b5b`)

Victory by controlling the ice supply, starving a capital, or, with the Unknown on, reaching it first and holding it. Tune game time so a match is about 45 minutes.

## Acceptance

- Each win condition ends a test match

## Files

- `apps/openagents-web/realms/belt-2200/`

## Done (7)

- #71c4 A camera that zooms from the Sun to a station · [23e22ba550](https://github.com/OpenAgentsInc/openagents/commit/23e22ba550)
- #a58a Plan, launch and follow one ship with fuel and time shown · [23e22ba550](https://github.com/OpenAgentsInc/openagents/commit/23e22ba550)
- #5cab The transfer planner: go there becomes a burn, a coast and its fuel · [23e22ba550](https://github.com/OpenAgentsInc/openagents/commit/23e22ba550)
- #c948 An ice run: load at a rock, deliver home, score it · [23e22ba550](https://github.com/OpenAgentsInc/openagents/commit/23e22ba550)
- #bb33 Time controls, selection and the route on the map · [23e22ba550](https://github.com/OpenAgentsInc/openagents/commit/23e22ba550)
- #7882 Kepler orbits for the bodies in f64 · [23e22ba550](https://github.com/OpenAgentsInc/openagents/commit/23e22ba550)
- #e0a4 First playable at openagents.com/realms/belt-2200 · [23e22ba550](https://github.com/OpenAgentsInc/openagents/commit/23e22ba550)
