You control how much moatbox keeps about your spaces with three switches. Owners and admins set them for the whole team in Settings > Privacy. Some can also be set for one space.
The three team modes
On at team level means on for every space, new spaces and forks too. Members cannot turn a team mode off for their own space. Owners and admins change the team policy in the dashboard or with an API key that has the team.admin action. Turning on zero data retention is the exception: it needs a browser session.
Monitoring off
No process list and no command or process history in any space. CPU, memory, disk and I/O samples stay: usage and abuse checks need them.
The space's runtime stops recording commands and processes. Asking a space for its history or process list returns monitoring is off for this space: no process list and no command or process history.
Snapshots off
No automatic history, and no new saved snapshots or share codes. When you turn it on:
- moatbox deletes every space's automatic history for good, right away
- saved snapshots stay until you delete them
- share codes you already made keep working until they expire or you revoke them
- nobody can save a new snapshot or create a share code
- deleting a space takes no final snapshot
Snapshots are covered in Snapshots.
Zero data retention
When you delete a space, moatbox skips the trash and erases the space's snapshots, share codes and records, except the ones listed under It keeps. Sleep that keeps memory still works.
To turn it on you need a signed-in browser session and you type erase space data. No API key can turn it on. Before you confirm, the dashboard counts what it will delete now.
It deletes:
- every saved, automatic and final snapshot of the team's spaces, now
- every share code, now
- spaces in the trash, now; later deletes skip the trash
- after a space is deleted: its metrics, alerts, webhook deliveries, CI job output, run list, approval notices and resets
It keeps:
- billing records: usage, invoices, wallet
- the audit log, with who did what and when
- API key usage counts
- AI usage: requests, tokens and cost per day and model, no prompts
- webhook delivery records for 30 days, or until the space is deleted: event ids, types and small data, never command text or output
- undo points from resets and restores, on the space's server, until they expire or you delete the space
- each deleted space's database row, and its CI job records without their output
It still allows:
- sleep that keeps memory: the state stays on the space's own server
- command output and history: kept inside the space only, never stored by moatbox
Under zero data retention, moatbox saves no CI runner log when a job ends, and run traces carry no command text.
Per-space settings
A space can turn on more than the team does. It cannot turn off what the team policy keeps on; the API answers your team's policy keeps this on.
| Setting | Where | Who |
|---|---|---|
| Snapshots off | The space's Snapshots page, Privacy card | Owners and admins |
| Zero data retention | The space's Snapshots page, Privacy card | Owners and admins |
| Command and process history | The space's Monitor page | Any team member |
For one space, snapshots off deletes its automatic history. Zero data retention deletes every snapshot of that space, saved ones too, and revokes its share codes. Deleting the space then skips the trash. Zero data retention for a space also needs a browser session and the typed phrase erase space data.
Settings > Privacy lists the spaces that set more on their own.
curl -X PUT https://app.moatbox.dev/api/v1/spaces/my-space/privacy \
-H "Authorization: Bearer $MOATBOX_API_KEY" \
-H "Content-Type: application/json" \
-d '{"snapshots_off": true}'
How long moatbox keeps what
The tables below follow what moatbox does. GET https://app.moatbox.dev/api/v1/retention returns moatbox's own retention list without sign-in, and Settings > Privacy shows that list. Some of its rows describe the data differently from these tables.
Inside the space
| Data | Kept |
|---|---|
| Commands run in a space, with their output | 30 days, in the space only. Run traces (below) can hold the commands agents ran. |
| Finished processes: command, user, CPU and memory, no output | 72 hours from the process start, and at most the newest 20,000 |
| Output kept per command stream | Up to 256 KiB per stream, from the start; the rest is dropped. All commands share 10 MiB of kept output per hour. |
| Output of a finished API command, for fetching | 10 minutes after it ends, up to 8 MiB per stream |
On the space's server
| Data | Kept |
|---|---|
| Automatic snapshots | Solo 7 days, Pro 14 days, Team 30 days |
| Saved snapshots | No expiry. Solo keeps 5, Pro 20, Team 50. |
| Deleted spaces, restorable | 72 hours, then purged with their snapshots. Zero data retention skips the trash. |
| Share codes | 7 days by default, 30 days at most |
| Undo points from resets and restores: the disk from before | Solo 30 days, Pro 90 days, Team 365 days |
In moatbox's database
| Data | Kept |
|---|---|
| CPU, memory, disk and I/O samples | 7 days |
| Alerts and space events | 90 days |
| Run traces for OpenTelemetry export | 90 days. Erased with their event. Without command text under zero data retention. |
| Webhook deliveries, with payloads and attempts | 30 days. Payloads hold ids, types and small data, never command text or output. |
| Browser sign-ins | 30 days, renewed on use, 90 days at most |
| Audit log | While the team exists, also under zero data retention |
| AI usage: requests, tokens and cost per day, space and model | While the team exists. Prompts and answers are never stored. |
| API key request counts per day | While the team exists, also after the key is revoked |
Close your account
Go to Settings > Privacy, press Close account… and type your account's email to confirm.
What happens now
For each team you are alone in, moatbox:
- closes the team, stops its spaces and moves them to the trash
- cancels the plan
- revokes the team's API keys and pending invites, and turns off automatic top-up
For each team you share with other people, you leave it. The audit log records that you closed your account.
For you, moatbox signs you out everywhere, deletes your SSH keys and push subscriptions, revokes your API keys and the invites you sent, and disables the account. You get an email with the date of final deletion. To change your mind before then, reply to that email.
After 30 days
moatbox deletes each closed team's spaces and their snapshots, then the team itself with its audit log. Then it deletes your user record. If it cannot delete the record, it erases your email, name, avatar and sign-in links from it. The spaces of a closed team stay in the trash for those 30 days instead of the usual 72 hours.
The only-owner rule
If you are the only owner of a team that other people still use, moatbox refuses to close your account:
you are the only owner of <team>, which other people still use: make one of them an owner, or remove them, first
Make another member an owner, or remove the other members, and try again. Roles are covered in Teams.
Closing needs a signed-in browser session. No API key can do it.
API
All routes live under https://app.moatbox.dev/api/v1.
| Method and path | Does | Needs |
|---|---|---|
GET /retention |
The retention list that Settings > Privacy shows | Nothing |
GET /teams/{team}/privacy |
Team modes, per-space overrides, and what zero data retention would delete now | Any member; key action team.read |
PUT /teams/{team}/privacy |
Set monitoring_off, snapshots_off, zero_retention |
Owner or admin; key action team.admin; turning on zero_retention needs a browser session and "confirm": "erase space data" |
PUT /spaces/{space}/privacy |
Set snapshots_off, zero_retention for one space |
Owner or admin; key action space.update; same rule for zero_retention |
PATCH /spaces/{space}/monitoring |
{"enabled": false} stops command and process history for one space |
Any member; key action space.update |
POST /me/close |
Close your account. Body: {"email": "<your email>"} |
Browser session |