docs(readme): document headless & CI authentication · Entire

docs(readme): document headless & CI authentication

13e379e→main· peyton-alt·3d ago·1 file·+39 added/-0 removed

ENTIRE_TOKEN_STORE=file, ENTIRE_TOKEN_STORE_PATH, and ENTIRE_TOKEN existed only as an internal package comment. Add a user-facing section covering the two supported paths (file-backed interactive login on keyring-less machines, env-token injection for CI/workload identity) and a troubleshooting callout quoting the error strings entire login actually emits.

Co-Authored-By: Claude Fable 5 noreply@anthropic.com

Sessions

01KXGTTNGCEACC83QZEJ5YAF0DView transcript

Changes

1

24 unmodified lines

...

## Headless & CI Authentication

By default `entire login` stores tokens in the OS keyring (macOS Keychain, Linux Secret Service, Windows Credential Manager). Machines without a usable keyring — headless servers, containers, minimal VMs, CI runners — have two supported paths:

### Interactive login on a headless machine

Use the file-backed token store. The device-auth flow already works without a local browser (the CLI prints an approval URL you can open on any machine); only token storage needs the override:

```bash
ENTIRE_TOKEN_STORE=file entire login
```

Tokens are written with `0600` permissions to `tokens.json` in your Entire config directory (`~/.config/entire` by default). Override the location with `ENTIRE_TOKEN_STORE_PATH`. Set `ENTIRE_TOKEN_STORE=file` persistently (e.g. in your shell profile) so later commands read from the same store.

### Non-interactive automation (CI, workload identity)

Skip login and storage entirely by injecting a token per invocation:

```bash
ENTIRE_TOKEN=<login-or-sa-session-JWT> entire ...
```

`ENTIRE_TOKEN` bypasses stored credentials; the CLI derives the control-plane endpoint from the token itself. Nothing is written to disk. This is the right path for CI pipelines and service accounts.

> **Seeing `save login` / `failed to unlock correct collection` errors from `entire login`?** That's the OS keyring being unavailable — use one of the two paths above.

## Local Device Auth Testing

If you're working on the CLI device auth flow against a local `entire.io` checkout: