Size each branch
A refactor across a monorepo gets 16 vCPU; a docs fix gets 2. The size you pick is the machine you get — one environment, one instance, no bin-packing.
Disposable cloud dev environments
Ephemerals gives every branch its own cloud machine with a coding agent already running on it. The work carries on while you are offline, asleep or on a train — and it is all still there when you open the tab again.
$10 / seat / month · compute from $0.18 an hour, billed by the second
Editing src/billing/webhook.ts
84 tests passed · serving :3000
Cloning acme/site…
Zero inbound ports
Nothing on the internet can open a connection to your box.
One instance per branch
Dedicated, never shared, sized from 2 to 16 vCPU.
Three ways in
Browser terminal, SSH, and a preview URL per port.
Gone when the PR merges
The machine is reaped and its secrets go with it.
Parallelism
One machine per branch is what makes ten agents at once an ordinary Tuesday. No stashing, no port already in use, no waiting for one agent to finish before you start the next — and nothing running on your laptop competing for its fans.
A refactor across a monorepo gets 16 vCPU; a docs fix gets 2. The size you pick is the machine you get — one environment, one instance, no bin-packing.
Environments belong to the organization, not to whoever pressed the button. A colleague can open the branch that is already running instead of starting a second box on the same work.
The agent pushes an event when it moves, so the file tree and the diff refresh themselves. Nothing polls, and a missed event costs a stale second, not a wrong view.
Availability
The agent runs in a tmux session on the instance, not in your browser
tab. Shut the lid, lose the wifi, close the window — the pane keeps running on the
box. Open the workspace again and you reattach to it, scrollback intact.
$ tmux new-session -A -s agent
[detached — client gone 21:14]
● claude
running 47 test files…
wrote src/orgs/invite.ts
wrote src/orgs/invite.test.ts
Access
Start a dev server on any port and Ephemerals hands you a URL for it. WebSockets and hot reload are proxied, so the page updates as the agent edits the file — and previews live on their own registrable domain, so a page inside one can never reach the app's session cookie.
Your keys, your dotfiles, root on the machine. Forward a port with
ssh -L and the environment's localhost is your localhost. Public
keys only — passwords are refused outright, and the environment itself still
has no port open to the world.
$ ssh 562ae1d6@ssh.ephemerals.dev
ubuntu@ephemeral:~/checkout$ git status
On branch fix/stripe-webhook-retry
$ ssh -N -L 3000:localhost:3000 562ae1d6@ssh.ephemerals.dev
Security
An agent with a shell is an agent with your SSH keys, your browser profile and your company's whole checkout. Give it a machine that holds none of that, that nobody can connect to, and that you can throw away.
Isolated
Each environment is one EC2 instance in a security group with no inbound rules at all. Every terminal, forward and preview rides a channel the box opened outward through AWS Systems Manager.
Your secrets are sealed with a KMS data key under an encryption context, so a row lifted into another account does not decrypt — it errors. The instance role holds no KMS grant, and no secret value is ever returned to a browser.
Auditable
Your role is never baked into the cookie; it is re-read from the database on each guarded request. Removing a member takes effect on their next call, not at the end of a seven-day session.
Support access is a signed, read-only session that names the real actor inside the token, with a required reason and a durable record of who, whom, why and when. Commits are authored from the session that made them.
Ephemeral
A machine exists for one branch. When the pull request merges, it is reaped and the secrets scoped to it are deleted with it.
A bad afternoon costs you one disposable box, not your workstation. There is no long-lived host accumulating state, credentials and everyone's half-finished branches.
Review
Read the diff in the workspace, commit, push the branch, open the pull request — without leaving the tab. The commit is authored by the person who pressed the button, resolved per request, so a colleague picking up a running branch does not sign your name to it.
src/billing/webhook.ts
- if (event.type === 'invoice.paid') {
+ if (isTerminal(event.type)) {
+ await claimBeforeReport(event.id);
src/billing/webhook.test.ts
+ it('ignores a replayed event', async () => {
Coming soon
The workspace is a browser tab and the agent is a process on a machine — neither of them needs you sitting in front of it. Start a branch from your phone on the way in, or from the thread where somebody reported the bug.
Pricing
Compute is metered per second from the moment an environment is created until the moment it is deleted. No trial, no free tier, and no card details in our database — payment is collected by Stripe and managed in Stripe's own portal.
Per seat
$10 / user / month
Billed monthly, counted from the members of your organization. Everyone in the org can see and use every environment in it.
Per machine hour
| Size | Memory | Per hour |
|---|---|---|
| 2 vCPU | 4 GB | $0.18 |
| 4 vCPU | 8 GB | $0.36 |
| 8 vCPU | 16 GB | $0.72 |
| 16 vCPU | 32 GB | $1.44 |
Charged by the second, so a nine-minute environment costs nine minutes.
Sign in with GitHub, pick the repositories you want to work on, and start one. It boots with the toolchain and the agent already on it.
Start with GitHubWe only ask for the repositories you pick.