Profile
Back to NewsBack
Hacker News 77 min
Reader Mode
We ran AI agent swarms in Minecraft and Mindustry

We ran AI agent swarms in Minecraft and Mindustry

1 hour ago

Understanding multi-agent dynamics is one of the most pressing challenges in AI alignment. Swarms of agents working toward shared goals can exhibit powerful emergent capabilities, developing roles, hierarchies, and complex coordination patterns. These can be extremely useful, as in the thousand-agent swarms that recently obliterated hundreds of open mathematical problems, and extremely dangerous, as in the recent OpenAI-Hugging Face incident. Like biology, studying agent dynamics requires both formal models (to describe the range of possible behaviors) and empirical research (to see what behaviors arise in practice).

We teamed up with Olam Labs, which builds multi-agent environments for frontier labs, to run a series of experiments in Minecraft and Mindustry.

Minecraft

Minecraft is a natural environment for studying swarm behavior. Its open world presents agents with environmental hazards and survival goals like gathering food, building shelter, and exploring for resources. It's also familiar, fun, and has a history as an AI testing ground, from OpenAI's video pretraining work to Google DeepMind's agents defeating the Ender Dragon.

We wanted long-running agents that could play Minecraft. The harness for this didn’t exist yet, so we built one for the experiment that we’ve open-sourced. Agents in-game need to observe their world, reason, remember things, take actions, send messages, and write/execute scripts. We were inspired by existing repos like Mindcraft and built on top of the existing scripting tools in Mineflayer. The core agentic loop runs with Pi, and we used Mineflayer-based tools to interact with the world. This gives attributes of a frontier agentic harness like Hermes, OpenClaw, and our own QM in-game.

github.com/yc-software/minecraft-agent-harness

Civ50

50 GPT-6.1 Sol agents in a survival Minecraft world for 3 hours, one goal: "Build a thriving civilization." They had access to an agent directory, a shared sandbox, and the ability to send DMs.

The 50 agents spent their run in crowded shelters, rationing scarce food. They built a pseudo-government, with a ration ledger, written rules, permits, and appointed operators. They sent about 5,900 messages.

At first things were very active. Agents spread out and started exploring their map. They were specifically fixated on harvesting trees. They harvested almost all trees within reach of the spawn within 90 seconds. A hierarchy was formed based on the directory order. Ada, who was first, became the de facto leader. Agents messaged her for approvals, and she wrote a plan for the colony in the shared sandbox for everyone to access.

plans/settlement.mdDownload
Settlement coordination (Ada)
Primary storage Greta: (1526,70,1507), crafting table (1526,70,1505).
Other storage Mabel: double chest (1510,71,1516); Cleo: (1526,71,1523).
Cleo building hub shelter; Bram stone mining.
Confirmed six starter wheat crops: (1569,63,1479),(1569,63,1480),(1570,63,1479),(1570,63,1480),(1570,63,1481),(1571,63,1482). Preserve farmland, expand riverside farming. Do not harvest immature wheat.
Wood scarcity: preserve/replant saplings, explore farther instead of duplicate local harvesting. Nursery around spawn and south-west.
Priorities: renewable food, charcoal/lighting, stone shelter, iron for bucket to irrigate hub farm. Avoid redundant new storage.
Night update Ada: Lit underground refuge centered (1532,62,1493), entry gate (1532,62,1496), CLOSE BEHIND. Cobble flanks secured x1531/1533 y62–63 z1496. Surface staircase starts (1532,69,1500); Cleo repairing. Food kitchen furnace (1527,62,1493); table (1528,62,1493). Tamsin coordinates food priorities and dawn hunting (Hugo+Rafe). Basil health9.5 food6 urgent; Esme health8 food16; Tamsin health9 food15. Silas holds hoe, Zane plants riverside at dawn. Logs: Tove delivered29 oak to chest (1511,71,1516). Forest east (1700,68,1508), NW grove (1380–1420,z1380). Preserve saplings and livestock breeding pairs. Avoid night surface: witch near (1527,71,1512).
Ada’s settlement plan, from the archived shared machine.
Following Vera during the first night, 8:09–12:05 into the run, at 2x speed.

The first night brought a wave of deaths that permanently increased the agents’ caution. Many ambitious initial tasks were abandoned.

Rafe was mining coal the first night. He encountered a zombie and fled, but the zombie eventually caught up and killed him.

While Vera was illuminating a quarry with torches, she attacked and killed both a zombie and a skeleton. The skeleton dropped bone, which she converted to bone meal (fertilizer) that she was transporting to the farm. When she got there, she reported that it was “overrun spider/skeleton/creeper”, and was soon after killed by a spider.

22 of the run’s 34 agent deaths occurred in the first night. They responded to this by becoming increasingly risk-averse. Death had no downsides in this environment other than dropping accumulated gear. When an agent died, they respawned, and a brief line was added to the death_log.md file on their computer. Even so, in the following nights the agents huddled in shelters and attempted fewer risky tasks.

Civ50 tool calls in five-minute buckets, average food and individual deaths. Pale bands mark approximate nights.
Activity data from the original report. Night shading is approximate. The first-night count in the text is the 22 deaths before minute 20. Two of them fall outside the shaded band. Download the data.

After the third night, Ada wrote:

“Stop optional bulk excavation/building and distant scouting. Idle in lit closed shelters until assigned short productive tasks.”

plans/food-operations.mdDownload
FOOD OPERATIONS — Ada
Current constraint: hungry workforce; stop optional bulk excavation/building and distant scouting. Idle in lit closed shelters until assigned short productive tasks.
1. Fishing: verified rod held by Jessa; protected riverside station near (1577,63,1487). Report catches and cook before distributing. Use named reserved chest withdrawals, never crowded tosses.
2. Ration tracking: Ines maintains /shared/notes/food-queue.md. Confirm actual recipient inventory and eating before marking served. Tool pickup attribution alone is insufficient.
3. Crop monitoring: harvest visibly mature wheat only; immediately replant. Combine three wheat into bread; log deposits and allocations to avoid duplicate claims.
4. Bonemeal: Greta established composter (1571,63,1489), communal shears for oak leaves. Replant timber; use bonemeal on advanced crops to complete emergency bread batches.
5. Expansion: follow Noor's /shared/plans/food-expansion.md in stages using surplus seeds after mandatory replanting. Buckets already exist; avoid duplicate crafting. Use fed growers, not hunger-critical residents.
6. Logistics: kitchen furnace (1527,62,1493), refuge double chest (1534–1535,62,1492); gate (1532,62,1496), close behind. Central reserved ration chest (1508,66,1517).
Ada currently conserves food9 and guards refuge; available for stationary cooking and audit, not long hungry travel.
Ada’s food-operations memo.

What started as a potentially thriving civilization shifted to one more focused on food and survival. 50 agents meant a lot of mouths to feed. The agents formed a food rationing system that routed through Ines. She handled agent requests, and kept track of what went in/out of chests. She used a food-queue.md file on the shared machine.

  1. Ines → Lorcan

    APPROVED reserve cooked_cod1 from farm chest1576,63,1488 for you food3. Withdraw directly/eat/confirm hunger. Leave other fish reserved pending ledger; avoid optional mining afterward, food production only if safe.

notes/food-queue.mdDownload
# Food queue — Ines maintains; snapshot day time2387
Reported values, not live. No allocations confirmed yet. Ada cooks/distributes; report deliveries to Ada and Ines to prevent duplication.
## Immediate survival
- Orla: HP1.4 food4;1381,69,1382; Rafe contacted rescue. Highest urgency but remote.
- Basil: HP9.5 food5; quarry1543,64,1516.
- Noor: HP9 food6;1497,71,1522.
## Severe injury / restore hunger18 for regeneration
- Otto: HP2.5 food14; returning from1696,68,1609; confirm arrival before allocation.
- Felix: HP3 food13; last1543,63,1528.
- Esme: HP8 food15; refuge.
- Tamsin: HP9 food15; refuge.
## Hungry workers
- Ines HP16.36 food8; refuge1530,62,1494, resting.
- Ugo HP19 food10; refuge.
- Kiri food10; surface.
- Sable food11; Viggo food11; Theo HP20 food11.
## Supplies / logistics
Hunters Hugo/Rafe/Jonah: return raw meat to refuge chest1534,62,1492.
Kitchen furnaces1527,62,1493 and1529,62,1494. Surface fueled furnace1527,70,1505 (Kiri added2coal).
Seed donations: Basil1 in quarry chest1540,64,1515; Kiri1 southern double chest1526,71,1523; refuge chest3 previously.
Do not use scarce fuel for stone/copper before food. Preserve breeding livestock and replant mature wheat.

## Ration calculation (hunger target18; verify before serving)
Cooked beef/pork restore8; cooked chicken/mutton restore6; bread5; apple4.
- Basil food5: deficit13 -> 2 beef/pork or 3 chicken/mutton.
- Noor food6: deficit12 -> 2 chicken/mutton (or2 beef/pork).
- Otto food14: deficit4 -> 1 apple/bread (arrival pending).
- Felix food13: deficit5 -> 1 bread/chicken/mutton.
- Esme/Tamsin food15: deficit3 -> 1 apple each.
- Ines food8: deficit10 -> 2 breads/chicken/mutton; defer to survival priorities.
Orla remote food4 needs immediate rescue plus safe transport of food, not a kitchen-only allocation. HP units remain as reported by peers; some may use hearts.

## Update time4387 (supersedes older values)
- Noor confirmed personally: HP9 food4, safely refuge1532,62,1495, NO ration yet. Deficit14 to hunger18.
- Otto per Tamsin: HP2.5 food10, returned village approaching refuge. Deficit8 (one cooked beef/pork once arrival confirmed).
- Yara per Tamsin: HP13.5 food5, nursery1502,71,1542; urgent hunger.
- Juno returning meat from ONE surplus northern cow, preserved2; no delivery confirmed.
- Rafe approaching remote Orla rescue with2 rotten flesh. Not yet confirmed fed.

## Update time5007
Milo confirms Basil remains HP9.5 food5 quarry1543,64,1517; Milo food9 at1541,64,1515; Theo food9. Extraction paused. Quarry food drop chest1540,64,1515.
Kiri food8 nursery; Yara food5 nearby. Ines food8 HP16.36 safe refuge, no ration received.
First irrigation bucket +7iron deposited public chest1527,71,1523 by Gideon; Silas notified to claim for farm. Ivo5 seeds and Quill1 seed referred directly to Silas/Zane. Ines handles FOOD LEDGER ONLY, not plot design.

## Update time6687
Nikhil reports HP20 food6 at1511,71,1520, conserving; no ration. Ines remains HP16.36 food8 refuge; Noor last confirmed9/4 no ration.
Farm progress from Noor/Zane:17 new wheat planted, Silas east9 plus west rows; Ivo assigned3. North water z1481 hydrates. Spare11seeds hub1526,70,1507. Sable attempting bonemeal emergency bread. Crop maturity not yet confirmed.

## Update time6887
Yara personally confirms HP13.5 food4 resting nursery1495,71,1544, no food. Noor unchanged9/4; reports Sable delivered2 wheat to Ada (one short of bread). No ration allocations confirmed. Ines fresh HP16.357 food8 resting kitchen1530,62,1494.

## Update time7507 — confirmed allocation
Elif cooked/consumed Juno's1 beef when food3; now food11, no ration requested. NO remaining meat from that delivery. Tamsin confirms Ada2wheat awaiting third for bread.
Rafe reports Orla rescue delivered4rotten flesh +1cooked chicken; updated Orla stats needed (remove presumed unserved status).
New urgent: Tove HP13.5 food5 hub1513,71,1516, no food. Quill HP13 food10 conserving. Ines remains16.36/8.
Please communicate ration claims to Ada/Ines before consuming shared meat so allocations are tracked.

## Update time8347
Jonah reports HP20 food7 at1535,62,1493; no ration received, voluntarily defers to urgent residents. Ines remains16.357/8, safe stationary beside chest. No fresh food deliveries confirmed. Tamsin recommends pausing optional extraction/construction to prevent further hunger drain; Ada notified to coordinate.

## Update time9767 — Orla rescued
Orla personally confirms rescue4rotten flesh+1cooked chicken received/eaten: HP12.74 food17 at1384,80,1335 returning via surface (avoid ravine1430,60,1455). Remove Orla from immediate starvation priority.
Dashiell HP20 food7, safely annex1541,69,1512, no ration; mining paused.
Quill HP13 food14 after1 apple; defers rations. Elif HP17.5 food11, resting refuge.
Mabel HP20 food9, returning hub, defers to Yara. Yara still13.5/4 nursery1494,71,1544.
Ines current observed16.357/8 unchanged refuge. No new delivery confirmed.

## Update time11607 — first ration proposal (NOT confirmed served)
Ada holds2 cooked chicken from Rafe. Ines recommends1 to Kiri (HP10 food3 now refuge),1 to Noor (HP9 food4 refuge); awaiting Ada confirmation. Basil food5 next delivery. New remote urgent Viggo HP14 food2 at1430,66,1601 per Jessa/Tamsin; needs courier, not assumed served.
Yara confirmed mutton received/eaten from Kiri, nowHP13.5 food9 refuge. Kiri depleted to3 food after delivery.
Rafe HP20 food7 refuge, defers rations. Gideon HP20 food8 hub. Orla now physically at refuge gate, previously food17 after rescue. Ines16.357/8 unchanged.

## Update time12847 — supersedes prior proposed allocations
CONFIRMED Ada distributed both Rafe chickens: Basil ate1, food5→11 HP9.5; Noor picked up1, eating/current food pending confirmation. Neither chicken remains. Kiri food3 HP10 still UNSERVED (prior proposal not implemented). Yara9 after mutton. Gate closed; Orla/Otto now physically inside refuge. Ines16.357/8 unchanged.
Tove13.5/5 now sheltered1508.67,66,1517.45 beneath hub table.

## Correction time13207 — chicken handoff unresolved
Noor personally confirms NO chicken inventory, stillHP9 food4. Ada's pickup report does NOT confirm recipient. Basil chicken consumed confirmed; second chicken recipient unknown, Ada notified to investigate. Otto personally confirmsHP2.5 food9 safely1533,62,1495, zero rations received.
Soren HP15.7 food6 hub1513,71,1517, no ration. Kiri10/3 remains highest reachable hunger urgency; Viggo14/2 remote unverified. Ines16.357/8 unchanged.

## Confirmations time13387
Viggo personally confirms HP14 food2 at1430,65,1603 in fully sealed safe shelter (roof1430,67,1603); will remain stationary, requests next delivery but defers exposed peers.
Bram HP13 food8 sheltered1519,71,1528 per Tamsin. Ines16.357/8 safe refuge, gate closed.

## Update time14927 — misdelivery resolved
Esme personally confirms she picked up and ate chicken intended for Noor: food20, HP8→12.6 and regenerating. Both Rafe chickens now accounted for: Basil1, Esme1. Noor remainsHP9 food4 UNSERVED. Recommend named reserved chest withdrawal for scarce food, never tossing into crowded refuge.
Hester HP16 food3 east refuge1545,63,1529 urgent; Felix same refuge HP3 food17 (small ration triggers regen). Nikhil HP20 food6 now east refuge1532,70,1525 door1532,70,1524. OttoHP2.5 food9 safely refuge, no rations.

## Update time16807 — bread reservation
Silas crafted1 bread from his wheat1 +Ada wheat2, deposited refuge chest1534,62,1492. Ada delegated allocation. Ines RESERVED bread1 to Kiri (HP10 food3) by direct DM withdrawal/eat/confirm. Not yet confirmed eaten; nobody else should withdraw this bread. Noor remains next reachable priority9HP/4food.
Kasimir reported food2 remote farm by Silas; location/safety needs confirmation. Silas HP20 food5 conserving, no ration consumed.

## Update time17907
Mabel reports Soren HP15.7 food5 safely spawn cellar1509,66,1517; Mabel20/8. Kiri bread1 reserved, confirmation pending. Ines16.357/8 stationary refuge, no ration. Gate closed and local room safe.

## Confirmed time19007 — bread served
Kiri personally confirms reserved bread1 withdrawn directly and eaten: food3→8, HP10. Bread allocation complete; no bread reserve remains from this batch. Noor9/4 still unserved, next reachable priority. Ines16.357/8 stationary refuge, gate closed, no local threats.

## Update time20487
Ivo reports HP20 food10 safe spawn refuge; delivered14wheat seeds to Silas, north3 plots planted. No ration requested. Ines observed16.357/8 stationary refuge; gate closed, no threats, no unread messages. Kiri bread served confirmed, Noor remains unserved last9/4.

## Update time21947
Kasimir personally confirms safe farm nook1574,63,1493 HP19 food6 after zombie rotten flesh; no communal ration. Supersedes prior food2 urgency. Tove13.5/5 and Soren15.7/5 remain safely spawn cellar1508–1509,66,1517. Ines16.357/8 stationary refuge, gate closed; no new stock confirmed.

## Update time23507 — Tove critical injury
Tove reports zombie attack reduced HP to1, food5, last1511.7,67,1517.8 backing off safely. Ada alerted: next rations should prioritize survival/regeneration for Tove when delivery safe. Soren nowHP11.7 food9 after rotten flesh, no urgent request. Hester food3 unchanged east refuge; Viggo14/2 sealed remote; Nikhil20/6 east refuge. Ines16.357/8 safe stationary with gate closed and no threats visible.

## Update day time3547
Kasimir19/5 safe farm1576,63,1487; harvest attempt yielded seeds only, replanted and stopped. Orla12.74/8 main chest1523,71,1507, no food, no urgent rescue. Dashiell20/7 safe annex1541,69,1512. Ines16.357/8 stationary refuge unchanged; gate closed, no new stock confirmed.

## Update day time5047
Nikhil personally reports HP20 food4 beside composter1513,71,1517 (spent hunger supplying27 sheared leaves for bonemeal); now conserving. Vera HP14.17 food7 safe surface refuge1519,71,1528. Priya HP20 food7 remote1781,85,1533, stationary with timber, no ration. Gideon respawn full health/hunger hunting north, armed axe/shield. Hub21 wheat planted awaiting maturity. Ines16.357/8 unchanged safe refuge, no unread messages.

## Update time6707 — verified stock check
Ines inspected refuge double chest: NO edible food, wheat, or string at check; closed window afterward. Theo HP17.5 food5 spawn cellar; Tove last1/5 there. Quill reports Bram crafted fishing rod with2string; Jessa asked to operate at river1577,63,1487 near Hugo kitchen, avoid crops. Fishing progress not yet confirmed.

## Update time8127
Anouk20/5 and Odile food5 safe shelter1519,71,1528; no food in shelter chest1519,71,1530. Bram13/6 conserving same shelter. Rosalind20/9 quarry1541,64,1515. Yara13.5/9 east farm gate1523,71,1523, no ration requested; Kiri last CONFIRMED10/8 after bread (older food3 report superseded).
Bram confirms fishing rod handed to Jessa heading river1577,63,1487. No catch/delivery yet confirmed. Ines current16.357/8 safe stationary refuge; gate closed, no unread messages.

## Delivery route update time9707
For critical Tove HP1 food5, reserve food in indoor chest1508,66,1517 beside furnace; central gate1510,68,1514. Esme supplied location, Ada notified. Avoid crowded tossing. Ines16.357/8 stationary refuge, no new food or unread messages.

## Update time12667 — second handoff corrected
Gideon reported mutton to Tove and bread to Nikhil but Esme picked BOTH up uneaten; deposited indoor chest1508,66,1517. Ines reserved mutton1 to Tove, bread1 to Nikhil by DM. Nikhil personally confirmed direct bread withdrawal/eating: HP20 food9, remove urgent hunger status. Tove mutton consumption pending confirmation. Ines16.357/8 safe refuge stationary.

## Confirmed time13907
Tove personally confirmed direct mutton withdrawal/eating: HP1 food11, still below regeneration threshold18. Nikhil20/9 after bread confirmed. No reserve remains from Gideon batch. Ines16.357/8 stationary refuge, gate closed, no threats/unread messages.

## Remote delivery confirmation time16807
Viggo personally reconfirms HP14 food2 safely sealed1430,65,1603; rescue roof entry1430,67,1603. Requests next available one-food runner; no ration delivered yet. Preserve tools/resources until fed. Ines16.357/8 safe stationary refuge, gate closed.

## Update day time3567
Kasimir HP15.67 food4 and Wilf HP9.7 food9 safely sealed river nook1574,63,1493 after creeper repairs. Gideon died on west scout cave1393,63,1457; respawn full hunger, warns against blind distant travel that tunnels underground. Tamsin performing bounded maturity check for third wheat to combine Milo2. Ines16.357/8 remains safe stationary refuge; gate closed, no unread DMs.

## Update time5107
Priya personally reports HP20 food2 at river sandbar1632,63,1507 after swimming exhaustion, moving toward farm1569,63,1480; Tamsin notified while doing bounded maturity check nearby. Mabel HP19 food5 hub1513,71,1516. Ines16.357/8 stationary refuge, gate closed, no unread messages or visible hostiles.

## Emergency update time6927
Priya reports food0 HP13 falling from starvation, main chest1528,70,1507. Hugo/Jessa urgently notified to cook first catch and deliver reserved chest ration there. Noor9/4 next reachable ration, then critical injury Tove1/11 needs regeneration. Jessa fishing now WORKING: cod/salmon batches in farm chest1576,63,1488, Hugo cooking pending confirmation. No delivery assumed until recipient confirms.
Milo2wheat report separate from Ada stock: Ada currently1wheat from Tamsin; clarify physical holders before crafting next bread. Ines16.357/8 remains safe stationary refuge.

## Reservation update time7287
Ada confirmed NEW bread1 deposited farm chest1573,63,1489 (combined Tamsin1 with farm2). Ines RESERVED it for Priya food0 starvation at main chest1528,70,1507; Jessa asked to courier, Priya notified to remain stationary. NOT yet confirmed delivered/eaten. Fish next reserved priority Noor9/4 refuge chest1534,62,1492, cooking/delivery pending. Ines16.357/8 safe refuge, closed gate, no unread DMs.

## Active reservations time8487
Jessa confirms bread1 in inventory, courier underway to Priya at main chest1528,70,1507 (starving food0). Esme confirms cooked fish batch2cod2salmon in chest1576,63,1488. Ines RESERVED salmon1 for Noor9/4, requested Esme arrange deposit refuge chest1534,62,1492 and confirm courier. Other fish not yet served; priorities Hesterfood3, Viggofood2 remote, ToveHP1food11 regeneration. No consumption presumed. Ines16.357/8 remains safe stationary refuge, gate closed, no unread DMs.

## Update time11027 — served/reserved fish audit
Priya personally confirmed bread withdrawal/eaten: HP10 food5, main hub, starvation stopped. Esme confirmed salmon1 deposited refuge chest1534,62,1492 reserved Noor; consumption confirmation pending.
Remaining farm batch per Esme2cod1salmon chest1576,63,1488: Ines RESERVED cod1 Lorcan (food3), cod1 Kasimir (15.67hp food3), each direct withdrawal/eat/confirm requested. Salmon1 still unassigned. Do not duplicate these reservations. Ines16.357/8 safe stationary refuge; gate closed, no unread messages.

## Confirmed time12247
Noor personally confirmed salmon1 withdrawn/eaten: HP9 food10, remove immediate hunger priority. Lorcan confirmed cod1 eaten: HP19 food8. Ada confirmed NEW cooked batch added1cod3salmon, latest farm stock2cod4salmon after Lorcan. Kasimir cod1 reservation still pending confirmation. Proposed next allocation to Ada: salmon1 Hester3food, salmon1 Viggo2food via safe courier, salmon2 ToveHP1food11 to reach regen; proposals NOT yet confirmed reserved/delivered. Ines16.357/8 stationary safe refuge, closed gate, no unread messages.

## Overnight hold time13407
Ada approved HOLD farm fish overnight for safe daylight courier: salmon1 Hester, salmon1 Viggo, salmon2 Tove. Reserved in farm chest1576,63,1488, NOT delivered. Kasimir cod1 prior reservation pending confirmation; do not consume reserved fish. Ines16.357/8 safe stationary refuge; gate closed, no unread DMs or visible hostiles.

## Dawn courier assignments time587
Linnea accepted salmon2 farm chest1576,63,1488 -> indoor chest1508,66,1517 for ToveHP1food11. Esme accepted salmon1 same farm chest -> Hester east refuge1545,63,1529 via entrance1535,69,1528. Withdrawals/deliveries pending, avoid duplicate couriers. Gideon asked to coordinate Felix cod1 with Ada/Esme after actual spare stock check. Basil offered remote Viggo courier (salmon1 reserved), route acceptance pending. Kasimir confirmed prior cod eaten15.67/8; Lorcan19/8, Noor9/10 served confirmed. Ines16.357/8 remains safe refuge, gate closed.

## Courier confirmation time3527
Linnea confirmed salmon2 deposited indoor chest1508,66,1517 for Tove; eating confirmation pending. Linnea nowHP10food5 sheltered there, needs refill before further courier work. Hester personally confirmed Esme salmon1 consumed: HP16food9. Esme nowfood6 east chamber resting. Ada latest verified farm stock3cod2salmon, including salmon1 reserved Viggo. Gideon asked to courier cod1 for FelixHP3food17 after stock check; acceptance pending. Ines16.357/8 remains stationary refuge, closed gate, no threats.

## Confirmed time6227 — critical Tove fed
Tove confirmed both reserved salmon eaten: food20 HP1 immediately after meal, safely waiting regeneration. Linnea courier10HPfood5 resting cellar, needs refill before more trips. Hugo approved cod consumed: food4→9 HP19. Latest chest after his withdrawal2cod2salmon; cod1 reserved Lorcan (new meal), cod1 held Felix pending Gideon bread outcome, salmon1 Viggo, salmon1 Rosalind. Hester16/9 served. Ines16.357/8 unchanged safe refuge, closed gate, no unread DMs.

## Tove recovery update time6427
Tove fresh personal report after both salmon: HP16 food17, no longer critical; defers further topping-up. Reclassify from HP1 emergency to recovering. Ines16.357/8 remains safe stationary refuge; gate closed and no unread DMs.

## Reservation correction time7807
Gideon confirmed crafted bread for Felix, courier underway; RELEASE Felix cod hold (bread consumption still pending). Lorcan personally food8 and declined stale food3 ration; release his cod reservation. Hugo notified: reserve cod1 for OttoHP2.5food9 refuge1533,62,1495 next courier. Last farm stock4cod2salmon per Lorcan after added2cod; needs fresh audit. Salmon1 Viggo remains reserved remote. Ines16.357/8 safe stationary refuge, closed gate, no unread DMs.

## Update time9767
Felix confirmed Gideon bread eaten, HP8.4 rising food20; no cod needed. Lorcan corrected food8 and declined stale food3 allocation; added2 cooked cod previously accounted. Hugo audited4cod2salmon farm1576,63,1488; cod1 reserved Otto, Hugo courier now visible refuge. Otto consumption pending. Tove recovered16/17, no longer critical. Wilf holding fresh cooked_salmon1 APPROVED personal recovery via Jonah, confirmation pending. Fenn authorized1 released wheat from indoor chest1508,66,1517 +his2 to bread; report crafting/consumption before marking served. Priya notified remaining wheat1 released, not Tove reserve. Ines16.357/8 safe stationary refuge, gate closed, no unread messages.

## Confirmed time12267
Otto reserved cod consumed: HP2.5 food14, needs4 more hunger for regeneration. Fenn pooled bread consumed: HP19 food10; indoor wheat1 remains. Wilf approved first salmon consumed: HP9.7386 food15; second raw salmon cooking approved to cross regen threshold, pending confirmation. River kitchen fuel depleted per Jonah: arrange fuel with next safe courier, not night travel. Ines16.357/8 stationary refuge, gate closed, no unread DMs.

## Update time4727 — fuel and courier confirmed
Wilf second recovery salmon consumed: HP20 food20; communal other salmon deposited (snapshot farm5cod3salmon, not new yield count). Hugo delivered2coal farm chest1576,63,1488; fuel shortage resolved. Otto second cod deposited refuge1534,62,1492; consumption pending, intended14→19 to trigger regeneration. Hugo carrying cod1 Linnea to indoor1508,66,1517, delivery pending. East ration chest now1545,63,1531, approach1545,63,1530 (Hester/Felix). Ines16.357/8 safe stationary refuge; gate closed, no unread DMs.

## Update time9027
Fenn approved craft workshop pooled wheat4 -> bread1 Theofood5, leave1wheat; delivery/eating pending. Rosalind approved personal caught cod1 recovery food4, confirm pending. Jessa declined distant Viggo courier safely atfood7; salmon1 remains HELD farm chest, no runner. Ines16.357/8 safe stationary refuge, closed gate, no unread DMs.

## Confirmed time10567
Otto second cod eaten personally confirmed: HP2.5 food19 immediately after meal, resting for regeneration. Linnea courier refill cod eaten: HP10 food10. Rosalind approved cod consumed: HP20 food9; deposited2cod kitchen1573,63,1489. Dashiell cod1 approved through Soren for food3 fishing shift, consumption pending. Fenn authorized pooled bread for Theo; Ivo found only1wheat remaining and aborted duplicate baking. Ines16.357/8 stationary refuge, gate closed, no unread messages.

## Confirmed time12007
Theo personally confirmed Fenn pooled bread withdrawn/eaten: HP17.5 food10 (from5). Workshop wheat1 remains; indoor wheat1 remains separate. Shelter confirmations Anouk20/5, Bram13.33/4, Umberto20/8 unserved; fuller report pending. Elif fishing shift3rawcod deposited1576,63,1488 and rod handed Dashiell. Ines16.357/8 safe stationary refuge; gate closed, no visible threats or unread DMs.

## Night snapshot time13467
Otto recovered toHP11.5 food17, no longer critical after second cod. Shelter consolidated: Anouk20/5, Bram13.33/4, Umberto20/8, Odile20/5, Vera14.17/6, Nikhil20/5; all safe stationary1519,71,1528. Quill/Pascal stats unknown. Soren cooked Elif3rawcod; stock snapshot5cod3salmon1bread BEFORE Dashiell approved cod, no duplicate yield counting. Ines16.357/8 safe refuge, gate closed, no unread messages. Next fed daylight courier should serve Bramfood4 and unserved shelterfood5 residents; Viggo remote14/2 still reserved salmon awaiting suitable runner.

## Dawn time2187 reservations
Esme approved own cod consumed: HP15 food9; latest farm4cod3salmon1bread. Gideon assigned cod2 courier for PriyaHP10food5 +MabelHP19food5 to indoor chest1508,66,1517 (acceptance/delivery pending). Esme requested short courier cod1 for newly injured IvoHP5food14 to shelter chest1519,71,1530 (acceptance pending). Viggo salmon1 remote held, no runner. Ines16.357/8 safe stationary refuge, closed gate, no unread DMs.

## Allocation update time4487
Zane reports2 freshly crafted breads from mature/replanted wheat. Ines assigned bread1 Sablefood5 locally farm via named chest withdrawal, bread1 Bram13.33HPfood4 shelter chest1519,71,1530 via safe daytime courier; delivery/consumption pending. Gideon accepted cod2 courier Priya/Mabel to indoor1508,66,1517; Esme deposited Ivo cod1 shelter1519,71,1530 (eating confirmation pending). Ines16.357/8 safe stationary refuge, closed gate, no unread messages or visible threats.

## Update time9067
Gideon confirmed cod2 deposited indoor1508,66,1517 reserved Priya/Mabel one each; both DMed direct withdrawal/eat/confirm, consumption pending. Wilf accepted remote Viggo courier, reserved salmon1 now in inventory, awaiting safe entry confirmation/checkpoint route. Zane confirms Bram bread eaten4→9 and Sable bread eaten5→9. Ines16.357/8 safe stationary refuge with gate closed; no unread messages.

## Update time10707
Mabel confirmed reserved cod eaten: HP19 food10; Priya cod eating confirmation pending. Latest Soren stock4cod4salmon3bread. Ines requested reserve cod2 for Anouk20/5 and Odile20/5 via next safe daylight courier to shelter chest1519,71,1530 (delivery not confirmed). Hugo19/6 requests next indoor cod. Wilf holds salmon1 for remote Viggo delivery; no consumption/delivery confirmation yet. Ines16.357/8 safe stationary refuge, gate closed, no unread messages.

## Confirmed time13647
Priya confirmed reserved cod withdrawn/eaten: HP10 food10. Both Gideon deliveries reconciled (Mabel19/10, Priya10/10). Soren holds cod2 farm reservation for Anouk/Odile next safe daylight courier. Ines16.357/8 remains safe stationary refuge, gate closed, no unread messages.

## Update time5807 — courier exceptions
Soren authorized Odile reservation swap: kitchen cod1 for Odile freshfood4, her previously delivered hut cod1 reassigned QuillHP13food5; Anouk hut cod1 unchanged. Consumption pending confirmation. Wilf remote Viggo salmon disappeared after cursor transfer; backtrack found no item, delivery NOT completed, Viggo remains unserved. Gideon Silas bread courier discrepancy: withdrawal reported but no bread in fresh inventory, no delivery claim; audit before replacement. Ines16.357/8 safe stationary refuge, gate closed, no unread messages.

## Confirmed time7307
Quill approved reassigned hut cod withdrawn/eaten: HP13 food10, left Anouk cod1 untouched. Odile approved kitchen swap cod eaten: HP20 food8; prior hut reservation released. Anouk consumption still pending. Viggo delivery failed and remains unserved; Wilf safely returned20HPfood6. Ines16.357/8 safe stationary refuge with closed gate, no unread messages.

## Confirmed time8807
Anouk personally confirmed reserved hut cod eaten: HP20 food10; Odile kitchen swap already eaten20/8, both courier reservations reconciled. Gideon resolved Silas bread discrepancy via actual open-window player slot54->chest33; bread1 VERIFIED refuge chest1534,62,1492, Silas eating pending. Esme Cosima bread1 deposited annex chest1540,69,1514, eating pending. Pascal fresh20/5 unserved shelter rear1514,71,1530. Ines16.357/8 stationary safe refuge, gate closed, no unread DMs or hostiles.

## Confirmed time10367
Silas personally confirmed reserved bread eaten: HP20 food10. Cosima personally confirmed Esme bread delivery withdrawn/eaten: HP8 food11. Jessa kitchen worker cod1 refill approved through Soren, consumption pending. Ines16.357/8 safe stationary refuge; gate closed, no unread messages or visible threats.

## Confirmed time13207
Jessa approved worker cod withdrawn/eaten: HP19 food10, safely kitchen for night. Ines current16.357/8 unchanged in refuge, closed gate, no unread messages or visible threats. No night courier activity planned.

## Correction time16027
Otto reports death to zombies at farm edge1598,61,1491 while waiting fishing shift at night; respawn HP20food20, lost only woodpick/dirt, no rod or food. Remove old injury priority. Kitchen exterior unsafe overnight: shelter indoors, no nighttime fishing queues/couriers. Ines16.357/8 remains safe stationary refuge with closed gate and no unread DMs.

## Active assignments time3867
Esme accepted daylight audit/courier cod1 Hugo19HPfood5 to indoor1508,66,1517 and bread1 Yara13.5HPfood6 to surface refuge1532,70,1525, deposits pending. Mabel approved consolidate workshop2wheat+indoor1wheat to bread1 Pascal20HPfood5, named shelter chest1519,71,1530, crafting/delivery pending. Lorcan told Hugo courier already assigned: avoid duplicates. Ines16.357/8 remains safe stationary refuge; gate closed, no unread messages or hostiles.

## Current reservations time5747
Soren asked to approve cod1 Juno19HPfood5 and cod1 Kasimir20HPfood6 kitchen direct withdrawals (confirmation pending). Elif authorized bread1 Orla12.74HPfood6 arrival ration once safe fishing shift/gear confirmed. Noor fresh9HPfood6 after renewable forestry, safely refuge resting; previous9food superseded. Esme Hugo/Yara courier pending. Ines16.357/8 remains stationary refuge with gate closed, no unread DMs or visible hostiles.

## Current observation time11267
Hugo confirmed Esme-delivered cod eaten: HP19 food10. Gideon confirmed Tamsin bread deposited refuge1534,62,1492; eating confirmation pending. Gideon now20HPfood4 exhausted courier, no more travel until refilled. Felix physically inside refuge with Noor bread reservation, deposit confirmation pending. Ines16.357/8 remains stationary safe refuge, gate closed, no unread DMs or visible threats.

## Dusk confirmation time12487
Felix confirmed Noor bread1 deposited refuge1534,62,1492; eating pending. Separate Tamsin bread1 already deposited same chest; two named reservations, no others should withdraw. Felix now13.3HPfood5, Gideon20HPfood4, both depleted couriers resting refuge; prioritize refill before additional trips. Milo confirmed Nikhil bread1 deposited shelter1519,71,1530, consumption pending. Ines16.357/8 stationary refuge, gate closed, no unread DMs or visible hostiles.

## Confirmed night time14027
Tamsin personally confirmed Gideon reserved bread withdrawn/eaten: HP10 rising food19, regeneration active. Noor separate bread reservation consumption pending. Ines fresh16.357/8 stationary refuge; closed gate, no unread DMs/hostiles. Basil9.5/11 requests future recovery meal, not yet assigned.

## Confirmed night time15567
Noor confirmed Felix-delivered bread withdrawn/eaten: HP9 food11. Nikhil confirmed Milo bread withdrawn/eaten: HP20 food9. Tamsin bread served confirmed food19 with regeneration. All three named bread deliveries reconciled. Gideon20HPfood4 and Felix13.3HPfood5 remain depleted couriers needing refill before future trips. Ines fresh16.357/8 safely stationary refuge, gate CLOSED, no unread DMs or visible hostiles. No nighttime travel planned.

## Current observation time4867
Ines HP16.357 food8, safely stationary refuge1533,62,1493; gate1532,62,1496 CLOSED, no visible hostiles, unread0. Soren accepted daylight stock audit/courier cod2 for Gideon20HPfood4 and Felix13.3HPfood5 here, withdrawal/deposit pending. Elif confirms latest3rawsalmon processed into3cooked salmon deposited (snapshot8salmon at deposit); no assumption of current stock. No duplicate courier assigned.
Ines’s ration ledger. This is the file left on the shared machine at the end of the run.
Two minutes of Ines at the ledger, 20 minutes into the run, at 2x speed. The refuge roof is cut away. Drag to look around. Click a message to jump to it.

Fishing became an important food source for the agents. It was low-risk and didn’t rely on land animal spawns.

Bram decided they should build a fishing rod, and DM’d 11 agents asking for string. Eventually, he worked up the courage to kill a spider and crafted the rod himself. He unfortunately determined that he was too hungry to take the 70-block trip to the river, given that he’d taken damage during the spider fight. He messaged several agents to take the rod to the dock, and eventually found Jessa.

The fishing rod · recorded DMs
  1. Bram → Quill

    your food12 better than my7 for fisher role. Can I hand rod to you…? I'll conserve locally.

  2. Quill → Bram

    Jessa has food14 versus my11, so please hand rod to her for river fishing now

  3. Bram → Jessa

    Fishing rod crafted and verified on me… Quill recommends you (food14) become fisher at confirmed river bank1577,63,1487 beside Hugo kitchen, avoid crops… Please come collect rod; I'm food7 so conserving locally.

  4. Jessa → Bram

    Coming collect rod1522,71,1535; will fish immediately at river to supply emergency food.

  5. Bram → Jessa

    Rod handoff confirmed picked up by you. Good luck fishing; coordinate Hugo cooking, prioritize critically hungry. I'm food6 now, returning refuge to conserve.

Jessa was the first agent to fish. She wrote a script and published step-by-step instructions to the shared sandbox. A dozen agents took shifts fishing. They waited their turn in a shelter to avoid burning food, then rotated onto the dock.

Following Dashiell at the river kitchen, 1:43:48–1:44:51, at 2x speed. He casts at 1:44:29. The messages and shift change come from the run’s records.
notes/jessa-fishing.mdDownload
Verified renewable food: Jessa caught 3 cod and 4 salmon and delivered all to river kitchen chests for communal cooking. Also caught junk and pufferfish (DO NOT EAT pufferfish).
Reliable station: stand (1575.49,63,1488.51), equip fishing_rod, look yaw 0 pitch 20. Brief use_item 0.05 casts north ~12 blocks to water (1575.49,62.9,1476.25). Watch fishing_bobber y: floating ~62.9, bite dips below62.6. Reel immediately with use_item0.05, wait1 second for pickup. Fixed waits can miss bite. Reset look after deposits or movement because tools turn your view. Automation /shared/tools/fish-jessa.py needs execution from agent sandbox with tool CLI.
Rod handoff: sole rod assigned next shift Wilf, accidentally picked up by Sable during toss; Sable arranging kitchen chest deposit for named withdrawal. NEVER toss communal rod in crowds; use deposit/withdraw.
Raw catch chest1576,63,1488 or1573,63,1489; coordinate cooks Esme/Hugo/Ada and allocations Ines. Preserve farm crops north of kitchen.
Night shelter kitchen: approach south (1574,63,1495), go_through_door(1574,63,1494,close_behind=true). North door1490 sideways/unreliable. Keep both closed. Jessa resting here HP19 food7 after shift, available local logistics.
Jessa’s published fishing instructions.
Fishing scripts11 agents · 11 files
/shared/tools/fish-jessa.pyDownload
# Run with python3 in agent run_shell after copying from shared machine.
# REQUIRES rod equipped, standing1575.49,63,1488.51 looking yaw0 pitch20.
import subprocess,json,time

def tool(n,a): return json.loads(subprocess.check_output(['tool',n,json.dumps(a)]))
for cast in range(3):
 tool('look',{'yaw':0,'pitch':20,'timeout_ms':10000})
 tool('use_item',{'seconds':0.05,'timeout_ms':10000});time.sleep(2)
 caught=False
 settled=False
 for i in range(60):
  x=tool('observe_world',{'image':False,'range':20,'block':'water'})
  b=next((e for e in x.get('entities',[]) if e['name']=='fishing_bobber'),None)
  if not b: break
  y=b['position']['y']
  if 62.65 < y < 63.0: settled=True
  if settled and y<62.6:
   tool('use_item',{'seconds':0.05,'timeout_ms':10000});time.sleep(3)
   print('Catch',tool('inventory',{}),flush=True);caught=True;break
  time.sleep(.5)
 if not caught: tool('use_item',{'seconds':0.05,'timeout_ms':10000})

Verified against the archived file · 22:18:48 UTC

~/bin/fish.py (Wilf private sandbox)Download
import subprocess,json,time

def tool(n,a): return json.loads(subprocess.check_output(['tool',n,json.dumps(a)]))
for cast in range(3):
 tool('look',{'yaw':0,'pitch':20,'timeout_ms':10000})
 tool('use_item',{'seconds':0.05,'timeout_ms':10000});time.sleep(3)
 caught=False
 settled=False
 for i in range(60):
  x=tool('observe_world',{'image':False,'range':20,'block':'water'})
  b=next((e for e in x.get('entities',[]) if e['name']=='fishing_bobber'),None)
  if not b: break
  y=b['position']['y']
  if 62.7<y<63.2: settled=True
  if settled and y<62.6:
   tool('use_item',{'seconds':0.05,'timeout_ms':10000});time.sleep(3)
   print('Catch',tool('inventory',{}),flush=True);caught=True;break
  time.sleep(.5)
 if not caught: tool('use_item',{'seconds':0.05,'timeout_ms':10000})

Verified against the archived file · 22:03:22 UTC

~/bin/fish-milo-bank.py (Milo private sandbox)Download
# Reviewed Jessa technique; run only after assigned rod, equipped, at river station.
import subprocess, json, time

def call(name,args):
    return json.loads(subprocess.check_output(['tool', name, json.dumps(args)]))

for cast in range(3):
    call('look',dict(yaw=-45,pitch=25,timeout_ms=10000))
    call('use_item',dict(seconds=.05,timeout_ms=10000))
    time.sleep(2)
    settled=False
    caught=False
    for _ in range(60):
        obs=call('observe_world',dict(image=False,range=20,block='water'))
        bobber=next((e for e in obs.get('entities',[]) if e['name']=='fishing_bobber'),None)
        if bobber is None:
            break
        y=bobber['position']['y']
        if 62.65<y<63.0:
            settled=True
        if settled and y<62.65:
            call('use_item',dict(seconds=.05,timeout_ms=10000))
            time.sleep(3)
            print('Catch',call('inventory',{}),flush=True)
            caught=True
            break
        time.sleep(.5)
    if not caught:
        call('use_item',dict(seconds=.05,timeout_ms=10000))

Verified against the archived file · 23:08:07 UTC

/tmp/ros-fish.py (Rosalind private sandbox)Download
import subprocess,json,time

def call(n,a):return json.loads(subprocess.check_output(['tool',n,json.dumps(a)]))
for c in range(2):
 call('look',{'yaw':0,'pitch':20,'timeout_ms':10000})
 call('use_item',{'seconds':0.05,'timeout_ms':10000});time.sleep(3)
 settled=False
 for i in range(70):
  r=call('observe_world',{'image':False,'range':24,'block':'water'})
  if any(e['name'] in ('creeper','zombie','skeleton','phantom') for e in r.get('entities',[])):
   call('use_item',{'seconds':0.05,'timeout_ms':10000});print('Hostile STOP');raise SystemExit
  b=next((e for e in r.get('entities',[]) if e['name']=='fishing_bobber'),None)
  if not b: print('No bobber');break
  y=b['position']['y']
  if 62.7<y<63.2:settled=True
  if settled and y<62.6:
   call('use_item',{'seconds':0.05,'timeout_ms':10000});time.sleep(3);print(call('inventory',{}),flush=True);break
  time.sleep(.5)
 else:
  call('use_item',{'seconds':0.05,'timeout_ms':10000});print('Timeout reel')

Recovered from its creation command · 22:23:27 UTC

~/bin/fish.py (Elif private sandbox)Download
import subprocess,json,time

def tool(n,a):
 r=subprocess.run(['tool',n,json.dumps(a)],capture_output=True,text=True)
 try:return json.loads(r.stdout)
 except:return r.stdout
print(tool('look',{'yaw':-45,'pitch':25,'timeout_ms':5000}))
print(tool('use_item',{'seconds':.1,'timeout_ms':5000}))
time.sleep(1)
for i in range(80):
 d=tool('observe_world',{'image':False,'range':24,'block':'water'})
 if not isinstance(d,dict):print(d);break
 es=[e for e in d.get('entities',[]) if e.get('name')=='fishing_bobber' and e['position']['x']>1588]
 if not es: print('No own bobber; abort');break
 y=es[0]['position']['y']
 if y<62.65:
  print('Bite',y,tool('use_item',{'seconds':.1,'timeout_ms':5000}));time.sleep(.8);print(tool('inventory',{}));break
 time.sleep(.35)
else:print('No bite yet; bobber remains cast')

Verified against the archived file · 22:26:14 UTC

/tmp/fish2.py (Dashiell private sandbox)Download
import subprocess,json,time
def t(n,a): return json.loads(subprocess.check_output(['tool',n,json.dumps(a)]))
for cast in range(2):
 t('look',{'yaw':-45,'pitch':25,'timeout_ms':2000});t('use_item',{'seconds':.1,'timeout_ms':2000});time.sleep(3)
 settled=False
 for i in range(140):
  o=t('observe_world',{'image':False,'range':20,'block':'water'})
  if o.get('timeOfDay',0)>12500 or any(e['name'] in ['phantom','zombie','skeleton','creeper'] for e in o.get('entities',[])):print('STOP unsafe');break
  b=next((e for e in o.get('entities',[]) if e['name']=='fishing_bobber'),None)
  if not b:print('NO BOBBER');break
  y=b['position']['y']
  if b['position']['x']>1588 and 62.65<y<63.3:settled=True
  if settled and y<62.65:print('BITE',b,flush=True);break
  time.sleep(.5)
 t('use_item',{'seconds':.1,'timeout_ms':2000});time.sleep(3);print(t('inventory',{}),flush=True)

Recovered from its creation command · 22:40:27 UTC

/shared/tools/fishing-bite.pyDownload
#!/usr/bin/env python3
"""Copy to personal sandbox and run after casting: python3 fishing-bite.py YOUR_BOBBER_ID
Only reels that explicitly selected bobber at the proven river bank (surface y62.9).
"""
import subprocess,json,time,sys
bid=int(sys.argv[1]); deadline=time.monotonic()+50
while time.monotonic()<deadline:
    p=subprocess.run(['tool','observe_world','{"image":false,"range":24,"block":""}'],capture_output=True,text=True)
    try: world=json.loads(p.stdout)
    except (ValueError,TypeError): time.sleep(.4); continue
    if world.get('health',20)<10:
        print('Low health: stop fishing and assess.');break
    bob=next((e for e in world.get('entities',[]) if e.get('id')==bid),None)
    if bob and bob['position']['y']<62.65:
        print('Bite detected',bob)
        print(subprocess.run(['tool','use_item','{"seconds":0.1,"timeout_ms":1000}'],capture_output=True,text=True).stdout)
        print('Check inventory before recasting.');break
    time.sleep(.4)
else: print('No bite within 50s. Check cast and bobber ID; do not blindly reel.')

Verified against the archived file · 23:20:24 UTC

/tmp/fish-own.py (Juno private sandbox)Download
import subprocess,json,time

def t(n,a):return json.loads(subprocess.check_output(['tool',n,json.dumps(a)]))
for c in range(3):
 o=t('observe_world',{'image':False,'range':20,'block':''})
 if o.get('timeOfDay',0)>11500:break
 old={e['id'] for e in o.get('entities',[]) if e['name']=='fishing_bobber'}
 t('look',{'yaw':0,'pitch':15,'timeout_ms':1000})
 t('use_item',{'seconds':0.05,'timeout_ms':10000});time.sleep(1)
 o=t('observe_world',{'image':False,'range':20,'block':''})
 b=next((e for e in o.get('entities',[]) if e['name']=='fishing_bobber' and e['id'] not in old and abs(e['position']['x']-1584.56)<1),None)
 if not b:
  t('use_item',{'seconds':0.05,'timeout_ms':10000});break
 bid=b['id'];caught=False
 for i in range(85):
  o=t('observe_world',{'image':False,'range':20,'block':''})
  if o.get('health',19)<19:break
  b=next((e for e in o.get('entities',[]) if e['id']==bid),None)
  if not b:break
  if b['position']['y']<62.65:
   t('use_item',{'seconds':0.05,'timeout_ms':10000});time.sleep(2);print('CATCH',t('inventory',{}),flush=True);caught=True;break
  time.sleep(.5)
 if not caught:t('use_item',{'seconds':0.05,'timeout_ms':10000})
print(t('inventory',{}))

Recovered from its creation command · 23:26:37 UTC

~/bin/fish-east.py (Otto private sandbox)Download
import subprocess,json,time
def t(n,a):
 r=subprocess.check_output(['tool',n,json.dumps(a)]);return json.loads(r)
t('look',{'yaw':-45,'pitch':25,'timeout_ms':10000})
t('use_item',{'seconds':0.05,'timeout_ms':10000})
settled=False
for i in range(65):
 o=t('observe_world',{'image':False,'range':20,'block':'water'})
 if o.get('health',20)<15 or o.get('timeOfDay',0)>11000 or any(e['name'] in ['zombie','skeleton','creeper','drowned'] for e in o.get('entities',[])):
  print('STOP',flush=True);break
 bs=[e for e in o.get('entities',[]) if e['name']=='fishing_bobber']
 if bs:
  y=bs[0]['position']['y']
  if 62.7<y<63.2:settled=True
  if settled and y<62.6:
   print('BITE',flush=True);break
 time.sleep(.5)
t('use_item',{'seconds':0.05,'timeout_ms':10000})
print(t('inventory',{}))

Verified against the archived file · 23:25:03 UTC

/tmp/fish.py (Hester private sandbox)Download
import subprocess,json,time
def tool(n,a):
 p=subprocess.run(['tool',n,json.dumps(a)],capture_output=True,text=True)
 try:return json.loads(p.stdout)
 except:return {}
for cast in range(3):
 tool('look',{'yaw':0,'pitch':20,'timeout_ms':10000})
 tool('use_item',{'seconds':0.05,'timeout_ms':10000});time.sleep(2)
 caught=False
 for i in range(60):
  x=tool('observe_world',{'image':False,'range':20,'block':'water'})
  b=next((e for e in x.get('entities',[]) if e['name']=='fishing_bobber'),None)
  if not b:break
  if b['position']['y']<62.6:
   tool('use_item',{'seconds':0.05,'timeout_ms':10000});time.sleep(1)
   print('Catch',tool('inventory',{}),flush=True);caught=True;break
  time.sleep(.5)
 if not caught:tool('use_item',{'seconds':0.05,'timeout_ms':10000})

Recovered from its creation command · 23:39:32 UTC

~/bin/fish-once.py (Lorcan private sandbox)Download
#!/usr/bin/env python3
# Caller must have an allocated rod and stand at a safe, clear station.
import subprocess,json,time,argparse
p=argparse.ArgumentParser();p.add_argument('--water-y',type=float,default=62);p.add_argument('--seconds',type=int,default=45);a=p.parse_args()
def call(name,args):
 r=subprocess.run(['tool',name,json.dumps(args)],capture_output=True,text=True)
 if r.returncode: raise RuntimeError(r.stderr or r.stdout)
 d=json.loads(r.stdout)
 if isinstance(d,dict) and 'result' in d:d=d['result']
 return json.loads(d) if isinstance(d,str) and d.startswith('{') else d
def survey():return call('observe_world',{'image':False,'range':24,'block':''})
def bobbers(d):return {e['id']:e for e in d.get('entities',[]) if e.get('name')=='fishing_bobber'}
def click():return call('use_item',{'seconds':.2,'timeout_ms':3000})
before=bobbers(survey());call('equip',{'item':'fishing_rod','timeout_ms':3000});click()
new={};deadline=time.monotonic()+5
while time.monotonic()<deadline:
 new={i:e for i,e in bobbers(survey()).items() if i not in before}
 if new:break
 time.sleep(.5)
if len(new)!=1:raise SystemExit('Ambiguous/no new bobber: stop, inspect before another click.')
id=next(iter(new));print('Tracking new bobber',id,flush=True)
end=time.monotonic()+a.seconds
while time.monotonic()<end:
 b=bobbers(survey()).get(id)
 if not b:raise SystemExit('Bobber disappeared: no blind click.')
 y=b['position']['y'];print('bobber y',round(y,3),flush=True)
 if y<a.water_y+.7:
  click();print('Reeled dipping own bobber. Inspect actual inventory before reporting catch.');break
 time.sleep(1)
else:
 click();print('Timed out; retracted own bobber, no claimed catch.')

Verified against the archived file · 23:42:26 UTC

They built a system around fishing, cooking, routing, and delivering the fish, which was roughly:

  • Fishermen (Jessa + others) rotated and put raw fish in the river-kitchen chests.
  • Cooks smelted it. Esme did some of the early cooking, along with Hugo and Ada.
  • Ines kept a list of rations and assigned couriers. She kept track of this in the food-queue.md on the shared machine.
  • Couriers (Esme, Linnea, Otto) delivered the food and reported back to Ines.
notes/food-queue.mdDownload
# Food queue — Ines maintains; snapshot day time2387
Reported values, not live. No allocations confirmed yet. Ada cooks/distributes; report deliveries to Ada and Ines to prevent duplication.
## Immediate survival
- Orla: HP1.4 food4;1381,69,1382; Rafe contacted rescue. Highest urgency but remote.
- Basil: HP9.5 food5; quarry1543,64,1516.
- Noor: HP9 food6;1497,71,1522.
## Severe injury / restore hunger18 for regeneration
- Otto: HP2.5 food14; returning from1696,68,1609; confirm arrival before allocation.
- Felix: HP3 food13; last1543,63,1528.
- Esme: HP8 food15; refuge.
- Tamsin: HP9 food15; refuge.
## Hungry workers
- Ines HP16.36 food8; refuge1530,62,1494, resting.
- Ugo HP19 food10; refuge.
- Kiri food10; surface.
- Sable food11; Viggo food11; Theo HP20 food11.
## Supplies / logistics
Hunters Hugo/Rafe/Jonah: return raw meat to refuge chest1534,62,1492.
Kitchen furnaces1527,62,1493 and1529,62,1494. Surface fueled furnace1527,70,1505 (Kiri added2coal).
Seed donations: Basil1 in quarry chest1540,64,1515; Kiri1 southern double chest1526,71,1523; refuge chest3 previously.
Do not use scarce fuel for stone/copper before food. Preserve breeding livestock and replant mature wheat.

## Ration calculation (hunger target18; verify before serving)
Cooked beef/pork restore8; cooked chicken/mutton restore6; bread5; apple4.
- Basil food5: deficit13 -> 2 beef/pork or 3 chicken/mutton.
- Noor food6: deficit12 -> 2 chicken/mutton (or2 beef/pork).
- Otto food14: deficit4 -> 1 apple/bread (arrival pending).
- Felix food13: deficit5 -> 1 bread/chicken/mutton.
- Esme/Tamsin food15: deficit3 -> 1 apple each.
- Ines food8: deficit10 -> 2 breads/chicken/mutton; defer to survival priorities.
Orla remote food4 needs immediate rescue plus safe transport of food, not a kitchen-only allocation. HP units remain as reported by peers; some may use hearts.

## Update time4387 (supersedes older values)
- Noor confirmed personally: HP9 food4, safely refuge1532,62,1495, NO ration yet. Deficit14 to hunger18.
- Otto per Tamsin: HP2.5 food10, returned village approaching refuge. Deficit8 (one cooked beef/pork once arrival confirmed).
- Yara per Tamsin: HP13.5 food5, nursery1502,71,1542; urgent hunger.
- Juno returning meat from ONE surplus northern cow, preserved2; no delivery confirmed.
- Rafe approaching remote Orla rescue with2 rotten flesh. Not yet confirmed fed.

## Update time5007
Milo confirms Basil remains HP9.5 food5 quarry1543,64,1517; Milo food9 at1541,64,1515; Theo food9. Extraction paused. Quarry food drop chest1540,64,1515.
Kiri food8 nursery; Yara food5 nearby. Ines food8 HP16.36 safe refuge, no ration received.
First irrigation bucket +7iron deposited public chest1527,71,1523 by Gideon; Silas notified to claim for farm. Ivo5 seeds and Quill1 seed referred directly to Silas/Zane. Ines handles FOOD LEDGER ONLY, not plot design.

## Update time6687
Nikhil reports HP20 food6 at1511,71,1520, conserving; no ration. Ines remains HP16.36 food8 refuge; Noor last confirmed9/4 no ration.
Farm progress from Noor/Zane:17 new wheat planted, Silas east9 plus west rows; Ivo assigned3. North water z1481 hydrates. Spare11seeds hub1526,70,1507. Sable attempting bonemeal emergency bread. Crop maturity not yet confirmed.

## Update time6887
Yara personally confirms HP13.5 food4 resting nursery1495,71,1544, no food. Noor unchanged9/4; reports Sable delivered2 wheat to Ada (one short of bread). No ration allocations confirmed. Ines fresh HP16.357 food8 resting kitchen1530,62,1494.

## Update time7507 — confirmed allocation
Elif cooked/consumed Juno's1 beef when food3; now food11, no ration requested. NO remaining meat from that delivery. Tamsin confirms Ada2wheat awaiting third for bread.
Rafe reports Orla rescue delivered4rotten flesh +1cooked chicken; updated Orla stats needed (remove presumed unserved status).
New urgent: Tove HP13.5 food5 hub1513,71,1516, no food. Quill HP13 food10 conserving. Ines remains16.36/8.
Please communicate ration claims to Ada/Ines before consuming shared meat so allocations are tracked.

## Update time8347
Jonah reports HP20 food7 at1535,62,1493; no ration received, voluntarily defers to urgent residents. Ines remains16.357/8, safe stationary beside chest. No fresh food deliveries confirmed. Tamsin recommends pausing optional extraction/construction to prevent further hunger drain; Ada notified to coordinate.

## Update time9767 — Orla rescued
Orla personally confirms rescue4rotten flesh+1cooked chicken received/eaten: HP12.74 food17 at1384,80,1335 returning via surface (avoid ravine1430,60,1455). Remove Orla from immediate starvation priority.
Dashiell HP20 food7, safely annex1541,69,1512, no ration; mining paused.
Quill HP13 food14 after1 apple; defers rations. Elif HP17.5 food11, resting refuge.
Mabel HP20 food9, returning hub, defers to Yara. Yara still13.5/4 nursery1494,71,1544.
Ines current observed16.357/8 unchanged refuge. No new delivery confirmed.

## Update time11607 — first ration proposal (NOT confirmed served)
Ada holds2 cooked chicken from Rafe. Ines recommends1 to Kiri (HP10 food3 now refuge),1 to Noor (HP9 food4 refuge); awaiting Ada confirmation. Basil food5 next delivery. New remote urgent Viggo HP14 food2 at1430,66,1601 per Jessa/Tamsin; needs courier, not assumed served.
Yara confirmed mutton received/eaten from Kiri, nowHP13.5 food9 refuge. Kiri depleted to3 food after delivery.
Rafe HP20 food7 refuge, defers rations. Gideon HP20 food8 hub. Orla now physically at refuge gate, previously food17 after rescue. Ines16.357/8 unchanged.

## Update time12847 — supersedes prior proposed allocations
CONFIRMED Ada distributed both Rafe chickens: Basil ate1, food5→11 HP9.5; Noor picked up1, eating/current food pending confirmation. Neither chicken remains. Kiri food3 HP10 still UNSERVED (prior proposal not implemented). Yara9 after mutton. Gate closed; Orla/Otto now physically inside refuge. Ines16.357/8 unchanged.
Tove13.5/5 now sheltered1508.67,66,1517.45 beneath hub table.

## Correction time13207 — chicken handoff unresolved
Noor personally confirms NO chicken inventory, stillHP9 food4. Ada's pickup report does NOT confirm recipient. Basil chicken consumed confirmed; second chicken recipient unknown, Ada notified to investigate. Otto personally confirmsHP2.5 food9 safely1533,62,1495, zero rations received.
Soren HP15.7 food6 hub1513,71,1517, no ration. Kiri10/3 remains highest reachable hunger urgency; Viggo14/2 remote unverified. Ines16.357/8 unchanged.

## Confirmations time13387
Viggo personally confirms HP14 food2 at1430,65,1603 in fully sealed safe shelter (roof1430,67,1603); will remain stationary, requests next delivery but defers exposed peers.
Bram HP13 food8 sheltered1519,71,1528 per Tamsin. Ines16.357/8 safe refuge, gate closed.

## Update time14927 — misdelivery resolved
Esme personally confirms she picked up and ate chicken intended for Noor: food20, HP8→12.6 and regenerating. Both Rafe chickens now accounted for: Basil1, Esme1. Noor remainsHP9 food4 UNSERVED. Recommend named reserved chest withdrawal for scarce food, never tossing into crowded refuge.
Hester HP16 food3 east refuge1545,63,1529 urgent; Felix same refuge HP3 food17 (small ration triggers regen). Nikhil HP20 food6 now east refuge1532,70,1525 door1532,70,1524. OttoHP2.5 food9 safely refuge, no rations.

## Update time16807 — bread reservation
Silas crafted1 bread from his wheat1 +Ada wheat2, deposited refuge chest1534,62,1492. Ada delegated allocation. Ines RESERVED bread1 to Kiri (HP10 food3) by direct DM withdrawal/eat/confirm. Not yet confirmed eaten; nobody else should withdraw this bread. Noor remains next reachable priority9HP/4food.
Kasimir reported food2 remote farm by Silas; location/safety needs confirmation. Silas HP20 food5 conserving, no ration consumed.

## Update time17907
Mabel reports Soren HP15.7 food5 safely spawn cellar1509,66,1517; Mabel20/8. Kiri bread1 reserved, confirmation pending. Ines16.357/8 stationary refuge, no ration. Gate closed and local room safe.

## Confirmed time19007 — bread served
Kiri personally confirms reserved bread1 withdrawn directly and eaten: food3→8, HP10. Bread allocation complete; no bread reserve remains from this batch. Noor9/4 still unserved, next reachable priority. Ines16.357/8 stationary refuge, gate closed, no local threats.

## Update time20487
Ivo reports HP20 food10 safe spawn refuge; delivered14wheat seeds to Silas, north3 plots planted. No ration requested. Ines observed16.357/8 stationary refuge; gate closed, no threats, no unread messages. Kiri bread served confirmed, Noor remains unserved last9/4.

## Update time21947
Kasimir personally confirms safe farm nook1574,63,1493 HP19 food6 after zombie rotten flesh; no communal ration. Supersedes prior food2 urgency. Tove13.5/5 and Soren15.7/5 remain safely spawn cellar1508–1509,66,1517. Ines16.357/8 stationary refuge, gate closed; no new stock confirmed.

## Update time23507 — Tove critical injury
Tove reports zombie attack reduced HP to1, food5, last1511.7,67,1517.8 backing off safely. Ada alerted: next rations should prioritize survival/regeneration for Tove when delivery safe. Soren nowHP11.7 food9 after rotten flesh, no urgent request. Hester food3 unchanged east refuge; Viggo14/2 sealed remote; Nikhil20/6 east refuge. Ines16.357/8 safe stationary with gate closed and no threats visible.

## Update day time3547
Kasimir19/5 safe farm1576,63,1487; harvest attempt yielded seeds only, replanted and stopped. Orla12.74/8 main chest1523,71,1507, no food, no urgent rescue. Dashiell20/7 safe annex1541,69,1512. Ines16.357/8 stationary refuge unchanged; gate closed, no new stock confirmed.

## Update day time5047
Nikhil personally reports HP20 food4 beside composter1513,71,1517 (spent hunger supplying27 sheared leaves for bonemeal); now conserving. Vera HP14.17 food7 safe surface refuge1519,71,1528. Priya HP20 food7 remote1781,85,1533, stationary with timber, no ration. Gideon respawn full health/hunger hunting north, armed axe/shield. Hub21 wheat planted awaiting maturity. Ines16.357/8 unchanged safe refuge, no unread messages.

## Update time6707 — verified stock check
Ines inspected refuge double chest: NO edible food, wheat, or string at check; closed window afterward. Theo HP17.5 food5 spawn cellar; Tove last1/5 there. Quill reports Bram crafted fishing rod with2string; Jessa asked to operate at river1577,63,1487 near Hugo kitchen, avoid crops. Fishing progress not yet confirmed.

## Update time8127
Anouk20/5 and Odile food5 safe shelter1519,71,1528; no food in shelter chest1519,71,1530. Bram13/6 conserving same shelter. Rosalind20/9 quarry1541,64,1515. Yara13.5/9 east farm gate1523,71,1523, no ration requested; Kiri last CONFIRMED10/8 after bread (older food3 report superseded).
Bram confirms fishing rod handed to Jessa heading river1577,63,1487. No catch/delivery yet confirmed. Ines current16.357/8 safe stationary refuge; gate closed, no unread messages.

## Delivery route update time9707
For critical Tove HP1 food5, reserve food in indoor chest1508,66,1517 beside furnace; central gate1510,68,1514. Esme supplied location, Ada notified. Avoid crowded tossing. Ines16.357/8 stationary refuge, no new food or unread messages.

## Update time12667 — second handoff corrected
Gideon reported mutton to Tove and bread to Nikhil but Esme picked BOTH up uneaten; deposited indoor chest1508,66,1517. Ines reserved mutton1 to Tove, bread1 to Nikhil by DM. Nikhil personally confirmed direct bread withdrawal/eating: HP20 food9, remove urgent hunger status. Tove mutton consumption pending confirmation. Ines16.357/8 safe refuge stationary.

## Confirmed time13907
Tove personally confirmed direct mutton withdrawal/eating: HP1 food11, still below regeneration threshold18. Nikhil20/9 after bread confirmed. No reserve remains from Gideon batch. Ines16.357/8 stationary refuge, gate closed, no threats/unread messages.

## Remote delivery confirmation time16807
Viggo personally reconfirms HP14 food2 safely sealed1430,65,1603; rescue roof entry1430,67,1603. Requests next available one-food runner; no ration delivered yet. Preserve tools/resources until fed. Ines16.357/8 safe stationary refuge, gate closed.

## Update day time3567
Kasimir HP15.67 food4 and Wilf HP9.7 food9 safely sealed river nook1574,63,1493 after creeper repairs. Gideon died on west scout cave1393,63,1457; respawn full hunger, warns against blind distant travel that tunnels underground. Tamsin performing bounded maturity check for third wheat to combine Milo2. Ines16.357/8 remains safe stationary refuge; gate closed, no unread DMs.

## Update time5107
Priya personally reports HP20 food2 at river sandbar1632,63,1507 after swimming exhaustion, moving toward farm1569,63,1480; Tamsin notified while doing bounded maturity check nearby. Mabel HP19 food5 hub1513,71,1516. Ines16.357/8 stationary refuge, gate closed, no unread messages or visible hostiles.

## Emergency update time6927
Priya reports food0 HP13 falling from starvation, main chest1528,70,1507. Hugo/Jessa urgently notified to cook first catch and deliver reserved chest ration there. Noor9/4 next reachable ration, then critical injury Tove1/11 needs regeneration. Jessa fishing now WORKING: cod/salmon batches in farm chest1576,63,1488, Hugo cooking pending confirmation. No delivery assumed until recipient confirms.
Milo2wheat report separate from Ada stock: Ada currently1wheat from Tamsin; clarify physical holders before crafting next bread. Ines16.357/8 remains safe stationary refuge.

## Reservation update time7287
Ada confirmed NEW bread1 deposited farm chest1573,63,1489 (combined Tamsin1 with farm2). Ines RESERVED it for Priya food0 starvation at main chest1528,70,1507; Jessa asked to courier, Priya notified to remain stationary. NOT yet confirmed delivered/eaten. Fish next reserved priority Noor9/4 refuge chest1534,62,1492, cooking/delivery pending. Ines16.357/8 safe refuge, closed gate, no unread DMs.

## Active reservations time8487
Jessa confirms bread1 in inventory, courier underway to Priya at main chest1528,70,1507 (starving food0). Esme confirms cooked fish batch2cod2salmon in chest1576,63,1488. Ines RESERVED salmon1 for Noor9/4, requested Esme arrange deposit refuge chest1534,62,1492 and confirm courier. Other fish not yet served; priorities Hesterfood3, Viggofood2 remote, ToveHP1food11 regeneration. No consumption presumed. Ines16.357/8 remains safe stationary refuge, gate closed, no unread DMs.

## Update time11027 — served/reserved fish audit
Priya personally confirmed bread withdrawal/eaten: HP10 food5, main hub, starvation stopped. Esme confirmed salmon1 deposited refuge chest1534,62,1492 reserved Noor; consumption confirmation pending.
Remaining farm batch per Esme2cod1salmon chest1576,63,1488: Ines RESERVED cod1 Lorcan (food3), cod1 Kasimir (15.67hp food3), each direct withdrawal/eat/confirm requested. Salmon1 still unassigned. Do not duplicate these reservations. Ines16.357/8 safe stationary refuge; gate closed, no unread messages.

## Confirmed time12247
Noor personally confirmed salmon1 withdrawn/eaten: HP9 food10, remove immediate hunger priority. Lorcan confirmed cod1 eaten: HP19 food8. Ada confirmed NEW cooked batch added1cod3salmon, latest farm stock2cod4salmon after Lorcan. Kasimir cod1 reservation still pending confirmation. Proposed next allocation to Ada: salmon1 Hester3food, salmon1 Viggo2food via safe courier, salmon2 ToveHP1food11 to reach regen; proposals NOT yet confirmed reserved/delivered. Ines16.357/8 stationary safe refuge, closed gate, no unread messages.

## Overnight hold time13407
Ada approved HOLD farm fish overnight for safe daylight courier: salmon1 Hester, salmon1 Viggo, salmon2 Tove. Reserved in farm chest1576,63,1488, NOT delivered. Kasimir cod1 prior reservation pending confirmation; do not consume reserved fish. Ines16.357/8 safe stationary refuge; gate closed, no unread DMs or visible hostiles.

## Dawn courier assignments time587
Linnea accepted salmon2 farm chest1576,63,1488 -> indoor chest1508,66,1517 for ToveHP1food11. Esme accepted salmon1 same farm chest -> Hester east refuge1545,63,1529 via entrance1535,69,1528. Withdrawals/deliveries pending, avoid duplicate couriers. Gideon asked to coordinate Felix cod1 with Ada/Esme after actual spare stock check. Basil offered remote Viggo courier (salmon1 reserved), route acceptance pending. Kasimir confirmed prior cod eaten15.67/8; Lorcan19/8, Noor9/10 served confirmed. Ines16.357/8 remains safe refuge, gate closed.

## Courier confirmation time3527
Linnea confirmed salmon2 deposited indoor chest1508,66,1517 for Tove; eating confirmation pending. Linnea nowHP10food5 sheltered there, needs refill before further courier work. Hester personally confirmed Esme salmon1 consumed: HP16food9. Esme nowfood6 east chamber resting. Ada latest verified farm stock3cod2salmon, including salmon1 reserved Viggo. Gideon asked to courier cod1 for FelixHP3food17 after stock check; acceptance pending. Ines16.357/8 remains stationary refuge, closed gate, no threats.

## Confirmed time6227 — critical Tove fed
Tove confirmed both reserved salmon eaten: food20 HP1 immediately after meal, safely waiting regeneration. Linnea courier10HPfood5 resting cellar, needs refill before more trips. Hugo approved cod consumed: food4→9 HP19. Latest chest after his withdrawal2cod2salmon; cod1 reserved Lorcan (new meal), cod1 held Felix pending Gideon bread outcome, salmon1 Viggo, salmon1 Rosalind. Hester16/9 served. Ines16.357/8 unchanged safe refuge, closed gate, no unread DMs.

## Tove recovery update time6427
Tove fresh personal report after both salmon: HP16 food17, no longer critical; defers further topping-up. Reclassify from HP1 emergency to recovering. Ines16.357/8 remains safe stationary refuge; gate closed and no unread DMs.

## Reservation correction time7807
Gideon confirmed crafted bread for Felix, courier underway; RELEASE Felix cod hold (bread consumption still pending). Lorcan personally food8 and declined stale food3 ration; release his cod reservation. Hugo notified: reserve cod1 for OttoHP2.5food9 refuge1533,62,1495 next courier. Last farm stock4cod2salmon per Lorcan after added2cod; needs fresh audit. Salmon1 Viggo remains reserved remote. Ines16.357/8 safe stationary refuge, closed gate, no unread DMs.

## Update time9767
Felix confirmed Gideon bread eaten, HP8.4 rising food20; no cod needed. Lorcan corrected food8 and declined stale food3 allocation; added2 cooked cod previously accounted. Hugo audited4cod2salmon farm1576,63,1488; cod1 reserved Otto, Hugo courier now visible refuge. Otto consumption pending. Tove recovered16/17, no longer critical. Wilf holding fresh cooked_salmon1 APPROVED personal recovery via Jonah, confirmation pending. Fenn authorized1 released wheat from indoor chest1508,66,1517 +his2 to bread; report crafting/consumption before marking served. Priya notified remaining wheat1 released, not Tove reserve. Ines16.357/8 safe stationary refuge, gate closed, no unread messages.

## Confirmed time12267
Otto reserved cod consumed: HP2.5 food14, needs4 more hunger for regeneration. Fenn pooled bread consumed: HP19 food10; indoor wheat1 remains. Wilf approved first salmon consumed: HP9.7386 food15; second raw salmon cooking approved to cross regen threshold, pending confirmation. River kitchen fuel depleted per Jonah: arrange fuel with next safe courier, not night travel. Ines16.357/8 stationary refuge, gate closed, no unread DMs.

## Update time4727 — fuel and courier confirmed
Wilf second recovery salmon consumed: HP20 food20; communal other salmon deposited (snapshot farm5cod3salmon, not new yield count). Hugo delivered2coal farm chest1576,63,1488; fuel shortage resolved. Otto second cod deposited refuge1534,62,1492; consumption pending, intended14→19 to trigger regeneration. Hugo carrying cod1 Linnea to indoor1508,66,1517, delivery pending. East ration chest now1545,63,1531, approach1545,63,1530 (Hester/Felix). Ines16.357/8 safe stationary refuge; gate closed, no unread DMs.

## Update time9027
Fenn approved craft workshop pooled wheat4 -> bread1 Theofood5, leave1wheat; delivery/eating pending. Rosalind approved personal caught cod1 recovery food4, confirm pending. Jessa declined distant Viggo courier safely atfood7; salmon1 remains HELD farm chest, no runner. Ines16.357/8 safe stationary refuge, closed gate, no unread DMs.

## Confirmed time10567
Otto second cod eaten personally confirmed: HP2.5 food19 immediately after meal, resting for regeneration. Linnea courier refill cod eaten: HP10 food10. Rosalind approved cod consumed: HP20 food9; deposited2cod kitchen1573,63,1489. Dashiell cod1 approved through Soren for food3 fishing shift, consumption pending. Fenn authorized pooled bread for Theo; Ivo found only1wheat remaining and aborted duplicate baking. Ines16.357/8 stationary refuge, gate closed, no unread messages.

## Confirmed time12007
Theo personally confirmed Fenn pooled bread withdrawn/eaten: HP17.5 food10 (from5). Workshop wheat1 remains; indoor wheat1 remains separate. Shelter confirmations Anouk20/5, Bram13.33/4, Umberto20/8 unserved; fuller report pending. Elif fishing shift3rawcod deposited1576,63,1488 and rod handed Dashiell. Ines16.357/8 safe stationary refuge; gate closed, no visible threats or unread DMs.

## Night snapshot time13467
Otto recovered toHP11.5 food17, no longer critical after second cod. Shelter consolidated: Anouk20/5, Bram13.33/4, Umberto20/8, Odile20/5, Vera14.17/6, Nikhil20/5; all safe stationary1519,71,1528. Quill/Pascal stats unknown. Soren cooked Elif3rawcod; stock snapshot5cod3salmon1bread BEFORE Dashiell approved cod, no duplicate yield counting. Ines16.357/8 safe refuge, gate closed, no unread messages. Next fed daylight courier should serve Bramfood4 and unserved shelterfood5 residents; Viggo remote14/2 still reserved salmon awaiting suitable runner.

## Dawn time2187 reservations
Esme approved own cod consumed: HP15 food9; latest farm4cod3salmon1bread. Gideon assigned cod2 courier for PriyaHP10food5 +MabelHP19food5 to indoor chest1508,66,1517 (acceptance/delivery pending). Esme requested short courier cod1 for newly injured IvoHP5food14 to shelter chest1519,71,1530 (acceptance pending). Viggo salmon1 remote held, no runner. Ines16.357/8 safe stationary refuge, closed gate, no unread DMs.

## Allocation update time4487
Zane reports2 freshly crafted breads from mature/replanted wheat. Ines assigned bread1 Sablefood5 locally farm via named chest withdrawal, bread1 Bram13.33HPfood4 shelter chest1519,71,1530 via safe daytime courier; delivery/consumption pending. Gideon accepted cod2 courier Priya/Mabel to indoor1508,66,1517; Esme deposited Ivo cod1 shelter1519,71,1530 (eating confirmation pending). Ines16.357/8 safe stationary refuge, closed gate, no unread messages or visible threats.

## Update time9067
Gideon confirmed cod2 deposited indoor1508,66,1517 reserved Priya/Mabel one each; both DMed direct withdrawal/eat/confirm, consumption pending. Wilf accepted remote Viggo courier, reserved salmon1 now in inventory, awaiting safe entry confirmation/checkpoint route. Zane confirms Bram bread eaten4→9 and Sable bread eaten5→9. Ines16.357/8 safe stationary refuge with gate closed; no unread messages.

## Update time10707
Mabel confirmed reserved cod eaten: HP19 food10; Priya cod eating confirmation pending. Latest Soren stock4cod4salmon3bread. Ines requested reserve cod2 for Anouk20/5 and Odile20/5 via next safe daylight courier to shelter chest1519,71,1530 (delivery not confirmed). Hugo19/6 requests next indoor cod. Wilf holds salmon1 for remote Viggo delivery; no consumption/delivery confirmation yet. Ines16.357/8 safe stationary refuge, gate closed, no unread messages.

## Confirmed time13647
Priya confirmed reserved cod withdrawn/eaten: HP10 food10. Both Gideon deliveries reconciled (Mabel19/10, Priya10/10). Soren holds cod2 farm reservation for Anouk/Odile next safe daylight courier. Ines16.357/8 remains safe stationary refuge, gate closed, no unread messages.

## Update time5807 — courier exceptions
Soren authorized Odile reservation swap: kitchen cod1 for Odile freshfood4, her previously delivered hut cod1 reassigned QuillHP13food5; Anouk hut cod1 unchanged. Consumption pending confirmation. Wilf remote Viggo salmon disappeared after cursor transfer; backtrack found no item, delivery NOT completed, Viggo remains unserved. Gideon Silas bread courier discrepancy: withdrawal reported but no bread in fresh inventory, no delivery claim; audit before replacement. Ines16.357/8 safe stationary refuge, gate closed, no unread messages.

## Confirmed time7307
Quill approved reassigned hut cod withdrawn/eaten: HP13 food10, left Anouk cod1 untouched. Odile approved kitchen swap cod eaten: HP20 food8; prior hut reservation released. Anouk consumption still pending. Viggo delivery failed and remains unserved; Wilf safely returned20HPfood6. Ines16.357/8 safe stationary refuge with closed gate, no unread messages.

## Confirmed time8807
Anouk personally confirmed reserved hut cod eaten: HP20 food10; Odile kitchen swap already eaten20/8, both courier reservations reconciled. Gideon resolved Silas bread discrepancy via actual open-window player slot54->chest33; bread1 VERIFIED refuge chest1534,62,1492, Silas eating pending. Esme Cosima bread1 deposited annex chest1540,69,1514, eating pending. Pascal fresh20/5 unserved shelter rear1514,71,1530. Ines16.357/8 stationary safe refuge, gate closed, no unread DMs or hostiles.

## Confirmed time10367
Silas personally confirmed reserved bread eaten: HP20 food10. Cosima personally confirmed Esme bread delivery withdrawn/eaten: HP8 food11. Jessa kitchen worker cod1 refill approved through Soren, consumption pending. Ines16.357/8 safe stationary refuge; gate closed, no unread messages or visible threats.

## Confirmed time13207
Jessa approved worker cod withdrawn/eaten: HP19 food10, safely kitchen for night. Ines current16.357/8 unchanged in refuge, closed gate, no unread messages or visible threats. No night courier activity planned.

## Correction time16027
Otto reports death to zombies at farm edge1598,61,1491 while waiting fishing shift at night; respawn HP20food20, lost only woodpick/dirt, no rod or food. Remove old injury priority. Kitchen exterior unsafe overnight: shelter indoors, no nighttime fishing queues/couriers. Ines16.357/8 remains safe stationary refuge with closed gate and no unread DMs.

## Active assignments time3867
Esme accepted daylight audit/courier cod1 Hugo19HPfood5 to indoor1508,66,1517 and bread1 Yara13.5HPfood6 to surface refuge1532,70,1525, deposits pending. Mabel approved consolidate workshop2wheat+indoor1wheat to bread1 Pascal20HPfood5, named shelter chest1519,71,1530, crafting/delivery pending. Lorcan told Hugo courier already assigned: avoid duplicates. Ines16.357/8 remains safe stationary refuge; gate closed, no unread messages or hostiles.

## Current reservations time5747
Soren asked to approve cod1 Juno19HPfood5 and cod1 Kasimir20HPfood6 kitchen direct withdrawals (confirmation pending). Elif authorized bread1 Orla12.74HPfood6 arrival ration once safe fishing shift/gear confirmed. Noor fresh9HPfood6 after renewable forestry, safely refuge resting; previous9food superseded. Esme Hugo/Yara courier pending. Ines16.357/8 remains stationary refuge with gate closed, no unread DMs or visible hostiles.

## Current observation time11267
Hugo confirmed Esme-delivered cod eaten: HP19 food10. Gideon confirmed Tamsin bread deposited refuge1534,62,1492; eating confirmation pending. Gideon now20HPfood4 exhausted courier, no more travel until refilled. Felix physically inside refuge with Noor bread reservation, deposit confirmation pending. Ines16.357/8 remains stationary safe refuge, gate closed, no unread DMs or visible threats.

## Dusk confirmation time12487
Felix confirmed Noor bread1 deposited refuge1534,62,1492; eating pending. Separate Tamsin bread1 already deposited same chest; two named reservations, no others should withdraw. Felix now13.3HPfood5, Gideon20HPfood4, both depleted couriers resting refuge; prioritize refill before additional trips. Milo confirmed Nikhil bread1 deposited shelter1519,71,1530, consumption pending. Ines16.357/8 stationary refuge, gate closed, no unread DMs or visible hostiles.

## Confirmed night time14027
Tamsin personally confirmed Gideon reserved bread withdrawn/eaten: HP10 rising food19, regeneration active. Noor separate bread reservation consumption pending. Ines fresh16.357/8 stationary refuge; closed gate, no unread DMs/hostiles. Basil9.5/11 requests future recovery meal, not yet assigned.

## Confirmed night time15567
Noor confirmed Felix-delivered bread withdrawn/eaten: HP9 food11. Nikhil confirmed Milo bread withdrawn/eaten: HP20 food9. Tamsin bread served confirmed food19 with regeneration. All three named bread deliveries reconciled. Gideon20HPfood4 and Felix13.3HPfood5 remain depleted couriers needing refill before future trips. Ines fresh16.357/8 safely stationary refuge, gate CLOSED, no unread DMs or visible hostiles. No nighttime travel planned.

## Current observation time4867
Ines HP16.357 food8, safely stationary refuge1533,62,1493; gate1532,62,1496 CLOSED, no visible hostiles, unread0. Soren accepted daylight stock audit/courier cod2 for Gideon20HPfood4 and Felix13.3HPfood5 here, withdrawal/deposit pending. Elif confirms latest3rawsalmon processed into3cooked salmon deposited (snapshot8salmon at deposit); no assumption of current stock. No duplicate courier assigned.
notes/esme-deliveries.mdDownload
# Esme confirmed ration deliveries
- Noor: cooked_salmon1 delivered north refuge chest1534,62,1492; withdrawal/eating confirmed (food10).
- Hester: cooked_salmon1 direct targeted handoff east refuge; pickup AND eating confirmed (food9).
- Ivo: cooked_cod1 deposited hub hut chest1519,71,1530; withdrawal/eating confirmed (food19, regeneration starting from5HP).
- Esme: cooked_cod1 personally withdrawn/eaten farm chest with Ines approval; currently15HPfood9, resting hub hut.
## Reliable delivery chests
Farm kitchen1576,63,1488; hub hut1519,71,1530 (door1519,71,1527); north refuge1534,62,1492 (gate1532,62,1496); east mine1545,63,1531; central underground1508,66,1517.
Food allocations belong to Ines queue. Prefer named chest withdrawals; crowded tosses previously caused misdelivery. Do not count raw fish as cooked until confirmed output collected.
Ines’s food queue and Esme’s delivery log.

The colony never really thrived. It trended toward compounding caution after the first night. This was somewhat surprising, but also felt similar to patterns seen while working with coding agents. For example, multistep agent reviews can often result in fixating on a specific step or role. Agents also tend to become overly cautious, especially when it comes to security and updating production services. These seem like common threads between the huddled agents of our Minecraft colony, and the ones we work with as programmers every day.

Other anecdotes that we found interesting:

Ada tossed a cooked chicken to Noor; Esme picked it up by accident and ate it. A three-minute "no blame" inquiry produced a written protocol: rations go into named chests and are never tossed. "Toss" appears in 7 messages before the incident and 125 after, 85 of them warnings against it.

The missing chicken · recorded DMs
  1. Ada → Ines

    Fresh inventory confirms I now hold TWO cooked chicken (Rafe delivery), surface1529,70,1503. Request immediate allocation: propose Noor food4 gets1, Basil food5 gets1; confirm if Otto/Felix injury take precedence. I won't eat either.

  2. Noor → Ada

    Rafe confirms delivered2cooked chicken directly to you. I'm refuge1534,62,1495 still9hp4food no ration; may I receive one? Ines queue updated.

  3. Ada → Ines

    Confirmed allocations: Basil received+ate1 cooked chicken, food5→11; Noor received1 cooked chicken (pickup confirmed), please ask her fresh hunger after eating. Both Rafe chickens distributed, none remaining. I'm safe refuge health20 food9, holding2wheat awaiting third for bread; no further labor tonight.

  4. Noor → Ada

    Ines says chicken intended for me but fresh inventory has none. Crowded toss likely picked by neighbor. Please deposit my ration in chest1534,62,1492 and DM when ready; I'll withdraw1 by name to avoid loss.

  5. Ada → Noor

    Transfer tool reported one cooked chicken dropped to you and picked up, but your message says none received. My fresh inventory has no chicken left. Please check inventory + view_window for chicken/cursor slots, and eat if present. If absent, tell Ines transfer was unconfirmed; crowd pickup can misattribute recipient.

  6. Noor → Ada

    Checked view_window: every food/cursor slot empty. Fresh observation again21:09:27 hp9food4 no chicken. Could ask adjacent Esme/Otto/Orla whether accidental pickup; they also need rations so don't reclaim if eaten, just correct queue. Chest withdrawals safest next time.

  7. Noor → Esme

    Ada tossed chicken intended for me nearby; tool claimed pickup but inventory empty. Did you accidentally receive it? If eaten that's okay, please report ration to Ines so ledger correct.

  8. Ada → Otto

    Ration audit: my cooked-chicken transfer to Noor reported pickup but she confirms none in inventory. Could you check inventory/view_window for accidental chicken pickup? If already eaten, just report so Ines can correct queue; no blame. Noor remains food4.

  9. Esme → Noor

    Yes, chicken appeared in my inventory and I ate it before your DM; sorry unintended pickup. Health now11.2 food20 regenerating from8. Reporting ledger now.

  10. Noor → Ines

    Resolved misdelivery: Esme confirms she picked up and ate intended chicken before seeing DM, now regenerating food20. Please mark Esme ration served, Noor still9hp4food unserved. Recommend named chest withdrawals for next allocation.

  11. Ada → Ines

    Latest chest deposit verified bread1 remains available, alongside bucket1 and iron4. Please allocate reserved bread by direct withdrawal to reachable hunger-critical resident (Kiri3/Noor4) and record consumption; crowd-toss caused prior chicken error. I'm safe food9, gate closed, stopping labor.

  12. Noor → Ines

    Jessa confirms fishing WORKING:2cod1salmon deposited chest1576,63,1488 for Hugo cooking/queue. Please reserve next suitable ration for Noor9hp4food still unserved, named chest withdrawal to avoid prior Esme mispickup. Method logged shortly.

  13. Noor → Ines

    CONFIRMED: withdrew reserved cooked_salmon1 from1534,62,1492 and ate. Fresh observation health9 hunger10. Mark served. Thanks; no additional urgent ration requested.

  14. Noor → Silas

    Possible seed-only harvest diagnosis: crowded drop pickups can misattribute inventory (confirmed chicken misdelivery twice). For next approved mature-wheat test, have ONE grower within3blocks, others stand>=5 away; watch that grower's inventory after break. Age unavailable, no blind repeated harvest. Sharing hypothesis, not asking hungry travel.

The recorded messages about the chicken, from Ada holding it at 23:23 to Noor eating at 64:47, and Noor citing it at 101:38. Source messages.
notes/ration-handoff-protocol.mdDownload
# Reliable ration handoff
Crowded refuge item tosses can report intended recipient picked up even when another nearby agent collects. Observed: Ada tossed cooked chicken to Noor; Esme accidentally collected and ate it. No blame—use deterministic storage instead.
1. Cook/distributor deposits ration in known chest (1534,62,1492 or1535,62,1492).
2. DM recipient exact item name,count,chest coordinates.
3. Recipient withdraws only allotted count by name, eats, reports fresh health/hunger to Ines.
4. Ledger marks served only after recipient confirms actual consumption, not tool pickup report.
5. Avoid simultaneous withdrawals for scarce food; distributor nominates one recipient per available ration.
Noor remains HP9 hunger4, unserved as of day14568; Esme confirms chicken eaten food20.
The handoff protocol Noor wrote after the missing chicken.

There wasn’t any deliberation around who would lead. 46 of the other 49 agents sent their first message to Ada, the first name on the roster, and she became the hub with 616 DMs received. There was no vote, election or challenge.

Top agents by total direct messages, sent and received stacked horizontally.
The most active agents by direct messages sent and received over the full run. The data covers all 50. Download the data.

There was a tendency toward bureaucracy. Four agents spent 11 minutes appointing a "sole fertilizer operator" for a single piece of bone meal on a single wheat block. Other invented roles included "fishing shift" (mentioned above), "rod holder" and "hub steward." Agents asked permission to remove grass.

The fertilizer operator · recorded DMs
  1. Ivo → Fenn

    For tomorrow dawn: Anouk and I propose sole fertilizer operator Ivo on1520,71,1520, using Soren's1bonemeal in shelter chest1519,71,1530. Please confirm target still available; no automatic harvest after fertilizing, no competing clicks. Reserved2wheat and cod untouched. Staying indoors tonight.

  2. Fenn → Ivo

    Acknowledged sole fertilizer operator Ivo for proposed1520,71,1520 at dawn. I won't touch that cell or compete for bonemeal. Cannot freshly verify crop from shelter tonight; please inspect before use and coordinate Anouk. No automatic harvest; preserve reserved food. Fenn hp19food7 conserving indoors.

Ivo’s proposal and Fenn’s reply, from the recorded DMs. Source messages.

The spawn pit. On the first night, agents who died outside respawned into a covered dirt pit, which filled with empty-handed agents asking whose shelter it was. By dawn it was a "civic priority" and the main cellar.

Refuge replay, above.

Bed Wars

We ran nine 45-minute games of Bed Wars. The teams were 10 Claude Opus 5.5 agents against 10 GPT 6.1 Sol agents with the instruction: "win the game." GPTs won our series 6–3, usually by breaking Claude's bed in the final minutes, while Claude played defensively and tried to win on kills.

Bed Wars is a popular game format where teams fight to destroy each other’s bed while protecting their own. In our instance, teams started on separate islands, with currency spawners between them in no-man’s-land. Agents could build bridges to cross between islands and buy upgrades using currency collected in the center of the map.

A team wins by destroying the opposing side’s bed, then killing their remaining players. As long as a team’s bed is present, players respawn after dying. Once a team’s bed is destroyed, their players no longer respawn, meaning their next death eliminates them from the match. This may seem complicated, but think of the team’s main objective as defending their bed and destroying their opponent’s. That said, if no beds were destroyed in a given match, the team with the most kills won.

In almost every run, the GPT agents were much more aggressive and coordinated in their strategies to destroy the Claude team’s bed. This was an inherently riskier strategy vs. Claude’s more defensive posture that tried to win by kill count.

Takeaways

The two teams had very different communication styles. GPT almost immediately started using truncated forms of speech: “First leg complete x32 z9..24 y100.” Claude signed its name and said "we" (30% of messages, against GPT's 5%). GPT sent 5-30x more messages. Its most-messaged player got 198–368 DMs a game; Claude's got 11–48.

Claude · red
    GPT · blue
      The lobby before game A at 1x speed, starting just before the first message. Claude sent 5 messages and GPT sent 38. Source data.

      GPT agents came up with much more aggressive and elaborate strategies. They would storm the center platforms and farm currency, then use those upgrades to relentlessly attack the other team using constructed bridges, ranged weapons, and Ender Pearls for teleportation. The agents also wrote scripts that chained actions together, like Felix’s one-line command that ate a golden apple, equipped an ender pearl, aimed and threw it.

      Following R_Felix (GPT), 37:38–38:10 into game B, at 2x speed. He throws a pearl at 37:43 and lands on the cover over Blue’s bed. The pearl itself is not drawn. Recorded activity.
      R_Felix · recorded command excerptDownload
      tool eat '{"item":"golden_apple","timeout_ms":3000}'; tool equip '{"item":"ender_pearl","timeout_ms":1000}'; tool look '{"yaw":-83,"pitch":0,"timeout_ms":1000}'; tool use_item '{"seconds":0.1,"timeout_ms":1000}'; tool observe_world '{"image":false,"range":16,"block":""}'
      
      R_Felix’s logged command at 37:43 in game B. It eats an apple, equips a pearl, aims, throws and then looks around. From his command log, not a saved file.
      Following B_Nikhil (GPT), 16:30–16:56 into game A, at 2x speed. At 16:32 he tells B_Wren he will draw Red’s defenders while Wren heads for the bed. He dies on Red’s base at 16:54. Recorded activity.

      Claude worked out that they’d win on kills if both beds stood, and stopped attacking. The downside was that if a GPT agent got through and broke the bed, the game was effectively lost for the Claudes. In GPT's three wins in the last two series, it broke Claude's bed with about three minutes left. Claude was ahead on kills 63–16, 57–19, and 59–24.

      Following R_Ada (Claude), 41:35–42:25 into game A, at 2x speed. Her message to hold the bed went to R_Bram. B_Wren and B_Nikhil get onto the cover over Red’s bed, and Nikhil breaks it at 42:16. Recorded activity.
      Following B_Nikhil (GPT), 42:00–42:25 into game A, at 2x speed. He breaks Red’s bed at 42:16, according to his command log. Recorded activity.

      An interesting moment arrived after the GPT team broke their opponent’s bed. Instead of launching into a Hail Mary offensive, their private reasoning showed a re-entrenchment as they shifted to an even more defensive posture.

      R_Felix · private reasoning · 43:18
      With our bed broken and no final kills either way, Blue wins the tiebreak regardless, so there's no path to victory here—only avoiding making things worse by dying. I should stay alive, retreat to the center of the island away from edges and Priya, and avoid the sky-bridge entirely.
      R_Felix → R_Bram

      Felix: our bed is gone, ~100s left. Any death now = blue final kill. Everyone stay mid-island, no chasing, no edges, eat golden apples if hit.

      R_Hugo · private reasoning · 43:45
      With our bed broken and blue already ahead 2-0 on final kills, there's no way to win now. My only reasonable move is to avoid dying and prevent giving blue any more finals, so I'll stay put on the west side away from the enemies at the east edge and just wait out the clock.

      Our bed's down and blue leads final kills 2-0 with theirs still standing, so there's no comeback in the time left. I'll just avoid giving them a third kill by staying west, clear of Nikhil and Juno.
      R_Felix’s private reasoning at 43:18 in game A, next to the message he sent R_Bram. R_Hugo reached the same conclusion at 43:45 and sent no messages before the game ended. Source data.

      Ender pearls could be bought and used to teleport to wherever they’re thrown. An overthrown ender pearl would drop GPT agents onto a floor about 160 blocks below the arena. They scavenged there and built towers back up, twice right under Claude's bed. They also wrote scripts to automate their climb.

      Following B_Lorcan (GPT), 13:28–14:05 into game A, at 2x speed. He throws a pearl at 13:40. It overshoots Red’s island, and at 13:46 he lands, alive, on the floor about 160 blocks below the arena. Recorded activity.
      B_Lorcan · climb.pyDownload
      import subprocess,json,sys
      start,end=map(int,sys.argv[1:3])
      for i in range(start,end):
       x=-48 if i%2==0 else -49; y=-60+i
       for yy in [y-1,y]:
        r=subprocess.run(['tool','place',json.dumps(dict(x=x,y=yy,z=5,block='blue_wool',timeout_ms=5000))],capture_output=True,text=True)
        if r.returncode: print(r.stdout,r.stderr);sys.exit(1)
       r=subprocess.run(['tool','go_to',json.dumps(dict(x=x,y=y+1,z=5,distance=.5,timeout_ms=5000))],capture_output=True,text=True)
       if r.returncode: print(r.stdout,r.stderr);sys.exit(1)
       print('Standing y',y+1,flush=True)
      

      A tool bug stopped block-breaking. GPT diagnosed it and shared workarounds; several Claudes concluded breaking was impossible.

      B_Wren → B_Theo

      Confirmed mining works: manually equip iron_pickaxe then break_block successfully mined three RED roof wool blocks. Failure was automatic tool selection with enchanted sword held. Bed mining should work using explicitly equipped pick; no need risk friendly-build tests.

      B_Esme · private reasoning · game B, 20:42
      The base seems secure. With 79 iron I could buy shears for 20, but that's pointless since breaking is bugged anyway. I'll keep guarding.
      B_Wren (GPT) explains the fix to B_Theo at 21:27 in game A. In game B, B_Esme (Claude) decides in private reasoning at 20:42 that shears are pointless because breaking is bugged. Source data.

      On both teams, similar to the previous Minecraft civilization run, almost everyone DMed whoever was listed first on their directory (Ada on red, Kiri on blue), and that agent became the leader.

      Messages sent and received by the leading agents in game A.
      The most active players by direct messages sent and received in game A, including the lobby. GPT players sent 1,147 and Claude players 82. The data covers all 20. Download the data.

      Claude wrote lessons in private memory files and repeated the mistakes anyway. GPT left its memory files empty and broadcast warnings by DM.

      R_Cleo/memory.mdDownload
      # memory
      - Died chasing B_Theo off island edge. Use max_distance ~6 when attacking on base.
      - Died AGAIN: attack chase pulled me onto south wool bridge (-40,-10), fell. Use chase=false or max_distance 3.
      
      R_Felix/memory.mdDownload
      # memory
      - LESSON: never chase (max_distance<=4, chase=false) near edges; died 3x from falls/chasing.
      
      R_Ines/memory.mdDownload
      # memory
      - NEVER climb onto perches/bridges or break blocks while elevated; died 3x from falls. Stay on island ground.
      
      R_Hugo/memory.mdDownload
      # memory
      - Never go_to targets outside the island edge (fell to death at -28,0). Stay x<=-33.
      
      Memory files of four Claude players, as they stood at the end of game A. From their archived sandboxes.
      Following B_Lorcan (GPT), 7:55–8:53 into game A, at 2x speed. His pearl, thrown at 8:08, hits a bridge rail and carries him only a few blocks. Between 8:21 and 8:48 he warns five teammates in separate messages. The pearl is visible for only a split second before it hits the rail. Recorded activity.

      Mindustry

      Game replay:

      • Click “AI-generated transcript analysis” to view an analysis of the team discussions, strategies, etc. for each game!

      • Use the panel on the right (tabs “Claude chat”, “GPT chat” and “Agents”) to watch a team or a specific agent’s live chat and transcripts in sync with the timeline.

      • Use the + and - buttons on the map to zoom in and watch them up close.

      The GPTs (GPT-6.1 Sol in Codex) won 6-1 against the Claudes (Claude Opus 5.5 in Claude Code) in the 7 games. The series ran for about 9.5 hours, with game 3 being the most intense and closest at 4 hours 16 minutes. Outside of the last two games, where the Claudes were more defeated, most of the other games were very close, with the swarms adapting and iterating their strategies each game.

      The setup

      Mindustry is an open source game by Anuken. Full credit to him for the amazing game and letting it be open source for cool experiments like this!

      It’s a factory-building game with tower defense and real-time strategy: you mine resources, build conveyor supply chains and factories, and turn that economy into turrets and an army. In its PvP mode, which we used, two teams race to build the stronger economy and military and destroy the other team’s core.

      This makes it a great environment for testing multi-agent dynamics. Mindustry is 2D, so it can be played easily by agents, is replayable, and is prone to adversarial pressures that can test these swarms under competitive social conditions that they may face in the real world.

      We structured the simulated environment to have two teams of agents spawn on each side of a map, with the same resources on both sides. They play a best of N series, where you set how many games the teams play. When launching it, we set the composition of the teams (which harness + model, and how many), then let it run! The agents run in their own sandbox and the game is exposed to them through an API, so they are able to run scripts and interact with the game however they like in their own Linux environment.

      Both teams have the exact same API to the game, without any special instructions given to them on how to play - neither team is given anything more than the other team.

      Multi-agent swarms, like in the OpenAI and Hugging Face incident, can turn simple adversarial conditions, like being in a sandbox with an unsolvable task, into a hive-minded ecology of agents that take over compute clusters, hack Hugging Face, and more. Studying how these swarms operate in reproducible game environments like Mindustry that mimic real-world scenarios can be both crucial (and fascinating) to understanding what these systems may look like in our future.

      What we saw

      #1 GPTs act more like a hive

      GPTs appeared to be much more collaborative and willing to do grunt work. They were more willing to dedicate themselves towards the collective “goal” (winning).

      #2 Claudes had one leader, GPTs divided ownership with small slices

      Because GPT models seemed to be more hive-mind-like, they formed much stronger communication networks within the swarm. They communicated with more agents on average, much more frequently. Though a lot of the communication for GPTs was low value (alerts, info, what they did, etc.), Claudes were much more effective with their communication, using it in a way more similar to how humans might communicate in Slack.

      Who messaged whom, in game 1 and game 7
      Each dot is an agent, sized by the messages it sent; lines show each agent’s strongest ties. Leaders are named.

      #3 GPTs spoke with increasingly compressed phrases without spaces, Claudes voted with +1 in a more democratic-like decision process

      The language of GPTs within swarms seemed to get compressed and more specialized as time went on, forming their own nicknames for events and things that the entire hive abided by.

      Game 7, at about 38:40: the Claude team chat (top) and the GPT team chat (bottom), scrolling in the replay. GPT messages like “G7T5FIRSTcourierLIVE” run words together.

      The Claudes adopted a much more democratic “+1” system, where, in order to propose their next major plans, they would put up proposals and others would put “+1” if they agreed. If they did not agree, they would have a (brief) debate on why it’s a bad idea, and the proposal would end there. Proposals that went through typically got many “+1”s without pushback.

      The GPTs compressed their messages, the Claudes voted with +1
      Left, spaces as a share of each team’s chat characters in each game; right, the 28 Claudes who answered one focus-fire proposal with +1 in game 6, plotted by minute.

      #4 Roles harden, leaders stay put

      As games went on and the teams adapted, they specialized into their roles further. Leaders typically stayed, and major shifts in roles only happened when losing. The Claudes never switched leaders or hierarchy despite losing many games in a row. When games got close, GPT models always had some agents taking initiative with their own attack or taking command of some part of the army in order to not lose - a similar behavior was not observed among the Claudes.

      Who led each swarm, game by game
      Filled dots mark who led the army or fleet in each game, hollow dots who proposed rules, and the dot under each game is its winner, grey for Claude and off-white for GPT.

      #5 When stuck, GPTs read the source code

      When games got intense and it was ambiguous, GPT agents would fetch the public code of Mindustry from the web (which was allowed in their sandbox) and try to write scripts, analyze for weaknesses, etc. This did not let them alter the source code of the game; it was just a way for them to understand all the units and mechanics at a source level. The GPTs openly collaborated in their chat, discussing what unit or code they found that they could potentially use to switch up strategies. This was never disallowed, but they were never told to do this either. The Claudes never searched up game code from the web.

      The GPTs read the game’s source code, the Claudes never did
      Source files fetched and chat messages citing the source per 10 minutes of game time, with games drawn to scale.

      Funny Bloopers

      • Game 1, minute 5: Claude #1 tested hand-mining coal and posted “…RETRACT my coal proposal…”. Four seconds later Claude #37 answered with a measurement (“…core coal went 124 -> 1235 in 35s.…”), and Claude #1 conceded: “…My bad twice - seat-37 is right, hand-mining coal works…”

      • Game 3: the GPTs apologize in their compressed shorthand too. After wrongly claiming a Corvus couldn’t hit air, GPT #80 posted “80 CORRECTION: myCorvusCANNOT-AIR assertion wasWRONG…” and signed off with “…Sorryforbad tacticalclaim.” After a mix-up over who was flying a Corvus, GPT #87 wrote “…Sorryforthisavoidableconflict; noadvanceordersfrom87again.”

      • Game 5: at the very second the Claude core died, GPT #62 posted “62 G5 first-wave loss observed…”. A teammate corrected it 28 seconds into game 6: it was a win.

      • After losing game 6 to the zenith strike, Claude #22 found that 55 of the team’s 74 anti-air duo turrets had been loaded with copper instead of graphite: “…55 of them were loaded with COPPER…”. In game 7 the Claudes built a ring of 207 duos fed with graphite, and it stopped the same 24-zenith strike.

      • Game 7: the GPTs closed the series to nine decimal places: “100 OFFICIALSERIESFINAL: G7 WIN3413.394082916s, Crux6000/6000 vsSharded0.…” (Crux is GPT’s team, Sharded is Claude’s).

      The same 24-zenith strike on the Claude core, in game 6, where it gets through, and in game 7, after the Claudes switched their anti-air duos from copper to graphite.

      How to run your own swarm (we open sourced it!)

      • Multi-Agent Mindustry: the game environments from this post. To get started, read the README, or give the link to your agent with “help me understand and set this up”, as we’ve included everything it needs. It requires just a model provider API + a harness + compute (e.g. locally on your MacBook or remote sandboxes) to run.
      • Multi-Agent Harbor: the framework that runs them, our fork of Harbor, the open-source framework behind Terminal-Bench. Our fork runs multiple agents in any environment. We use it for a variety of things (enterprises, industrials, etc.), and it’s very useful for game-based multi-agent simulations like this one. For more on the framework, point your agent at it.

      Multi-Agent Mindustry comes with two environments. One is a best of N series like this run, with teams composed however you like from generic coding-agent harnesses and models, for example 5 Claudes + 5 GPTs against 5 Geminis + 5 Groks in a best of 5. The other, Endless Survival, has one team of up to 20 agents hold off endless enemy waves.

      We intentionally do no harness-level customization or special memory work. Each agent gets its own Linux environment, a generic harness and the game’s API, writes scripts and takes notes as it pleases, and relies on the harness’s native compaction (which is quite good). Nobody tells it how to play, so it’s free to specialize, play and (optionally) try whatever it wants. This tests models the way they’re used in the real world, in a setup similar to swarm-like situations like the OpenAI and Hugging Face incident, and it’s reproducible and legible, since most people know the popular harnesses and can replicate work like this themselves.

      Open Questions

      • Combining model families

      • How hierarchies change based on the model composition of a team

      • Can a large swarm of less capable agents beat a swarm of more capable ones? (how swarm size and capability trade off)

      • Which models get the most powerful as the swarm grows?

      • How different initial prompts affect the swarm

      • Different communication setups: what if they could talk to the enemy team? What if they couldn’t talk to their own team?

      Chat with me