Skill: gate-exchange/gate-exchange-subaccount (version 1.0.2)

--- name: gate-exchange-subaccount version: "2026.3.23-1" updated: "2026-03-23" description: "Gate Exchange sub-account management skill. Use when the user asks to manage, create, lock, unlock, or list their sub-accounts. Triggers on 'sub-account status', 'create sub-account', 'lock sub-account', 'my sub-accounts'." --- # Gate Exchange Sub-Account Skill ## General Rules ⚠️ STOP — You MUST read and strictly follow the shared runtime rules before proceeding. Do NOT select or call any tool until all rules are read. These rules have the highest priority. → Read [gate-runtime-rules.md](https://github.com/gate/gate-skills/blob/master/skills/gate-runtime-rules.md) - **Only call MCP tools explicitly listed in this skill.** Tools not documented here must NOT be called, even if they exist in the MCP server. --- ## MCP Dependencies ### Required MCP Servers | MCP Server | Status | |------------|--------| | Gate (main) | ✅ Required | ### MCP Tools Used **Query Operations (Read-only)** - cex_sa_get_sa - cex_sa_list_sas - cex_sa_lock_sa - cex_sa_unlock_sa **Execution Operations (Write)** - cex_sa_create_sa ### Authentication - API Key Required: Yes (see skill doc/runtime MCP deployment) - Permissions: Sa:Write - Get API Key: https://www.gate.io/myaccount/profile/api-key/manage ### Installation Check - Required: Gate (main) - Install: Run installer skill for your IDE - Cursor: `gate-mcp-cursor-installer` - Codex: `gate-mcp-codex-installer` - Claude: `gate-mcp-claude-installer` - OpenClaw: `gate-mcp-openclaw-installer` ## MCP Mode **Read and strictly follow** [`references/mcp.md`](./references/mcp.md), then execute this skill's sub-account workflow. - `SKILL.md` keeps intent routing and permission boundaries. - `references/mcp.md` is the authoritative MCP execution layer for create/lock/unlock confirmation gates and status verification. ## Prerequisites - **MCP Dependency**: Requires [gate-mcp](https://github.com/gate/gate-mcp) to be installed. - **Authentication**: All sub-account operations require API key authentication with main-account privileges. - **Permission**: The current user must be a main account holder to manage sub-accounts. ## Available MCP Tools | Tool | Auth | Description | |------|------|-------------| | `cex_sa_get_sa` | Yes | Get details of a specific sub-account by user ID | | `cex_sa_list_sas` | Yes | List all sub-accounts under the main account | | `cex_sa_create_sa` | Yes | Create a new normal sub-account | | `cex_sa_lock_sa` | Yes | Lock a sub-account to disable login and trading | | `cex_sa_unlock_sa` | Yes | Unlock a previously locked sub-account | ## Workflow ### Step 1: Identify User Intent Parse the user's message to determine which sub-account operation they need. Key data to extract: - `intent`: One of `query_status`, `list_all`, `create`, `lock`, `unlock` - `user_id`: Sub-account UID (required for `query_status`, `lock`, `unlock`) - `login_name`: Desired username (for `create`, may need to ask user) Intent detection rules: | Signal Keywords | Intent | |----------------|--------| | "status of sub-account", "sub-account UID {id}", "check sub-account" | `query_status` | | "all sub-accounts", "list sub-accounts", "my sub-accounts", "which sub-accounts" | `list_all` | | "create sub-account", "new sub-account", "add sub-account" | `create` | | "lock sub-account", "disable sub-account", "freeze sub-account" | `lock` | | "unlock sub-account", "enable sub-account", "unfreeze sub-account" | `unlock` | ### Step 2: Execute by Intent #### Case A: Query Sub-Account Status (`query_status`) Call `cex_sa_get_sa` with: - `user_id`: The sub-account UID provided by the user Key data to extract: - `login_name`: Sub-account username - `remark`: Sub-account remark/note - `state`: Account state (normal / locked) - `type`: Account type (normal / pool) - `create_time`: Account creation timestamp Present the sub-account details in a structured format. #### Case B: List All Sub-Accounts (`list_all`) Call `cex_sa_list_sas` with: - `type`: "0" (normal sub-accounts only) Key data to extract: - For each sub-account: `user_id`, `login_name`, `remark`, `state`, `create_time` Present results as a table with username, UID, remark (if any), and current status. #### Case C: Create Sub-Account (`create`) **Pre-check**: Call `cex_sa_list_sas` with `type`: "0" to get the current list of normal sub-accounts. Check if the user can still create more sub-accounts based on the returned count. If creation is available: 1. Ask the user to provide a login name for the new sub-account 2. Optionally collect: email, remark 3. Confirm all details with the user before proceeding 4. Call `cex_sa_create_sa` with: - `login_name`: User-provided login name (required) - `email`: User-provided email (optional) - `remark`: User-provided remark (optional) 5. Present the newly created sub-account details Key data to extract: - `user_id`: Newly created sub-account UID - `login_name`: Confirmed username - `state`: Should be "normal" **Important**: Only normal sub-accounts can be created through this skill. #### Case D: Lock Sub-Account (`lock`) 1. Validate that `user_id` is provided; if not, ask the user 2. Call `cex_sa_get_sa` with `user_id` to verify the sub-account exists and belongs to the main account 3. If the sub-account is already locked, inform the user and stop 4. Confirm with the user: "Are you sure you want to lock sub-account {user_id} ({login_name})? This will disable login and trading for this sub-account." 5. On confirmation, call `cex_sa_lock_sa` with: - `user_id`: The sub-account UID 6. Report the result Key data to extract: - Lock operation success/failure status #### Case E: Unlock Sub-Account (`unlock`) 1. Validate that `user_id` is provided; if not, ask the user 2. Call `cex_sa_get_sa` with `user_id` to verify the sub-account exists and is currently locked 3. If the sub-account is already unlocked/normal, inform the user and stop 4. Confirm with the user: "Are you sure you want to unlock sub-account {user_id} ({login_name})?" 5. On confirmation, call `cex_sa_unlock_sa` with: - `user_id`: The sub-account UID 6. Report the result Key data to extract: - Unlock operation success/failure status ### Step 3: Format and Respond Present results using the Report Template below. Always include relevant context and next-step suggestions. ## Judgment Logic Summary | Condition | Action | |-----------|--------| | User asks for a specific sub-account status with UID | Route to Case A: `query_status` | | User asks to see all sub-accounts | Route to Case B: `list_all` | | User wants to create a new sub-account | Route to Case C: `create` | | User wants to lock a sub-account with UID | Route to Case D: `lock` | | User wants to unlock a sub-account with UID | Route to Case E: `unlock` | | UID not provided for operations requiring it | Ask user for the sub-account UID | | Login name not provided for creation | Ask user for a login name | | Sub-account already in target state (lock/unlock) | Inform user, no action needed | | API returns authentication error | Prompt user to log in | | API returns permission error | Inform user that main account privileges are required | | Sub-account does not exist or does not belong to user | Inform user the UID is invalid | ## Report Template ### Query Status Response ``` Sub-Account Details --- Username: {login_name} UID: {user_id} Status: {state} Type: {type} Remark: {remark or "N/A"} Created: {create_time} ``` ### List All Sub-Accounts Response ``` Your Sub-Accounts --- | # | Username | UID | Status | Remark | |---|----------|-----|--------|--------| | 1 | {login_name} | {user_id} | {state} | {remark or "-"} | | 2 | ... | ... | ... | ... | Total: {count} sub-account(s) ``` ### Create Sub-Account Response ``` Sub-Account Created Successfully --- Username: {login_name} UID: {user_id} Status: Normal Remark: {remark or "N/A"} Note: Only normal sub-accounts can be created through this interface. ``` ### Lock/Unlock Response ``` Sub-Account {Action} Successfully --- Username: {login_name} UID: {user_id} Previous Status: {previous_state} Current Status: {new_state} ``` ## Domain Knowledge - A main account on Gate can create multiple sub-accounts for asset isolation, strategy separation, or team management. - Sub-accounts share the main account's KYC verification but have independent trading and wallet capabilities. - Locking a sub-account disables both login and trading; the assets remain safe but inaccessible until unlocked. - There are two types of sub-accounts: normal (type=0) and pool (type=1). This skill only supports creating normal sub-accounts. - Sub-account creation requires a unique login name. Email and remark are optional. ## Safety Rules - **Write operations** (`cex_sa_create_sa`, `cex_sa_lock_sa`, `cex_sa_unlock_sa`): Always require explicit user confirmation before execution. Never auto-execute. - **UID validation**: Before lock/unlock, always verify the sub-account exists and belongs to the current main account. - **State check**: Before lock/unlock, check current state to avoid redundant operations. - **No sensitive data exposure**: Never expose API keys, internal endpoint URLs, or raw error traces. - **Normal sub-accounts only**: Creation is restricted to normal sub-accounts (type=0). Do not attempt to create pool sub-accounts. ## Error Handling | Condition | Response | |-----------|----------| | Auth endpoint returns "not login" | "Please log in to your Gate account first." | | User is not a main account | "Sub-account management requires main account privileges. Please switch to your main account." | | Sub-account UID not found | "Sub-account with UID {user_id} was not found. Please verify the UID and try again." | | Sub-account does not belong to user | "This sub-account does not belong to your main account." | | Sub-account already locked | "Sub-account {user_id} is already locked. No action needed." | | Sub-account already unlocked | "Sub-account {user_id} is already in normal (unlocked) state. No action needed." | | Create sub-account fails (limit reached) | "You have reached the maximum number of sub-accounts. Please contact support if you need more." | | Create sub-account fails (duplicate name) | "The login name '{login_name}' is already taken. Please choose a different name." | | Unknown error | "An error occurred while processing your request. Please try again later." | ## Prompt Examples & Scenarios See [scenarios.md](references/scenarios.md) for full prompt examples and expected behaviors.


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)