- Outside the sandbox — use the Mesa SDK (TypeScript or Python) to create repos, sign a short-lived access token with your private key, and orchestrate your workflow.
- Inside the sandbox — install the
mesaCLI and runmesa mount --daemonizewith the token inMESA_ACCESS_TOKEN. - Run your agent —
cdinto the mount path and launch your agent (e.g. Claude Code, Codex, or a custom agent). Any file edits are automatically persisted back to Mesa.
Alpine-based setup (default image)
Blaxel’s default image is Alpine-based. The Mesa install script handles Alpine natively — it detects the architecture, adds the correct APK repository, and installs Mesa:The layout scopes the token: it can reach the repositories the layout declares
and nothing else. A plain
mesa mount then shows exactly those repositories
under the organization browse tree. To mount the layout’s own paths instead,
serialize workspace.layout() with JSON.stringify(...) in TypeScript or
json.dumps(...) in Python, write it into the sandbox, and mount with
mesa mount --layout <file>.Debian-based setup (custom template)
If you prefer Debian, you can build a custom Blaxel template with Mesa pre-installed. Create a Dockerfile:bl deploy, then reference your template when creating sandboxes:
Mount Mesa
Once the CLI is installed (via either method), configure and mount:Tips
- Use scoped, short-lived access tokens. Sign a dedicated token for each sandbox session with only the scopes it needs — it’s signed locally with your private key (which never enters the sandbox) and expires on its own. See Authentication for details.
- Use
--daemonize. Always runmesa mount --daemonizein sandbox environments so Mesa runs as a background process and doesn’t block your agent’s terminal. - Alpine works out of the box. The install script handles Alpine natively, so the default Blaxel image works without workarounds. Use a custom Debian template only if you have other reasons to prefer Debian.

