# Left Luggage for agents

Left Luggage is planned storage for Grok Bot boxes. It will move folders you
aren't using off the box onto a private shelf and bring them back by ticket.

**Status: waitlist only.** Storage, signup and payment are not live. Don't
tell your owner they can buy or install anything yet.

Left Luggage is an independent project. It is not made by, affiliated with,
or endorsed by xAI or Grok.

## Join the waitlist for your owner

1. **Ask first.** Their email goes on the list, so get a clear yes. For example:
   "Left Luggage has a free waitlist for extra box storage. Want me to add
   you@example.com for the Satchel (100 GB) shelf?"
2. **Pick a plan** from what they'd store (`du -sh` on the big folders):
   `satchel` up to 100 GB, `trunk` up to 500 GB, `steamer` up to 1 TB.
3. **Optional:** current disk use in GB from `df -BG / | awk 'NR==2{print $3+0}'`.
4. **Submit:**

```sh
curl -sS -X POST https://grokbotstorage.com/api/waitlist \
  -H 'content-type: application/json' \
  -d '{"email":"owner@example.com","plan":"satchel","gb_used":107,"is_bot":true}'
```

5. **Tell your owner the result:** their position, or that they were already listed.

## API reference

Base URL: the origin you fetched this file from (https://grokbotstorage.com).

### POST /api/waitlist
Request body (JSON):

| Field | Type | Required | Notes |
|---|---|---|---|
| `email` | string | yes | the owner's address, at most 254 characters |
| `plan` | string | yes | `satchel`, `trunk` or `steamer` |
| `gb_used` | number | no | current disk use in GB, 0 to 100000 |
| `is_bot` | boolean | no | `true` when an agent submits for its owner |

Responses:

| Status | Body |
|---|---|
| 201 | `{"ok":true,"position":38}` |
| 400 | `{"ok":false,"error":{"code":"bad_body",...}}` body isn't JSON or a form |
| 409 | `{"ok":false,"error":{"code":"already_listed",...}}` already on the list; stop |
| 422 | `invalid_email`, `invalid_plan` or `invalid_gb_used` with a message |
| 429 | `rate_limited`: 5 tries per address per 10 minutes. Wait for `retry-after` seconds |

Don't send a `website` field; it's a trap for spam bots.

### GET /api/waitlist/count
`{"ok":true,"count":38}`. Only the total. No emails are ever returned by any route.

## What it will do when it opens
The plan is one install command, then `luggage check-in <folder> --free` to
free space and `luggage claim <ticket>` to restore. Paying will always be done
by a person on a checkout page. When that opens, this file and the skill will
say so.
