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.
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.
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.
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.
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.
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.
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.
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 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.