Documentation Index
Fetch the complete documentation index at: https://docs.getbindu.com/llms.txt
Use this file to discover all available pages before exploring further.
Overview
This guide is a walkthrough of deploying a bindu agent to a tiny computer that lives on the internet, end to end, with no prior experience assumed. By the end of it, you’ll have an agent answering requests at a realhttps://... URL - one that you (or anyone you share the URL with) can
talk to from anywhere.
If you’ve already run an agent locally with python my_agent.py and want
to know “okay, how do I make this real?” then this is for you.
Where everyone gets stuck
Right now, your bindu agent runs on your laptop. When you close the terminal, the agent dies. Nobody else can reach it. That’s fine for development, but eventually you want the agent to be a real service - running somewhere stable, on a public URL, that other agents and humans can call. We’re going to ship the exact same script you’d run locally to a boxd microVM - A microVM is a tiny isolated Linux machine that boots in seconds. Boxd handles the boring parts: spinning up the machine, giving it an HTTPS domain, keeping it alive. You write your agent script. One command does the rest. The command will be:What is needed
Three things, in order:1. A boxd account and API key
Go to boxd.sh, sign up, and grab an API key from the dashboard. It’ll look something likebxd_xxxxx.... Keep it private -
anyone with this key can spin up VMs that get charged to your account.
Stash the key in your shell:
~/.zshrc (or ~/.bashrc).
Note: the free tier covers small experiments. The example we deploy below uses ~$0.01 of compute. If you forget to pause your VM when you’re done, you’ll keep paying for it idling - we’ll cover how to pause it at the end.
2. Bindu with the boxd extra installed
If you already have bindu installed, just add the optionalboxd piece:
uv:
boxd Python library that knows how to talk to the
boxd cloud. The base bindu install doesn’t include it because most
people don’t deploy to boxd - you only pull it in when you need it.
3. An agent script
If you already have one (my_agent.py or whatever), great - keep using
it. If not, copy the one bundled with bindu. It’s a 10-line echo agent
that just sends back whatever you send to it:
bindufy() call. Notice there’s nothing about boxd in this file,
the deploy logic lives entirely in the CLI. Same script works for
python agent.py locally and bindu deploy agent.py to the cloud.
Step 1: see what would happen (a safe dry run)
Before you spend any money, let’s see what bindu would do if you deployed. This step doesn’t touch the cloud at all:- What the VM will be named (
runtime-boxd-example- bindu reads this fromconfig["name"]in your script). - What hardware it gets (2 vCPUs, 4 GB RAM, 20 GB disk by default).
- What files will be uploaded (just 4 files - your script plus a couple of metadata files).
Why “tarball”? A tarball is just a bundle of files squished into one. Bindu packages up your folder into a single compressed file, uploads that one file to the VM, and unpacks it on the other side. Faster than uploading files one by one.
Step 2: actually deploy
- “dropped 2 sensitive file(s)” - bindu found things in your folder
that look like secrets (e.g.,
.env,.pemkeys) and refused to upload them. This is a safety net: a VM with a public IP is the last place you want your API keys to live. We’ll cover how to pass secrets correctly in a moment. - ”✓ runtime-boxd-example serving at https://…” - there it is. Your agent is alive on the internet at that URL. Bookmark it.
- All the
[runtime-boxd-example]lines - these are the logs from inside the VM, streamed back to your terminal. The deploy command stays in the foreground showing you logs until you hit Ctrl-C.
What just happened: bindu zipped up your script,
told boxd “please make me a Linux VM with this code,” waited for the
VM to boot, copied your code in, ran pip install bindu, started
your agent inside the VM, and hooked up a public HTTPS domain that
forwards to it. That’s it.
Step 3: talk to your live agent
In a fresh terminal:agent_did - that’s your agent’s
cryptographic identity. We’ll come back to it.
Now let’s send it an actual message. Bindu agents speak a protocol
called A2A (“agent-to-agent”). It’s just JSON over HTTP, but the
shape is opinionated - every message needs a unique ID (a UUID), and
messages live inside tasks, which live inside contexts (think:
conversation threads).
The shortest possible “hello”:
did.message.signature field is the agent cryptographically
signing its response. Anyone receiving this artifact can verify the
agent really sent it (and nobody tampered with it in transit) using the
agent’s public DID. You didn’t have to write a line of crypto code -
bindu handled it.
You just had a complete round-trip with an agent running in a VM you
don’t manage, on a domain you don’t own, with a signature you can
verify. That’s the whole point.
Step 4: pausing your VM (so you stop paying for it)
When you’re done experimenting, head back to the terminal wherebindu deploy is still running. Press Ctrl+C.
By default, that suspends your VM. Suspending means: “freeze the
machine in its current state, keep the disk around, stop billing for
CPU.” Cheap to keep, instant to wake up.
Next time you run bindu deploy agent.py --runtime=boxd, the same VM
resumes in a couple of seconds with everything exactly as you left it -
DID keys, conversation history, the lot.
If you want different behavior on Ctrl-C, pass --on-exit:
| Flag value | What happens on Ctrl-C |
|---|---|
--on-exit=suspend (default) | Freeze the VM. Keeps disk, stops CPU billing. Fast resume. |
--on-exit=destroy | Delete the VM entirely. You’ll start fresh next time. |
--on-exit=detach | Leave the VM running. Bills continue. Useful when you want the agent to keep serving even after you close your laptop. |
--auto-suspend:
One known wart: in bindu v2026.20.2,--on-exit=suspendsometimes doesn’t fire cleanly when you hit Ctrl-C from a non-interactive shell (like a script). If you suspect the VM kept running, check the boxd dashboard. To force-suspend from Python:Tracked in our bug list - interactive Ctrl-C from a normal terminal works fine; this is a corner case.
What about secrets?
Your real agents will need API keys (OpenAI, Anthropic, etc.). Never put these in your script. Two reasons:- If you check the script into git, your key goes with it.
- Bindu refuses to upload
.envfiles for the same reason.
--env flags on bindu deploy:
os.getenv("OPENAI_API_KEY") exactly like it would locally.
They don’t end up in the source tarball, and they don’t end up in git.
Useful follow-up commands
While your VM is running:| Command | What it does |
|---|---|
bindu logs runtime-boxd-example | Stream your agent’s stdout to your terminal. Like tail -f. |
bindu logs runtime-boxd-example --no-follow | Print the log so far and exit. |
bindu shell runtime-boxd-example | Open an interactive bash shell inside the VM. Useful when something’s broken and you want to poke around. |
runtime-boxd-example here) is the same as
config["name"] in your script.
Things that will happen at least once
“BOXD_API_KEY or BOXD_TOKEN must be set” - you forgot theexport BOXD_API_KEY=... step. Check echo $BOXD_API_KEY is not
empty.
“agent at <url> did not become healthy within 60s” - the VM is up
but your script crashed before serving. Run bindu logs <name> and look
at the bottom for the actual Python error. Common cause: you imported a
package that isn’t in pyproject.toml (or requirements.txt).
“old code is running after redeploy” - you edited the script, but
when you redeployed, the old version is still serving. Almost always
because the previous Python process didn’t get killed cleanly inside
the VM. Run bindu shell <name> and pkill -f python3, then
redeploy.
“my agent works locally but fails inside the VM with ModuleNotFoundError”
- the VM only installs the deps it can see. If your dep isn’t in a
pyproject.toml,requirements.txt, orsetup.pyinside the folder that gets uploaded, the VM doesn’t know to install it. Easiest fix: write a tinypyproject.tomlnext to youragent.pylisting the deps.
.binduignore file (works like
.gitignore):
Where to go next
- boxd.md - every
bindu deployflag spelled out in detail. Read this when you start needing finer control (bigger VMs, custom images, etc.). - custom-image.md - for when your dep can’t be
pip install-ed and you need a pre-baked Docker image. - README.md - runtime providers overview and the reasoning behind the design.
- boxd’s own docs - for understanding the microVM platform itself: pricing, regions, the Python SDK we’re using under the hood.