A function-centric architecture for a multiplayer-first web where humans, programs, and agents build together.
Everyone who's built with Lego knows the system:
This is our model for the internet.
| Lego | Internet | Properties |
|---|---|---|
| Bricks | Functions | Global, shared, content-addressed. Everyone uses the same set. |
| Instruction Booklets | Logs | Append-only sequences. Who applied what, when. Replayable. |
| Loose pieces / your creation | Context | Lives anywhere. Local, shared, private. Your material, your rules. |
The global brick collection. Shared by everyone.
Function : Context → Context
Every brick has a universal part number — its hash:
sha256:a1b2c3... → extracts text from documents
sha256:d4e5f6... → summarizes text
sha256:g7h8i9... → translates languages
sha256:j0k1l2... → makes decisions based on criteria
Properties:
When you and I both use brick sha256:a1b2c3..., we're using the same brick. Not compatible bricks. The same one.
The record of assembly. Step by step.
[
{ "brick": "sha256:a1b2...", "piece": { "local": "/my/doc.pdf" }, "builder": "alice", "step": 1 },
{ "brick": "sha256:d4e5...", "piece": { "prev": -1 }, "builder": "alice", "step": 2 },
{ "brick": "sha256:g7h8...", "piece": { "prev": -1 }, "builder": "bob", "step": 3 }
]
This says:
a1b2... onto her PDFd4e5... onto that resultg7h8... onto that resultThe booklet is the artifact. Want the creation? Follow the steps.
The material you're working with. Lives wherever you want.
Context is what bricks snap onto. But unlike the shared brick collection, context is sovereign:
{ "inline": "small data" } # right in the booklet
{ "local": "/home/me/private.txt" } # on your machine
{ "shared": "ipfs://Qm..." } # public, anyone can access
{ "private": "s3://mybucket/..." } # your cloud, encrypted
{ "peer": "alice:ref:xyz" } # on alice's machine (with permission)
{ "prev": -1 } # result of previous step
Your pieces. Your rules. The system just needs to know where to find them.
Anyone with hands. Or code. Or a model.
| Builder | What they do |
|---|---|
| Human | Picks bricks, applies them, records steps |
| Program | Picks bricks, applies them, records steps |
| Agent | Picks bricks, applies them, records steps |
Same operation. Same log format. Same bricks.
A person clicking a UI, a script running a pipeline, an agent reasoning about its next move — all doing the same thing: pick, snap, record.
Here's where it gets interesting.
Everyone pulls from the same collection. When Alice uses sha256:summarize... and Bob uses sha256:summarize..., there's no integration work. No API compatibility. No version mismatch. Same brick.
Multiple builders can write to the same booklet:
[
{ "brick": "...", "builder": "alice", "step": 1 },
{ "brick": "...", "builder": "agent-7", "step": 2 },
{ "brick": "...", "builder": "bob", "step": 3 },
{ "brick": "...", "builder": "agent-7", "step": 4 },
{ "brick": "...", "builder": "alice", "step": 5 }
]
Alice, Bob, and an agent building together. Taking turns. Handing off. No special "collaboration protocol" — just appending to the same log.
Alice's output becomes Bob's input. Bob's output becomes the agent's input. Context flows between builders like Lego pieces passed hand to hand.
alice:local/data ──▶ agent-7 ──▶ shared:ipfs://result ──▶ bob
Doesn't matter who's a human, who's a program, who's an agent. Context flows. Bricks snap. Booklets record.
This is what makes autonomy work.
An agent is just a builder. It:
No special runtime. No agent framework. Just: pick, snap, record.
Multiple agents can share a booklet:
[
{ "brick": "research", "builder": "agent-search", "step": 1 },
{ "brick": "analyze", "builder": "agent-reason", "step": 2 },
{ "brick": "draft", "builder": "agent-write", "step": 3 },
{ "brick": "review", "builder": "agent-critic", "step": 4 },
{ "brick": "revise", "builder": "agent-write", "step": 5 }
]
Agents calling agents. Passing context. Building together. The booklet is their coordination layer.
A brick can be an agent. Or invoke one.
sha256:abc123... → agent that researches a topic
sha256:def456... → agent that critiques an argument
sha256:ghi789... → agent that negotiates between positions
Agents as bricks. Composable. Snappable. Callable by anyone — human, program, or other agent.
The booklet is auditable. Every step visible.
Human: "What did the agent do?"
System: "Here's the booklet. Steps 1-47. Every brick, every context reference."
Human: "Roll back to step 23 and try a different brick."
Full visibility. Full control. The autonomous internet isn't a black box — it's a booklet you can read.
alice ──▶ agent ──▶ bob ──▶ agent ──▶ carol
Passing the build between builders. Each picks up where the last left off.
┌──▶ agent-1 ──┐
alice ───┼──▶ agent-2 ──┼───▶ merge ───▶ bob
└──▶ agent-3 ──┘
Fork the context. Multiple builders work simultaneously. Merge results.
alice ──▶ [ agent-outer [ agent-inner ]] ──▶ bob
Bricks that contain bricks. Agents that call agents. Composition all the way down.
┌──▶ agent-1 ──▶ proposal-1 ──┐
problem ─┼──▶ agent-2 ──▶ proposal-2 ──┼──▶ judge ──▶ winner
└──▶ agent-3 ──▶ proposal-3 ──┘
Multiple builders tackle the same problem. Another builder picks the best.
No central server. No platform. Just:
Bricks are shared. Booklets coordinate. Context lives where it lives.
| Property | How |
|---|---|
| Interoperable | Same bricks. No translation needed. |
| Composable | Bricks snap together. Booklets can reference other booklets. |
| Multiplayer | Any builder can append to any booklet (with permission). |
| Autonomous | Agents are just builders. They pick, snap, record like anyone else. |
| Auditable | The booklet is the complete history. Every step visible. |
| Sovereign | Your context lives where you choose. Your data, your rules. |
| Replayable | Same booklet = same result. Deterministic reconstruction. |
Bricks are shared. Booklets coordinate. Context is sovereign. Builders are interchangeable.
The internet becomes a multiplayer Lego table where:
Not a platform. Not a protocol. A shared construction system for autonomous, collaborative intelligence.