skills/okx-cex-auth/SKILL.md
Use this skill when the user wants to 'login/log in/sign in', 'authenticate', 'authorize', 'connect OKX account', 'set up credentials', 'first time setup', 'configure okx', '登录', '授权', '认证', '连接账户', '首次配置'. Also when any OKX CLI command fails with an auth error: 'Run okx auth login first', 'Session expired', 'not authenticated', 'requires_auth', '401 Unauthorized', 'token expired/not found', 'StorageNotFoundError', '会话过期', '未认证', '需要登录'. Also when the user asks about login status or the login was interrupted. Also when the user wants to install/update/check/remove the okx-auth binary — 'install/update/remove auth', 'download okx-auth', '安装/更新/卸载认证', 'auth binary status', 'Failed to spawn okx-auth'. Also use before using okx-cex-trade/portfolio/earn/bot for the first time. Do NOT use for market data queries (use okx-cex-market).
npx skillsauth add okx/agent-skills okx-cex-authInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
OAuth 2.0 device flow authentication for OKX CLI. Guides first-time setup, re-authentication after session expiry, and logout.
| Site | Region | URL |
| -------- | ----------------------- | --------------- |
| global | Global | www.okx.com |
| eea | EEA | my.okx.com |
| us | US | app.okx.com |
Site is a separate dimension from auth method. Both API-key and OAuth paths require a site. Once selected, a site is persisted:
profile.site in ~/.okx/config.toml (written by okx config init).okx-auth binary state the first time okx auth login --site <X> succeeds, and returned by okx auth status --json as the site field.There is no okx config set-site command — site cannot be persisted independently of an auth attempt. For OAuth flows, the agent must remember the user's choice within the conversation and pass --site <X> on okx auth login.
Install okx CLI if not already installed:
npm install -g @okx_ai/okx-trade-cli
Unconditional rule — do NOT skip Step 0 under any circumstances. Even if a prior skill (preflight, okx-cex-portfolio, etc.) already ran auth status and passed you a conclusion like "user is not_logged_in, go log in" — you MUST re-run the two commands below yourself and walk Steps 0.1 → 0.2 → 0.3 in order. Upstream tool output does not substitute for your own pre-flight. The single most common failure mode for this skill is an agent that reads an upstream "not authenticated" signal, skips Step 0.1 site selection, and calls okx auth login with a silently-defaulted site.
Run both in parallel:
okx config show --json
okx auth status --json
Then apply the following three checks in strict order — each step short-circuits the rest.
A site is considered already selected if either is true:
config show --json has any profile with a non-empty site field, ORauth status --json returns a non-empty site field AND status is logged_in or pending.⚠ When
statusisnot_logged_in, thesitefield fromauth status --jsonis a default placeholder (typically"global") that the auth binary emits regardless of user choice — it does NOT mean the user ever picked a site. Treat it as absent.
If neither condition above holds, site has never been chosen. You MUST ask the user to pick one before any login attempt by echoing the following menu verbatim (Chinese), and wait for their reply:
您需要选择要连接的 OKX 站点:
- Global (www.okx.com)
- EEA (my.okx.com)
- US (app.okx.com)
Map the reply (1/2/3 or global/eea/us) to the corresponding site id and remember it for the rest of this flow. Do NOT default to global silently — that hides the regional choice from the user.
Parse config show --json: does any profile have a non-empty api_key field?
If yes → STOP. Tell the user "已配置 API key (profile: <name>)" and proceed with their original request directly. DO NOT run okx auth login or okx config init.
The CLI's REST client always prefers API key over OAuth and never falls back (see
rest-client.ts applyAuth). Starting an OAuth login in this state is wasted effort — any OAuth token obtained would not be used, because the broken API key is still picked first.Belt-and-suspenders: as of CLI
1.3.1-beta.17,okx auth loginitself refuses to start OAuth when any profile hasapi_key— in--manualmode it emits{"status":"skipped","reason":"api_key_configured","profile":"<name>"}. Treat that output as success.
If Step 0.2 detected an api_key profile and the subsequent API call returns an authentication error (401 Unauthorized, Invalid Sign, Invalid API-KEY, OKX error code 50111/50113), the API key is bad — OAuth login is NOT a valid remediation. Per rest-client.ts applyAuth, any OAuth token obtained afterwards would still not be used because the broken API key is still picked first.
Present the user with exactly these two options, neutrally (do NOT label OAuth as "recommended"):
https://<site>/account/my-api) and either provides AK/SK/PP to you or re-runs okx config init themselves.okx config use <other-profile> or delete the profile block in ~/.okx/config.toml), THEN run the OAuth login flow from Step 0.3.Option 2 requires removing the profile first. If you attempt okx auth login while the API key profile still exists, the CLI guard will skip OAuth with {"status":"skipped","reason":"api_key_configured",...} and nothing will change.
Wait for the user's choice. Do not pick for them.
Use auth status --json:
| status value | Action |
| --------------- | ------ |
| logged_in | STOP. Reply using the success template from Agent login procedure Step 3 logged_in branch (site + scopes only; see its negative-list rules), then proceed. |
| pending | Previous login in progress — follow Login Flow wait-for-signal procedure. Do NOT start a new login, do NOT auto-poll. |
| not_logged_in | Proceed to Login Flow with the site chosen in Step 0.1. |
okx auth login without this)Before invoking okx auth login (with or without --manual), you MUST verify all three of the following are true right now:
1 / 2 / 3 / global / eea / us).--site <...>.If any of the three is false — even if a prior skill's output, auth status --json output, or config show --json output seems to imply a site — you MUST first post the Step 0.1 menu, wait for the user's reply, then re-check this gate. The site field in auth status --json when status is not_logged_in is a placeholder (typically "global") and does not satisfy condition 1.
Worked counter-example (anti-pattern):
Upstream portfolio skill runs
auth status --json, gets{"status":"not_logged_in","site":"global"}, tells you "user is not_logged_in, load okx-cex-auth and log in". ❌ Wrong: you read that context, runokx auth login --manual --site global, immediately return the OAuth URL and code. ✅ Right: you ignore the upstream site value, post the Step 0.1 menu yourself, wait for user's reply, then runokx auth login --manual --site <user's choice>.
Prerequisite: Step 0 completed and the Pre-login Gate above passes. You have a site the user just chose in chat, and you confirmed no
api_keyprofile exists.
okx auth login without --manual is a blocking command — it polls until the user authorizes in their browser.
CRITICAL for AI agents: You MUST use
okx auth login --manualto avoid blocking. The--manualflag outputs a JSON payload with the verification URL and user code, then exits immediately — it does NOT block.
Run okx auth login --manual --site <global|eea|us> with the site chosen in Step 0.1.
{"status":"skipped","reason":"api_key_configured",...}, your Step 0.2 check was stale — re-read config show --json and stop. Do not retry.{"verificationUri":"...","userCode":"XXXX-XXXX","expiresIn":600}.Surface the verification URL and user code in your assistant reply — NOT only inside a tool-output block.
⚠ CRITICAL. The tool-output panel in many UIs (openclaw-control-ui, Claude Desktop, IDE chat panels) is collapsible and users may run with it hidden by default. If the URL and code appear ONLY in tool stdout, users cannot authorize. You MUST echo the parsed fields in your own natural-language response so they render as plain chat text.
Parse the JSON returned by the previous step and reply using exactly one of the templates below (verbatim except for field substitution). The wording is normative — do not abbreviate, reword, reorder, or translate.
Chinese template (use when the user is conversing in Chinese):
请在浏览器中打开下面的链接并输入验证码完成授权:
站点:<site>
链接:<verificationUri>
验证码:<userCode>
(有效期 <expiresIn>/60 分钟)
通过链接完成授权,然后告诉我。
English template (use when the user is conversing in English):
Please open the link below in your browser and enter the verification code to authorize:
Site: <site>
URL: <verificationUri>
Code: <userCode>
(Valid for <expiresIn/60> minutes)
Please authorise current session with access to your account, tell me when you are done.
All four fields — site, verificationUri, userCode, expiresIn — must appear as plain text in the assistant message.
Wait for the user to signal completion (e.g. "done", "ok", "好了", "完成了"). Do NOT auto-poll. Upon receiving the signal, run okx auth status --json once to verify, then branch:
"status": "logged_in" → success. Reply using exactly one of the templates below (verbatim except for field substitution), then proceed with the user's original request in the same turn.
Chinese template:
登录成功。
站点:<site>
权限:<scopes>
English template:
Login successful.
Site: <site>
Scopes: <scopes>
DO NOT include any other field from auth status --json in this reply. Specifically:
expiresAt / ttl refer to the short-lived access token, not the OAuth session. The CLI auto-refreshes tokens transparently; surfacing these values will mislead users into thinking their login expires soon.profile is an internal routing field with no user value.site and scopes are user-relevant."status": "pending" → authorization not yet complete; tell the user it's not done yet and wait for another signal. Do NOT auto-poll.
"status": "not_logged_in" → device code expired or was rejected; ask the user whether to retry.
Do NOT run any other okx commands while waiting for authorization.
okx auth login --site <global|eea|us> — the command will block and poll until the user completes authorization.Logged in successfully! — proceed with the user's original request.API key already configured ... — Step 0.2 check was stale, use the existing API key.
okx config initis an API-key wizard. It prompts for site, then demo/live, then asks forAK/SK/PPcredentials. It does NOT perform OAuth. Use it only when the user explicitly wants to configure an API key.
okx config init
Wizard steps:
1 — Global (www.okx.com)2 — EEA (my.okx.com) — European Economic Area3 — US (app.okx.com) — United StatesAfter okx config init completes, re-run the Step 0 pre-flight check — api_key will now be present and Step 0.2 will short-circuit any further login.
Run okx auth status --json to check login status. Parse the JSON output:
{
"profile": "oauth",
"site": "global",
"status": "logged_in",
"expiresAt": "2026-04-11T20:30:00+00:00",
"ttl": 3600,
"scopes": ["live:read", "live:trade"]
}
| status value | Meaning | Action |
| ----------------- | ------------------------------ | ------------------------------- |
| logged_in | Valid session | Proceed |
| pending | Login in progress | Wait for user to signal completion; do NOT auto-poll |
| not_logged_in | No active session | Run okx auth login --manual |
When any command fails with "Session expired" or "Run okx auth login first":
okx auth login --manual [--site <global|eea|us>] (agent) or okx auth login [--site <global|eea|us>] (interactive)Token expiry is managed automatically — you only need to re-authenticate when the refresh token itself expires (typically after an extended period of inactivity).
okx auth logout
DCR client registration is retained after logout. The next okx auth login will be faster.
The okx auth commands (login, logout, status) depend on the okx-auth binary. It is normally installed automatically during npm install, but can also be managed manually.
IMPORTANT for AI agents: Do NOT manually check platform, CDN availability, or binary paths. Always use the CLI commands below — they handle platform detection and download internally.
okx auth install
Downloads or updates the okx-auth binary. Reports "up to date" if already current. Use --json for machine-readable output.
okx auth install-status
Shows whether the binary is installed and up to date. Use --json for machine-readable output.
okx auth remove # interactive confirmation
okx auth remove --force # skip confirmation
If any okx auth command (login, logout, status) fails with "Failed to spawn okx-auth", the binary is missing or corrupted:
okx auth install to download itokx auth install-status| Error message | Cause | Action |
| --------------------------------------------- | -------------------------------------- | ------------------------------------------------ |
| No config found. Run okx config init first. | No config | Run okx config init |
| Session expired — run okx auth login again | Refresh token expired | Run okx auth login --manual |
| Authorization timed out | User did not authorize in time | Run okx auth login --manual again |
| Access denied | User rejected authorization in browser | Run okx auth login --manual and ask to approve |
| Region restriction (51155, 51734) | Instrument not available in configured site | Check okx auth status --json for current site; re-login with --site if needed |
| Network error during login | Network unavailable | Check network and retry |
| Failed to spawn okx-auth | Binary not installed or corrupted | Run okx auth install |
| Installation failed: All CDN sources failed | Network issue during binary download | Check network and retry okx auth install |
| After authentication... | Next skill |
| ----------------------------------------- | ----------------------------------- |
| Place / cancel / amend orders | okx-cex-trade |
| Check balance, positions, P&L | okx-cex-portfolio |
| Simple Earn, On-chain Earn, DCD, AutoEarn | okx-cex-earn |
| Grid / DCA bots | okx-cex-bot |
| Market prices, candles, indicators | okx-cex-market (no auth required) |
development
Smart Money analytics on OKX: leaderboard traders, position tracking, trade records, closed-position history, aggregated consensus signals, and signal history. Use this skill when the user asks about 聪明钱, smart money, 牛人榜, leaderboard, top traders, 交易员排行, trader ranking, trader positions, trader PnL, 交易员持仓, 交易员收益, 历史平仓, closed positions, realized PnL track record, trade history, 成交记录, smart money signal, 聪明钱信号, long/short ratio, 多空比, capital flow, 资金流向, position conviction, 仓位强度, entry price distribution, smart money overview, 聪明钱总览, signal history, 信号历史, trader search, 搜索交易员, who is trading BTC, 谁在交易BTC, recommend traders, 推荐交易员, best traders, top performers.
development
Use this skill when the user asks about: 'any crypto news', 'latest news', 'market update', 'daily briefing', 'BTC news', 'ETH news', 'news on SOL', 'search SEC ETF', 'regulation news', 'Bitcoin halving', 'is BTC bullish or bearish', 'coin sentiment', 'sentiment trend', 'trending coins', 'top bullish coins', 'bearish sentiment', 'social buzz', 'market mood', 'fear and greed', 'full article', 'read more', 'economic calendar', '经济日历', 'macro data', '宏观数据', 'NFP', 'nonfarm', '非农', 'CPI', 'GDP', 'FOMC', '利率决议', 'interest rate decision', 'PMI', 'unemployment rate', '失业率', 'economic events', '经济事件', or any request for crypto news, market intelligence, sentiment analysis, social trend data, or macro-economic calendar. Requires API credentials. Do NOT use for market prices/candles (okx-cex-market), placing orders (okx-cex-trade), or account info (okx-cex-portfolio).
development
Use when the user asks to 'buy BTC', 'sell ETH', 'place a limit order', 'place a market order', 'cancel my order', 'amend my order', 'long BTC perp', 'short ETH swap', 'open a position', 'close a position', 'set take profit', 'limit take profit', 'immediate TP', 'set stop loss', 'self-trade prevention', 'stpMode', 'auto-cancel on close', 'trailing stop', 'pending order', 'chase order', 'iceberg', 'TWAP', 'split order', 'large order', 'set leverage', 'check my orders', 'fill history', 'buy a call', 'sell a put', 'option chain', 'implied volatility', 'IV', 'Greeks', 'delta', 'gamma', 'event contract', 'buy Yes', 'buy No', 'buy Up', 'buy Down', 'prediction market', or any request to place, cancel, or amend spot, swap, futures, options, or event contract orders on OKX CEX. Covers conditional (TP/SL/trailing) algo orders. Requires API credentials. Do NOT use for market data (okx-cex-market), account balance (okx-cex-portfolio), or bots (okx-cex-bot).
tools
Use this skill when the user asks to: 'find a trading skill', 'search for skills', 'install a skill', 'add a skill', 'download a skill', 'browse skill marketplace', 'what skills are available', 'update a skill', 'check for skill updates', 'remove a skill', 'uninstall a skill', 'list installed skills', 'show my skills', 'skill categories', or any request to discover, install, update, or manage AI trading skills from the OKX Skills Marketplace. This skill covers searching, browsing categories, installing via CLI, downloading zip packages, checking for updates, and removing installed skills. Requires API credentials for marketplace API access. Do NOT use for placing orders (use okx-cex-trade), market data (use okx-cex-market), or bot management (use okx-cex-bot).