Security

Trust it because you can check it.

Your crew works on the station you pick, with your keys and in your name. Every job is sealed off, and wiped when it's done.

Your station or ours

You choose where the work happens.

Run your crew on your own station, or let us run one for you on Moondeck Cloud. Here's what that means for your code.

Your own station compared with Moondeck Cloud
WhatYour own stationMoondeck Cloud
Where the crew worksYour own machine, or your own AWS account. Moondeck has no access to that account.A machine we run, made for that one job.
Your codeStays on your station. Moondeck's cloud holds no copy.Lives on the job's own machine while it runs.
Who runs the workYour station does. Moondeck's cloud coordinates; the work runs on your machine.We do, on Moondeck's own machines.
When the job endsIts sandbox and its copy of your code are deleted.The whole machine is wiped.

Either way, a job only gets the keys it needs, and only while it runs.

Sealed jobs

Every job starts clean.
Every job ends wiped.

A sandbox of its own

Every job gets its own container, its own copy of your code and its own branch. The agents' tools run inside it, not on your station.

Only what you open

The ports you declare for a preview are the only ones that reach you, through Moondeck's preview link. Nothing else is forwarded.

Wiped when it's done

When the job ends, its sandbox and working copy are deleted. On Moondeck Cloud, the whole machine goes with them.

The cloud's own keys, out of reach

Every major cloud hands a machine its credentials at 169.254.169.254. On Moondeck Cloud, nothing inside a job can reach that address. Check it yourself, from inside one.

In your name

Done as you.
Never as a bot.

Every job carries the credentials of the person who started it. The work shows up as theirs, so you always know who did what.

What a job carrieswhen you start it

Your name
Commits are written with your own git name and email.
Your SSH key
Moondeck makes a key just for you. Only its public half goes to GitHub, and your own ~/.ssh is never touched.
Your GitHub sign-in
Pull requests open with your own GitHub sign-in, handed to the job that needs it.
Your AI accounts
The crew works with the AI accounts you connected. You pay the provider directly.

Private keys

Your agents use your private keys.
They never see them.

Mark a key as private in your repository and the crew works with a stand-in. The real key is added only on its way to the service it belongs to.

1 · Inside the job

Your agent sees a stand-in

STRIPE_SECRET_KEY = stand-in

It uses it like the real thing. It can't read the real one, because it isn't there.

2 · Outside the job

Moondeck swaps it

only for api.stripe.com

On its way out, the stand-in is replaced with the real key. Only for the service the key belongs to.

3 · At the service

Stripe gets the real key

the real key

The answer comes back with the key scrubbed out, so it can't leak into the job that way either.

You choose the keys
Mark a key in your repository's .env.schema with the service it's for. Everything else, like a database password, still reaches the job as its real value.
It fails closed
If anything stops the swap from working safely, the job doesn't get the key at all. Only the owner can let a key's real value through.
Every swap is logged
Before a key goes out, the station records the job, the key and the service. Never the value.
Where it stops
It works for HTTPS services that take the key in a header, as most APIs do. A key used to sign requests, like AWS's, can't be swapped.
A repository's environment settings: Stripe, OpenAI and Resend keys each marked proxied to their own service, a database address marked sensitive
A repository's settings in Moondeck: three keys go only to their own service; the database address reaches the job as it is.

Roles and permissions

Decide who can do what, before anything runs.

Roles set what each person can do, which agents and stations they can use, and how much they can spend. The same rules apply to your agents.

A Contractor role's usage caps: two tasks at once, three agents per task, ten starts a day and $150 a month
The agents a Contractor role unlocks: Kit, Remy and Sol are attached, the rest stay open to everyone

Roles add up

A person can hold several roles and gets everything they grant together. A new role never quietly takes access away.

Caps that hold

Limit jobs at once, starts per day and monthly spend. Your plan is always the ceiling: a role shares out what you bought.

Agents and stations

A role can unlock specific agents and stations. One that no role mentions stays open to everyone.

One rulebook

People and agents share one list of permissions, so tasks.start means the same for both.

New workspaces start with two roles, Workspace Admin and Member. Nothing narrows until you narrow it.

Questions.

Found a vulnerability? Email security@moondeck.io.

Do commits and pull requests show up as a bot?

No. Every job runs with the credentials of the person who started it: your git name and email, an SSH key made just for you, and your own GitHub sign-in. Commits and pull requests are yours, not a bot's.

Can my agents read a key I've marked as private?

No. A key your repository marks as private, with the service it belongs to, reaches the job only as a stand-in. Moondeck swaps in the real key outside the job, on HTTPS requests to that service only, and scrubs it from the answer. The agents can use the key there for as long as the job runs, but never read it. If the swap can't be done safely, the job doesn't get the key at all.

Does Moondeck touch ~/.claude or ~/.ssh?

No. Jobs never mount ~/.claude or ~/.ssh. Moondeck makes a separate SSH key for you instead, and each job's credentials go into its own throwaway sandbox.

If I run my station on my own AWS, do you have access to that account?

No. You own the AWS credentials, and Moondeck has no access to your AWS account. On Moondeck Cloud the question doesn't apply: those machines are ours to run.

Can I limit what a teammate, or an agent, can do?

Yes. Roles decide who can start a job, which agents and stations they can use, and caps on jobs at once, starts per day and monthly spend. A person can hold several roles and gets what they grant together; your plan is always the ceiling. Agents follow the same permission list as people.

Do I need a GPU?

No. Moondeck's agents call hosted models over the network: Claude, Codex, Grok, Cursor and more. There's no local inference.

Moondeck

Put your crew on deck.

Start free