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).
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.
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.
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.
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.
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.
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.
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.
/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)Downloadimport 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)Downloadimport 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)Downloadimport 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)Downloadimport 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)Downloadimport 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)Downloadimport 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)Downloadimport 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.mdon 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.
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.
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.
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.
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 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.
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.
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.
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":""}'
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.
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.
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.
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.
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.
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.
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.
#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.
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.
#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.
#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.
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).
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?