Resolving gate-cli (binary path)
Resolve gate-cli in order: (1) command -v gate-cli and gate-cli --version succeeds; (2) ${HOME}/.local/bin/gate-cli if executable; (3) ${HOME}/.openclaw/skills/bin/gate-cli if executable. Canonical rules: exchange-runtime-rules.md §4 (or gate-runtime-rules.md §4).
Gate Unified Account Assistant
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 ./references/gate-runtime-rules.md
- Only use the
gate-cli commands explicitly listed in this skill. Commands not documented here must NOT be run for these workflows, even if other interfaces expose them.
Skill Dependencies
Authentication
- Interactive file setup: when
GATE_API_KEY and GATE_API_SECRET are not both set on the host, run gate-cli config init to complete the wizard for API key, secret, profiles, and defaults (see gate-cli).
- Env / flags:
gate-cli config init is not required when credentials are already supplied — e.g. both GATE_API_KEY and GATE_API_SECRET set on the host, or --api-key / --api-secret where supported — never ask the user to paste secrets into chat.
- API Key Required: Yes
- Permissions: Unified:Read, Unified:Write
- Portal: create or rotate keys outside the chat: https://www.gate.com/myaccount/profile/api-key/manage
Installation Check
- Required:
gate-cli (run sh ./setup.sh from this skill directory if missing; optional GATE_CLI_SETUP_MODE=release).
- Add
$HOME/.openclaw/skills/bin to PATH if you invoke gate-cli by name (or the directory where setup.sh installs it).
- Credentials: When
GATE_API_KEY and GATE_API_SECRET are both set (non-empty) for the host, do not require gate-cli config init — that is equivalent valid config for gate-cli. When both are unset or empty, remind the operator to run gate-cli config init or to configure GATE_API_KEY / GATE_API_SECRET in the matching skill from the skill library (never ask the user to paste secrets into chat).
- Sanity check: Do not proceed with authenticated calls until the CLI behaves as expected (e.g.
gate-cli --version or a read-only gate-cli cex ... command from this skill); confirm credentials resolve before mutating operations.
Execution mode
Read and strictly follow references/gate-cli.md, then execute this skill's unified-account routing.
SKILL.md keeps scenario routing and confirmation policy.
references/gate-cli.md is the authoritative gate-cli execution contract for limits checks, mutation drafts, and post-state verification.
Domain Knowledge
Tool Mapping by Domain
| Group |
Tool Calls (jsonrpc: call.method) |
| Account and mode |
get_unified_accounts, get_unified_mode, set_unified_mode |
| Borrowing and repayment |
get_unified_borrowable, create_unified_loan, list_unified_loan_records, list_unified_loan_interest_records |
| Borrow rates and currency universe |
get_unified_estimate_rate, list_unified_currencies |
| Transferability |
get_unified_transferable |
| Leverage and collateral settings |
get_user_leverage_currency_setting, set_user_leverage_currency_setting, set_unified_collateral |
| Risk tiers and collateral discount |
list_currency_discount_tiers |
Capability Notes and API Coverage
- Batch borrowable and batch transferable endpoints may not be exposed as dedicated tools; for multi-currency requests, iterate single-currency queries and aggregate results.
- Loan repayment uses
create_unified_loan with type=repay; full repayment uses repaid_all=true.
- Unified mode switching is high-impact and may fail if account risk constraints are not satisfied.
- Per-currency leverage settings should be validated against current account mode and platform limits.
- Collateral configuration changes can alter borrow power and liquidation risk.
Response Rendering Rules (Mandatory)
- Do not round API numeric strings for equity, borrowable, transferable, rates, or leverage values unless the user explicitly asks for formatted rounding.
- Do not trim, shorten, or normalize decimal strings. If API returns trailing zeros or long decimals, display the exact raw value string as returned.
- When API returns timestamps, show both raw timestamp and human-readable time (local timezone).
- For account-overview replies, always include account-level IMR/MMR using API fields:
- IMR:
totalInitialMarginRate
- MMR:
totalMaintenanceMarginRate
- When per-currency risk fields are present in
balances, include imr and mmr for each reported currency (preserve original API numeric strings).
- Unified mode display labels must use this mapping:
classic -> 经典现货模式
single_currency -> 单币种保证金模式
multi_currency -> 跨币种保证金模式
portfolio -> 组合保证金模式
- If unified account is not enabled/opened, place this warning at the top of the response:
⚠️ 当前账户未开通统一账户功能。
Risk-Sensitive Action Rules
Mutating unified actions are treated as high risk:
create_unified_loan (borrow/repay)
set_unified_mode
set_user_leverage_currency_setting
set_unified_collateral
For each of the actions above, always require explicit user confirmation immediately before execution.
Workflow
When the user asks for any unified account operation, follow this sequence.
Step 1: Identify Task Type
Classify the request into one of these six categories:
- Account overview and mode query
- Borrowable/transferable limit query
- Borrow/repay execution
- Loan/interest history query
- Leverage/collateral configuration
- Mixed risk-and-funding actions (for example check limit, then borrow)
Step 2: Extract Parameters and Run Pre-checks
Extract key fields:
currency or currency list
- operation type (
borrow/repay, query vs mutation)
amount and repaid_all intent
- target mode (
classic / single_currency / multi_currency / portfolio)
- leverage value and collateral enable/disable lists
Pre-check order:
- Required parameters completeness
- Limit sufficiency (
borrowable / transferable) for requested amount
- Account mode and risk compatibility
- User intent clarity for high-risk configuration changes
Step 3: Final User Confirmation Before Any Mutation (Mandatory)
Before every mutating call, provide an Action Draft first, then wait for explicit confirmation.
Required execution flow:
- Send draft summary (no mutation call yet)
- Wait for explicit user approval
- Submit real mutation call only after approval
- Treat confirmation as single-use
- If parameters change, invalidate old confirmation and re-confirm
Required confirmation fields:
- operation type (borrow/repay/mode switch/leverage/collateral)
- target object (currency, mode, leverage, enable/disable lists)
- amount or config value
- key risk note
Recommended draft wording:
Action Draft: borrow 100 USDT in unified account. Pre-check: max borrowable 250 USDT. Risk: interest accrues hourly. Reply "Confirm action" to proceed.
Hard blocking rules (non-bypassable):
- NEVER call mutation tools without explicit confirmation from the immediately previous user turn.
- If request scope changes (currency, amount, mode, leverage, collateral set), request fresh confirmation.
- For multi-step actions, require confirmation per mutation step.
Step 4: Call Tools by Scenario
Use only the minimal tool set required for the task:
- Account overview:
get_unified_accounts
- Mode query/switch:
get_unified_mode / set_unified_mode
- Borrowable checks:
get_unified_borrowable
- Transferable checks:
get_unified_transferable
- Borrow/repay:
create_unified_loan
- Loan and interest records:
list_unified_loan_records, list_unified_loan_interest_records
- Currency support and rates:
list_unified_currencies, get_unified_estimate_rate
- Leverage settings:
get_user_leverage_currency_setting, set_user_leverage_currency_setting
- Collateral settings:
set_unified_collateral
- Risk tiers:
list_currency_discount_tiers
Step 5: Return Actionable Result and Status
The response must include:
- Whether execution succeeded (or why it did not execute)
- Core numbers (amount, limit, rate, leverage, mode, key risk fields)
- For overview queries: explicitly include IMR/MMR (
totalInitialMarginRate / totalMaintenanceMarginRate) and include per-currency imr/mmr when present
- For all money/rate outputs: preserve exact API string precision; do not trim or format decimals automatically
- For record queries: provide readable time alongside timestamps
- If condition not met, clearly explain gap and next option
Case Routing Map (1-18)
A. Account and Mode (1-3)
| Case |
User Intent |
Core Decision |
Tool Sequence |
| 1 |
Unified account overview |
Return total equity and margin indicators (including IMR/MMR when available) |
get_unified_accounts |
| 2 |
Query current unified mode |
Return current mode with readable label |
get_unified_mode |
| 3 |
Switch unified mode |
Validate target mode, then switch after confirmation |
get_unified_mode -> set_unified_mode |
B. Borrow Limits and Borrowing (4-8)
| Case |
User Intent |
Core Decision |
Tool Sequence |
| 4 |
Single-currency borrowable |
Return max borrowable for one currency |
get_unified_borrowable |
| 5 |
Multi-currency borrowable |
Iterate per currency and aggregate |
get_unified_borrowable(loop) |
| 6 |
Borrow specific amount |
Check max borrowable then submit borrow after confirmation |
get_unified_borrowable -> create_unified_loan |
| 7 |
List borrowable currencies |
Return supported currency list |
list_unified_currencies |
| 8 |
Query estimated borrow rate |
Return estimated rate with disclaimer |
get_unified_estimate_rate |
C. Repayment and Records (9-12)
| Case |
User Intent |
Core Decision |
Tool Sequence |
| 9 |
Partial repay |
Validate repay amount and submit after confirmation |
create_unified_loan |
| 10 |
Full repay |
Submit repaid_all=true after confirmation |
create_unified_loan |
| 11 |
Query loan records |
Return borrow/repay history by filter |
list_unified_loan_records |
| 12 |
Query interest records |
Return charged-interest history with time/rate |
list_unified_loan_interest_records |
D. Transferability and Risk Config (13-18)
| Case |
User Intent |
Core Decision |
Tool Sequence |
| 13 |
Single-currency transferable |
Return max transferable amount |
get_unified_transferable |
| 14 |
Multi-currency transferable |
Iterate per currency and aggregate |
get_unified_transferable(loop) |
| 15 |
Query leverage setting |
Return leverage by currency (single/all) |
get_user_leverage_currency_setting |
| 16 |
Set leverage setting |
Update leverage after confirmation |
set_user_leverage_currency_setting |
| 17 |
Set collateral currencies |
Enable/disable collateral list after confirmation |
set_unified_collateral |
| 18 |
Query collateral discount tiers |
Return risk-tier/discount reference |
list_currency_discount_tiers |
Judgment Logic Summary
| Condition |
Action |
| User asks "how much can I borrow" for one coin |
Use get_unified_borrowable with that currency |
| User asks borrowable for several coins |
Iterate get_unified_borrowable per coin and aggregate |
| User requests borrow execution |
Pre-check limit first, then require confirmation before create_unified_loan |
| User requests repay execution |
Clarify partial vs full repay and confirm before mutation |
| User asks "all repay" but currency unclear |
Ask user to specify currency or propose per-currency execution |
| User asks transferable for several coins |
Iterate get_unified_transferable per coin and aggregate |
| User asks to switch mode |
Query current mode first, show impact, then confirm and execute |
| User asks to set leverage |
Query/validate currency and target leverage, then confirm mutation |
| User asks to set collateral |
Confirm enable/disable list and risk note before mutation |
| User confirmation missing/ambiguous/stale |
Keep task pending and do not execute mutation |
| Requested amount exceeds borrowable/transferable |
Return max available and ask user whether to adjust |
| Query-only request |
Never perform mutation calls |
Report Template
## Execution Result
| Item | Value |
|------|-----|
| Scenario | {case_name} |
| Scope | {currency_or_mode_scope} |
| Action | {action} |
| Status | {status} |
| Key Metrics | {key_metrics} |
{decision_text}
Example decision_text:
✅ Action completed successfully.
📝 Action draft ready. Reply "Confirm action" to proceed.
⏸️ Not executed: requested amount exceeds current limit.
❌ Not executed: required parameter is missing.
Error Handling
| Error Type |
Typical Cause |
Handling Strategy |
| Missing required parameter |
Currency/amount/mode omitted |
Ask for the missing field before tool call |
| Limit exceeded |
Requested amount > borrowable/transferable |
Return current max and suggest adjusted amount |
| Unsupported/hidden batch endpoint |
Batch method not exposed as tool |
Iterate single-currency calls and merge result |
| Mode switch rejected |
Position/risk constraints prevent switch |
Return rejection reason and suggest cleanup checks |
| Invalid leverage setting |
Out-of-range leverage value |
Return valid range and ask for revised value |
| Collateral config risk |
Enable/disable list changes borrowing power |
Show risk note and require explicit confirmation |
Collateral mutation API error (500) |
Backend-side failure even with valid payload |
Return non-user-fault message, keep params for retry, and ask whether to retry later |
| Missing final confirmation |
User has not approved draft |
Keep pending and request explicit confirmation |
| Stale confirmation |
Draft no longer matches user intent |
Invalidate and re-draft for reconfirmation |
Cross-Skill Workflows
Workflow A: Unified Borrow Then Spot Buy
- Use
gate-exchange-unified to borrow quote currency (Case 6)
- Use
gate-exchange-spot to execute buy order with borrowed funds
Workflow B: Spot Sell Then Unified Repay
- Use
gate-exchange-spot to liquidate target asset into quote currency
- Use
gate-exchange-unified to repay outstanding loan (Case 9/10)
Safety Rules
- Before any mutation, restate target currency/mode/value and key risk.
- For borrowing, explicitly disclose that interest accrues and rates may vary.
- For mode or leverage changes, mention potential impact on margin and liquidation risk.
- For collateral changes, show both enable and disable sets before execution.
- Without explicit confirmation, stay in read-only mode.
- Do not reuse stale confirmations; re-confirm if any parameter changes.
- If constraints are not met, do not force execution; provide alternatives.
1---2name: gate-exchange-unified3description: "Gate unified account operations skill. Use when the user asks about unified account equity, margin borrowing, or leverage modes. Triggers on 'unified account', 'borrow limit', 'repay loan', 'switch margin mode'."4user-invocable: true5disable-model-invocation: false6metadata:7 openclaw:8 emoji: "💱"9 os:10 - darwin11 - linux12 primaryEnv: GATE_API_KEY13 requires:14 bins:15 - gate-cli16 env:17 - GATE_API_KEY18 - GATE_API_SECRET1920 install:21 - kind: download22 os:23 - linux24 url: "https://github.com/gate/gate-cli/releases/download/v0.6.2/gate-cli_0.6.2_linux_amd64.tar.gz"25 bins:26 - gate-cli27 targetDir: "bin"28 label: "Download gate-cli (Linux x64)"29 - kind: download30 os:31 - linux32 url: "https://github.com/gate/gate-cli/releases/download/v0.6.2/gate-cli_0.6.2_linux_arm64.tar.gz"33 bins:34 - gate-cli35 targetDir: "bin"36 label: "Download gate-cli (Linux arm64)"37 - kind: download38 os:39 - darwin40 url: "https://github.com/gate/gate-cli/releases/download/v0.6.2/gate-cli_0.6.2_darwin_amd64.tar.gz"41 bins:42 - gate-cli43 targetDir: "bin"44 label: "Download gate-cli (macOS Intel)"45 - kind: download46 os:47 - darwin48 url: "https://github.com/gate/gate-cli/releases/download/v0.6.2/gate-cli_0.6.2_darwin_arm64.tar.gz"49 bins:50 - gate-cli51 targetDir: "bin"52 label: "Download gate-cli (macOS Apple Silicon)"53---5455### Resolving `gate-cli` (binary path)5657Resolve **`gate-cli`** in order: **(1)** **`command -v gate-cli`** and **`gate-cli --version`** succeeds; **(2)** **`${HOME}/.local/bin/gate-cli`** if executable; **(3)** **`${HOME}/.openclaw/skills/bin/gate-cli`** if executable. Canonical rules: [`exchange-runtime-rules.md`](https://github.com/gate/gate-skills/blob/master/skills/exchange-runtime-rules.md) §4 (or [`gate-runtime-rules.md`](https://github.com/gate/gate-skills/blob/master/skills/gate-runtime-rules.md) §4).585960# Gate Unified Account Assistant6162## General Rules6364⚠️ STOP — You MUST read and strictly follow the shared runtime rules before proceeding.65Do NOT select or call any tool until all rules are read. These rules have the highest priority.66→ Read `./references/gate-runtime-rules.md`67- **Only use the `gate-cli` commands explicitly listed in this skill.** Commands not documented here must NOT be run for these workflows, even if other interfaces expose them.6869## Skill Dependencies707172### Authentication73- **Interactive file setup:** when **`GATE_API_KEY`** and **`GATE_API_SECRET`** are **not** both set on the host, run **`gate-cli config init`** to complete the wizard for API key, secret, profiles, and defaults (see [gate-cli](https://github.com/gate/gate-cli)).74- **Env / flags:** **`gate-cli config init`** is **not** required when credentials are already supplied — e.g. **both** **`GATE_API_KEY`** and **`GATE_API_SECRET`** set on the host, or **`--api-key`** / **`--api-secret`** where supported — never ask the user to paste secrets into chat.75- API Key Required: Yes76- **Permissions:** Unified:Read, Unified:Write77- **Portal:** create or rotate keys outside the chat: https://www.gate.com/myaccount/profile/api-key/manage7879### Installation Check80- **Required:** `gate-cli` (run `sh ./setup.sh` from this skill directory if missing; optional `GATE_CLI_SETUP_MODE=release`).81- Add `$HOME/.openclaw/skills/bin` to **`PATH`** if you invoke `gate-cli` by name (or the directory where [`setup.sh`](./setup.sh) installs it).82- **Credentials:** When **`GATE_API_KEY`** and **`GATE_API_SECRET`** are both set (non-empty) for the host, **do not** require **`gate-cli config init`** — that is equivalent valid config for `gate-cli`. When **both** are unset or empty, **remind** the operator to run **`gate-cli config init`** **or** to configure **`GATE_API_KEY`** / **`GATE_API_SECRET`** in the **matching skill** from the skill library (never ask the user to paste secrets into chat).83- **Sanity check:** Do not proceed with authenticated calls until the CLI behaves as expected (e.g. **`gate-cli --version`** or a read-only **`gate-cli cex ...`** command from this skill); confirm credentials resolve before mutating operations.848586## Execution mode8788**Read and strictly follow** [`references/gate-cli.md`](./references/gate-cli.md), then execute this skill's unified-account routing.8990- `SKILL.md` keeps scenario routing and confirmation policy.91- `references/gate-cli.md` is the authoritative `gate-cli` execution contract for limits checks, mutation drafts, and post-state verification.9293## Domain Knowledge9495### Tool Mapping by Domain9697| Group | Tool Calls (`jsonrpc: call.method`) |98|------|------|99| Account and mode | `get_unified_accounts`, `get_unified_mode`, `set_unified_mode` |100| Borrowing and repayment | `get_unified_borrowable`, `create_unified_loan`, `list_unified_loan_records`, `list_unified_loan_interest_records` |101| Borrow rates and currency universe | `get_unified_estimate_rate`, `list_unified_currencies` |102| Transferability | `get_unified_transferable` |103| Leverage and collateral settings | `get_user_leverage_currency_setting`, `set_user_leverage_currency_setting`, `set_unified_collateral` |104| Risk tiers and collateral discount | `list_currency_discount_tiers` |105106### Capability Notes and API Coverage107108- Batch borrowable and batch transferable endpoints may not be exposed as dedicated tools; for multi-currency requests, iterate single-currency queries and aggregate results.109- Loan repayment uses `create_unified_loan` with `type=repay`; full repayment uses `repaid_all=true`.110- Unified mode switching is high-impact and may fail if account risk constraints are not satisfied.111- Per-currency leverage settings should be validated against current account mode and platform limits.112- Collateral configuration changes can alter borrow power and liquidation risk.113114### Response Rendering Rules (Mandatory)115116- **Do not round API numeric strings** for equity, borrowable, transferable, rates, or leverage values unless the user explicitly asks for formatted rounding.117- **Do not trim, shorten, or normalize decimal strings**. If API returns trailing zeros or long decimals, display the exact raw value string as returned.118- When API returns timestamps, show both raw timestamp and human-readable time (local timezone).119- For account-overview replies, always include account-level IMR/MMR using API fields:120 - IMR: `totalInitialMarginRate`121 - MMR: `totalMaintenanceMarginRate`122- When per-currency risk fields are present in `balances`, include `imr` and `mmr` for each reported currency (preserve original API numeric strings).123- Unified mode display labels must use this mapping:124 - `classic` -> `经典现货模式`125 - `single_currency` -> `单币种保证金模式`126 - `multi_currency` -> `跨币种保证金模式`127 - `portfolio` -> `组合保证金模式`128- If unified account is not enabled/opened, place this warning at the top of the response: `⚠️ 当前账户未开通统一账户功能。`129130### Risk-Sensitive Action Rules131132Mutating unified actions are treated as high risk:133- `create_unified_loan` (borrow/repay)134- `set_unified_mode`135- `set_user_leverage_currency_setting`136- `set_unified_collateral`137138For each of the actions above, always require explicit user confirmation immediately before execution.139140## Workflow141142When the user asks for any unified account operation, follow this sequence.143144### Step 1: Identify Task Type145146Classify the request into one of these six categories:1471. Account overview and mode query1482. Borrowable/transferable limit query1493. Borrow/repay execution1504. Loan/interest history query1515. Leverage/collateral configuration1526. Mixed risk-and-funding actions (for example check limit, then borrow)153154### Step 2: Extract Parameters and Run Pre-checks155156Extract key fields:157- `currency` or currency list158- operation type (`borrow`/`repay`, query vs mutation)159- `amount` and `repaid_all` intent160- target mode (`classic` / `single_currency` / `multi_currency` / `portfolio`)161- leverage value and collateral enable/disable lists162163Pre-check order:1641. Required parameters completeness1652. Limit sufficiency (`borrowable` / `transferable`) for requested amount1663. Account mode and risk compatibility1674. User intent clarity for high-risk configuration changes168169### Step 3: Final User Confirmation Before Any Mutation (Mandatory)170171Before every mutating call, provide an **Action Draft** first, then wait for explicit confirmation.172173Required execution flow:1741. Send draft summary (no mutation call yet)1752. Wait for explicit user approval1763. Submit real mutation call only after approval1774. Treat confirmation as single-use1785. If parameters change, invalidate old confirmation and re-confirm179180Required confirmation fields:181- operation type (borrow/repay/mode switch/leverage/collateral)182- target object (currency, mode, leverage, enable/disable lists)183- amount or config value184- key risk note185186Recommended draft wording:187- `Action Draft: borrow 100 USDT in unified account. Pre-check: max borrowable 250 USDT. Risk: interest accrues hourly. Reply "Confirm action" to proceed.`188189Hard blocking rules (non-bypassable):190- NEVER call mutation tools without explicit confirmation from the immediately previous user turn.191- If request scope changes (currency, amount, mode, leverage, collateral set), request fresh confirmation.192- For multi-step actions, require confirmation per mutation step.193194### Step 4: Call Tools by Scenario195196Use only the minimal tool set required for the task:197- Account overview: `get_unified_accounts`198- Mode query/switch: `get_unified_mode` / `set_unified_mode`199- Borrowable checks: `get_unified_borrowable`200- Transferable checks: `get_unified_transferable`201- Borrow/repay: `create_unified_loan`202- Loan and interest records: `list_unified_loan_records`, `list_unified_loan_interest_records`203- Currency support and rates: `list_unified_currencies`, `get_unified_estimate_rate`204- Leverage settings: `get_user_leverage_currency_setting`, `set_user_leverage_currency_setting`205- Collateral settings: `set_unified_collateral`206- Risk tiers: `list_currency_discount_tiers`207208### Step 5: Return Actionable Result and Status209210The response must include:211- Whether execution succeeded (or why it did not execute)212- Core numbers (amount, limit, rate, leverage, mode, key risk fields)213- For overview queries: explicitly include IMR/MMR (`totalInitialMarginRate` / `totalMaintenanceMarginRate`) and include per-currency `imr`/`mmr` when present214- For all money/rate outputs: preserve exact API string precision; do not trim or format decimals automatically215- For record queries: provide readable time alongside timestamps216- If condition not met, clearly explain gap and next option217218## Case Routing Map (1-18)219220### A. Account and Mode (1-3)221222| Case | User Intent | Core Decision | Tool Sequence |223|------|----------|----------|----------|224| 1 | Unified account overview | Return total equity and margin indicators (including IMR/MMR when available) | `get_unified_accounts` |225| 2 | Query current unified mode | Return current mode with readable label | `get_unified_mode` |226| 3 | Switch unified mode | Validate target mode, then switch after confirmation | `get_unified_mode` -> `set_unified_mode` |227228### B. Borrow Limits and Borrowing (4-8)229230| Case | User Intent | Core Decision | Tool Sequence |231|------|----------|----------|----------|232| 4 | Single-currency borrowable | Return max borrowable for one currency | `get_unified_borrowable` |233| 5 | Multi-currency borrowable | Iterate per currency and aggregate | `get_unified_borrowable`(loop) |234| 6 | Borrow specific amount | Check max borrowable then submit borrow after confirmation | `get_unified_borrowable` -> `create_unified_loan` |235| 7 | List borrowable currencies | Return supported currency list | `list_unified_currencies` |236| 8 | Query estimated borrow rate | Return estimated rate with disclaimer | `get_unified_estimate_rate` |237238### C. Repayment and Records (9-12)239240| Case | User Intent | Core Decision | Tool Sequence |241|------|----------|----------|----------|242| 9 | Partial repay | Validate repay amount and submit after confirmation | `create_unified_loan` |243| 10 | Full repay | Submit `repaid_all=true` after confirmation | `create_unified_loan` |244| 11 | Query loan records | Return borrow/repay history by filter | `list_unified_loan_records` |245| 12 | Query interest records | Return charged-interest history with time/rate | `list_unified_loan_interest_records` |246247### D. Transferability and Risk Config (13-18)248249| Case | User Intent | Core Decision | Tool Sequence |250|------|----------|----------|----------|251| 13 | Single-currency transferable | Return max transferable amount | `get_unified_transferable` |252| 14 | Multi-currency transferable | Iterate per currency and aggregate | `get_unified_transferable`(loop) |253| 15 | Query leverage setting | Return leverage by currency (single/all) | `get_user_leverage_currency_setting` |254| 16 | Set leverage setting | Update leverage after confirmation | `set_user_leverage_currency_setting` |255| 17 | Set collateral currencies | Enable/disable collateral list after confirmation | `set_unified_collateral` |256| 18 | Query collateral discount tiers | Return risk-tier/discount reference | `list_currency_discount_tiers` |257258## Judgment Logic Summary259260| Condition | Action |261|-----------|--------|262| User asks "how much can I borrow" for one coin | Use `get_unified_borrowable` with that currency |263| User asks borrowable for several coins | Iterate `get_unified_borrowable` per coin and aggregate |264| User requests borrow execution | Pre-check limit first, then require confirmation before `create_unified_loan` |265| User requests repay execution | Clarify partial vs full repay and confirm before mutation |266| User asks "all repay" but currency unclear | Ask user to specify currency or propose per-currency execution |267| User asks transferable for several coins | Iterate `get_unified_transferable` per coin and aggregate |268| User asks to switch mode | Query current mode first, show impact, then confirm and execute |269| User asks to set leverage | Query/validate currency and target leverage, then confirm mutation |270| User asks to set collateral | Confirm enable/disable list and risk note before mutation |271| User confirmation missing/ambiguous/stale | Keep task pending and do not execute mutation |272| Requested amount exceeds borrowable/transferable | Return max available and ask user whether to adjust |273| Query-only request | Never perform mutation calls |274275## Report Template276277```markdown278## Execution Result279280| Item | Value |281|------|-----|282| Scenario | {case_name} |283| Scope | {currency_or_mode_scope} |284| Action | {action} |285| Status | {status} |286| Key Metrics | {key_metrics} |287288{decision_text}289```290291Example `decision_text`:292- `✅ Action completed successfully.`293- `📝 Action draft ready. Reply "Confirm action" to proceed.`294- `⏸️ Not executed: requested amount exceeds current limit.`295- `❌ Not executed: required parameter is missing.`296297## Error Handling298299| Error Type | Typical Cause | Handling Strategy |300|----------|----------|----------|301| Missing required parameter | Currency/amount/mode omitted | Ask for the missing field before tool call |302| Limit exceeded | Requested amount > borrowable/transferable | Return current max and suggest adjusted amount |303| Unsupported/hidden batch endpoint | Batch method not exposed as tool | Iterate single-currency calls and merge result |304| Mode switch rejected | Position/risk constraints prevent switch | Return rejection reason and suggest cleanup checks |305| Invalid leverage setting | Out-of-range leverage value | Return valid range and ask for revised value |306| Collateral config risk | Enable/disable list changes borrowing power | Show risk note and require explicit confirmation |307| Collateral mutation API error (`500`) | Backend-side failure even with valid payload | Return non-user-fault message, keep params for retry, and ask whether to retry later |308| Missing final confirmation | User has not approved draft | Keep pending and request explicit confirmation |309| Stale confirmation | Draft no longer matches user intent | Invalidate and re-draft for reconfirmation |310311## Cross-Skill Workflows312313### Workflow A: Unified Borrow Then Spot Buy3143151. Use `gate-exchange-unified` to borrow quote currency (Case 6)3162. Use `gate-exchange-spot` to execute buy order with borrowed funds317318### Workflow B: Spot Sell Then Unified Repay3193201. Use `gate-exchange-spot` to liquidate target asset into quote currency3212. Use `gate-exchange-unified` to repay outstanding loan (Case 9/10)322323## Safety Rules324325- Before any mutation, restate target currency/mode/value and key risk.326- For borrowing, explicitly disclose that interest accrues and rates may vary.327- For mode or leverage changes, mention potential impact on margin and liquidation risk.328- For collateral changes, show both enable and disable sets before execution.329- Without explicit confirmation, stay in read-only mode.330- Do not reuse stale confirmations; re-confirm if any parameter changes.331- If constraints are not met, do not force execution; provide alternatives.