Hand it files and a task. See every step.
The agent writes Python, runs it inside your browser tab, reads the output, and continues until the task is complete. It uses your own model server, asks before modifying your files, and clears all data when you close the tab.
It asks before it touches your files
Reading files and writing new ones runs on its own. A step that overwrites, deletes or moves one of your files, or tries to reach the network, stops and shows you what it wants to change and why.
You approve, reject, or rewind to any earlier step. The workspace is saved after every step, so a bad turn costs nothing.
If it gets stuck and sends the same step a third time, that step is skipped and the agent is told why. A fourth try pauses the run for you.
It shows you the plan
On a longer task the agent writes down a short plan and keeps it pinned above the steps, ticking each one off as it goes. You see where it is heading, plus what it just did. A note from you changes its course, and the plan changes with it.
Set supervision to Plan first and it halts once the plan is written. Nothing in your files changes until you approve it.
Everything happens in the tab
Python in WebAssembly
The agent's code runs in Pyodide, a build of CPython for the browser, inside a worker. It sees the files you put in the workspace and nothing else on your computer.
Your model, your server
It works with any OpenAI-compatible endpoint: llama.cpp, Ollama, LM Studio or vLLM on your own machine, or a cloud API if you choose one.
Nothing is kept
No account, no storage, no telemetry. Close the tab and the workspace is gone. To keep a session, export it to a zip file and import it later.
Network blocked, within limits
Agent code stays off the network on a best-effort basis: 17 known ways out are tested and closed. That is a denylist, not a guarantee, so keep real secrets out of the workspace.
Files it reads and writes
pandas, numpy and matplotlib load on first use. Eleven other libraries are built into the file, so documents work without any extra setup.
- Excel
- openpyxl, XlsxWriter
- Word
- python-docx
- PowerPoint
- python-pptx
- OpenDocument
- odfpy
- Charts
- matplotlib, seaborn
- Markdown and HTML
- Markdown, markdownify
- Data
- CSV, JSON, SQLite, XML with xmltodict
- Odds and ends
- PDF with matplotlib or PyMuPDF, tabulate, qrcode
Get started
Start a model server
It must accept requests from a browser. With llama.cpp:
llama-server -m model.gguf --jinja --port 9931Open the file
Double-clicking it works. Python starts offline in about a second. Set the server address in Settings if it isn't on port 9931.
Add files and describe the task
Drop files or a folder into the workspace, type what you want done, and press Start.
The model needs to spot and fix its own mistakes. Our test tasks pass with Qwen3.8 27B at reasoning effort Low.
What leaves your computer
Opening the file triggers no network request. Your task, the parts of your files the agent reads, and what its code prints go to the model server you set, along with the API key if you set one.
Packages like numpy and pandas download from jsDelivr the first time agent code imports them. jsDelivr sees your IP address and the package name, never your task or your files.