oneapi-agent-toolkit

Browser sign-in (OAuth) for GPU providers: research notes

Status: research only, nothing implemented. Read from each provider’s public docs on 2026-10-15. No app was registered, no account created, no sign-in attempted. Today oneapi-agent takes a provider API key from an environment variable or from oneapi-agent login <provider> (OS password store); see gpu-testing.md.

remote-test needs a credential that can: read the account, list/price GPUs, create a machine, read its state, delete it, and (DigitalOcean only) add and remove a throwaway SSH key. A sign-in flow is only worth building if it can grant that and nothing more.

Summary

Provider OAuth / browser sign-in for third-party CLIs Device flow Fine-grained access Verdict
DigitalOcean Yes. OAuth 2.0 authorization code + PKCE for public clients, Dynamic Client Registration, loopback redirects on any port Not documented Yes: token scopes such as droplet:create Feasible now
Vultr Yes, but heavier. OAuth 2.0 / OIDC apps, PKCE, consent screen, app review Not documented Yes, through an IAM policy attached to the app Feasible after Vultr approves an app; several gaps in the docs
Runpod No public flow. Runpod’s own flash login opens the console and saves a key, but no third-party API is documented No API keys: All / Restricted / Read Only Not possible with public docs; keep API keys
Vast.ai No. API keys only No Scoped API keys (permissions JSON) Not possible; keep API keys, recommend a scoped key

DigitalOcean

Docs: https://docs.digitalocean.com/reference/api/oauth/, scopes: https://docs.digitalocean.com/reference/api/scopes/, user tutorial: https://www.digitalocean.com/community/tutorials/how-to-use-oauth-authentication-with-digitalocean-as-a-user-or-developer.

Vultr

Docs: https://docs.vultr.com/platform/iam/oauth, https://docs.vultr.com/platform/iam/oauth/access-tokens/how-to-integrate-a-third-party-app-with-vultr-oauth, https://docs.vultr.com/platform/iam/oauth/access-tokens/how-to-use-pkce-with-vultr-oauth, https://docs.vultr.com/platform/iam/oauth/authorizations/how-to-authorize-a-third-party-oauth-application.

Runpod

Docs: https://docs.runpod.io/get-started/credentials, https://docs.runpod.io/flash/cli/login, https://docs.runpod.io/runpodctl/reference/runpodctl-config.

Vast.ai

Docs: https://docs.vast.ai/cli/authentication, https://docs.vast.ai/guides/reference/api-keys.md, https://docs.vast.ai/api-reference/authentication.md.

Recommendation

  1. Keep API keys plus oneapi-agent login as the default for all four providers, and recommend least-privilege keys in the docs (Vast scoped key, Runpod where possible).
  2. If browser sign-in is wanted, start with DigitalOcean: PKCE public client, Dynamic Client Registration (or one registered app), loopback redirect, the six scopes above, refresh token in the OS password store. CI keeps using OCEAN_API_KEY.
  3. Vultr second, after confirming with Vultr that a public client with a loopback callback is allowed, and after an app review.
  4. Runpod and Vast.ai: nothing to build until they publish a third-party flow.