Overview
CT Alpha turns X/Twitter into an actionable crypto intelligence layer. It searches CT for narratives, alpha, strategies, and sentiment, then ranks results using TweetRank (a PageRank-inspired credibility scoring system), extracts tokens/CAs from multiple signals, detects coordinated raids, fetches full X articles (long-form posts), and suggests execution steps using whatever tools the user has available.
Cost awareness: X API charges ~$0.10 per quick search (20 tweets). Relevancy sort means top results come first — fetching 20 is often better signal than 100. Always start with --quick mode. Never run expensive queries without user confirmation.
Environment Setup
Before using ct-search, ensure the token is available:
source ~/.config/env/global.env 2>/dev/null
If setup hasn't been run yet:
bun run ~/ct-alpha/setup.ts
The skill directory is at ~/ct-alpha/. All CLI commands run from there.
Hosted x402 API
Use the hosted standard x402 surface when the task is to consume ct-alpha over HTTP instead of running the local CLI.
- Hosted base URL:
https://x-research.suzi.trade - Public standard routes live under:
https://x-research.suzi.trade/x402/* - Call a concrete route, not the bare prefix. Example:
https://x-research.suzi.trade/x402/search/20?q=solana&since=24h - Add
fresh=truewhen the user explicitly wants a live fetch instead of a cached response - Treat
/metered/*as internal tooling unless the task is specifically about the metered auth/top-up flow
For x402 clients, follow the standard flow:
- Send the request to the exact
https://x-research.suzi.trade/x402/*route. - If the response is
402 Payment Required, read the payment requirements from the response. - Pay for that exact method + path + query string.
- Retry the same request with the x402 payment header(s).
CLI Reference
search — Core research command
source ~/.config/env/global.env 2>/dev/null && bun run ~/ct-alpha/ct-search.ts search "<query>" [flags]
Flags:
--quick— 20 tweets, 1hr cache, ~$0.10 (DEFAULT — always use this first)--full— Up to 3 pages, 15min cache, ~$0.50-1.50 (confirm cost with user first)--limit N— Override max tweets (default: 20 quick, 100 full)--sort likes|recency|relevancy— Sort order (default: relevancy)--since 1h|6h|24h|7d— Time window (default: 24h)--min-likes N— Engagement filter (default: 3 for quick)--from user1,user2— Restrict to specific accounts--extract-tickers— Show extracted tickers from results--extract-cas— Show contract addresses and crypto URLs--raw— JSON output
trending — Multi-signal trending detection
source ~/.config/env/global.env 2>/dev/null && bun run ~/ct-alpha/ct-search.ts trending [flags]
Flags:
--window 1h|6h|24h— Detection window (default: 6h)--min-mentions N— Minimum mentions (default: 3)--solana-only— Solana ecosystem only--top N— Number of results (default: 20)
watchlist — Monitor CT accounts
source ~/.config/env/global.env 2>/dev/null && bun run ~/ct-alpha/ct-search.ts watchlist [flags]
Flags:
--category <cat>— Filter by category (solana-builders, defi-researchers, etc.)--since 1h|6h|24h|7d— Time window (default: 24h)
read — Read a specific tweet/article by URL or ID (~$0.005)
source ~/.config/env/global.env 2>/dev/null && bun run ~/ct-alpha/ct-search.ts read <tweet_url_or_id> [flags]
Flags:
--thread— Also load the full conversation thread (replies)--raw— JSON output
Accepts x.com URLs, twitter.com URLs, or raw tweet IDs. Articles (long-form posts) are fetched in full. Uses full-archive search for threads (no 7-day limit).
thread — Hydrate conversation thread
source ~/.config/env/global.env 2>/dev/null && bun run ~/ct-alpha/ct-search.ts thread <tweet_id>
cost — Track API spending
source ~/.config/env/global.env 2>/dev/null && bun run ~/ct-alpha/ct-search.ts cost [--reset]
Research Methodology
Follow this 6-step loop for every research request:
1. Decompose
Break the user's question into 1-3 targeted search queries.
- For token research: search both
$TICKERand plain name with OR (e.g.,"$PENDLE" OR "pendle") - For narratives: search thematic keywords, not just token names
- For strategies: include strategy/yield/APY keywords
- For sentiment: include bullish/bearish/buy/sell keywords
2. Pre-Filter
Before making any API call:
- Check cache: Run
--quickfirst. If cached results exist, analyze those. - Add noise filters: The CLI auto-appends crypto noise filters (-is:retweet, -airdrop, -giveaway, etc.)
- Estimate cost: Quick = ~$0.10, Full = ~$0.50-1.50. Tell user before full mode.
- Narrow time window: Default 24h for trending, 7d for research.
3. Search
Execute with --quick mode (always the first pass):
source ~/.config/env/global.env 2>/dev/null && bun run ~/ct-alpha/ct-search.ts search "$TOKEN alpha" --quick --extract-tickers
CRITICAL: Query string rules
- Twitter v2 AND-joins every bare word. A query like
polymarket sure bet 90 percent free moneyrequires ALL 7 words in a single tweet — result: 0 hits. Keep to 2-3 AND-ed terms max, use OR groups for synonyms:polymarket ("free money" OR "easy bet" OR "sure thing") - Never pass the user's raw question as the query. Decompose it into search terms first. See
references/query-templates.md"Query Anti-Patterns" section. - The query argument should contain ONLY search terms, boolean logic (
OR,-,"phrases"), and v2 operators (from:,is:retweet,has:links,lang:,conversation_id:,$cashtag,#hashtag) - NEVER put these v1.1 operators in the query string — they do NOT exist on v2 pay-per-use and will cause 400 errors:
min_faves:N,min_retweets:N,min_replies:N— use--min-likesCLI flag instead (filters client-side)place:,place_country:,point_radius:— geo operators not availablebio:,bio_name:,bio_location:— profile operators not availablesample:— sampling not available
- Do NOT manually include noise filters (
-is:retweet,-"airdrop", etc.) in your query — the CLI auto-appends them - Do NOT use
&in query strings — it breaks X API v2 query parsing
4. Extract
Results include TweetRank scores and trust labels:
[WATCHLIST]— Author is on user's watchlist (highest trust)[HIGH-CRED]— Author has high credibility score[UNKNOWN]— Unverified author[SUSPICIOUS]— Bot-like patterns detectedARTICLE— Long-form X post (full text captured)
Look for extracted tickers, contract addresses, and crypto URLs.
5. Deep-Dive (if needed)
If initial results are promising:
- Follow high-engagement threads:
bun run ~/ct-alpha/ct-search.ts thread <id> - Search specific authors:
--from author1,author2 - Broaden with
--fullonly if quick was insufficient
6. Synthesize
Combine findings into actionable intelligence:
- Group by theme, not by query
- Highlight tickers with strong multi-signal detection (cashtag + URL + name-phrase)
- Flag raid risks (high low-cred author ratio)
- Suggest verification and execution steps using available tools
- Cross-reference with DeFi Llama (TVL, yields, fees), Backpack (price, depth), Polymarket (prediction markets)
Refinement Heuristics
Too noisy?
- Add
--min-likes 50for higher quality - Narrow time window:
--since 6h - Restrict to watchlist:
--from trusted_user1,trusted_user2
Too few results?
- Broaden query: use OR with alternative terms
- Extend window:
--since 7d - Remove restrictive keywords
- Lower min-likes:
--min-likes 0
Need expert takes?
- Use
--fromwith known analysts from watchlist - Search with
has:linksfor substantive content
Detecting spam/raids?
- Check the TweetRank source labels
- Look for RAID flags in trending output
- Low unique-author count = suspicious
Dynamic Tool Discovery
After completing research, check what other tools the user has available and suggest execution steps. Look for these MCP tool prefixes:
- mcp__defillama__* → Check TVL, yields, fees, prices, protocol comparison
- mcp__backpack__* → Check exchange price, depth, trades, klines
- mcp__polymarket__* → Check prediction markets for related narratives
- mcp__postgres-mcp__* → Query on-chain data if available
Common patterns:
- Token found →
get_protocol_tvl,get_current_prices,backpack_get_ticker - CA found → suggest verification on Solscan/Etherscan, rug check if available
- Narrative detected →
search_polymarketfor prediction market odds - Strategy found →
get_top_yield_poolsfor current APYs - Protocol comparison →
compare_protocolsside by side
Always frame suggestions as "verify" not "confirm" — encourage skepticism about CT alpha.
Output Trust Labels
Every result includes trust metadata. Never present CT findings as authoritative:
- Confidence: HIGH (multiple watchlist sources agree) / MED / LOW
- Source quality: Per-tweet labels showing author credibility
- Verification status: Contract addresses are always UNVERIFIED until tool-checked
- Risk bullets: "What could be wrong?" per finding (spoofed engagement, coordinated raid, etc.)
Cost Protocol
- Always
--quickfirst (~$0.10 for 20 tweets). Relevancy sort = best results come first. - Only use
--limit 30or--limit 50if 20 results are genuinely insufficient. - Display cost estimate before
--fullmode (~$0.50-1.50). - Cache is aggressive (1hr for quick mode) — same query is free within TTL.
- Two-pass strategy: First search with 20 results. If the user needs more depth on a specific sub-topic, do a targeted follow-up rather than re-running with higher limits.
- Show
costsummary if user asks about spending.
Recency Defaults
- Trending / narratives:
--since 24h - Research / strategies:
--since 7d - Older data: Only on explicit user request, never default