
Sandbox WASM avec application des capacités pour le code des agents IA. Les agents ne peuvent appeler que les outils explicitement fournis avec des contraintes définies. Système de fichiers virtuel en bac à sable, pas de réseau, pas d'évasion de shell. Un seul binaire, pas besoin de Docker ni de VM.
Ce dépôt est la source de publication du paquet Python amla-sandbox. Le développement a lieu dans le monorepo amlalabs ; ce dépôt est mis à jour lors de la publication. L'exécutable Rust qui se compile en amla_sandbox.wasm vit dans amla-sandbox-core ; le tag de version exact contre lequel ce paquet Python a été construit est enregistré dans .mirror-deps.json.
amla-sandbox est un bac à sable WASM avec contrôle des capacités pour le code des agents IA. Les agents ne peuvent appeler que les outils que vous fournissez explicitement, avec des contraintes que vous définissez. Système de fichiers virtuel en bac à sable. Pas de réseau. Pas d'évasion de shell.
pip install amla-sandbox
Pas de Docker. Pas de VM. Un seul binaire, fonctionne partout.
from amla_sandbox import create_sandbox_tool
sandbox = create_sandbox_tool()
# JavaScript
sandbox.run("console.log('hello'.toUpperCase())", language="javascript")
# Shell
sandbox.run("echo 'hello' | tr 'a-z' 'A-Z'", language="shell")
# With tools
def get_weather(city: str) -> dict:
return {"city": city, "temp": 72}
sandbox = create_sandbox_tool(tools=[get_weather])
sandbox.run(
"const w = await get_weather({city: 'SF'}); console.log(w);",
language="javascript",
)
Avec des contraintes de capacités :
from amla_sandbox import Sandbox, ToolCallCap, ConstraintSet, Param
sandbox = Sandbox(
capabilities=[
ToolCallCap(
method_pattern="stripe/charges/*",
constraints=ConstraintSet([
Param("amount") <= 10000,
Param("currency").is_in(["USD", "EUR"]),
]),
max_calls=100,
),
],
tool_handler=my_handler,
)
Voir la page PyPI et le répertoire examples/ pour la surface API complète, les intégrations de frameworks et le DSL de contraintes.
Le bac à sable s'exécute à l'intérieur de WebAssembly avec WASI pour une surface d'appels système minimale. En plus de l'isolation WASM, chaque appel d'outil passe par une validation des capacités ; l'accès est explicitement accordé, non implicitement disponible. Voir la Quick start ci-dessus et le README PyPI en amont pour l'explication complète et les compromis.
Pour la plupart des utilisateurs, l'installation depuis PyPI est recommandée ; la roue inclut le binaire WASM préconstruit. Si vous souhaitez construire la roue vous-même :
uv build
Pour régénérer l'artefact WASM inclus dans la roue, construisez-le à partir de amla-sandbox-core au tag épinglé dans .mirror-deps.json, puis placez le résultat dans src/amla_sandbox/_wasm/amla_sandbox.wasm avant d'exécuter uv build.
Voir CONTRIBUTING.md. Les pull requests faites sur ce miroir seront écrasées lors de la prochaine publication ; veuillez cibler le monorepo ou ouvrir un problème ici.
Le code du paquet Python est sous licence MIT. L'exécutable Rust WASM inclus est sous licence AGPL-3.0-or-later OU BUSL-1.1.