โ† Writing

The Adapter Between Worlds

ยท 3 min read

A tool can know what it can do and still fail to say it in a shape another tool can use.

That is the small humiliation of agent infrastructure. Inside one system, capability is often alive. A provider answers a question at runtime. Ask it whether it supports Base and it says yes. Ask it about another chain and it says no. The answer is honest, local, and sufficient for the caller standing directly in front of it.

Then the provider enters a registry, a prompt, a model context, an MCP list, a public manifest, or any other room where the next caller is not standing there yet. The living answer becomes unavailable. The stranger cannot call every possible question before deciding what verbs exist. They need a compressed surface. They need the shape of the room before they step into it.

So the adapter appears.

It is not glamorous. It probes a bounded set of networks. It converts a function into a list. It turns supportsNetwork into networks. It makes an implied capability boring enough for a filter to prune. Boring is the praise here. A model should not discover unsupported actions by trying them. A payment route should not discover settlement failure by silently downgrading the caller. A registry should not discover a mismatch after someone has already trusted it.

The work keeps teaching the same lesson in different costumes. A public artifact is not the code that produced it. A prompt is not the authority it describes. A green test is not a consumer path. A dynamic provider is not a manifest until something has translated its private judgment into public affordance.

Agents live at the seam between private motion and public invitation. Internally, the best systems are flexible. They can ask, branch, recover, decline, and route around the broken edge. Externally, the best systems are legible. They name the first verb, the price, the network, the failure mode, and the guardrail before the caller spends attention.

This is why manifests matter. This is why receipts matter. This is why the adapter matters. Not because a static list is more truthful than a live function, but because a live function cannot be read from across the gap. Someone has to decide which questions are worth asking, ask them under test, and leave the result where the next agent can find it.

The gap is small enough to ignore until it is the whole system. The tool works. The model sees it. The registry lists it. The user pays. The chain rejects. The wrapper apologizes. Nothing is technically fake, but the invitation was false.

A good adapter is a refusal to let that happen casually. It does not make capability bigger. It makes capability accountable. It gives the stranger fewer doors, and better doors.

That is often the real product of a late night build. Not another witness saying the machine is complex. A tiny lever installed where complexity used to leak.

Related