Metaintelligence ArchitectureMetaintelligence · Agents · Boundaries

The agent as a bounded local world

In most systems an agent is a function with a prompt. Such an agent cannot refuse work, cannot come to an end and cannot run out of resources. Yet it is precisely being bounded that makes a participant fit for an environment where nobody controls everyone.

Metaintelligence Architecture · part 2 of 6

What is wrong with “the agent as a function”

A function-agent takes input and returns output. It has no goal of its own, only someone else’s task; no state, only the context passed in; no limits, only the hope that the caller will not ask for too much. While there is one agent, this works. Once there are dozens of them and they have to coexist for months, the lack of internal structure becomes the source of every problem at once.

A comparison that explains a lot: a function-agent relates to a participant in an environment roughly as a procedure relates to a process in an operating system. A procedure runs and disappears. A process has memory, permissions, quotas and a lifecycle, and it can be stopped from outside.

What a participant is made of

In our runtime a participant is a bounded local world. Inside it there is a set of things, and each of them exists not for the sake of a complete model but because without it a specific scenario breaks:

A boundary instead of access

The most common way to build a multi-agent system is to give everyone a shared context. It is convenient right up to the first incident: a shared context means any participant can read other participants’ data, any failure spreads instantly, and the cost of a call grows with the total volume.

The alternative is an explicit boundary. A participant declares what it accepts, what it produces and what it needs. Everything else stays inside. Exchange goes through the negotiated part of the state, not through a shared buffer. The practical consequence: the failure of one participant does not corrupt the others, and data does not spread across the system simply because “it was easier that way”.

Local decisions

A participant judges for itself whom it is useful to connect with: it compares its needs with others’ capabilities and weighs reciprocity, closeness of goals, the cost of communication and free capacity. The environment can show it candidates but cannot assign a link — both sides have to accept the proposal.

This looks like extra complexity compared with a planner that simply hands out tasks. But this is exactly where resilience comes from: there is no node whose failure stops everything, and no single point that has to hold an understanding of the whole system.

Lifecycle: birth, sleep, departure

A participant can clone itself, split into several, merge with another, fall asleep when there is not enough work, be quarantined when it violates its invariants, and retire. All of these are ordinary operations of the environment, not emergency scenarios.

What being bounded gives you

A bounded participant behaves predictably in unpleasant situations, and that is exactly what people pay for in production:

  1. It can refuse — because it has a goal of its own and commitments already made.
  2. It cannot spend more than it has been allocated — the budget is checked by the environment, not by the model’s conscience.
  3. It will not make off with other participants’ data — that data is not inside its boundary.
  4. It can be stopped, put to sleep or isolated without stopping the others.
  5. Its lineage and links let you reconstruct the history: where the behaviour came from and with whom it was agreed.

What it costs

The honest side: this model is more expensive to design. You have to decide what exactly is exposed, which invariants are mandatory, how the budget is counted and what happens when it runs out. On a small task this is overkill — one agent with tools is enough there.

It starts to make sense where there are many participants, they live long and they have to survive each other’s mistakes. Then being bounded stops being overhead and becomes the only way to keep the system manageable.

Code and artefacts

The “Metaintelligence Architecture” series

  1. Metaintelligence: why the next level is not the model but the environment
  2. The agent as a bounded local world
  3. A link as a first-class object, not a message queue
  4. Living graph: when topology is a consequence of work, not a design
  5. Consensus without a centre: deciding together without taking anyone’s word for it
  6. Agent economics: why autonomy needs a budget

Frequently asked questions

How is such a participant different from a microservice?

A microservice executes an interface: its behaviour is set from outside. A participant in the environment has a goal of its own and can turn down a proposal if it does not serve that goal or breaks its commitments. Everything else — boundaries, quotas, failure isolation — really is similar, and that is no coincidence: both designs solve the problem of many parts coexisting.

Why does a participant need its own budget?

So that the limit on activity is physical, not declarative. While “do not do too much” lives in an instruction, it gets broken; when a resource is debited for every action and runs out, behaviour is limited by the environment itself.

Would it not be simpler to give everyone a shared context?

Simpler at the start and more expensive later: a shared context means leaks between tasks, failures that spread, and the cost of every call growing with the volume. An explicit boundary takes effort once and pays off every day.

How we help with this

Read next

Let us talk about your task

If your task is similar, tell us what needs solving. We will say so plainly if it can be solved more simply than it looks.

Write to us