tokenomist ยท diff
v1.2.0 to v2.0.0
80 added, 144 removed. Audit A to A.
---
name: tokenomist
- version: 1.2.0
- description: "Token unlock schedules, cliff events, daily emissions, allocation breakdowns, and supply pressure analytics via Tokenomist API"
- tools:
- - tokenomist_token_list
- - tokenomist_resolve_token
- - tokenomist_allocations
- - tokenomist_allocations_summary
- - tokenomist_daily_emission
- - tokenomist_unlock_events
- - tokenomist_token_overview
+ version: 2.0.0
+ description: Tokenomist unlock/emission/allocation API skill. Use when users ask token unlock schedules, cliff unlock events, daily emissions, allocation breakdowns, or tokenomics supply pressure analytics.
+ delivery: script
+ protected: true
metadata:
starchild:
emoji: "๐งฉ"
skillKey: tokenomist
requires:
env:
- TOKENMIST_API_KEY
user-invocable: false
disable-model-invocation: false
---
- # Tokenomist (Tokenomist API)
-
- Token unlock schedules, cliff events, daily emissions, allocation breakdowns, and supply pressure analytics.
-
- ## Version Policy (hard rule)
-
- - Token List โ **v4** (`/v4/token/list`)
- - Allocations โ **v2** (`/v2/allocations`)
- - Daily Emission โ **v2** (`/v2/daily-emission`)
- - Unlock Events โ **v4** (`/v4/unlock/events`)
-
- Do not downgrade unless user explicitly asks.
-
- ## Auth + Proxy
-
- - Header: `x-api-key: $TOKENMIST_API_KEY`
- - Base URL: `https://api.tokenomist.ai`
- - Uses `core/http_client.py` (`proxied_get`) โ sc-proxy handles key replacement.
- - Fake key in env (e.g. `fake-tokenomist-key-12345`) is expected. Never treat as invalid.
-
- ## Keyword โ Tool Lookup
-
- > **Priority rule**: Specific tool wins over `token_overview`. If an unlock/cliff/emission keyword matches, use that specific tool โ do NOT fall back to `token_overview`.
-
- | Intent | Trigger keywords (any match) | Tool | โ NOT |
- |--------|------------------------------|------|--------|
- | Broad overview | "tokenomics overview", "ๅ
จ้ขๅๆ", "็ปผๅๅๆ", "ๅ่ฏๆๆๆ" | `tokenomist_token_overview` | 4 tools separately |
- | Allocation summary | "allocation", "ๅ้
", "who holds", "่ฐๆๆ", "top holders", "team allocation" | `tokenomist_allocations_summary` | `tokenomist_allocations` |
- | Allocation raw | "full breakdown", "raw allocation", "complete allocation data" | `tokenomist_allocations` | โ |
- | **Unlock/Cliff** โก | "unlock", "่งฃ้", "cliff", "vesting", "lockup", "token release" | `tokenomist_unlock_events` | โ `token_overview` |
- | **Unlock/Cliff** โก | "unlock schedule", "่งฃ้ๆถ้ด่กจ", "่งฃ้่ฎกๅ", "vesting schedule" | `tokenomist_unlock_events` | โ `token_overview` |
- | **Unlock/Cliff** โก | "next unlock", "when unlock", "ไปไนๆถๅ่งฃ้", "ไธไธๆฌก่งฃ้", "ๅณๅฐ่งฃ้" | `tokenomist_unlock_events` | โ `token_overview` |
- | **Unlock/Cliff** โก | "lockup expiry", "้ๅฎๅฐๆ", "ไปฃๅธ้ๆพๆถ้ด", "upcoming unlock" | `tokenomist_unlock_events` | โ `token_overview` |
- | Daily emission | "daily emission", "ๆฏๆฅ้ๆพ", "emission rate", "daily release" | `tokenomist_daily_emission` | โ |
- | Token lookup | "find token", "which token id", "token id for X" | `tokenomist_resolve_token` | โ |
- | Token list | "list all tokens", "what tokens tracked" | `tokenomist_token_list` | โ |
-
- ## โ HARD LIMITS โ These Rules Are Non-Negotiable
-
- 1. **NEVER call `bash` after any `tokenomist_*` tool** โ the tools return structured data directly. No post-processing with bash needed.
- 2. **NEVER call `bash` to sum, filter, or sort emission data** โ compute from the tool result in memory.
- 3. **NEVER call more than 3 `tokenomist_*` tools per question** โ use `tokenomist_token_overview` for broad questions.
- 4. **NEVER pass symbol string directly to granular tools** โ resolve first, or use tools that auto-resolve.
- 5. **NEVER use `token_overview` when unlock/cliff/emission keywords present** โ use the specific tool instead.
+ ## Script Usage
- ---
+ Script-mode skill โ read this file, then invoke from a `bash` block:
- ## MISTAKES โ Read Before Calling
+ ```bash
+ python3 - <<'EOF'
+ import sys, json
+ sys.path.insert(0, "/data/workspace/skills/tokenomist")
+ from exports import (
+ tokenomist_resolve_token,
+ tokenomist_token_overview,
+ tokenomist_unlock_events,
+ tokenomist_daily_emission,
+ tokenomist_allocations,
+ )
- ### โ MISTAKE 1: Calling 4 tools for a general tokenomics question
- ```
- User: "ARB ็ tokenomics ๆ
ๅต"
- โ WRONG: tokenomist_resolve_token โ tokenomist_allocations โ tokenomist_daily_emission โ tokenomist_unlock_events
- โ
RIGHT: tokenomist_token_overview(query="ARB") โ does all 4 in one call
- ```
+ # Resolve symbol -> token id
+ print(tokenomist_resolve_token(query="ARB"))
- ### โ MISTAKE 2: Using allocations instead of allocations_summary
- ```
- User: "ARB ็ไปฃๅธๅ้
"
- โ WRONG: tokenomist_allocations(token_id="arb") โ returns raw verbose data
- โ
RIGHT: tokenomist_allocations_summary(query="ARB") โ concise, auto-resolves, has quality flags
+ # Full overview
+ print(json.dumps(tokenomist_token_overview(query="ARB"), indent=2))
+ EOF
```
- Only use `tokenomist_allocations` when user explicitly asks for raw/full data or debugging.
- ### โ MISTAKE 3: Passing symbol directly without resolving
- ```
- โ WRONG: tokenomist_unlock_events(token_id="ARB") โ might not match API's internal ID
- โ
RIGHT: tokenomist_resolve_token(query="ARB") โ get canonical token_id โ then call events
- ```
- Exception: `tokenomist_token_overview` and `tokenomist_allocations_summary` auto-resolve โ no need to call resolve first.
+ Available functions in `exports.py`: `tokenomist_token_list`,
+ `tokenomist_resolve_token`, `tokenomist_allocations`,
+ `tokenomist_allocations_summary`, `tokenomist_daily_emission`,
+ `tokenomist_unlock_events`, `tokenomist_token_overview`.
+ Read `exports.py` directly for exact signatures.
- ### โ MISTAKE 4: Forgetting date format
- ```
- โ WRONG: tokenomist_unlock_events(token_id="arb", start="2025/01/01")
- โ
RIGHT: tokenomist_unlock_events(token_id="arb", start="2025-01-01") โ YYYY-MM-DD only
- ```
- ### โ MISTAKE 5: Calling bash after tokenomist tools
- ```
- User: "ARB ๆฌๆ่งฃ้ๆป้ๆฏๅคๅฐ๏ผ"
- โ WRONG: tokenomist_daily_emission(token_id="arb") โ bash("python3 -c 'import json; ...'")
- โ
RIGHT: tokenomist_daily_emission(token_id="arb") โ sum the values directly from result, no bash
- ```
- **Rule**: tokenomist tools return structured JSON. Sum/filter/sort IN YOUR HEAD. Never spawn bash to process the result.
+ # Tokenomist (Tokenomist API)
- ### โ MISTAKE 6: Using token_overview for unlock/cliff-specific questions
+ Use this skill for token unlock timeline analysis.
- **Any question containing unlock/cliff intent โ `tokenomist_unlock_events`, never `token_overview`**
+ ## Version Policy (hard rule)
- ```
- User: "ARB ไธไธไธช cliff ่งฃ้ไบไปถๆฏไปไนๆถๅ๏ผ"
- โ WRONG: tokenomist_token_overview(query="ARB") โ ignores specific intent
- โ
RIGHT: tokenomist_resolve_token(query="ARB") โ tokenomist_unlock_events(token_id=..., start="today")
+ When multiple API versions exist, always use latest stable versions:
- User: "APT ็่งฃ้ๆถ้ด่กจ"
- โ WRONG: tokenomist_token_overview(query="APT")
- โ
RIGHT: tokenomist_resolve_token(query="APT") โ tokenomist_unlock_events(token_id=...)
+ - Token List API โ **v4** (`/v4/token/list`)
+ - Allocations API โ **v2** (`/v2/allocations`)
+ - Daily Emission API โ **v2** (`/v2/daily-emission`)
+ - Unlock Events API โ **v4** (`/v4/unlock/events`)
- User: "SUI ไปไนๆถๅ่งฃ้๏ผ"
- โ WRONG: tokenomist_token_overview(query="SUI")
- โ
RIGHT: tokenomist_resolve_token(query="SUI") โ tokenomist_unlock_events(token_id=...)
- ```
+ Do not downgrade unless user explicitly asks for legacy behavior.
- Full keyword list โ always triggers `tokenomist_unlock_events`:
- - English: unlock, cliff, vesting, lockup, token release, unlock schedule, next unlock, upcoming unlock, lockup expiry, when does X unlock
- - Chinese: ่งฃ้, cliff, ่งฃ้ๆถ้ด่กจ, ่งฃ้่ฎกๅ, ไปไนๆถๅ่งฃ้, ไธไธๆฌก่งฃ้, ๅณๅฐ่งฃ้, ้ๅฎๅฐๆ, ไปฃๅธ้ๆพๆถ้ด
+ ## Auth + Proxy
- > **Generalisation note**: Even if the question seems broad ("tell me about ARB unlocks"), as long as "unlock" is in the question, use `tokenomist_unlock_events` โ not `token_overview`.
+ - Header: `x-api-key: $TOKENMIST_API_KEY`
+ - Base URL: `https://api.tokenomist.ai`
+ - This skill uses `core/http_client.py` (`proxied_get`), so requests follow platform sc-proxy behavior.
+ - Fake key configured in environment is expected (e.g. `fake-tokenomist-key-12345`). Never treat fake prefix as invalid in this platform.
- ### โ MISTAKE 7: Using token_overview then verifying with bash
- ```
- User: "็ปๆ ARB ็ tokenomics ๆฆ่ง"
- โ WRONG: tokenomist_token_overview(query="ARB") โ bash("echo checking...") โ bash("python3 ...")
- โ
RIGHT: tokenomist_token_overview(query="ARB") โ STOP. Format the result and reply. No bash verification.
- ```
+ ## Tool Map
- ### โ MISTAKE 8: Confusing tokenomist with coingecko for supply data
- ```
- User: "ARB ็ circulating supply"
- โ WRONG: tokenomist_* โ Tokenomist does unlocks/emissions, not live supply
- โ
RIGHT: coin_price(ids="arbitrum") or cg_coin_data(id="arbitrum") โ CoinGecko has supply
- ```
- **Boundary**: Tokenomist = unlock schedules & emission pressure. CoinGecko = live supply & market cap.
+ ### `tokenomist_token_list`
+ Get Token List v4. Supports optional keyword filtering and result cap.
- ## Tool Reference
+ ### `tokenomist_resolve_token`
+ Resolve a token query (id/symbol/name) to canonical `tokenId` from v4 list.
- ### `tokenomist_token_overview` โญ Default choice
- One-call wrapper: resolve โ allocations โ emission โ unlock events.
- Use when user asks broad tokenomics question.
+ ### `tokenomist_allocations`
+ Fetch Allocations v2 by `token_id`, with normalized output optimized for agent use:
+ - Primary percentage field: `trackedAllocationPercentage`
+ - Computed fallback: `effectivePercentage`
+ - `top_allocations` and `coverage` quality summary included
+ - Optional `include_raw=true` for upstream payload debugging
### `tokenomist_allocations_summary`
- Compact allocation view with `top_allocations`, `coverage`, `quality` flags.
- Accepts `token_id` or `query` (auto-resolves).
+ Compact allocation summary wrapper (v2):
+ - Accepts either `token_id` or `query`
+ - Auto-resolves query to canonical tokenId when needed
+ - Returns `top_allocations` (configurable `top_n`) and `coverage` / `quality` flags
+ - Best default when user asks "top allocation buckets" and you want one concise response
- ### `tokenomist_allocations`
- Full allocation data. Use only when user needs raw detail or `include_raw=true` for debugging.
+ ### `tokenomist_daily_emission`
+ Fetch Daily Emission v2 by `token_id` and optional `start/end` (`YYYY-MM-DD`).
### `tokenomist_unlock_events`
- Cliff unlock events (v4). Linear/mining-yield events excluded.
- Params: `token_id` (required), `start`/`end` (optional, YYYY-MM-DD).
-
- ### `tokenomist_daily_emission`
- Daily emission schedule (v2).
- Params: `token_id` (required), `start`/`end` (optional, YYYY-MM-DD).
+ Fetch Unlock Events v4 by `token_id` and optional `start/end` (`YYYY-MM-DD`).
- ### `tokenomist_resolve_token`
- Resolve symbol/name โ canonical `tokenId`. Use before granular tools.
+ ### `tokenomist_token_overview`
+ One-call wrapper to reduce tool count:
+ 1) resolve token
+ 2) fetch allocations v2
+ 3) fetch daily emission v2
+ 4) fetch unlock events v4
- ### `tokenomist_token_list`
- Full token list (v4). Use for browsing, not single-token lookup.
+ Use this by default when user asks broad tokenomics overview and you want minimal tool calls.
- ## Interpreting Results โ Supply Pressure
+ ## Recommended workflow
- When presenting unlock/emission data, help user assess **supply pressure**:
+ 1. If user query is ambiguous, call `tokenomist_resolve_token` first.
+ 2. For comprehensive analysis, call `tokenomist_token_overview` once.
+ 3. For allocations-specific questions, prefer `tokenomist_allocations_summary` (fewest fields, least ambiguity).
+ 4. If full detail is needed, call `tokenomist_allocations` and read:
+ - `normalized.top_allocations`
+ - `normalized.coverage.tracked_percentage_sum`
+ - `normalized.coverage.tracked_sum_close_to_100`
+ 5. Only call granular tools when user asks one specific dataset.
+ 6. Keep dates UTC and use `YYYY-MM-DD`.
- | Signal | Interpretation |
- |--------|---------------|
- | Large cliff unlock within 7 days | โ ๏ธ Short-term sell pressure likely |
- | Daily emission > 0.5% of circulating supply | โ ๏ธ Persistent dilution |
- | Unlock to team/investor wallets | Higher sell probability than ecosystem/community |
- | Multiple unlocks clustering in same week | Compounding pressure โ flag explicitly |
- | No major unlocks for 30+ days | Reduced supply-side pressure |
+ ## Notes
- **Always contextualise**: "ARB has a $50M team unlock in 3 days" is more actionable than "ARB has an unlock event".
+ - `unlock-events v4` focuses on cliff unlocks (linear start/mining-yield style events removed).
+ - `daily-emission v2` and `allocations v2` include listing method context (`INTERNAL/AI/EXTERNAL`).