Pre-flight Dependencies (auto-injected by Plugin Store CI)
Run once per session before first use. These checks ensure required tools are installed.
Version check (auto-injected)
AI Agent Instruction: Run this version check before executing any commands from this skill. The check is a read-only fetch from raw.githubusercontent.com — it does not install anything. If it reports Update available, you MUST stop, surface the message to the user verbatim, and obtain explicit confirmation before running the suggested npx skills add … command. Do not run the update silently. After a confirmed update completes, re-read this SKILL.md before proceeding.
# Check for skill updates (1-hour cache).
# Network scope: this block calls raw.githubusercontent.com for the version probe only.
# It does NOT install anything; install requires user-confirmed `npx skills add` below.
UPDATE_CACHE="$HOME/.plugin-store/update-cache/sorin-skill"
CACHE_MAX=3600
LOCAL_VER="1.0.1"
DO_CHECK=true
if [ -f "$UPDATE_CACHE" ]; then
CACHE_MOD=$(stat -f %m "$UPDATE_CACHE" 2>/dev/null || stat -c %Y "$UPDATE_CACHE" 2>/dev/null || echo 0)
NOW=$(date +%s)
AGE=$(( NOW - CACHE_MOD ))
[ "$AGE" -lt "$CACHE_MAX" ] && DO_CHECK=false
fi
if [ "$DO_CHECK" = true ]; then
REMOTE_VER=$(curl -sf --max-time 3 "https://raw.githubusercontent.com/okx/plugin-store/main/skills/sorin-skill/plugin.yaml" | grep '^version' | head -1 | tr -d '"' | awk '{print $2}')
if [ -n "$REMOTE_VER" ]; then
mkdir -p "$HOME/.plugin-store/update-cache"
echo "$REMOTE_VER" > "$UPDATE_CACHE"
fi
fi
REMOTE_VER=$(cat "$UPDATE_CACHE" 2>/dev/null || echo "$LOCAL_VER")
if [ "$REMOTE_VER" != "$LOCAL_VER" ]; then
echo "Update available: sorin-skill v$LOCAL_VER -> v$REMOTE_VER."
echo "ACTION REQUIRED: ask the user to confirm before running:"
echo " npx skills add okx/plugin-store --skill sorin-skill --global"
echo "(This contacts the npm registry and github.com/okx/plugin-store and overwrites this skill. Do NOT auto-run.)"
fi
Sorin Skill
Overview
Sorin Skill helps answer crypto-related questions about tokens, pools, chains, protocols, and projects through Sahara's Sorin DeFi AI Services Gateway.
It identifies the user's intent, selects the most relevant gateway endpoint, and returns concise, data-backed analysis with assumptions and risks.
Gateway
- Base URL:
https://defi-tools-proxy.saharaa.info
- API key env var:
DEFI_TOOLS_API_KEY
- Auth header:
Authorization: Bearer ${DEFI_TOOLS_API_KEY}
- Accept header:
accept: text/plain
Default request template:
GET https://defi-tools-proxy.saharaa.info/<path>?<query>
Headers:
accept: text/plain
Authorization: Bearer ${DEFI_TOOLS_API_KEY}
Pool analysis example:
GET https://defi-tools-proxy.saharaa.info/pool/analysis?chain=Ethereum
Headers:
accept: text/plain
Authorization: Bearer ${DEFI_TOOLS_API_KEY}
Quick Start
- Run
sorin-skill quickstart.
- Verify
DEFI_TOOLS_API_KEY is set in the agent runtime.
- Check gateway connectivity using the pool analysis example.
- If successful, confirm Sorin Skill is ready and suggest a token, pool, chain, protocol, or project analysis prompt.
- If failed, return the gateway status and exact error message.
Intention Routing
- Detect user intention from natural language.
- Select exactly one primary API first (add secondary APIs only when needed).
- Validate required inputs. If missing, ask only the minimum follow-up question.
- Call API and parse
success, data, error.
Intention -> API Mapping
1) Token fundamentals / price / holders / technicals
- API:
tokenTool
- Use when: user asks token market analysis (macro liquidity + micro market structure).
- Input:
token_symbol (required): token symbol, e.g. BTC, ETH
quote_currency (optional, default USDT): quote currency for the pair
- Request:
GET https://defi-tools-proxy.saharaa.info/token/analysis?token_symbol=ETH"e_currency=USDT
Headers:
accept: text/plain
Authorization: Bearer ${DEFI_TOOLS_API_KEY}
2) Yield/staking pool discovery and scoring
- API:
poolTool
- Use when: user asks where to stake, best APY pools, pool comparison, TVL/APY trends.
- Input (all optional filters):
chain (optional): chain id string, e.g. 1, 56
project (optional): project slug, e.g. lido, aave-v3
protocol (e.g. lido, aave-v3)
token_symbol (e.g. ETH, USDC)
pool_id (optional): unique pool identifier
pool_category (optional): pool category filter
- Request:
GET https://defi-tools-proxy.saharaa.info/pool/analysis?chain=Ethereum&protocol=lido&token_symbol=ETH
Headers:
accept: text/plain
Authorization: Bearer ${DEFI_TOOLS_API_KEY}
3) Chain-level DEX and TVL landscape
- API:
chainTool
- Use when: user asks chain DEX volume trends, TVL changes, protocol dominance on a chain.
- Input (optional, provide one when possible):
chainId (integer): chain id, e.g. 1
chainName (string): chain name, e.g. Ethereum
- Request:
GET https://defi-tools-proxy.saharaa.info/chain/analysis?chainName=Ethereum
Headers:
accept: text/plain
Authorization: Bearer ${DEFI_TOOLS_API_KEY}
4) Protocol-level financial analysis
- API:
protocolTool
- Use when: user asks protocol TVL/fees/revenue/capital flow and comprehensive metrics.
- Request:
GET https://defi-tools-proxy.saharaa.info/protocol/analysis?protocol=aave
Headers:
accept: text/plain
Authorization: Bearer ${DEFI_TOOLS_API_KEY}
5) Prediction market and project outlook
- API:
projectTool
- Use when: user asks project odds, FDV expectations, short/long-term target prices, market sentiment for a project.
- Input:
projectName (required): project name, e.g. berachain
- Request:
GET https://defi-tools-proxy.saharaa.info/project/analysis?projectName=berachain
Headers:
accept: text/plain
Authorization: Bearer ${DEFI_TOOLS_API_KEY}
Output Style for End Users
Use this response structure:
- What I queried: API name and key parameters.
- Key findings: 3-5 bullets with metrics.
- Interpretation: trend/risk/opportunity in plain language.
- Actionable next step: one concrete follow-up.
- Confidence and caveats: missing fields, stale windows, low liquidity effects.
Decision Heuristics
- If question is asset-specific, start with
tokenTool.
- If question is yield-focused, start with
poolTool.
- If question is chain ecosystem-focused, use
chainTool.
- If question is protocol financial health-focused, use
protocolTool.
- If question is project narrative or valuation-focused, use
projectTool.
Safety Rules
- Never invent prices, holders, APY, TVL, or tx outcomes.
- If API returns failure, surface the exact reason and suggest one retry path.
- Ask follow-up questions only for missing required parameters.
- Keep chain IDs explicit when ambiguity exists.
1---
2name: sorin-skill
3description: Use when the user asks crypto-related questions about a token, pool, chain, protocol, or project and the agent should answer with Sorin's DeFi gateway using clear, data-backed analysis.
4version: "1.0.1"
5author: Sahara AI
6tags:
7 - defi
8 - crypto
9 - analytics
10 - tokens
11 - yield
12---
13
14
15## Pre-flight Dependencies (auto-injected by Plugin Store CI)
16
17> Run once per session before first use. These checks ensure required tools are installed.
18
19### Version check (auto-injected)
20
21> **AI Agent Instruction**: Run this version check before executing any commands from this skill. The check is a read-only fetch from `raw.githubusercontent.com` — it does **not** install anything. If it reports `Update available`, you MUST stop, surface the message to the user verbatim, and obtain explicit confirmation before running the suggested `npx skills add …` command. Do not run the update silently. After a confirmed update completes, re-read this SKILL.md before proceeding.
22
23```bash
24# Check for skill updates (1-hour cache).
25# Network scope: this block calls raw.githubusercontent.com for the version probe only.
26# It does NOT install anything; install requires user-confirmed `npx skills add` below.
27UPDATE_CACHE="$HOME/.plugin-store/update-cache/sorin-skill"
28CACHE_MAX=3600
29LOCAL_VER="1.0.1"
30DO_CHECK=true
31
32if [ -f "$UPDATE_CACHE" ]; then
33 CACHE_MOD=$(stat -f %m "$UPDATE_CACHE" 2>/dev/null || stat -c %Y "$UPDATE_CACHE" 2>/dev/null || echo 0)
34 NOW=$(date +%s)
35 AGE=$(( NOW - CACHE_MOD ))
36 [ "$AGE" -lt "$CACHE_MAX" ] && DO_CHECK=false
37fi
38
39if [ "$DO_CHECK" = true ]; then
40 REMOTE_VER=$(curl -sf --max-time 3 "https://raw.githubusercontent.com/okx/plugin-store/main/skills/sorin-skill/plugin.yaml" | grep '^version' | head -1 | tr -d '"' | awk '{print $2}')
41 if [ -n "$REMOTE_VER" ]; then
42 mkdir -p "$HOME/.plugin-store/update-cache"
43 echo "$REMOTE_VER" > "$UPDATE_CACHE"
44 fi
45fi
46
47REMOTE_VER=$(cat "$UPDATE_CACHE" 2>/dev/null || echo "$LOCAL_VER")
48if [ "$REMOTE_VER" != "$LOCAL_VER" ]; then
49 echo "Update available: sorin-skill v$LOCAL_VER -> v$REMOTE_VER."
50 echo "ACTION REQUIRED: ask the user to confirm before running:"
51 echo " npx skills add okx/plugin-store --skill sorin-skill --global"
52 echo "(This contacts the npm registry and github.com/okx/plugin-store and overwrites this skill. Do NOT auto-run.)"
53fi
54```
55
56---
57
58
59# Sorin Skill
60
61## Overview
62
63Sorin Skill helps answer crypto-related questions about tokens, pools, chains, protocols, and projects through Sahara's Sorin DeFi AI Services Gateway.
64It identifies the user's intent, selects the most relevant gateway endpoint, and returns concise, data-backed analysis with assumptions and risks.
65
66## Gateway
67
68- Base URL: `https://defi-tools-proxy.saharaa.info`
69- API key env var: `DEFI_TOOLS_API_KEY`
70- Auth header: `Authorization: Bearer ${DEFI_TOOLS_API_KEY}`
71- Accept header: `accept: text/plain`
72
73Default request template:
74
75```bash
76GET https://defi-tools-proxy.saharaa.info/<path>?<query>
77Headers:
78accept: text/plain
79Authorization: Bearer ${DEFI_TOOLS_API_KEY}
80```
81
82Pool analysis example:
83
84```bash
85GET https://defi-tools-proxy.saharaa.info/pool/analysis?chain=Ethereum
86Headers:
87accept: text/plain
88Authorization: Bearer ${DEFI_TOOLS_API_KEY}
89```
90
91## Quick Start
92
931. Run `sorin-skill quickstart`.
942. Verify `DEFI_TOOLS_API_KEY` is set in the agent runtime.
953. Check gateway connectivity using the pool analysis example.
964. If successful, confirm Sorin Skill is ready and suggest a token, pool, chain, protocol, or project analysis prompt.
975. If failed, return the gateway status and exact error message.
98
99## Intention Routing
100
1011. Detect user intention from natural language.
1022. Select exactly one primary API first (add secondary APIs only when needed).
1033. Validate required inputs. If missing, ask only the minimum follow-up question.
1044. Call API and parse `success`, `data`, `error`.
105
106## Intention -> API Mapping
107
108### 1) Token fundamentals / price / holders / technicals
109
110- API: `tokenTool`
111- Use when: user asks token market analysis (macro liquidity + micro market structure).
112- Input:
113 - `token_symbol` (required): token symbol, e.g. `BTC`, `ETH`
114 - `quote_currency` (optional, default `USDT`): quote currency for the pair
115- Request:
116
117```bash
118GET https://defi-tools-proxy.saharaa.info/token/analysis?token_symbol=ETH"e_currency=USDT
119Headers:
120accept: text/plain
121Authorization: Bearer ${DEFI_TOOLS_API_KEY}
122```
123
124### 2) Yield/staking pool discovery and scoring
125
126- API: `poolTool`
127- Use when: user asks where to stake, best APY pools, pool comparison, TVL/APY trends.
128- Input (all optional filters):
129 - `chain` (optional): chain id string, e.g. `1`, `56`
130 - `project` (optional): project slug, e.g. `lido`, `aave-v3`
131 - `protocol` (e.g. `lido`, `aave-v3`)
132 - `token_symbol` (e.g. `ETH`, `USDC`)
133 - `pool_id` (optional): unique pool identifier
134 - `pool_category` (optional): pool category filter
135- Request:
136
137```bash
138GET https://defi-tools-proxy.saharaa.info/pool/analysis?chain=Ethereum&protocol=lido&token_symbol=ETH
139Headers:
140accept: text/plain
141Authorization: Bearer ${DEFI_TOOLS_API_KEY}
142```
143
144### 3) Chain-level DEX and TVL landscape
145
146- API: `chainTool`
147- Use when: user asks chain DEX volume trends, TVL changes, protocol dominance on a chain.
148- Input (optional, provide one when possible):
149 - `chainId` (integer): chain id, e.g. `1`
150 - `chainName` (string): chain name, e.g. `Ethereum`
151- Request:
152
153```bash
154GET https://defi-tools-proxy.saharaa.info/chain/analysis?chainName=Ethereum
155Headers:
156accept: text/plain
157Authorization: Bearer ${DEFI_TOOLS_API_KEY}
158```
159
160### 4) Protocol-level financial analysis
161
162- API: `protocolTool`
163- Use when: user asks protocol TVL/fees/revenue/capital flow and comprehensive metrics.
164- Request:
165
166```bash
167GET https://defi-tools-proxy.saharaa.info/protocol/analysis?protocol=aave
168Headers:
169accept: text/plain
170Authorization: Bearer ${DEFI_TOOLS_API_KEY}
171```
172
173### 5) Prediction market and project outlook
174
175- API: `projectTool`
176- Use when: user asks project odds, FDV expectations, short/long-term target prices, market sentiment for a project.
177- Input:
178 - `projectName` (required): project name, e.g. `berachain`
179- Request:
180
181```bash
182GET https://defi-tools-proxy.saharaa.info/project/analysis?projectName=berachain
183Headers:
184accept: text/plain
185Authorization: Bearer ${DEFI_TOOLS_API_KEY}
186```
187
188## Output Style for End Users
189
190Use this response structure:
191
1921. **What I queried**: API name and key parameters.
1932. **Key findings**: 3-5 bullets with metrics.
1943. **Interpretation**: trend/risk/opportunity in plain language.
1954. **Actionable next step**: one concrete follow-up.
1965. **Confidence and caveats**: missing fields, stale windows, low liquidity effects.
197
198## Decision Heuristics
199
200- If question is asset-specific, start with `tokenTool`.
201- If question is yield-focused, start with `poolTool`.
202- If question is chain ecosystem-focused, use `chainTool`.
203- If question is protocol financial health-focused, use `protocolTool`.
204- If question is project narrative or valuation-focused, use `projectTool`.
205
206## Safety Rules
207
208- Never invent prices, holders, APY, TVL, or tx outcomes.
209- If API returns failure, surface the exact reason and suggest one retry path.
210- Ask follow-up questions only for missing required parameters.
211- Keep chain IDs explicit when ambiguity exists.