Languages and tools
What every sandbox has before its first command: the languages, build tools, coding agents and assistants a task asks for most.
For your agent
agental.io/docs/tools.mdEvery sandbox starts from the same image: Ubuntu 24.04 on x86-64, with what follows installed and on the PATH a command is given. Nothing has to be installed first, and anything else can be: commands run as root.
Languages
| Language | Version | Commands |
|---|---|---|
| Python | 3.12, with pip, venv and uv 0.13 | python3, pip, uv, uvx |
| Node.js | 24, with npm and pnpm 12 | node, npm, npx, pnpm |
| Bun | 1.4 | bun, bunx |
| Deno | 2.9 | deno |
| Go | 1.27 | go, gofmt |
| Rust | 1.99, with clippy and rustfmt, through rustup | rustc, cargo, rustup |
| Java | OpenJDK 21, with Maven 3.8 and Gradle 9.8 | java, javac, mvn, gradle |
| Ruby | 3.2, with gem and Bundler | ruby, gem, bundle |
| PHP | 8.3, with Composer | php, composer |
| C and C++ | GCC 13, with make, CMake 3.28, Ninja and pkg-config | gcc, g++, make, cmake, ninja |
Tools
| What | Commands |
|---|---|
| Docker | docker, with docker compose and BuildKit through docker buildx |
| Git and the GitHub CLI | git, gh |
| Search and data | rg (ripgrep), jq, curl, zip, unzip |
| Audio and video | ffmpeg 6.1 |
| A shell that outlives a connection | tmux |
| A browser | google-chrome and playwright-cli: see Browser |
Coding agents
Nine coding agents are installed. Each signs in to its model with your own key. Keep the key as a secret of the sandbox's template, under the name the tool reads, such as ANTHROPIC_API_KEY for Claude Code, and it reaches every command.
| Agent | Version | Command |
|---|---|---|
| Claude Code | the latest on the day the image was built | claude |
| Codex | the latest on the day the image was built | codex |
| opencode | the latest on the day the image was built | opencode |
| Gemini CLI | the latest on the day the image was built | gemini |
| pi | 1.3.0 | pi |
| Cursor CLI | 2026.10.14 | cursor-agent, agent |
| Prime Agent | 0.10.0 | prime-agent |
| Kimi Code | 2.2.0 | kimi |
| Mistral Vibe | 2.26.1 | vibe |
cd /opt/agental/app && claude -p "make the failing test pass" --dangerously-skip-permissions
- Commands run as root, and Claude Code skips its permission prompts as root only when it is told it is in a sandbox.
claudehere tells it so: the machine is yours alone. - An agent run with
-porexecanswers and ends. For a longer task, start it in the background as in Running commands. - The agents with a version in the table are pinned at it, and each file they came from was checked against a sum when the image was built. Cursor's CLI does not update itself here, and Kimi Code does not install its updates.
- Kimi Code reads no key from the environment by itself. Sign in with
/logininkimi, or add a provider to/root/.kimi-code/config.tomlwhoseapi_key_envnames the secret, such asKIMI_API_KEY.
Assistants
OpenClaw and Hermes are assistants: you talk to one from a chat app such as Telegram, Slack or WhatsApp, and it keeps working between your messages. Each is installed, with its settings and its folder, and its gateway, the program that connects it to chat apps and keeps it running, is off. Nothing starts it until you do.
| Assistant | Version | Command | Its own files |
|---|---|---|---|
| OpenClaw | 2026.10.3 | openclaw | /root/.openclaw |
| Hermes Agent | 0.22.2 | hermes | /root/.hermes |
openclaw onboard nohup openclaw gateway > /root/openclaw-gateway.log 2>&1 < /dev/null &
- Set one up with
openclaw onboardorhermes setup, over SSH or on the desktop: each asks for a model key and the chat apps to connect. Its key can also be a secret of the template, as for the coding agents. - Start its gateway in the background, as above, or with
hermes gateway run. A gateway stops when the sandbox stops, and is started again by you after it starts. To keep an assistant answering, keep its sandbox running. - Its gateway listens only on the sandbox's own
127.0.0.1unless you change that, OpenClaw's at port 18789. Most chat apps are reached by a connection the gateway opens itself. One that has to call the gateway needs a public address for its port. - To have a gateway start by itself,
openclaw gateway installandhermes gateway installmake it a service, as each one's own docs describe. - Hermes runs on a Python, Node.js, ripgrep and ffmpeg of its own, which its installer brought. Its browser and its computer-use driver were left out: install them with
hermes pm install agent-browserandhermes pm install cua-driverif a task asks for them.
What the agents are told
Each agent starts already knowing where it is, so a prompt can start with the task. It reads a short note with its standing instructions, every time: that it is root on an agental sandbox, to work in /opt/agental, that the disk outlasts a stop and running processes do not, to put long work in the background, to have a server listen on 0.0.0.0, and that AGENTAL_SANDBOX_ID and AGENTAL_API_URL name its sandbox. Two skills, which it loads when a task asks for them, say more: agental, about the machine and about calling the API on its own sandbox, and playwright-cli, about driving the browser.
| Agent | The note | The skills |
|---|---|---|
| Claude Code | /root/.claude/CLAUDE.md | /root/.claude/skills |
| Codex | /root/.codex/AGENTS.md | /etc/codex/skills |
| opencode | /root/.config/opencode/AGENTS.md | /root/.claude/skills, which it reads as well |
| Gemini CLI | /root/.gemini/GEMINI.md | /root/.gemini/skills |
| pi | /root/.pi/agent/AGENTS.md | /root/.pi/agent/skills |
| Cursor CLI | /.cursor/rules/agental.mdc, a rule it always applies, wherever it works | /root/.cursor/skills |
| Prime Agent | /root/.prime/agent/AGENTS.md | /root/.prime/agent/skills |
| Kimi Code | /root/.kimi-code/AGENTS.md | /root/.kimi-code/skills |
| Mistral Vibe | /root/.vibe/AGENTS.md | /root/.vibe/skills |
| Hermes | /root/.hermes/SOUL.md, after its own words there | /root/.hermes/skills |
| OpenClaw | /root/.openclaw/workspace/AGENTS.md, after its own words there | /root/.openclaw/skills |
- The
agentalskill calls the API only when you have given the agent a key, as a secret of the template such asAGENTAL_API_KEY, and then only on its own sandbox and the forks it made of it: to give a port an address, to fork the sandbox when you asked it to, run commands in the forks and delete them when it is done, to write to you by email, or to stop the sandbox when you asked it to. Give it a key that can do only that, limited to its sandbox:email.sendalone, for an agent that only needs to write to you, orsandbox.fork,execandsandbox.delete-ownfor one that forks. - Your own rules go where the agent finds them on any computer: an
AGENTS.mdorCLAUDE.mdin the project it works in, or more lines in the files above. A snapshot keeps them for the next sandbox. - A sandbox made from an image built before these were added has neither the note nor the
agentalskill. The variables are in its commands all the same.
Installing more
npm install -gworks as it does on any Ubuntu machine, and so doesapt-get install -yafterapt-get update, which brings the package lists up to date.- Packages install without their docs, man pages and translations, as in Ubuntu's minimal images. To have them, remove
/etc/dpkg/dpkg.cfg.d/01-agental-nodocand install the package again. - Ubuntu keeps
pip installto virtual environments, and refuses it outside one. Make one withuv venvorpython3 -m venv, or install a Python tool withuv tool install. - A command's
PATHputs/root/.local/bin,/root/.cargo/bin,/root/go/binand/root/.bun/binfirst, whereuv tool install,cargo install,go installandbun add -gput what they install. The next command finds it, and a newer copy there is used before the image's own. - To start every new sandbox with what you installed, take a snapshot and have its template start sandboxes from it.
- A sandbox keeps the versions it was made with. A sandbox made after the image is built again has the newer ones.
The full machine-readable reference is OpenAPI 3.1. Every page as Markdown, for an agent: llms.txt. Questions: [email protected]