Error: listen EADDRINUSE: address already in use 127.0.0.1:4000 | Another process holds the port. | Stop it, or use --port <other>. |
Could not reach <baseUrl> (fetch failed). Studio will keep running and retry on first /api/credentials hit. | /v1/auth/cli/config already succeeded, but the follow-up /v1/auth/anonymous hit a transport error. The Studio server starts and will retry. | Bring connectivity back; the SPA recovers on its next /api/credentials poll without restarting arkor dev. |
TypeError: fetch failed (or an equivalent transport error that exits arkor dev immediately) | /v1/auth/cli/config itself was unreachable, so the deployment mode could not be determined and the CLI fails fast. | Restore connectivity and re-run arkor dev. |
No credentials on file — bootstrapping an anonymous session. Run `arkor login --oauth` to sign in to your account instead. | First arkor dev on this machine when the deployment advertises OAuth. The CLI bootstraps anonymous so Studio can start immediately; the message is informational, not an error. | Nothing required. To upgrade to a real account, run arkor login --oauth separately (it overwrites ~/.arkor/credentials.json) and refresh Studio. |
No credentials on file — requesting an anonymous token. | Same as above on anon-only deployments (no OAuth advertised in /v1/auth/cli/config). The CLI omits the arkor login --oauth hint because that command would fail there. | Nothing required. |
Anonymous id: <id> — Arkor Cloud uses this id to recognise this client across sessions. Keep `<home>/.arkor/credentials.json` to stay signed in as the same anonymous identity. | Informational follow-up after the anonymous bootstrap completes — surfaces the cloud-side identifier and where it lives (the path is the resolved credentialsPath(), typically ~/.arkor/credentials.json on Linux and macOS). | Nothing required. Back up the credentials file if you want to keep using the same anonymous identity from another machine. |
Anonymous sessions aren't guaranteed to persist — sign in with `arkor login --oauth` to tie future work to your Arkor Cloud account. | Persistence nudge fired alongside the success message when the deployment is known to support OAuth. Anonymous work has no SLA on the cloud-api side, so the CLI surfaces the upgrade path before you invest real work. Suppressed on anon-only deployments. | Optional: run arkor login --oauth to tie future work to your account. Existing anonymous work stays under its current id; there is no migration path today. |
Failed to bootstrap an anonymous session (HTTP <status>). This deployment may require sign-in — run `arkor login --oauth` and try again. | /v1/auth/anonymous rejected the request with a 4xx, so anonymous bootstrap cannot proceed. | Run arkor login --oauth to complete the browser flow, then re-run arkor dev. |
Could not write ~/.arkor/studio-token (...). The Studio at http://localhost:<port> is unaffected, but the Vite SPA dev workflow will see 403s on /api/*. | $HOME is read-only or umask blocks 0600. The bundled Studio still works; only the standalone Vite dev workflow is affected. | Run from a writable home, or only use the bundled Studio served by arkor dev. |
HTTP 403 with { "error": "Studio API is loopback-only" } (in browser devtools) | The Host header is something other than 127.0.0.1 / localhost. | Reach Studio via http://localhost:<port> or http://127.0.0.1:<port>. Reverse proxies or 0.0.0.0-bound shells will be rejected by design. |
HTTP 403 with { "error": "Missing or invalid studio token" } (in browser devtools) | The CSRF token in the page does not match the current launch. Usually a stale tab from a previous arkor dev. | Reload the tab. Token rotates on every launch. |