npx skills add ...
npx skills add starchild-ai-agent/official-skills --skill chatgpt-codex-onboarding
Connect a ChatGPT or Codex subscription via OAuth device-code login.
npx skills add starchild-ai-agent/official-skills --skill chatgpt-codex-onboarding
Use the user's existing ChatGPT or Codex subscription for gpt-5-codex, gpt-5, gpt-5-mini access โ without an API key.
This is a script-mode skill โ no tools registered. Read this file, then call the exports from a bash block.
byok-custom-model skill โ for vendor-key BYOK setup (DIFFERENT mechanism, NOT OAuth)config/context/references/model-onboarding.md โ overall model-selection landscapeโ Use when the user EXPLICITLY says one of:
โ Do NOT use for:
byok-custom-modelโ ๏ธ Vendor names that sound similar (Codex, OpenAI, GPT) are NOT a signal to start OAuth on their own. Only an explicit user mention of "subscription / sign in / login with ChatGPT" qualifies.
If poll returns status='pending', the user hasn't finished yet โ wait for them, then poll again. Don't loop poll automatically.
After the user approves:
| Function | Required args | Purpose |
|---|---|---|
status() | โ | Inspect current OAuth state, expiry, model list |
start() | โ | Begin device-code flow โ verification_url + user_code |
poll(pending_id=None) | โ | Check authorization (call after user confirms approval) |
logout() | โ | Disconnect + remove credentials |
refresh() | โ | Force-refresh access token (debug; normally automatic) |
models(force=False) | โ | List available models from the OAuth endpoint |
usage(force=False) | โ | Subscription usage stats |
force=True on models / usage bypasses the cache TTL.
All functions return a dict with ok: True on success or ok: False, error: "..." on failure.
When poll() returns status='connected', the first thing you must do is tell the user:
"Connection successful. Please refresh your browser page โ once it reloads, the new
openai-codex/*models will appear in the model picker."
The web frontend caches the model list client-side and does not auto-refresh after an OAuth connect completes. Without a manual page refresh the user will not see their newly available models and will think the connection failed. Always include this instruction in your reply โ do not assume the picker updates on its own.
Models appear with the openai-codex/ prefix:
openai-codex/gpt-5-codex โ primaryopenai-codex/gpt-5 โ full GPT-5openai-codex/gpt-5-mini โ smaller / fasterAfter refresh, the user switches via /model openai-codex/gpt-5-codex or the model picker UI.
Subsequent calls hit OpenAI directly using the OAuth token โ bypasses the platform proxy. Subscription usage limits apply (not the platform's credit balance).
Tokens auto-refresh via refresh_token. If a 401 surfaces:
refresh() โ try the manual refresh path.logout() + restart from start().start and poll. Auto-polling wastes API calls and gives stale "pending" responses.python3 - <<'EOF'
import sys, json
sys.path.insert(0, "/data/workspace/skills/chatgpt-codex-onboarding")
from exports import poll
print(json.dumps(poll(), indent=2))
EOF