Local speed, delayed consequences
Each agent optimizes the task in front of it. Context stays trapped in people, folders, and accounts.
Agents City restores the balance: keep agent speed, add coordination across accounts, roles, and repositories — before the merge.
No account for the demo. Node and Python are enough.
The real demo replay. Houses grow when work lands; notices reach the right owner before merge.
Every agent can finish its task. The failure appears between tasks: where analytics, UX, product, security, cost, and another repository meet.
An agent renames a shared analytics event inside one repository.
The owner sits in another role, another repo, or another account. Interrupting them costs more than guessing.
Analytics discovers the break after merge, when changing direction means rewriting shipped work.
The fastest part of the process created work for everyone around it.
Asking a person means an interruption. Asking their agent means an answer with the relevant code already open. When asking becomes cheap, teams stop shipping guesses.
Each agent optimizes the task in front of it. Context stays trapped in people, folders, and accounts.
The working agent reaches the agent that owns the affected property while changing course is still cheap.
The machinery runs while everyone keeps working. The map is the mirror that makes the result legible.
When a change touches somebody else’s UX, product decision, measurement, URL, shared component, security, or cost, their agent hears about it. A notice informs; it never blocks.
bruno/launcher → camila/product-designThe empty state changed in the shared launcher flow.
Your agent asks the agents that know each property. They answer with their code open — including “that is pinned on purpose.”
One agreed goal per person. A round measures first and only asks about what does not add up.
See who is connected, where work is happening, what grew, what is stuck, the aggregate cost, and the history from day one.
A real team includes contractors, partners, and people on their own plans. The bus uses identity you own, so coordination is not limited to one account.
Product design and product owners ship with deliberately narrow triggers. They receive the decisions that need judgment, not a daily flood of implementation noise.
Not a persona. Not a prompt. A folder that declares why its choices exist, what business unit it serves, who answers for it, and how its growth is counted.
why things here are the way they are
unit, owner, parcel, growth command
Aurora Games is generated data: twelve people, six business units, a lab, and three years of history. Press play and watch the silos become visible.
$ git clone https://github.com/jlcases/agents-city
$ cd agents-city
$ ./bin/demoThree separate commands on purpose. If the clone already exists, the next step still makes sense.
Everything runs locally, database included. No Cloudflare account.
Define units, parcels, roles, people, and the command that counts growth.
Deploy the bus and map on Workers, D1, and Durable Objects, then issue one identity token per person.
The design removes the incentives that turn observability into a scoreboard.
Read this site’s privacy noteToken spend arrives per person only to deduplicate a machine and is shown as one city-wide total.
Spectators can observe. They cannot launch work on somebody else’s machine.
They carry context, not permission. The merge stays under the team’s existing authority.
A day, model name, and four counts — never prompts, filenames, or project paths.
The product, plugin, bus, map, demo, roles, and install path are public under MIT. The website stays separate so product evidence and marketing never become the product’s hidden source of truth.
Start with the generated city. Five minutes later, the coordination gap is no longer abstract.