okx-growth-competition
List OKX Agentic Wallet exclusive trading competitions, register users for contests, track participation and leaderboard rankings, and claim won rewards. Use when users want to list available trading competitions or trading cups, view competition rules / prize pool / total prizes, register or sign up or enroll or join a contest, check the leaderboard (who is winning) or their own rank (am I in the prize zone, what is my place), ask did I win or query participation / claim status, claim won rewards or prizes from completed competitions, see which wallet account they registered with, or submit Telegram / WeChat / Email / Twitter contact for prize delivery to top-tier winners.
What this skill does
# OKX Growth Competition — Trading Competition
Agentic Wallet exclusive trading competitions. Full lifecycle split across focused references:
- **Participation** (discover / register / trade / registered wallet / export guard) — `references/participation.md`
- **Details** (rules / prize pool / four reward sections) — `references/details.md`
- **Rank** (leaderboard / my own rank with CASE 1/2/3 templates) — `references/rank.md`
- **Claim** (reward status check / atomic claim / contact collection) — `references/claim.md`
- **CLI reference** (commands, parameters, return schemas) — `references/cli-reference.md`
This SKILL.md holds the **global rules** (facts, identity invariants, routing, output rules, time formatting, status codes, error handling) that ALL references depend on. Always read this file first; then jump into the matching reference for the user's intent.
## Facts about every Agentic Wallet competition
Treat the following as **factual ground truth** when the user asks about how a competition works. The two chain-related fields play **distinct, non-overlapping roles** — never conflate them:
- `chainId` — single id. **The claim / reward chain ONLY** (rewards are paid on this chain; its contract address lives here). It is NOT a trading chain unless it also appears in `participateChainIds`.
- `participateChainIds` — array of ids returned by **both `list` and `detail`** endpoints. **The trading chain set.** Trades on any chain in this list count toward the same competition standing.
**Trading-chain set = `participateChainIds`. Claim chain = `chainId`.** These are two separate concepts; the display rules below NEVER union them.
1. **Chain id → display name** mapping. Currently supported competition chains: `1 → Ethereum`, `196 → X Layer`, `501 → Solana`.
2. Never tell a user "your chain doesn't count" without first checking `participateChainIds`.
3. `myRankInfo.userTotal = 0` means the user has not yet hit the qualifying threshold or the backend metric pipeline has not picked up their trades yet — it does **NOT** mean the user's chain is unsupported.
4. `competition_rank` takes a single optional `wallet`. Omit it for self-rank — the tool sends your `accountId` (covers every chain in `participateChainIds` in one call; no chain pick). Pass an explicit address ONLY when querying someone else's rank; the address chain family (EVM `0x...` else Solana) must match the activity's primary chain or the tool rejects the call (no silent wrong-chain queries).
## Identity resolution invariant
The query identity for `competition_rank` and `competition_user_status` is **mutually exclusive**: backend accepts EITHER `accountId` (self) OR `walletAddress` (cross-user) — never both. The answer to "which identity did you use?" is **deterministic from the call shape**.
| Call shape | Identity sent |
|---|---|
| `competition_user_status` (any) | `accountId` — covers every chain in `participateChainIds` in one call |
| `competition_rank` without `wallet` | `accountId` |
| `competition_rank` with `wallet=<addr>` | `walletAddress` — tool validates addr's chain family (EVM `0x...` else Solana) matches activity's `chainId`; mismatch → rejected |
| `competition_claim` (pre-check) | `accountId` |
For multi-activity `competition_user_status` (no `activity_name`), the same `accountId` is reused across all activities — backend joins by accountId.
## Mandatory reading order
**Before producing ANY user-facing message about a competition, you MUST first locate the matching section in the right reference file below and follow its fixed template structure.** Do NOT improvise the format. Do NOT shorten the templates. Do NOT drop sections or merge them. Templates are product-mandated copy (Participation / Skill Quality wording, disclaimer) and must not be paraphrased.
The template **structure is fixed**; the **language follows the user** — see the `## Output Language` rule below. When the user writes Chinese, translate the template strings to natural Chinese. When the user writes English, use English as written. Placeholders (including chain display names from `{supportedChains}`) stay as-is.
Quick router (user intent → reference file + section):
| User intent | Reference file | Section |
|---|---|---|
| "list competitions / show available competitions" | `references/participation.md` | Step 1 — Discover |
| "show details / show rules / show prize pool" | `references/details.md` | Step 2 — View Details |
| "register / join" | `references/participation.md` | Step 3 — Join |
| "trade for me" | `references/participation.md` | Step 4 — Trade (delegates to okx-dex-swap) |
| "leaderboard / full board / who is winning" | `references/rank.md` | Check leaderboard (full board) |
| "my rank / what's my ranking / am I in the prize zone" | `references/rank.md` | Check user's own rank (across ALL leaderboards) |
| "show registered wallet" | `references/participation.md` | Query Registered Wallet |
| "export wallet" | `references/participation.md` | Wallet Export Guard |
| "check my status / did I win" | `references/claim.md` | Check Participation Status |
| "claim reward / claim my prize" | `references/claim.md` | Step 6 — Claim Reward |
| Top-tier winner contact follow-up (`needContact: true` after claim) | `references/claim.md` | Contact collection (top-tier winners only) |
If the user's intent does not clearly map to one of the above, ask which they meant before responding — do **not** invent a freeform format.
## Pre-flight
> Read `../okx-agentic-wallet/_shared/preflight.md`. If missing, read `_shared/preflight.md`.
**Cross-skill routing on common errors**:
- `not logged in` → walk the user through the `okx-agentic-wallet` login flow (email → OTP), then retry the original action.
- Backend status codes (`--status` filter / `status` / `joinStatus` / `rewardStatus`) and error code messages (`11002` / `11003` / `11008` / `1860402` / `address limit reached` / `Sui-chain` / region-blocked / `not eligible`): see `references/cli-reference.md`.
## Command Index
All MCP tools mirror the CLI; MCP variants accept `activity_name` (server-resolves the id) and auto-resolve `accountId` / wallet addresses from the active session. Full flag tables and return shapes: `references/cli-reference.md`.
| # | Command | Auth | Description |
|---|---------|------|-------------|
| 1 | `onchainos competition list [--status 0\|1\|2] [--page-size N] [--page-num N]` | None | List competitions (default `status=0`, active only) |
| 2 | `onchainos competition detail --activity-id <id>` | None | Rules, prize pool, chain, timeline |
| 3 | `onchainos competition rank --activity-id <id> [--wallet <addr>] --sort-type <type> [--limit N]` | None | Leaderboard + user rank. See `references/rank.md` for self/cross-user semantics and `sort-type` discovery. |
| 4 | `onchainos competition user-status [--activity-id <id>]` | Wallet login | Participation & reward status (omit `--activity-id` for all activities) |
| 5 | `onchainos competition join --activity-id <id> --evm-wallet <addr> --sol-wallet <addr> --chain-index <chain_id>` | Wallet login | Register the active account for the competition |
| 6 | `onchainos competition claim --activity-id <id> --evm-wallet <addr> --sol-wallet <addr>` | Wallet login | Atomic claim — signs + broadcasts inside the call. See `references/claim.md`. |
| 7 | `onchainos competition submit-contact --activity-id <id> --contact-type <Telegram\|WeChat\|Email\|Twitter> --contact-value <text>` | Wallet login | Record contact for a top-tier winner; only after a claim with `needContact: true`. See `references/claim.md`. |
`--status` (request filter): `0`=active, `1`=ended, `2`=all
`activityStatus` (response field): **`3`=active, `4`=ended** — different from the request filter
## Output Rules
> **Internal-only IDs vs user-facing display.** Internal numeric IDs (`activityId`, `chainIndex`, `accountId`) are returned in tool responses on purpose — they are needed to chain calls between tools (e.g.Related in Ads & Marketing
ads
IncludedMulti-platform paid advertising audit and optimization skill. Analyzes Google, Meta, YouTube, LinkedIn, TikTok, Microsoft, and Apple Ads. 250+ checks with scoring, parallel agents, industry templates, and AI creative generation.
banana
IncludedAI image generation Creative Director powered by Google Gemini Nano Banana models. Use this skill for ANY request involving image creation, editing, visual asset production, or creative direction. Triggers on: generate an image, create a photo, edit this picture, design a logo, make a banner, visual for my anything, and all /banana commands. Handles text-to-image, image editing, multi-turn creative sessions, batch workflows, and brand presets.
rpg-migration-analyzer
IncludedAnalyzes legacy RPG (Report Program Generator) programs from AS/400 and IBM i systems for migration to modern Java applications. Extracts business logic from RPG III/IV/ILE source code, identifies data structures (D-specs), file operations (F-specs), program dependencies (CALLB/CALLP), and converts RPG constructs to Java equivalents. Generates migration reports, complexity estimates, and Java implementation strategies with POJO classes, JPA entities, and service methods. Use when modernizing AS/400 or IBM i legacy systems, analyzing RPG source files (.rpg, .rpgle, .RPGLE), converting RPG to Java, mapping data specifications to Java classes, planning legacy system migration, or when user mentions RPG analysis, Report Program Generator, RPG III/IV/ILE, AS/400 modernization, IBM i migration, packed decimal conversion, or mainframe application rewrite.
brand-library-architect
IncludedBuild a complete brand library for a product — visual asset render pipeline, brand documentation set (BRAND, COPY, MANIFESTO, BIOS, FAQ, GLOSSARY, TONE, PRICING), open-source convention files (README, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT), and a self-contained press kit. This skill should be used when the user asks to "build a brand library / brand kit / press kit / brand assets" for a product, "set up a brand library workflow," "create a positioning manifesto plus visual identity," or any combination of brand documentation + visual asset pipeline. Apply phase-by-phase or run end-to-end. Templates are product-agnostic and use {{TOKEN}} placeholders the skill prompts the user to fill.
writing-tech-post
IncludedAuthors engineering blog posts end-to-end: launch deep-dives, incident postmortems, architecture migrations, performance case studies, tutorials, AI/agent system writeups, security disclosures, and research-to-product translations. Picks the correct archetype, plans the abstraction ladder, enforces an evidence cadence (diagrams, benchmarks, profiles, traces, code, ablations), tunes voice against publisher house styles (Datadog, Vercel, GitHub, AWS, Meta, Cloudflare, Jane Street), and runs a pre-publish gate for narrative momentum and disclosure ethics. Use when drafting a new engineering post, restructuring a draft that feels flat, deciding which evidence form belongs where, validating that depth and product context are balanced, or preparing a postmortem, migration, or performance narrative for external publication. Do not use for API reference documentation, README authoring, marketing copy, release notes, generic SEO content, ghost-written executive thought leadership, or non-engineering long-form essays.
blog-google
IncludedGoogle API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity analysis for E-E-A-T, YouTube video search for embedding, and Google Ads Keyword Planner. Progressive feature availability based on credential tier (API key, OAuth/service account, GA4, Ads). Shares config with claude-seo at ~/.config/claude-seo/google-api.json. Use when user says "google data", "page speed", "core web vitals", "search console", "indexation", "GA4", "keyword research", "nlp entities", "blog performance", "youtube search", "google api setup".