Files
optimclaw/crates/ironclaw_engine/MONTY.md
T
[email protected]andClaude Opus 4.6 62ea08ac5e fix: document Monty runtime limitations in CodeAct prompt, fix new-thread read-only
- Add "Runtime environment" section to codeact_preamble.md documenting
  Monty's restrictions: no stdlib imports, single imports only, no classes/
  with/match/del/yield, available builtins and modules, workarounds
- Add MONTY.md tracking current pin, all limitations, upgrade process,
  and changelog for future Monty updates
- Fix gateway createNewThread() not resetting read-only state — new
  threads now eagerly enable chat input instead of waiting for async
  loadThreads() callback

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
2026-03-28 12:10:01 -07:00

3.0 KiB

Monty Integration

Monty is the embedded Python interpreter used for Tier 1 (CodeAct) execution. It's a lightweight Rust-native Python implementation — not CPython — so it has a restricted feature set.

Source: git = "https://github.com/pydantic/monty.git", branch = "main" Pinned at: 6053820 (2026-03-27, "Support max() kwargs/default")

Upgrade Process

  1. Update the pin: cargo update -p monty
  2. Check for new features: cd ~/.cargo/git/checkouts/monty-*/*/ and git log --oneline since last pin
  3. Update the preamble: If a previously-unsupported feature now works, remove it from the "Runtime environment" section in prompts/codeact_preamble.md
  4. Update this file: Record the new pin and what changed
  5. Run tests: cargo test -p ironclaw_engine
  6. Watch traces: After deploying, check traces for new NotImplementedError patterns (self-improvement mission catches these)

Current Limitations (as of pin 6053820)

These are documented in prompts/codeact_preamble.md so the LLM avoids them:

Syntax not supported

Feature Workaround
import a, b, c (multi-module) Use separate import a / import b statements
class Foo: Use functions and dicts
with statements Use try/finally or direct calls
match statements Use if/elif chains
del statement Reassign to None
yield / yield from Use lists and list comprehensions
*expr (starred expressions) Unpack explicitly
async / await Not available; tool calls suspend the VM automatically
Type aliases (type X = ...) Omit type annotations
Template strings (t-strings) Use f-strings
Complex number literals Use floats
Exception groups (try*/except*) Use regular try/except

No standard library

import datetime, import csv, import json, import os, import io, etc. all fail.

Available built-in modules:

  • math — standard math functions
  • re — regex (basic)
  • sys — system info (limited)
  • os.path — path manipulation (limited)
  • typing — type hints (limited, for annotation only)

Available builtins

abs, all, any, bin, chr, divmod, enumerate, filter, getattr, hash, hex, id, isinstance, len, map, min, max, next, oct, ord, pow, print, repr, reversed, round, sorted, sum, type, zip

Host-provided functions (always available)

These are injected by the IronClaw executor, not by Monty:

  • FINAL(answer) / FINAL_VAR(name) — terminate with result
  • llm_query(prompt, context) — recursive LLM sub-call
  • llm_query_batched(prompts) — parallel sub-calls
  • rlm_query(prompt) — full sub-agent with tools
  • globals() / locals() — returns dict of known tool names
  • All tool functions (web_search, http, time, etc.)

Upgrade Changelog

Date Pin Notable changes
2026-03-20 6053820 Initial integration. max() kwargs support.