Changelog

Follow new updates and improvements to jhansi.io.

June 18th, 2026

Two views:

  • Active β€” every sandbox still alive (within TTL, not deleted)

  • History β€” all sandboxes ever, paginated, newest first

Click any sandbox to drill into its runs: timing, exit code, and errors per execution.

No setup, no external dependencies β€” it's served straight from Petri and works fully self-hosted/offline. Open http://localhost:8000/dashboard and it's there.

This builds on v0.9's observability (the run model + metrics) β€” now you can actually see it, not just query it.

June 18th, 2026

Three new commands ship with the SDK.

jhansi watch .
Creates a sandbox, uploads your project files, writes the sandbox ID to .jhansi. Done. Terminal is yours.

jhansi exec "make run"
Reads .jhansi, checks if files have changed, syncs only if needed, then runs your command. Pass anything β€” pytest, python main.py, make run.

jhansi unwatch
Tears down the sandbox, deletes .jhansi. Explicit opt-out only.

Sandboxes survive terminal sessions. If one expires, exec silently recreates it and resyncs. You never touch a sandbox ID.

June 11th, 2026

Every execution now leaves a trace. jhansi.io gains a full run model β€” structured results, persistent history, and a metrics endpoint so you can see exactly what's happening inside your sandbox.

What's in it:

  • Structured execution results β€” AI agents now receive typed SSE events. output events stream lines in real time. A done event closes the stream with exit code, duration, and the last error line on failure. No more text parsing.

  • Run history β€” every execution is stored. Exit code, duration, error, and full output captured per run. Never lose what ran.

  • Sandbox history β€” sandboxes are soft-deleted, not hard-deleted. Full history preserved.

  • Agent tracking β€” tag sandboxes with agent and created_by at creation time. Know which AI agent created what.

  • Metrics endpoint β€” GET /v1/metrics returns live counts: active sandboxes, total runs, success rate, average duration, broken down by agent.

  • Rolling log retention β€” PETRI_LOG_MAX_MB caps log storage. Oldest logs auto-evicted when the limit is hit.

June 10th, 2026

jhansi now ships with an MCP server, making Petri natively usable by Claude Code, Cursor, Windsurf, and any MCP-compatible agent.

What's new

pip install jhansi now includes an MCP server. Three tools are exposed: create_sandbox, exec_code, and delete_sandbox. Works with any MCP-compatible AI coding agent. Configurable via JHANSI_BASE_URL β€” point it at your own Petri instance.

How to connect (Claude Code)

claude mcp add jhansi --scope user --env JHANSI_BASE_URL=http://localhost:8000 -- python -m jhansi.mcp_server

Then just ask your agent to run code in a sandbox.

June 10th, 2026

Execution output now streams in real time via SSE.

Previously, /exec blocked until the command finished and returned all output as a single JSON response. From v0.7, output streams line by line as it's produced β€” no more waiting.

### Changes - POST /v1/sandboxes/{id}/exec now returns text/event-stream - Dep install remains silent β€” only your code's output streams - Test mode streams pytest output line by line - SDK exec() updated to consume the stream, returns str

June 10th, 2026

Sandboxes now survive Petri restarts. No more lost state when the server goes down.

What's new:

  • SQLite-backed registry β€” sandbox state persists across restarts

  • Sandbox TTL β€” idle sandboxes are automatically cleaned up after 1 hour

  • TTL resets on every exec call β€” active sandboxes are never killed

  • Configurable via PETRI_SANDBOX_TTL_SECONDS environment variable

  • Cleaner exec output β€” dep install and execution now run separately, no more pip noise leaking through

June 8th, 2026

🐍 Python SDK is live β€” pip install jhansi

from jhansi import Sandbox

with Sandbox(language="python") as sb: sb.upload_file("main.py") result = sb.exec("python main.py") print(result["output"])

Also ships:

  • Dockerfile + docker-compose for self-hosting Petri in one command

  • Full SDK docs on docs.jhansi.io

docker compose up and you're running.

June 7th, 2026

Upload your project as a zip, pass a command β€” jhansi starts it and runs your test suite against it. Works for scripts and servers alike. Supports Python, Node, Go, and Java.

June 6th, 2026

Sandboxes now detect and install dependencies automatically at exec time. No manual pip install or npm install needed.

What's new:

  • Python: detects pyproject.toml, requirements.txt, or scans imports automatically via pipreqs

  • Node: detects package.json and runs npm install

  • Go: detects go.mod or initialises a new module automatically

  • Java: supports Maven (pom.xml), Gradle (build.gradle), or falls back to javac

Dependencies are installed into the sandbox workspace and persist across runs. First exec is slower. Subsequent execs are fast.

June 5th, 2026

Sandboxes now have a dedicated workspace on disk.

What's new: β€” Upload files once via POST /files β€” Exec by filename β€” no code in the request body β€” Workspace persists between runs β€” Zero config locally, overridable via PETRI_WORKSPACE_ROOT

The foundation for delta sync and auto dependency detection.

Full write-up: https://dev.to/thearun85/the-case-for-persistent-sandboxes-in-ai-code-execution-3158