Run LLM-generated Python safely from Go — no containers, no CGO, no subprocess.
A pure-Go wrapper around Pydantic's Monty Python interpreter, compiled to WebAssembly and loaded via wazero. Your Go agent writes Python code, monty-go executes it in a sandboxed WASM instance with sub-millisecond startup, and pauses whenever the code calls an external function so your Go code can handle it.
go get github.com/fugue-labs/monty-go
LLMs work faster, cheaper, and more reliably when they write code instead of making sequential tool calls. Instead of:
Agent → tool_call("search", {query: "weather london"}) → result Agent → tool_call("search", {query: "weather tokyo"}) → result Agent → tool_call("compare", {a: result1, b: result2}) → result
The LLM writes:
london = search ( query = "weather london" ) tokyo = search ( query = "weather tokyo" ) compare ( a = london , b = tokyo )
One model call instead of three. The Python code calls your Go functions, Monty pauses at each call, your Go code executes it, and Monty resumes. No containers. No sandbox services. No exec() . Just a 2.9MB WASM binary embedded in your Go binary.
For motivation, see:
Quick Start
... continue reading