--- title: Grabette Fleet emoji: ๐ŸŒ colorFrom: yellow colorTo: indigo sdk: docker app_port: 7860 pinned: false hf_oauth: true hf_oauth_expiration_minutes: 480 --- # Grabette fleet โ€” operator dashboard + command broker A **Docker** HuggingFace Space (runs fine on the **free CPU tier**). It is the operator dashboard *and* an in-memory command broker for one user's fleet. ``` operator (this Space, HF login) โ”€โ”€queue commandโ”€โ”€โ–ถ in-memory broker โ—€โ”€โ”€short-pollโ”€โ”€ device (Pi) โ—€โ”€โ”€device statusโ”€โ”€ (Bearer hf_token) device captured data โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถ HF dataset (durable) ``` - **Operator** signs in with HuggingFace (native Space OAuth) and controls only their own devices. - **Devices** connect outbound with `Authorization: Bearer `; the Space resolves the owner via `whoami` and groups devices by HF identity. - **Transport** is short-polling โ€” which also keeps the free Space awake (sleep is timed from the last request). State is in-memory: a restart drops it and devices re-register on their next poll. Durable data (device history, captured datasets) lives in HF datasets, not here. ## Duplicate for your own fleet One Space = one owner = one fleet. Click **โ‹ฎ โ†’ Duplicate this Space** to run your own โ€” `hf_oauth` is auto-provisioned, so there's nothing to configure. Then point your devices at it with `GRABETTE_RELAY_URL=https://-grabette-fleet.hf.space`. Devices are run with `device_app.py` from the grabette_connector project.