A cloud dev box your coding agents already live in
Claude Code, Codex and OpenCode are on PATH the moment the box boots, with the databases, the browser and the CLI they need already wired in. You open it in a browser tab — on a laptop or on your phone, on our hardware or on a machine you already own.
claudeClaude CodecodexOpenAI CodexopencodeOpenCode
mcp: hoststack · poststack · filesystem · git · chrome
From €20/month, or €3/month on hardware you already own — the first one free. Bring your own agent subscription; we install the agents, we do not resell the models.
This is the actual terminal output
The workspace screen, reduced to a diagram, replaying two real recordings — switch the device and the hardware without the terminal changing.
Running on HostStack compute in the EU. The box is up whether or not anything is attached to it, so an agent you start from a laptop keeps working after you shut the lid, and the same session is there when you open the tab on a phone. Flip the switch above to put the identical box on hardware you own instead.
HostStack dev box
Backing services — native, in this box
○ postgres localhost:5432 user dev, no password
○ redis localhost:6379
○ meilisearch localhost:7700
start them with dev-services up — no Docker needed, data lives on /workspace
Your app
no dev URL bound to this box
Coding agents
○ not signed in yet — run claude and follow the prompt
MCP: hoststack · poststack · filesystem · git · chrome
Ready
dev-services up postgres · redis · meilisearch (+ mysql, mongodb)
dev-runtime add go java · ruby · rust · elixir · dotnet (php is built in)
hoststack services what you have deployed (already authenticated)
hoststack db --help managed databases, and linking one to a service
hoststack-status show this again any time
app-dev:/workspace$ dev-services up
[dev-services] postgres -> localhost:5432 (user dev, no password)
[dev-services] redis -> localhost:6379
[dev-services] meilisearch -> localhost:7700 (no master key, dev env)
app-dev:/workspace$ dev-runtime list
In the image (ready now):
node v24.19.0
bun 1.3.14
python Python 3.12.3
php PHP 8.3.6 (cli) (built: Jul 16 2026 18:30:41) (NTS)
Installable with 'dev-runtime add <name>':
go not installed
java not installed
ruby not installed
rust not installed
elixir not installed
erlang not installed
dotnet not installed
Databases are separate: dev-services {up | up mysql | up mongodb}
app-dev:/workspace$ hoststack-status
HostStack dev box
Backing services — native, in this box
● postgres localhost:5432 user dev, no password
● redis localhost:6379
● meilisearch localhost:7700
Your app
no dev URL bound to this box
Coding agents
● signed in — claude · codex · opencode
MCP: hoststack · poststack · filesystem · git · chrome
Ready
dev-services up postgres · redis · meilisearch (+ mysql, mongodb)
dev-runtime add go java · ruby · rust · elixir · dotnet (php is built in)
hoststack services what you have deployed (already authenticated)
hoststack db --help managed databases, and linking one to a service
hoststack-status show this again any timeThree steps to a box you can type in
Everything the box needs is in the image already. What is left is choosing what code goes in it.
Pick a repo, or nothing at all
Three sources: a repo on your connected GitHub account, any
https://clone URL, or blank. Whichever you pick is cloned before your first shell opens.Open the terminal and type
claudeAll three agents are already on PATH — nothing to install, nothing to configure. Sign one in once and capture that login to your account; every box you make afterwards starts authenticated.
Let it run the whole loop
dev-services upbrings Postgres and Redis up in the box, the private dev URL serves whatever the agent starts, and thehoststackCLI is already signed in — so the agent that wrote it can deploy it.
In the dashboard that is Development → New. From your own terminal it is one command — and the same operations are MCP tools, so an agent on your laptop can stand a box up for itself.
# Clone a repo into a new box as it boots
hoststack dev new --repo https://github.com/you/your-app.git
# Or a blank box, and clone whatever you like from inside it
hoststack dev new --name scratchPreinstalled, not a setup script
The image is built once and pulled per box, so it is there the moment the box is. Seven of the language toolchains are the exception — they install on demand, onto the volume.
Coding agents
- claude — Anthropic Claude Code
- codex — OpenAI Codex
- opencode — SST OpenCode
All three on PATH. You bring the subscription or API key; we install the tools and do not resell model access.
MCP servers, wired into all three
- hoststack — your projects, services, deploys, databases, domains
- poststack — transactional email
- filesystem — scoped to /workspace
- git
- chrome — a real Google Chrome, driven headlessly
Installed globally rather than fetched per launch, so an agent starts them cold-start free.
Language runtimes
- Built in: Node 24, Bun, Python 3, PHP 8.3 (with composer)
- dev-runtime add go | java | ruby | rust | elixir | erlang | dotnet
On-demand runtimes install into /workspace/.mise, so they survive a recreate. Between the two lists, every runtime the platform deploys runs in a box.
Databases and search, in the box
- dev-services up — native Postgres 17 (:5432), Redis (:6379), Meilisearch (:7700)
- dev-services up mysql — MariaDB on :3306, speaking the MySQL protocol
- dev-services up mongodb — MongoDB on :27017
Data lives on /workspace, so it survives a restart. MariaDB and MongoDB stay off until you ask for them, so an engine you do not use costs you no memory.
Toolchain
- git, GitHub CLI (gh), tmux, vim, nano, htop
- ripgrep, fzf, jq, build-essential, make, uv
- postgresql-client, redis-tools
- hoststack — the CLI, already authenticated inside the box
The box seeds HOSTSTACK_API_KEY at boot, so `hoststack services` and `hoststack logs` work the moment a shell opens.
There is no Docker daemon inside a box on our hardware today, which is exactly why dev-services and dev-runtime exist.
A terminal in a browser tab, and two ways to script it
The box runs on our infrastructure whether or not anything is attached to it. Start an agent, close the tab, check on it from a phone an hour later.
The browser terminal
Open as many terminal tabs on a box as you want — run an agent in one and git in another. Each tab is a named tmux session on our side, so closing the browser does not kill the shell. Detach, sleep your laptop, come back to the same prompt.
From a phone
Install HostStack as a PWA or just use a mobile browser. A soft-key bar supplies the keys phones lack — Esc, Tab, Ctrl-C/D/Z/R/L, arrows — and the view tracks the on-screen keyboard so the prompt is never hidden. You can paste or upload a file up to 16 MB straight into the box for an agent to read.
The CLI and the MCP server
hoststack dev new, list, create and delete run from your own terminal, including --repo to pre-clone at boot. The same operations are MCP tools, so an agent on your laptop can stand up a box for itself. The interactive shell is the browser one — there is no hoststack dev ssh.
A private URL for what you are building
Every box gets an unguessable URL that proxies to port 3000 inside it. Bind a dev server there and it is reachable; until then the URL serves a "nothing listening" page. The box presets HOST=0.0.0.0 and exports the URL as $HOSTSTACK_DEV_HOST.
Sign in once, not once per box
Log an agent in inside a box — claude /login, codex login, opencode auth login — then capture that login back to your account from the Setup tab. It is stored encrypted with AES-256-GCM, never returned by a list endpoint, and decrypted only to seed a box you own. Every box you create after that starts already authenticated.
It is a real subscription login rather than a metered key, so the full model menu your plan gives you is the menu you get in the box. Prefer a metered key? Set ANTHROPIC_API_KEY or OPENAI_API_KEY under Settings → Variables, encrypted at rest like every other environment variable.
Each box also ships Google Chrome, wired into all three agents as the chrome MCP server. It is headless — there is no display in a box — and it closes the loop that otherwise ends at "it compiles": the agent starts the dev server it just wrote, opens it, screenshots it, reads the console and the network log, clicks through a flow. Chrome is not started at boot, so a session that never browses pays nothing for it, and its usage statistics, the MCP server's telemetry and the performance tracer's URL reporting are disabled image-wide. The pages your agent opens do not leave the box.
If you already own a machine, develop on that one
A desktop, a spare laptop, a NUC under the TV or a server in the rack. You are supplying the CPU and the memory, so there is no size price — €3/month per environment for the control plane and the terminal relay, with 1 free per team.
Enrolling it is one command
Name the machine under Settings → Machines and it hands you the line below with a single-use token already in it. From then on the machine is a placement target your team can pin boxes to.
# Settings → Machines mints this with a 15-minute pairing token
curl -fsSL https://hoststack.dev/api/agents/install.sh | sudo HOSTSTACK_PAIRING_TOKEN=… bash- Linux on x86-64, with Docker installed and running. WSL2 counts.
- Windows works through Docker Desktop in Linux-container mode; on macOS you run it inside a Multipass VM.
- Apple Silicon and ARM boards are not supported — the images are amd64.
- One line, run as root. Nothing listens: the agent dials out to us.
What you get
- The dev URL still works from anywhere — requests come down the machine’s own outbound connection, so there is no port to open and no fixed IP to have.
- The same image, the same agents, the same dev-services. A box does not know which hardware it is on.
- Your machine is marked unschedulable for our fleet, so no other tenant’s workload is ever placed on it.
- Move a box between our hardware and yours after the fact — it is not a decision you are stuck with.
What you accept
- The box runs only while the machine does, and /workspace lives on that machine’s disk — one SSD, not replicated storage. Volume backups are on by default for exactly that reason.
- Nothing pages you when the machine drops off. A HostStack box is the always-on one.
- The agent container is privileged and mounts the Docker socket, which is root-equivalent on that machine.
- A captured agent login lives on one machine at a time, so splitting boxes across both leaves one side signed out.
Two line items, both on the pricing page
A dev box is a private service, so it provisions, scales, suspends and bills like every other service on the platform. No separate dev-environment plan, no per-seat charge, no charge for the agents.
A box on our hardware
- Standard box
- €20/mo
- 2 GB RAM · 1 vCPU
- 10 GB /workspace volume
- €1/mo
- Persistent block storage, billed per GB·month
- Default box
- €21/mo
Standard is the floor, not a suggestion: below it an agent and a build running together run the box out of memory. Larger sizes are the same ladder every other service uses — see pricing.
A box on your own machine
- Any size box, on hardware you own
- €3/mo
- Per environment, not per machine · first 1 free per team
- Compute
- €0
- You are supplying the CPU and the memory
The fee is for our side of the wire — the control plane and the terminal relay — which does not care how many machines your boxes are spread across, so a second machine does not double the allowance. Traffic to a box still crosses our edge, so it counts against your team bandwidth allowance exactly like any other service.
Power a box down and the container stops: running sessions end, the memory goes back to the host, /workspace is kept, and Resume re-runs it in seconds. To be plain about it — powering down frees the machine, not the invoice line. A provisioned box is billed until you delete it.
What it takes to move a project in
Code gets in over git. Here is the rest of it — the private repo, the databases, and the five things that do not work yet.
For a private repo that only speaks SSH, start a blank box and set the key up inside it. ~/.ssh is a symlink onto the /workspace volume, so a key you generate there survives every restart — as does your git identity, your shell history and node_modules.
Databases come across either way — tick Postgres, Redis or Meilisearch at create time for managed companions with DATABASE_URL, REDIS_* and MEILI_* injected, or run them in the box with dev-services up.
What does not work yet:
- No
rsync,scpor SSH into a box. There is no sshd in the image. - No code editor in the browser. You get a terminal, and inside the box
vimandnano. If your workflow is a GUI editor attached over SSH, this is not the product for it yet. - No bulk file transfer. Terminal upload is one file at a time, up to 16 MB — meant for handing an agent a screenshot or a log. To move a working directory, clone the repo.
- Nothing seeds your dotfiles. Only
/workspacepersists, so put what you want to keep there and source it from your shell. - GitLab, Bitbucket and Codeberg are first-class sources for a deployed service but not yet for a dev box — use an
https://clone URL.
Move your dev environment — the migration guide · Full dev environment documentation
Dev box questions
What the box contains, what it costs, and what it cannot do.
What is a HostStack dev box?
A private service running our dev-env image: an Ubuntu 24.04 container with Claude Code, OpenAI Codex and OpenCode preinstalled, five MCP servers wired into all three, and a 10 GB /workspace volume that survives restarts. You open a terminal on it from the dashboard, or from a phone. Boxes start at the Standard size — €20/month for 2 GB RAM and 1 vCPU, plus €1/month for the volume.
Do I need my own AI subscription to use a dev box?
Yes. We install the agents; we do not resell model access. Log in once inside a box and capture that login back to your account — it is stored encrypted with AES-256-GCM and seeded into every box you create afterwards, so you never sign in twice. If you would rather use a metered API key, set ANTHROPIC_API_KEY or OPENAI_API_KEY under Settings → Variables on the box: it is stored on our side encrypted at rest, like every other environment variable, and injected into the container on deploy.
Can I run Postgres and Redis inside a dev box?
Yes. `dev-services up` starts native Postgres 17, Redis and Meilisearch inside the box with their data on the persistent /workspace volume; MariaDB and MongoDB are one command further and stay off until you ask. That set overlaps with our managed one without matching it: Postgres, Redis, MariaDB and MongoDB are also managed database engines here, MySQL is a managed engine the box does not carry (MariaDB speaks its protocol), and Meilisearch is our managed search product rather than a database. You can also attach fresh managed companions when you create the box and get DATABASE_URL, REDIS_* and MEILI_* injected for you.
Is there a code editor in the browser?
No. You get a terminal — xterm with tmux-backed tabs so a shell outlives the browser, a soft-key bar for phones, and file upload up to 16 MB — plus vim and nano inside the box. There is also no SSH, scp or rsync into a box: code comes in over git. If your workflow depends on a GUI editor attached over SSH, a dev box is not the right tool for it yet.
Can I run a dev box on my own machine?
Yes. Enrol a desktop or a spare laptop with a one-line installer and pin boxes to it. A box on your hardware is not charged the size price, because you are supplying the CPU and the memory — it costs €3/month per environment for the control plane and the terminal relay, and the first one is free. Traffic still crosses our edge, so it counts against your team bandwidth allowance exactly like any other service. An enrolled machine is unschedulable for the rest of the fleet — placement only ever picks nodes we run (server.service.ts:127-137), so nothing lands on your machine unless your team pins it there.
Open a terminal in the EU
Sign up, pick a repo or start blank, and the box is provisioning before you have finished naming it.