Note
Hack Monty Round 3 is live - the last round before Monty V1. See pydantic.dev/monty for details.
Monty runs Python written by a model with no container, VM or sandboxing service in the loop. Creating a sandbox and running ten commands in it takes 5 ms (Docker: 900 ms, a sandboxing service: 1900 ms), a paused interpreter serialises to bytes you can resume later, and memory, time and recursion limits are enforced by the VM itself. Filesystem, environment variables and network do not exist inside the sandbox: it reaches the host only through the functions and mounts you pass in.
Documentation: pydantic.dev/docs/monty
uv add pydantic-monty # Python
npm install @pydantic/monty # JavaScript / TypeScript
cargo add monty # RustThe commercial Full Monty runs the same workers as a container image.
The code string is what a model writes when asked how long a bar of chocolate could power a lightbulb:
from pydantic_monty import Monty
code = """
kcal = nutrition('chocolate bar')['kcal']
hours = kcal * 4184 / (bulb_watts * 3600)
print(f'a chocolate bar powers a {bulb_watts} W bulb for {hours:.1f} hours')
"""
with Monty() as pool:
with pool.checkout() as session:
session.feed_run(
code,
inputs={'bulb_watts': 10},
external_lookup={'nutrition': lambda food: {'kcal': 230}},
)
#> a chocolate bar powers a 10 W bulb for 26.7 hoursnutrition ran on the host and the sandbox saw only its return value.
- Introduction with the latency measurements
- Comparison to alternatives: Docker, Pyodide, WASI, sandboxing services
- Getting started with Python, JavaScript or Rust
- Security model, resource limits, snapshots, the Python subset
docs/: the source of the documentation site
Monty runs Code Mode in Pydantic AI. Community bindings: gomonty (Go) and dart_monty (Dart / Flutter).
The Pydantic Stack is everything you need to ship production-grade AI agents:
- Pydantic AI - Type-safe agent framework
- Pydantic Logfire - AI-first, full-stack observability
- Logfire AI Gateway - Unified LLM proxy