Kopium

An agent whose only tool is a Koru interpreter.

Kopium is a vocabulary-parametric agent runtime. Hand it a register block and it becomes an interpreter for that world — the wire grammar, the prompt, the enforcement table, and the growth mechanism are all derived from the declaration. One declaration, four surfaces; the same binary runs a notes agent, a calculator, an airline agent. The vocabulary is a parameter, not a fork.

The shape of it

say: Booked — your flight is confirmed, economy.
note: Need verify user and reservations. First get user details.
vocabulary()
get-reservation-details(reservation_id: "K67C4W")

One wire turn — say: reaches the user, note: is observer text, calls are bare. Verbatim from a bench receipt.

Derived, Never Authored

The restricted wire grammar, the vocabulary() listing, and the enforcement table are generated from the same register block — the prompt and the enforcement are the same bytes, so a refusal can never drift from the advertised surface.

The Gate Teaches

There is no system message. The protocol arrives as transcript entries and the enforcer's verdicts do the teaching — a refusal quotes the offending text ('tool_call: …' is not wire), states what was delivered, and names the legal forms. Ten consecutive strikes end the session loudly rather than let a model narrate progress it never made.

Every Turn Is Receipted

call_NNN.json holds the exact request — the full transcript — and resp_NNN.txt holds the raw wire text the model emitted back. When a run fails, the last emission is on disk: every dead end is classifiable, not just a zero.

Heads Are Interchangeable

The same agent runs headless under a benchmark marshal and behind a vaxis TUI — the wire does not care what renders it. A def-class line defines a new flow into the session's own environment: the definition is the registration.

Measured, honestly

Against the benchmark's own harness

On tau2's airline bench — simulated users arguing through cancellations, rebookings, and split payments — the same model, same tasks, same seed: the wire arm scored 23/29 against the stock JSON-schema agent's 25/29, at ~85% of the billed cost, with zero protocol deaths and every win a real database mutation.

Losses that name themselves

The six losses decompose rather than sit as zeros: three re-flew to wins unchanged (single-draw noise), and three reproduce as model-reasoning failures — a wrong communicated total, a refund pinned to the wrong payment id, a confirmation-ask that stalled a booking. The wire carried every call correctly in each.

No hidden channel

No system role, no tool schema, no wrapper grammar — the model's context is the transcript: the domain policy, a five-line wire demonstration, and the vocabulary result. Everything it knows about the protocol, the gate taught it in-band.