ChatGPT
Sign in and verify#
Sign in through the system browser, then verify subscription access:
bun run start auth login openai-chatgpt
bun run start auth models openai-chatgpt
bun run start auth verify --provider openai-chatgpt
bun run start auth status openai-chatgptRegistration and consent#
Initial sign-in registers Poppet with its own host identifier and issued client ID. The browser handles account and workspace selection and plan-usage consent. The local callback displays a confirmation page before its listener closes. Return to the terminal for the final identity and permission checks. Later sign-ins reuse the registration and host identifier until logout. The next login after logout creates a fresh registration and host identifier. Poppet currently stores one account and rejects a returning identity that does not match it until logout. OpenAI registration and sign-in
auth verify selects the first visible model in the account’s catalog. Pass a
model slug from auth models to choose another, for example
bun run start auth verify <slug> --provider openai-chatgpt. Verification makes two streamed Responses
requests, which consume ChatGPT plan usage. It requests a local tool, supplies a
random token as the tool result, and requires the completed answer to return that
token. Success records the model and verification time; it does not guarantee
future quota or eligibility.
Subscription inference
If identity sign-in succeeds without plan-usage permission, status reports
planUsage: false. Run bun run start auth login openai-chatgpt --consent to request consent
again. Usage limits, ineligible accounts, temporary failures, and interrupted
streams produce separate errors. Model requests are not automatically retried.
The flow uses OAuth credentials and requires no API key or client secret.
Model resolution reuses a successful catalog lookup for up to one minute within
the same process, including across interactive CLI turns and worker requests.
Each lookup still checks current authentication. Credential changes, an expired
entry, or a model absent from the cached catalog trigger a fresh request.
auth models and auth verify always fetch a fresh catalog. Failed responses
are not cached, and nothing is written to disk. Separate one-shot CLI processes
do not share the cache. Enable timing logs to
see catalog hits and misses.
Credential storage#
Credentials live in <POPPET_DATA_DIR>/auth/connection.json, with owner-only file
permissions (0600) inside a protected directory (0700). Writes use atomic
replacement. Tokens are redacted in application values and omitted from command
output. Near-expiry access tokens are refreshed with rotating credentials saved
together. An exclusive auth/owner.lock prevents concurrent authentication
commands and is removed on normal shutdown or interruption. After a process
crash, remove a remaining lock only after confirming no Poppet auth command is
running.
Logout#
bun run start auth logout openai-chatgpt deletes the saved connection file,
including account identity, tokens, verification, registration, and host identifier,
then attempts remote revocation. Status does not recreate those details.
Other providers’ credentials are preserved. If remote revocation cannot
be confirmed, the command reports this so you can disconnect Poppet in ChatGPT
Settings.
See provider selection for configuring inference and chat for saved sessions.