Inspiration

Aid still needs to reach a clinic when the phone signal disappears. We took the Neptune North brief about agents working together through communication failures and asked what that would mean for a delivery carrying food for malnourished children.

That led us to two connected problems: keeping supplies moving, and knowing what happened to them along the way. We also wanted to question how much information a driver actually needs. Carrying a whole distribution network on one phone makes that phone a tempting target.

What it does

Runners is a simulation of an aid delivery network around Hawassa, Ethiopia. Drones, motorbikes, vans and boats each have their own agent. They make local decisions, pass requests between nearby vehicles and carry messages until they can forward them. When the network goes down, they keep working.

Each crate has an encrypted manifest. The crew gets the next step, while the destination clinic can open the manifest. At every hand-off, the receiving vehicle weighs the crate and signs a receipt. If the weight has dropped, the Leak Finder traces the discrepancy to the previous holder's part of the journey. The crate carries its receipt history, so this check can happen offline. Once communication returns, the receipts merge into an audit trail.

The demo lets you compare Runners with our central-dispatch baseline using the same seed, requests and events. You can cut the network, simulate a missing 1.2 kg of cargo, inspect a compromised device and open the auditor's glass-box view. The point is to make the trade-offs visible instead of asking people to take our word for them.

The geography is real; the deliveries, clinic requests, theft events and results are simulated. The demo does not describe theft at any real facility in Hawassa.

How we built it

We built the simulator in TypeScript with Vite and rendered the map in three.js. OpenStreetMap supplies the roads and places, Copernicus DEM supplies elevation through Open-Meteo, and Sentinel-2 cloudless imagery supplies the backdrop. The map assets are bundled, so the demo works offline once installed.

Agents act on their own observations and messages. A test checks that agent code does not import the simulator, which helps keep us honest about what an agent can know. A seeded engine applies actions in a stable order so runs are reproducible.

For the security layer, we used the browser's WebCrypto API: P-256 ECDH and AES-GCM for sealed manifests, and ECDSA signatures for receipts. The ledger verifies receipts as they arrive and merges them as a union. Chart.js shows the comparison results, and Vitest covers the core behaviour.

Challenges we ran into

Reproducibility was trickier than expected. Crypto operations are asynchronous, but their completion order cannot be allowed to change the simulation. We collect each tick's actions and apply them in sorted order.

Offline hand-offs were another awkward case. A vehicle can drive out of range before the other side finishes signing. We made the receiver's signature essential and the giver's countersign optional, and kept the receipt chain with the crate so a weight mismatch can be checked immediately.

We also had to make routing work around actual roads and a lake while keeping two simulations running side by side on one laptop.

Accomplishments that we're proud of

The most satisfying moment in the demo is a missing-weight alert appearing at the next hand-off while the network is still down. The vehicles do not need to wait for a central server to notice something went wrong.

We're also pleased with the device-breach comparison. Each carrier holds the information its role needs: vans know the stores they collect from, while bikes and drones don't. Child records stay at the clinic. Building the comparison on matching seeded runs made these differences much easier to inspect.

What we learned

Privacy starts with deciding what a device needs to know. Keeping unnecessary data off it matters as much as encrypting what remains.

We also learned to be honest about disconnected systems. Two isolated groups can serve the same request, so we track duplicates rather than promise exactly-once delivery. Getting everyone back to a consistent receipt history is a large part of making offline cooperation useful.

What's next for Runners

We'd like to move from simulated agents to phones, with keys protected by hardware keystores, and test the assumptions with an organisation running nutrition deliveries. We'd also like to add temperature readings to receipts so the same chain of custody could help investigate a broken vaccine cold chain.

Before any real deployment, the routing, weighing process and threat model would need testing with the people who would actually use them.

Data credits

Map data: © OpenStreetMap contributors (ODbL). Elevation: Copernicus DEM via Open-Meteo. Imagery: Sentinel-2 cloudless 2020 by EOX IT Services GmbH, containing modified Copernicus Sentinel data (CC BY-NC-SA 4.0).

Built With

Share this project:

Updates

Submission history