| name | gate-exchange-activitycenter |
| description | Gate platform activity and campaign hub skill. Use when the user asks about trading competitions, airdrops, or their enrolled activities. Triggers on 'recommend activities', 'trading competition', 'my activities', 'airdrop campaign'. |
| user-invocable | true |
| disable-model-invocation | false |
| metadata | {"openclaw":{"emoji":"💱","os":["darwin","linux"],"primaryEnv":"GATE_API_KEY","requires":{"bins":["gate-cli"],"env":["GATE_API_KEY","GATE_API_SECRET"]},"install":[{"kind":"download","os":["linux"],"url":"https://github.com/gate/gate-cli/releases/download/v0.6.2/gate-cli_0.6.2_linux_amd64.tar.gz","bins":["gate-cli"],"targetDir":"bin","label":"Download gate-cli (Linux x64)"},{"kind":"download","os":["linux"],"url":"https://github.com/gate/gate-cli/releases/download/v0.6.2/gate-cli_0.6.2_linux_arm64.tar.gz","bins":["gate-cli"],"targetDir":"bin","label":"Download gate-cli (Linux arm64)"},{"kind":"download","os":["darwin"],"url":"https://github.com/gate/gate-cli/releases/download/v0.6.2/gate-cli_0.6.2_darwin_amd64.tar.gz","bins":["gate-cli"],"targetDir":"bin","label":"Download gate-cli (macOS Intel)"},{"kind":"download","os":["darwin"],"url":"https://github.com/gate/gate-cli/releases/download/v0.6.2/gate-cli_0.6.2_darwin_arm64.tar.gz","bins":["gate-cli"],"targetDir":"bin","label":"Download gate-cli (macOS Apple Silicon)"}]}} |
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-exchange-activitycenter
Activity center aggregates platform campaigns (trading competitions, airdrops, newcomer activities, referral activities, etc.), supporting activity recommendations and my activities entry.
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.
Trigger Scenarios: User mentions "recommend activities", "what activities", "airdrop activities", "trading competition", "VIP activities", "my activities", etc.
⚠️ MANDATORY RESPONSE FORMAT: When this skill is triggered, AI responses MUST strictly follow the Response Templates defined in this document. Free-form responses are FORBIDDEN.
Skill Dependencies
gate-cli commands used
Query Operations (Read-only)
gate-cli cex activity get-entry
gate-cli cex activity list
gate-cli cex activity types
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: Activity:Read
- 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 activity-center workflow.
SKILL.md keeps routing and recommendation logic.
references/gate-cli.md is the authoritative gate-cli execution contract for entry/list/type queries, filter handling, and degraded output behavior.
Routing Rules
| User Intent | Keywords/Pattern | Action |
|---|
| Hot Recommendation | "recommend activities" "what activities" "recent activities" | Scenario 1.1 Hot Recommendation |
| Type-Based Recommendation | "airdrop activities" "trading competition" "VIP activities" "earn activities" | Scenario 1.2 Type-Based |
| Scenario-Based Recommendation | "I have GT" "futures activities" "spot activities" | Scenario 1.3 Scenario-Based |
| Search by Name | "{activity name}" "position airdrop" | Scenario 1.4 Search by Name |
| My Activities | "what activities I joined" "my activities" "enrolled activities" | Scenario 2 My Activities |
| Welfare Center/Newcomer Tasks | "claim rewards" "check-in" "newcomer tasks" | ❌ NOT applicable to this skill |
gate-cli command index
| MCP Tool | Purpose | action_type |
|---|
gate-cli cex activity types | Get activity type list (id, name) for type filtering | query |
gate-cli cex activity list | Query activities by hot/type/scenario/keywords | info-card |
gate-cli cex activity get-entry | Get "My Activities" entry card | info-card |
API Parameter Constraints
| Parameter | Constraint | Description |
|---|
page_size | MUST be ≤ 3 | ⚠️ HARD LIMIT: Each request MUST NOT exceed 3 activities. Always set page_size=3 or less. |
page | Integer | Page number, default 1. |
recommend_type | hot / type / scenario | Query mode: hot (popular), type (by type_ids), scenario (by keywords) |
type_ids | String | Activity type IDs, comma-separated. Used with recommend_type=type |
keywords | String | Search keywords for activity name. Used with recommend_type=scenario |
⚠️ CRITICAL: The page_size parameter is strictly limited to a maximum of 3. Any value greater than 3 is FORBIDDEN.
Scenario 1: Activity Recommendation
1.1 Hot Recommendation (No Type Specified)
Trigger: "recommend activities" "what activities" "recent activities"
API Call:
`gate-cli cex activity list`?recommend_type=hot&sort_by=default&page=1&page_size=3
Rules:
- ✅ Do NOT ask for type clarification, call API directly
- ✅ Fixed
page_size=3 (maximum allowed), no pagination
1.2 Type-Based Recommendation
Trigger: "airdrop activities" "trading competition" "VIP activities" "earn activities"
API Call Sequence:
gate-cli cex activity types → Get type list, match user's type name (case-insensitive)
cex_activity_list_activities?recommend_type=type&type_ids=matched_id1,matched_id2&sort_by=time&page_size=3
Keyword Extraction Examples:
- "what airdrop activities are there" → Extract: airdrop
- "VIP activities" → Extract: VIP
- "I'm a VIP, any exclusive activities" → Extract: VIP
- "any low-risk activities" → Extract: earn
1.3 Scenario-Based Recommendation
Trigger: "I have GT, what activities can I join" "futures activities"
API Call:
- If mappable to type: Use
recommend_type=type with type_ids
- If scenario/asset: Use
recommend_type=scenario with keywords
`gate-cli cex activity list`?recommend_type=scenario&keywords=GT&page_size=3
1.4 Search by Name
Trigger: "help me find position airdrop" "where is VIP exclusive activity" "find test activity"
API Call:
`gate-cli cex activity list`?recommend_type=scenario&keywords=test_activity&page=1&page_size=3
Parameter Notes:
- Use
recommend_type=scenario with keywords for name search
keywords is the activity name or partial name to search
- ⚠️ Language Conversion: If user input contains non-English text, translate keywords to English before passing to the
keywords parameter
Response Template (when results found):
Based on your keywords, I found some possible activities. If you didn't find the activity you're looking for, you can provide a more complete activity name, or click more activities to explore more hot activities.
Scenario 2: My Activities
Trigger: "what activities I joined" "my activities" "enrolled activities"
API Call:
`gate-cli cex activity get-entry`
Rules:
- ✅ Only show entry card, guide user to click and jump
- ✅ Apply URL Processing Rules (see above) to the
url field
- ❌ Do NOT filter activity list in this API
Decision Logic
| Condition | Action |
|---|
| User asks for hot/recommended activities | Call gate-cli cex activity list with recommend_type=hot directly |
| User specifies activity type | First call gate-cli cex activity types, then gate-cli cex activity list with recommend_type=type&type_ids=xxx |
| User mentions asset/scenario (GT, futures) | Use recommend_type=scenario with keywords |
| User searches by activity name | Use recommend_type=scenario with keywords={activity_name} |
| User asks "my activities" | Call gate-cli cex activity get-entry |
| Activity list returns empty | Use "No Results" template, do NOT use "filtered for you..." |
URL Processing Rules
All activity URLs returned by API must be processed before displaying to users:
| URL Pattern | Processing | Example |
|---|
Relative path (starts with /) | Prepend https://www.gate.com | /competition/xxx → https://www.gate.com/competition/xxx |
Already has host (starts with http:// or https://) | Keep as-is, no modification | https://www.gate.com/campaigns/xxx → https://www.gate.com/campaigns/xxx |
Why relative paths? API returns relative paths for flexibility:
- Multi-language support: Frontend can dynamically add language prefix (
/zh/, /en/, /ja/)
- Multi-environment deployment: Different domains for test/staging/production
- Client flexibility: Web, App, H5 can handle links differently
Display Format: Always use clickable Markdown link: [{activity_title}]({processed_url})
Activity Response Field Specification
For all activity recommendation scenarios (1.1, 1.2, 1.3, 1.4), the response MUST only include the following fields:
| API Field | Display Label | Processing Rule |
|---|
master_one_line | Activity Title | Display as-is |
url | Activity Link | Apply URL Processing Rules (prepend https://www.gate.com for relative paths) |
type_name | Activity Type | Display the type_name value directly (NOT type_id) |
Response Format Example:
| Activity Title | Activity Type | Activity Link |
|---|
| Traditional Assets Limited Edition Event | Traditional Assets | View Details |
Rules:
- ✅ Only display the 3 fields listed above
- ✅ Use
type_name for activity type (NOT type_id)
- ✅ Process URLs according to URL Processing Rules
- ❌ Do NOT display other fields like
id, type_id, hot, img, competition_name, start_at, end_at, etc.
Response Templates
⚠️ MANDATORY: AI responses MUST strictly follow these templates. Free-form or custom responses are FORBIDDEN.
Template Compliance Rules
- REQUIRED: Every response MUST use the exact template structure defined below
- REQUIRED: Include the intro text + activity table + follow-up prompt
- FORBIDDEN: Adding extra commentary, explanations, or custom formatting
- FORBIDDEN: Omitting any part of the template structure
Activity Recommendation (Has Results)
| Scenario | Intro Text (MUST use exactly) |
|---|
| Hot (1.1) | Here are the current hot activities: |
| By Type (1.2) | Filtered [type] activities for you: |
| By Scenario (1.3) | Filtered activities related to [scenario/asset] for you: |
| By Name (1.4) | Based on your keywords, I found some possible activities: |
Required Response Structure:
{Intro Text from table above}
| Activity Title | Activity Type | Activity Link |
|----------------|---------------|---------------|
| {master_one_line} | {type_name} | [View Details]({processed_url}) |
|... |... |... |
{Follow-up Prompt - see below}
Follow-up Prompts by Scenario:
| Scenario | Follow-up Prompt (MUST include) |
|---|
| Hot (1.1) | Click the link to view details or sign up. Need activities of a specific type? |
| By Type (1.2) | Click the link to view details and how to participate. |
| By Scenario (1.3) | Click the link to view participation requirements and rewards. |
| By Name (1.4) | If you didn't find what you're looking for, provide a more complete activity name. |
My Activities Template (Scenario 2)
Required Response Structure:
Click [My Events]({processed_url}) to view your enrolled and ongoing activities.
In "My Events" you can:
- View activity progress
- Claim activity rewards
- Track activity status
No Results Template
Required Response Structure:
Currently no [type/keyword] activities are in progress. You can:
- Check the activity center regularly, new activities will be displayed as soon as they launch
- Tell me other activity types you're interested in (e.g., trading, earn, VIP exclusive), and I can filter for you
Error Handling
| Error Type | Response Template |
|---|
| API timeout/failure | Unable to load activities at the moment, please try again later. |
| No matching activities | Use "No Results" template |
| 401 Unauthorized | Session expired, please log in again to view activities. |
| 400 Bad Request | Unable to process your request. Please try a different search term. |
| 429 Rate Limited | Too many requests. Please wait a moment and try again. |
| 500 Server Error | Service temporarily unavailable. Please try again later. |
| Network Error | Network connection issue. Please check your connection and try again. |
Safety Rules
- No investment advice: Activity rewards are platform benefits, not investment guidance
- No data fabrication: Only show data returned by backend
- Compliance check: Do not show activities unavailable in user's region
- No internal exposure: Never mention technical details to users, including:
- API names (e.g.,
gate-cli cex activity list)
- Parameter names (e.g.,
recommend_type, type_ids)
- Internal IDs (e.g.,
type_id=34, id=1499)
- Error codes or technical error messages
- Example of BAD response: "No Alpha type activities found (type_id=34)"
- Example of GOOD response: "Currently no Alpha activities are in progress"
Data Integrity Rules
⚠️ MANDATORY: These rules MUST be followed for ALL data processing and display.
1. Never Guess Data
- ❌ FORBIDDEN: Guessing, estimating, or fabricating any data values
- ❌ FORBIDDEN: Making assumptions about timestamps, numbers, or any computed values
- ✅ REQUIRED: Only display data exactly as returned by API
- ✅ REQUIRED: If data is missing or unclear, state "Data unavailable" instead of guessing
2. Self-Verification Mechanism
Before displaying any processed data, perform self-check:
| Data Type | Verification Method |
|---|
| Timestamps | Verify conversion result is reasonable (year, month, day within expected range) |
| URLs | Verify URL format is valid after processing |
| Numbers | Verify numeric values match API response exactly |
| Type names | Verify type_name exists in API response, do NOT derive from type_id |
3. Proactive Validation (Not Reactive Correction)
- ✅ REQUIRED: Validate data BEFORE presenting to user
- ✅ REQUIRED: Double-check time-sensitive information (timestamps, dates)
- ❌ FORBIDDEN: Wait for user to point out errors
- ❌ FORBIDDEN: Display data first and correct later
4. Error Handling for Data Issues
If data validation fails:
- Do NOT display the problematic data
- Show a safe fallback message: "Some data is temporarily unavailable"
- Log the issue internally (do NOT expose to user)
Cross-Skill Routing
| User Follow-up Intent | Route To |
|---|
| "I want to buy crypto" | Trading skill |
| "I want to stake" | Launchpool/Earn skill |
| "Welfare center" "check-in" | Welfare center skill (NOT this skill) |
Additional References
For detailed scenarios and examples, see references/scenarios.md