Quicksand sandboxes for AI agents, Pushbox GitHub Actions runners and Tokenmail inboxes, driven from the froog CLI, the HTTP API, SDKs or an MCP server.
$ curl -fsSL https://froogcorp.com/install | sh
$ froog login
$ froog new my-box # about 20 s
$ froog exec my-box -- 'uname -a'
$ froog stop my-box # stops billing
from froogdev import Froog
froog = Froog() # FROOG_API_KEY from the environment
with froog.sandboxes.create(size="small") as sb:
r = sb.exec("uname -a", timeout=60)
print(r.stdout, r.exit_code)
import { Froog } from "froogdev";
const froog = new Froog({ apiKey: process.env.FROOG_API_KEY });
await using sb = await froog.sandboxes.create({ size: "small" });
const r = await sb.exec("uname -a", { timeout: 60 });
$ curl -s https://api.froogcorp.com/v1/sandboxes \
-H "Authorization: Bearer $FROOG_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "ci-1", "size": "small"}'
froog newA full Linux VM for every agent, with SSH, Docker, Chrome, a desktop and a disk that persists.
runs-on: froogGitHub Actions runners: every job in a fresh VM of its own, billed per second.
Sandboxes, forks, agents, Pushbox and Tokenmail, from the command line or your code.
$ froog new my-box --size large --os debian
$ froog ssh my-box
$ froog exec my-box -- 'git clone https://github.com/you/app && cd app && make test'
$ froog new box --ttl 4h # stops 4 hours after each start
$ froog info box
sb = froog.sandboxes.create(size="large", os="debian", keep=True)
sb.files.write("app.py", "print('hi')")
for e in sb.exec_stream("make test"):
print(e.get("data", ""), end="")
Ubuntu 24.04 or 26.04, Debian 13 or Omarchy, with SSH, Docker, Chrome, coding agents and a disk that persists.
$ froog snapshot my-box --name before-upgrade
$ froog snapshots my-box # list
$ froog fork my-box@before-upgrade my-box-2 # new sandbox from a snapshot
$ froog fork my-box try --count 5 # try-1 … try-5
$ froog restore my-box@before-upgrade # roll back in place
Snapshot a VM, fork it into many, or roll it back in place.
$ froog onboard # sign in, SSH key, agent keys, a first sandbox, a first prompt
$ froog new agent-1
$ froog desktop agent-1 # watch the desktop in a browser
Claude Code, Codex, OpenCode, Gemini CLI and more are installed in every VM, with a desktop and computer use.
jobs:
test:
runs-on: froog # was: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npm test
# GitLab CI, CircleCI, Buildkite: a fresh VM with this folder, the command, then it is deleted
$ froog run -- make test
Change one line and every job runs in a fresh VM of its own.
$ froog inbox create --username signup --name "acme trial"
$ froog inbox wait signup-k3f9qz@froogmail.com --code
$ froog inbox wait signup-k3f9qz@froogmail.com --link --from acme
$ froog inbox messages signup-k3f9qz@froogmail.com
An address on froogmail.com that an agent signs up with, then reads the code or link itself.
All the docs as one Markdown file: froogcorp.com/docs.md. What's new: the changelog (RSS).