- Interpreter Python ringan berbasis Rust yang dirancang untuk menjalankan kode buatan AI dengan aman, menghilangkan kompleksitas dan latensi sandbox container
- Sepenuhnya memblokir akses ke filesystem, environment variable, dan jaringan, dan hanya mengizinkan pemanggilan fungsi eksternal yang ditentukan pengembang
- Menawarkan waktu startup di bawah 1 mikrodetik dan performa eksekusi yang mirip CPython, serta bisa dipanggil dari Rust, Python, dan JavaScript
- Status eksekusi dapat disimpan dan dipulihkan sebagai snapshot pada level byte, sehingga dapat dihentikan dan dilanjutkan antarproses
- Akan menjadi penggerak fitur Code Mode di Pydantic AI, dan digunakan sebagai komponen inti untuk menjalankan kode Python yang ditulis LLM dengan aman
Ikhtisar Monty
- Monty adalah interpreter Python eksperimental yang ditulis dalam Rust, sebagai alat untuk menjalankan kode buatan AI dengan aman
- Menghindari biaya, latensi, dan kompleksitas sandbox berbasis container, serta memungkinkan kode Python yang ditulis LLM dijalankan secara langsung
- Waktu startup berada di kisaran beberapa mikrodetik, jauh lebih cepat dibanding container umum yang memerlukan ratusan milidetik
- Kemampuan yang tersedia
- Mendukung eksekusi sebagian sintaks Python, termasuk static type checking berbasis type hint
- Akses ke host diblokir sepenuhnya, dan pemanggilan fungsi eksternal hanya dimungkinkan untuk fungsi yang secara eksplisit diizinkan pengembang
- Dapat dipanggil dari Rust, Python, dan JavaScript, serta memiliki fitur bawaan untuk pelacakan dan pembatasan penggunaan resource
- Mendukung pengumpulan stdout/stderr, eksekusi kode asinkron, serta penyimpanan dan pemulihan snapshot
- Keterbatasan
- Standard library yang dapat digunakan saat ini hanya
sys, typing, asyncio, dataclasses(akan datang), dan json(akan datang)
- Definisi class dan pernyataan match masih belum didukung
- Library pihak ketiga tidak didukung
- Tujuan desainnya hanya satu, yaitu menjalankan kode yang ditulis agen dengan aman
Integrasi dengan Pydantic AI
- Monty akan menjalankan Code Mode milik Pydantic AI
- LLM menulis kode Python alih-alih melakukan tool calling, lalu Monty mengeksekusinya dengan aman
- Dalam contoh, didefinisikan tool berbentuk fungsi seperti
get_weather dan get_population, lalu LLM menulis kode untuk memanggilnya
Perbandingan dengan teknologi alternatif
- Monty memiliki kelengkapan bahasa yang terbatas, tetapi unggul dalam keamanan, kecepatan, dan kesederhanaan
- Latensi startup 0.06ms, gratis, mudah dipasang, dan mendukung fitur snapshot
- Ringkasan perbandingan dengan teknologi lain:
- Docker: lingkungan CPython penuh, keamanan baik tetapi latensi startup 195ms
- Pyodide: berbasis WASM, keamanan lemah dan latensi startup 2800ms
- starlark-rust: bahasa sangat terbatas, cepat tetapi berbeda dari Python
- layanan sandboxing: keamanan kuat tetapi mahal, lambat, dan konfigurasi rumit
- YOLO Python(exec/subprocess): cepat tetapi tanpa keamanan sama sekali
- Monty menyediakan lingkungan Python aman untuk eksekusi kode AI melalui fitur kontrol akses file, pembatasan resource, dan penghentian/pelanjutan berbasis snapshot
1 komentar
Komentar Hacker News
Saya sempat menjalankan versi yang dibangun dengan WebAssembly. Mereka juga membuat web playground untuk dicoba langsung
Saat ini memang belum ada dukungan class, tetapi ketika LLM mencoba memakai class, ia melihat error lalu menulis ulang sendiri menjadi kode yang tidak memakai class
Tulisan yang merangkum proses build ada di sini
Kekuatan agen terminal justru ada pada akses jaringan dan filesystem, jadi kalau begitu sandbox container terasa seperti perluasan yang lebih alami
Typescript, C#, dan Python semuanya berjalan tanpa masalah
Ini mengingatkan saya pada masa dulu memakai Mercurial sebelum pindah ke Git. Waktu itu Git sedang tren sehingga semua orang tampak memakainya, tetapi menurut saya UX Mercurial jauh lebih baik
Sekarang semua orang menulis agent
execdengan Python, tetapi saya merasa TypeScript/JS lebih cocok. Lebih cepat, lebih aman, dan berkat tipe, kepadatan informasinya juga lebih tinggi. Tapi sepertinya kali ini pun saya akan kalahcsv/pandas, dll.)Secara pribadi saya lebih suka sistem tipe statis di TypeScript, tetapi dari sisi kecepatan maupun keamanan, kedua bahasa itu kurang lebih setara
Python punya ekosistem pemrosesan data yang matang, dan dengan alat seperti Pyodide atau ty, masalah keamanan juga bisa dikurangi
Sekarang bahkan NVIDIA secara resmi mendukung penulisan kernel dengan Python
Proyek ini adalah pendekatan yang menarik terhadap masalah sandboxing. Dulu ada eksperimen bernama jsrun yang menanamkan V8 ke dalam Python untuk menjalankan JS dengan aman
Monty tampaknya punya tujuan serupa. Memulai dari interpreter yang minimal cocok untuk workload AI, tetapi menangani ekor panjang sintaks Python bukan hal mudah
Titik pentingnya adalah menemukan keseimbangan: mengurangi permukaan fitur demi keamanan dan prediktabilitas, sambil tetap menyediakan cukup kemampuan untuk menangani kode kompleks yang dihasilkan LLM
Cerita yang agak berbeda, tetapi ini mengingatkan saya pada buku Monty Roberts, The Man Who Listens to Horses.
Isinya tentang mempelajari bahasa hewan, dan ada tautan buku serta video
Deskripsi “menjalankan kode Python yang ditulis LLM dengan aman pada kecepatan super tinggi” terasa menarik.
Hanya saja, runtime berbasis Rust seperti
uvpun minimal butuh sekitar 10 ms, jadi skala mikrodetik tampak sulitMeski begitu, ide interpreter mini tanpa pustaka standar ini bagus. Dari sudut pandang sandboxing AI juga terasa baru, dan saya tidak menyangka hal seperti ini akan keluar dari Pydantic
uvadalah runtime yang ditulis dengan RustSaya merasa daripada mendaur ulang bahasa yang sudah ada, akan lebih baik membuat bahasa ketat khusus AI
AI memahami spesifikasi dengan baik, jadi tidak membutuhkan sintaks longgar seperti manusia.
Justru bahasa yang memaksakan struktur presisi dan format yang konsisten akan lebih cocok.
Saya sendiri sedang bereksperimen dengan bahasa seperti itu, karena menurut saya generasi kode AI bisa menuntut disiplin yang lebih tinggi daripada manusia
Jauh lebih realistis membatasi model yang sudah mahir Python dengan aturan seperti “pakai fungsi ini saja”
Poin “gangguan kecil (papercut)” yang disampaikan jstanley memang benar, tetapi di sisi lain, saat menjalankan kode buatan AI dalam skala besar, risiko keamanan jauh lebih besar
Membuka fitur seperti file I/O, jaringan, dan subprocess ke CPython penuh itu berbahaya
Tetapi pembatasan class memang terasa aneh. Itu tidak ada hubungannya dengan keamanan, hanya membuat kode jadi lebih berantakan.
Mungkin ini pendekatan “mulai dari fitur minimum lalu diperluas bertahap”
Daripada meniru seluruh fitur CPython, pendekatan membuat interpreter minimal yang hanya dibutuhkan kode AI terasa menarik
Runtime penuh punya permukaan serangan yang terlalu luas, tetapi subset yang terbatas lebih aman
Strategi memanfaatkan umpan balik error agar LLM beradaptasi sendiri dengan sintaks terbatas juga terasa realistis.
Dalam kebanyakan skenario penggunaan tool, metaclass atau dynamic import memang tidak dibutuhkan
Pertanyaan sederhana, tetapi apakah tidak cukup membatasi system call dengan seccomp?
Jika ingin memblokir akses file, bukankah cukup memblokir syscall terkait? Saya penasaran kenapa perlu interpreter terpisah
Jika sejak awal mulai dari runtime yang sangat sederhana, permukaan serangannya kecil dan jauh lebih aman
Proyeknya sendiri masuk akal, tetapi frasa “tool super cepat untuk AI” tetap terasa lucu
Kecepatan berpikir AI sendiri sangat lambat, jadi secepat apa pun eksekusi kodenya, pengaruhnya pada kecepatan yang benar-benar terasa tidak akan besar
Rasanya seperti mengantar barang bersama rekan kerja di sebelah yang bergerak dengan kecepatan gletser