Give every agent session its own VM.
Full dev environments on your own AWS or GCP account. Your repo, your secrets, your tools. Detach and it parks itself. Attach and it is back in under a minute.
brew install usepier/tap/pier ##Why pier
Coding agents changed what a dev environment is. A session is no longer you at one machine. It is an agent that runs for hours and wants its own branch, its own ports, its own docker daemon. And you want several at once. Every existing place to run them fights you:
- [x] Your laptop. Sessions fight over ports and files. Closing the lid kills the run.
- [x] Hosted agent platforms. Your code, your secrets, and your agent's credentials live on someone else's infra, billed by the seat.
- [x] A cloud dev box. Bills 24/7 while the agent thinks and while you sleep. You still hand-build repo, auth, secrets, and tools for every session.
pier makes each session a micro-VM that manages its own lifecycle. One command launches a VM in your cloud account and drops you into tmux inside it, with:
- [+] your repo on a fresh branch, uncommitted edits included
- [+] Claude Code and Codex installed and authenticated
- [+] your MCP servers configured
- [+] your dev environment built by the repo's own setup script
##What you get
- [+] Parks itself. An in-VM supervisor stops the instance once the agent goes quiet. The disk persists.
- [+] Resumes in under a minute. Files, branches, and credentials exactly as you left them.
- [+] Sessions as hostnames.
pier proxyserves the dev server atcheckout-flow.pier:3000, mirrored on localhost too. - [+] One-command resize. Outgrown the box? One park and resume cycle swaps the machine type, disk intact.
- [+] GitHub-first transfer. The VM fetches your repo straight from GitHub. Only secrets ride the tunnel.
- [+] Per-repo baked images.
pier bakesnapshots your toolchain once. Creates drop to a minute or two. - [+] No control plane. No server, no database, no daemon. Session state lives in instance tags.
- [+] One transport. Attach, exec, file push, and port forwards are all OpenSSH, direct or through the cloud's tunnel.
##The numbers
~$0.04/hMeasured on AWS's default t4g.medium. A stock create is attachable in 42 seconds while agent harnesses finish in the background. A baked create takes 10 seconds longer to boot but arrives with everything installed. GCP wakes slower: a baked create lands in about 1m45 and a resume takes about a minute.
##How it works
A session is one VM plus its persistent disk, tagged and namespaced by your caller identity. All state lives in those tags and on the disk. There is nothing else to operate, back up, or pay for.
flowchart LR
subgraph laptop["laptop"]
cli["pier CLI / TUI"]
end
subgraph aws["AWS account (yours)"]
api["EC2 API
create / stop / start / tags"]
subgraph vm["session VM"]
tmux["tmux · claude / codex"]
sup["pier-supervisor
parks the VM when detached and quiet"]
end
end
cli -- "aws cli" --> api
cli -- "ssh, SSM tunnel as fallback" --> tmux
laptop AWS account (yours)
────── ───────────────────
pier CLI/TUI ── aws cli ──────────▶ EC2 API (create/stop/start/tags)
│ ┌─────────────────────────┐
└── ssh ─────────────────────▶ │ session VM │
(direct to its public IP, │ tmux ▸ claude / codex │
SSM tunnel as fallback) │ pier-supervisor │
│ └─ parks the VM when │
│ detached and quiet │
└─────────────────────────┘ GCP is the same picture with gcloud, the GCE API, and Google's IAP tunnel in place of SSM.
- [+] The supervisor samples every 5 seconds for attached and busy. Detached and quiet past the idle timeout parks the VM.
- [+] The VM holds no cloud credentials. Parking is the VM running
shutdown -h now. Anything needing account credentials happens from the laptop. - [+] A runaway cap parks a looping agent anyway, so it cannot burn compute for days.
##vs. other tools
| pier | Codespaces | Hosted agents | DIY EC2 | |
|---|---|---|---|---|
| Runs on | your AWS or GCP account | GitHub's infra | vendor's sandbox | your AWS account |
| Idle cost | ~$3-4/mo (self-parks) | metered, auto-stop | per-seat / per-task | full rate unless you script it |
| Agent-ready | harnesses + auth + MCP travel | you configure | their agent only | you configure |
| Session lifetime | until you rm it | workspace-scoped | task-scoped | until you clean it up |
| Interface | your terminal, tmux | VS Code / web | web UI | your terminal |
| Setup | one wizard | per-repo config | account signup | everything by hand |
##FAQ
Does pier need a server or a database?
No. There is no control plane. Session state lives in instance
tags, and pier ls is one filtered describe call.
Does the VM hold my cloud credentials?
No. On AWS the instance role carries SSM and nothing else. On GCP sessions run with no service account at all. Parking is the VM shutting itself down. Resize and destroy happen from the laptop.
What happens when I close my laptop?
The session keeps running without you. Once the agent goes quiet past the idle timeout, the supervisor parks the VM. Attach later and it resumes in under a minute.
How do secrets travel?
Once, at create, as an explicit manifest: your agent configs, your
tokens, and the repo files your .pier/include lists.
Nothing loose ships by default, and the create prints which env
files it is not carrying.
Do private repos work?
Yes. pier reuses whatever GitHub credential your laptop already has:
a gh login, git's https credential helper, or ssh keys
through a forwarded agent. It verifies the fetch works before
relying on it.
What survives parking?
Files, git state, and installed tools survive. Running processes do not, parking is a clean stop. Hibernate with RAM intact is on the roadmap.
Which platforms?
The CLI runs on macOS and Linux against AWS and GCP.
pier proxy is macOS-only for now,
pier port works everywhere.
How do I get rid of everything?
pier teardown removes every piece of account groundwork
pier created, all of it tagged. Sessions go with pier rm.
Tie up at the pier.
One wizard, then every session is one command away.
brew install usepier/tap/pier