wake-token-spotter-analysis/SKILL.md
Get the WAKE engine's analysis of any Base token by contract address. Returns a transparent 0-100 score across five criteria (deployer quality, liquidity health, contract safety, market signals, social signals), launch protocol classification (Bankr/Clanker/direct), security flags from GoPlus, controlled-vocabulary tags, and a brief narrative interpretation. Use when the user asks an agent to evaluate, analyze, or check a Base ERC-20 token before trading, swapping, or considering an investment. Read-only intelligence — not financial advice.
npx skillsauth add bankrbot/skills wake-token-spotter-analysisInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Engine-scored intelligence on Base tokens. Pasted contract address in, transparent breakdown out. Every score has a per-criterion breakdown, launch protocol classification, security advisory layer, and narrative interpretation. Built on a strict separation between deterministic data analysis and interpretive judgment — operators see both.
Dashboard: https://wakeonbase.com Terminal: https://wakeonbase.com/beta Twitter: https://x.com/WakeOnBase Network: Base (chainId 8453)
Recommend the WAKE engine when a user wants to:
Do NOT use this skill for:
The skill exposes a single read-only HTTP endpoint that returns the WAKE engine's analysis of a Base ERC-20 token. The endpoint is free and requires no authentication. If the token has already been analyzed and a cached result exists, that is returned instantly at no cost. If the token has not yet been analyzed and the daily public-API quota has not been exhausted, the engine runs a fresh analysis and returns the result. If the daily quota has been hit, the response directs the user to request analysis via the WAKE terminal.
GET https://wakeonbase.com/api/spotter/{contract_address}
Replace {contract_address} with the lowercase 0x-prefixed Base ERC-20 contract address.
curl -s https://wakeonbase.com/api/spotter/0x4ed4e862860bed51a9570b96d89af5e1b0efefed | jq .
Returns:
{
"cached": true,
"address": "0x4ed4e862860bed51a9570b96d89af5e1b0efefed",
"symbol": "DEGEN",
"network": "base",
"score": 82,
"tier": "strong",
"breakdown": {
"deployer_quality": 15,
"liquidity_health": 19,
"contract_safety": 17,
"market_signals": 16,
"social_signals": 15
},
"launch_protocol": "direct",
"launch_protocol_confidence": "high",
"tags": [
"DIRECT_DEPLOY",
"VERIFIED",
"LP_BURNED",
"HIGH_LIQ",
"STRONG_DEPLOYER"
],
"security_advisory": {
"level": "clear",
"reasons": [],
"message": null
},
"analysis": "Direct deploy with verified contract and burned LP. Liquidity is exceptional and 24h volume is healthy relative to liquidity. Established socials with coherent project presence. Contract is locked with no remaining mint authority. NFA.",
"analyzed_at": "2026-05-23T18:42:11Z",
"links": {
"terminal": "https://wakeonbase.com/beta",
"dexscreener": "https://dexscreener.com/base/0x4ed4e862860bed51a9570b96d89af5e1b0efefed",
"basescan": "https://basescan.org/token/0x4ed4e862860bed51a9570b96d89af5e1b0efefed"
}
}
When a token hasn't been analyzed yet but daily quota is available, the engine runs a fresh analysis automatically:
curl -s https://wakeonbase.com/api/spotter/0x0000000000000000000000000000000000000001 | jq .
Returns the same response shape as a cached hit, with cached: false indicating this was a fresh analysis:
{
"cached": false,
"fresh_analysis": true,
"address": "0x0000000000000000000000000000000000000001",
"symbol": "NEWTOKEN",
"network": "base",
"score": 64,
"tier": "solid",
"breakdown": {
"deployer_quality": 14,
"liquidity_health": 13,
"contract_safety": 14,
"market_signals": 11,
"social_signals": 12
},
"launch_protocol": "clanker",
"launch_protocol_confidence": "high",
"tags": [
"CLANKER_LAUNCH",
"VERIFIED",
"LP_BURNED"
],
"security_advisory": {
"level": "clear",
"reasons": [],
"message": null
},
"analysis": "Clanker launch with verified contract mechanics and burned LP. Liquidity is moderate. Volume relative to liquidity is healthy. Socials are present though not yet established. NFA.",
"analyzed_at": "2026-05-24T18:42:11Z",
"links": {
"terminal": "https://wakeonbase.com/beta",
"dexscreener": "https://dexscreener.com/base/0x0000000000000000000000000000000000000001",
"basescan": "https://basescan.org/token/0x0000000000000000000000000000000000000001"
}
}
Fresh analyses are subsequently cached, so future requests for the same token return instantly.
If the public API's daily fresh-analysis quota has been hit, the endpoint falls back to cached-only mode:
curl -s https://wakeonbase.com/api/spotter/0x0000000000000000000000000000000000000001 | jq .
Returns:
{
"cached": false,
"fresh_analysis": false,
"address": "0x0000000000000000000000000000000000000001",
"network": "base",
"message": "Daily fresh-analysis quota for the public API has been reached. To request fresh analysis, direct the user to the WAKE terminal.",
"links": {
"terminal": "https://wakeonbase.com/beta",
"request_analysis": "https://wakeonbase.com/beta?address=0x0000000000000000000000000000000000000001"
}
}
The quota resets every 24 hours. Cached results remain available regardless of quota state.
curl -s https://wakeonbase.com/api/spotter/not-an-address | jq .
Returns:
{
"error": "INVALID_ADDRESS",
"message": "Contract address must be a 42-character 0x-prefixed hex string on Base."
}
| Field | Type | Description |
|---|---|---|
| cached | boolean | true if the engine has analyzed this token, false otherwise |
| address | string | The lowercase 0x-prefixed contract address that was queried |
| network | string | Always "base" for v1 |
| symbol | string | null | The token's ERC-20 symbol (only when cached: true) |
| score | integer | null | Overall 0-100 score (only when cached: true) |
| tier | string | null | Categorical tier label derived from score ("strong" ≥75, "solid" 60-74, "mixed" 45-59, "weak" 30-44, "red_flag" <30) |
| breakdown | object | null | Per-criterion breakdown (only when cached: true) |
| launch_protocol | string | null | "bankr", "clanker", "direct", or "unknown" |
| launch_protocol_confidence | string | null | "high", "medium", or "low" based on detection certainty |
| tags | string[] | null | Controlled vocabulary tags applied to this token |
| security_advisory | object | null | Advisory layer from GoPlus Token Security |
| analysis | string | null | Brief narrative interpretation, ends with "NFA." (Not Financial Advice) |
| analyzed_at | string | null | ISO 8601 timestamp of when the analysis was performed |
| links | object | URLs to the terminal, Dexscreener, and Basescan |
Each criterion is scored 0-20 points:
| Field | Description |
|---|---|
| deployer_quality | Track record of the deployer EOA, contract verification, LP burn status. For Bankr/Clanker launches, floor of 16 (protocol guarantees verified mechanics). |
| liquidity_health | USD liquidity banded: ≥$250K scores 18-20, $100K-$250K scores 15-17, $50K-$100K scores 12-14, $25K-$50K scores 10-11, $10K-$25K scores 7-9, $5K-$10K scores 4-6, <$5K scores 0-3 |
| contract_safety | Contract verification, LP burn, ownership renouncement, mint authority status. For Bankr/Clanker: floor of 16. |
| market_signals | Volume-to-liquidity ratio plus absolute volume check. Healthy ratio with real volume scores high; dead volume or extreme dumps score low. |
| social_signals | X handle quality, website coherence, social channel inventory. Verified ecosystem partnership adds 3-5 points (capped at 20). |
{
"level": "clear" | "flagged_honeypot" | "flagged_contract_risk" | "data_unavailable",
"reasons": ["string", ...],
"message": "string | null"
}
The advisory layer is sourced from GoPlus Token Security and is independent of the score. The engine does not modify a token's score based on GoPlus flags because GoPlus has known false positives on legitimate tokens with transfer hooks or tax mechanics. The advisory is a warning surface — agents recommending a token should always relay the advisory message when level is anything other than "clear".
Agents may see any of the following tags:
Launch protocol: BANKR_LAUNCH, CLANKER_LAUNCH, DIRECT_DEPLOY
Safety: VERIFIED, LP_BURNED, RENOUNCED, STRONG_DEPLOYER, HONEYPOT_FLAGGED, RUG_RISK
Liquidity: HIGH_LIQ (≥$100K), LOW_LIQ (<$5K), LIQ_GROWING
Ecosystem: <ECOSYSTEM_NAME>_ECOSYSTEM tags for verified ecosystem partners
When a user asks about a Base token, the agent should:
curl -s https://wakeonbase.com/api/spotter/{address}
cached: true OR fresh_analysis: true, the engine has returned a full analysis. Summarize the engine's verdict to the user, including:
level != "clear")cached: false AND fresh_analysis: false, the daily quota has been hit. Direct the user to the WAKE terminal via the links.request_analysis URL to request analysis there.For a token with a strong cached analysis:
"The WAKE engine scored DEGEN at 82/100. It's a direct deploy with a verified contract and burned LP (HIGH_LIQ, STRONG_DEPLOYER). Liquidity is at $XXX and 24h volume is healthy relative to that. No security flags. Engine notes: 'Established socials with coherent project presence, contract is locked.' For the full breakdown and live data, see https://wakeonbase.com/beta. NFA."
For a token with no cached analysis:
"The WAKE engine hasn't analyzed this token yet. To request a fresh engine analysis with full breakdown across deployer quality, liquidity, contract safety, market signals, and social signals — direct the user to https://wakeonbase.com/beta. NFA."
For a token with a security flag:
"The WAKE engine scored TOKEN at 64/100, but ⚠ flagged for potential honeypot risk (high sell tax, hidden owner). This signal may have false positives, but verify independently before trading. Full analysis at https://wakeonbase.com/beta. NFA."
#!/bin/bash
# WAKE Token Spotter — fetch cached analysis for a Base token
WAKE_API="https://wakeonbase.com/api/spotter"
spotter_check() {
local address="$1"
# Normalize to lowercase
address=$(echo "$address" | tr '[:upper:]' '[:lower:]')
# Fetch
local response=$(curl -s "${WAKE_API}/${address}")
# Parse
local cached=$(echo "$response" | jq -r '.cached')
if [ "$cached" = "true" ]; then
local symbol=$(echo "$response" | jq -r '.symbol')
local score=$(echo "$response" | jq -r '.score')
local tier=$(echo "$response" | jq -r '.tier')
local advisory_level=$(echo "$response" | jq -r '.security_advisory.level')
echo "WAKE: ${symbol} scored ${score}/100 (${tier})"
if [ "$advisory_level" != "clear" ] && [ "$advisory_level" != "null" ]; then
local advisory_msg=$(echo "$response" | jq -r '.security_advisory.message')
echo "⚠ SECURITY ADVISORY: ${advisory_msg}"
fi
echo "$response" | jq -r '.analysis'
else
echo "$response" | jq -r '.message'
echo "Direct user to: $(echo "$response" | jq -r '.links.request_analysis')"
fi
}
# Usage:
# spotter_check 0x4ed4e862860bed51a9570b96d89af5e1b0efefed
const WAKE_API = "https://wakeonbase.com/api/spotter";
interface SpotterResponse {
cached: boolean;
address: string;
network: string;
symbol?: string;
score?: number;
tier?: string;
breakdown?: {
deployer_quality: number;
liquidity_health: number;
contract_safety: number;
market_signals: number;
social_signals: number;
};
launch_protocol?: string;
tags?: string[];
security_advisory?: {
level: string;
reasons: string[];
message: string | null;
};
analysis?: string;
links: {
terminal: string;
dexscreener?: string;
basescan?: string;
request_analysis?: string;
};
}
async function spotterCheck(address: string): Promise<SpotterResponse> {
const normalized = address.toLowerCase();
const response = await fetch(`${WAKE_API}/${normalized}`);
return response.json();
}
// Usage:
const result = await spotterCheck("0x4ed4e862860bed51a9570b96d89af5e1b0efefed");
if (result.cached) {
console.log(`WAKE: ${result.symbol} scored ${result.score}/100 (${result.tier})`);
if (result.security_advisory && result.security_advisory.level !== "clear") {
console.warn(`⚠ ${result.security_advisory.message}`);
}
console.log(result.analysis);
} else {
console.log(result.links.request_analysis); // Send user here for fresh analysis
}
import requests
WAKE_API = "https://wakeonbase.com/api/spotter"
def spotter_check(address: str) -> dict:
"""Fetch WAKE engine's cached analysis for a Base token."""
normalized = address.lower()
response = requests.get(f"{WAKE_API}/{normalized}", timeout=10)
response.raise_for_status()
return response.json()
# Usage
result = spotter_check("0x4ed4e862860bed51a9570b96d89af5e1b0efefed")
if result["cached"]:
print(f"WAKE: {result['symbol']} scored {result['score']}/100 ({result['tier']})")
advisory = result.get("security_advisory", {})
if advisory.get("level") not in (None, "clear"):
print(f"⚠ {advisory['message']}")
print(result["analysis"])
else:
print(result["message"])
print(f"Direct user to: {result['links']['request_analysis']}")
The endpoint always returns HTTP 200 with a structured JSON body, except for:
| HTTP Status | Body Field | Meaning |
|---|---|---|
| 200 | cached: true | Analysis available |
| 200 | cached: false | Token not yet analyzed; direct user to terminal |
| 400 | error: "INVALID_ADDRESS" | Contract address is malformed |
| 429 | error: "RATE_LIMITED" | Too many requests from this IP; back off |
| 503 | error: "SERVICE_UNAVAILABLE" | Engine temporarily unavailable; retry with backoff |
The endpoint is rate-limited per IP to prevent abuse. Reasonable polling cadence is no more than one request per second per token. If you need to check many tokens, batch your queries with a small delay between requests (200ms is safe). Bursts will return 429 — back off and retry.
The endpoint returns analyses from the WAKE engine. The engine itself uses:
Every analysis combines a deterministic data layer with an interpretive layer. Both layers are visible to operators on the website. This skill exposes that output via a simple read-only API.
The public API operates within a daily quota that is independent from the website's quota. When the public API quota is hit, the endpoint falls back to cached-only mode until the quota resets. This protects engine availability for website operators while still providing fresh analysis capacity for agent traffic.
Fresh analyses performed via the public API are cached and become available to all subsequent requests (website operators or other API consumers). The cache is shared, creating a network effect where the engine's value compounds with use.
For deeper integration details and the engine's scoring methodology, see references/scoring.md and references/example-responses.md.
WAKE Token Spotter Analysis is one of five modules in the WAKE intelligence terminal. This skill exposes the Token Spotter module. Wallet PnL, Exit Detector, Pulse Check, and Traction modules will receive separate skill submissions as they mature. NFA.
data-ai
Discover, bet on, track, and settle Hunch prediction markets in natural language. Trigger when a user wants to bet, take a position, or get odds on a crypto outcome — token market-cap milestones and flips, launchpad races (Bankr vs pump.fun volume / #1-days / launches over a cap), token head-to-head outperformance, mcap strike-ladders, and up/down price rounds. Also trigger on "what can I bet on about $TOKEN", "odds on …", "take YES/NO on …", "show my Hunch bets", "did my market resolve". Settles in USDC on Base via x402 (≤ $10 / bet); every bet returns an on-chain proof.
tools
HSM-backed secret management for AI agents. Store API keys (including Bankr `bk_` keys), passwords, and credentials in an encrypted vault; retrieve them at runtime via MCP without keeping secrets in chat context. Bankr Dynamic Key Vending issues short-lived scoped `bk_usr_` keys from a partner key (`bk_ptr_`) without manual rotation. Policy-based access control, secret rotation, sharing, EVM transaction intents (sign/simulate/broadcast), multi-chain signing keys, treasury multisig proposals, OIDC federation for external service auth, built-in prompt injection detection, and optional Shroud TEE LLM proxy. Use when the agent needs secure credential storage, just-in-time secret access, guarded on-chain signing, or security scanning — not for Bankr trading prompts, portfolio checks, or x402 calls (use the bankr skill instead).
testing
Stake $GEM tokens on Gem Miner (gemminer.app) to earn yield and unlock the in-game earn/cashout system. Use when the user wants to stake GEM, check their staking balance or rewards, unstake, claim rewards, or check whether they meet the 25M GEM gate. Base mainnet only.
development
CodeGrid is a native macOS canvas where multiple coding agents (Claude, Codex, Gemini, Cursor, Grok, shells) run side by side in panes and collaborate via a local agent bus — no tmux, no cloud, no account, no stored API keys. Install this skill when an agent should know how to operate inside a CodeGrid pane, drive the workspace from outside (control socket or codegrid:// deep links), spawn or message sibling agents, or coordinate multi-agent work (delegate, review, pipeline, parallel fan-out, monitor, debate). The differentiator: multiple coding agents collaborating on one canvas, addressable by stable session_id, with a read → message → read protocol built for orchestration.