A Model-Authored Merry Tool Body Compiles, Runs Sandboxed, and Writes Back to Live State

Claim

In the eOS-Harness recursion domain running against DGD 1.7.9 plus eOSContinuum/eOS-kernellib, a language model authors the literal source text of a tool body in Merry -- the kernel layer's sandboxed LPC-dialect scripting surface -- and that source is compiled into the live runtime, bound on the recursion's context object, and executed against that object's property storage, all through the same admission chain used for hand-written source. Authorship is end to end: one exchange has the model write the tool body (delivered as a tool-call argument, so the source text in the reply is the model's), a second exchange has the model author the action (which tool, which arguments), and the scheduler runs the model-written code against live state. The written property is readable afterward from the context object; no container, no external policy engine, and no redeploy are involved.

Grounds

This is an Empirical Observation. The grounds are live runs 2026-08-08 and 2026-08-09 against a staged private instance, using a local-network OpenAI-compatible inference endpoint (oMLX) serving Qwen3-30B-A3B-Instruct-2507 (MLX 8-bit).

The admission chain (identical for hand-written and model-written source): new_object("/usr/Merry/data/merry", source) compiles the source through the Merry parse; the resulting script object is bound on the recursion's context object under a reaction-property key (merry:act:tool-<name>); run_merry(context, "tool-<name>", "act", args) executes it with $this resolving to the context and the model-supplied arguments as $-variables; Set($this, ...) inside the script forwards to the context's property store.

The authored run (2026-08-09, one recursion, two exchanges):

  1. The authoring exchange prompts the model with a compact Merry primer -- statements end with ;, the argument is $city, Set($this, "name", value) stores, return <expression>; returns, strings concatenate with + -- and offers a single tool, submit_tool_source, so the source arrives as a tool-call argument under the exchange's shape assertions (finish_reason == "tool_calls", non-empty tool_calls).
  2. The model's first and only attempt authored an 80-byte body, no prompt iteration:

text Set($this, "last_city", $city); return "The weather in " + $city + " is sunny.";

  1. The source was admitted through the chain above and bound as get_weather on the recursion's context.
  2. The action exchange offered get_weather as a callable tool for a weather question; the model called it with {"city": "Paris"}.
  3. The scheduler ran the model-authored script against the context: the frame closed with The weather in Paris is sunny., and query_property("last_city") on the context returned "Paris" -- the model-written Set had landed in the property store of a live object.

The sandbox negative control (2026-08-08, same admission chain, hand-written source): source calling clone_object -- a kfun outside the Merry surface -- ran into the sandbox's deny at execution, throwing function 'clone_object' not allowed in merry code, and the denied operation did not occur. The boundary is enforced when the script fires, not at load (the Merry compiler resolves denied kfuns to sandbox shadow methods whose bodies throw), so admitted-and-bound is not the same as allowed-to-act -- the run surface is where containment holds.

What the evidence establishes:

What the evidence does not establish:

What Would Revise It

Sources

Relations