| name | ct-alpha-hosted-x402 |
|---|---|
| description | Crypto Twitter intelligence and alpha research skill, centered on the hosted x402 API at https://x-research.suzi.trade. Searches X/Twitter for real-time crypto narratives, trending tokens, yield strategies, smart money signals, protocol research, account feeds, threads, and single-post reads. Uses the hosted /x402/* routes for transport, the existing extraction and ranking modules for analysis, and the postprocess scripts for CLI-style formatting, ticker extraction, contract-address extraction, confidence labels, and raid detection. Use when: (1) user says "ct alpha", "what's CT saying", "trending on crypto twitter", "find alpha on", "search CT for", "what are people saying about [token]", "crypto twitter research", "/ct-alpha", "what's hot in crypto", "CT sentiment", (2) user wants crypto Twitter research, token or protocol sentiment, or account monitoring through the hosted endpoint, (3) user mentions "x402", "x-research.suzi.trade", "hosted ct-alpha", or "search CT over HTTP". |
Use this file when the caller should consume ct-alpha through the hosted endpoint:
- Base URL:
https://x-research.suzi.trade - Public standard prefix:
https://x-research.suzi.trade/x402/*
This skill is x402-first. Use hosted routes by default. Use ct-search.ts directly only when the task is explicitly about local-only behavior such as:
- running the local CLI
- onboarding
X_BEARER_TOKEN - local cache or spend inspection with
ct-search.ts cost - behavior that depends on the local watchlist categories without first resolving them to usernames
Read these files for exact behavior:
lib/http-service.tsExact hosted route behavior for search, accounts-feed, read, thread, and trending.lib/http-public-docs.tsPublic route contracts, params, example outputs, and x402 flow wording.ct-search.tsSearch defaults, research loop, cost posture, and CLI behavior that hosted mode should mirror.references/x-api.mdAllowed X v2 operators and invalid v1.1 operators.references/query-templates.mdQuery shapes for token research, protocol deep-dives, yield searches, risk checks, and smart-money searches.references/tool-discovery.mdVerification and follow-up actions after CT research.lib/tweetrank.tsAuthor credibility, trust labels, confidence scoring, and raid detection logic.lib/filters.tsAuto-appended noise filters and quick-mode reply filtering.scripts/postprocess/*.tsHosted-response enrichment, CLI-style formatting, ticker extraction, contract-address extraction, and raid detection.
Behavior to keep:
- Route CT research, token chatter, protocol research, smart-money leads, trending topics, and sentiment questions through this skill.
- Start with the cheapest useful hosted call, usually
/x402/search/20. - Use only valid X v2 query syntax.
- Treat CT as a lead source, not ground truth.
- Suggest verification steps after research.
Load these files only when needed:
README.mdfor the hosted route overview, API surface, and deployment notesreferences/query-templates.mdfor reusable crypto query patternsreferences/x-api.mdfor operator rules and invalid v1.1 operatorsreferences/tool-discovery.mdfor follow-up verification suggestionsct-search.tswhen you need exact CLI parity for defaults or workflow mappinglib/http-service.tsandlib/http-public-docs.tswhen exact hosted route semantics matterscripts/postprocess/*.tswhen you need hosted JSON turned back into CLI-like output or richer analytics
These repo entrypoint scripts are local-bootstrap only, not part of the hosted x402 flow:
install.shinstall.tssetup.ts
The public hosted surface is the standard x402 API only.
- Call concrete
/x402/*routes, not the bare/x402prefix. - Do not use
/metered/*unless the task is specifically about the internal metered flow. - Standard responses are JSON shaped like
{ data, meta }. - Cached responses may be served without payment.
- Add
fresh=trueonly when the user explicitly wants a live X fetch instead of cache.
Follow this flow exactly:
- Build the exact
GET https://x-research.suzi.trade/x402/...URL, including the final query string. - Send the request to that exact route.
- If the server returns
402 Payment Required, read the x402 challenge from the response headers and body. - Pay for that exact method + path + query string.
- Retry the exact same request with the required x402 payment header(s).
- Parse the
{ data, meta }JSON response.
Important:
- Do not change the path or query string between the challenged request and the paid retry.
- If an x402 client is available, let it handle challenge and retry. Your job is still to construct the correct URL.
- The payment asset is determined by the server challenge, not by guesswork.
Hosted equivalent of ct-search.ts search.
GET /x402/search/20GET /x402/search/100
Use /x402/search/20 first. It is the hosted equivalent of quick mode and should be the default first pass.
Critical: Query construction rules. Twitter v2 search AND-joins every bare word. Long natural-language queries return 0 results because no tweet contains all terms. You MUST read references/query-templates.md (especially the "Query Anti-Patterns" section) before constructing any q parameter. Keep queries to 2-3 AND-ed terms max, use OR groups for synonyms, and never pass the user's raw question as the query string.
Query params:
qrequiredsinceoptional:1h|6h|24h|7d, default24hsortoptional:relevancy|recency|likes|retweets|impressions|bookmarks, defaultrelevancyfromoptional: comma-separated usernamesmin_likesoptional: non-negative integerfreshoptional:true|1|yes
Hosted route behavior:
qis the user query, not the final wire query.- The server appends the built-in crypto noise filters automatically.
- Quick search also excludes replies.
- If
qdoes not includelang:, the server appendslang:en. from=user1,user2is rewritten tofrom:user1 OR from:user2.min_likesis applied after fetch, like the CLI./20defaults tomin_likes=3;/100defaults tomin_likes=0.
Examples:
https://x-research.suzi.trade/x402/search/20?q=%24SOL%20OR%20solana&since=24h
https://x-research.suzi.trade/x402/search/20?q=pendle%20yield&from=DeFiDad,0xMert_&min_likes=10
https://x-research.suzi.trade/x402/search/100?q=stablecoin%20market%20structure&sort=relevancy&fresh=true
Hosted equivalent of account monitoring and the practical replacement for watchlist when you already know the usernames.
GET /x402/accounts-feed/20GET /x402/accounts-feed/100
Query params:
accountsrequired: comma-separated usernames, max20sinceoptional:1h|6h|24h|7d, default24hfreshoptional
Hosted route behavior:
- The server builds a
from:user1 OR from:user2 ...query for you. - Retweets are excluded.
- Replies are included.
- Results are recency-sorted.
Examples:
https://x-research.suzi.trade/x402/accounts-feed/20?accounts=aeyakovenko,solana,jito_sol&since=24h
https://x-research.suzi.trade/x402/accounts-feed/100?accounts=DefiIgnas,DeFiDad&fresh=true
If the original task is "watchlist by category", resolve the category to usernames from local watchlist data first, then call accounts-feed.
Hosted equivalent of ct-search.ts read.
GET /x402/read
Query params:
tweetIdrequired: raw tweet ID or fullx.comortwitter.comstatus URLfreshoptional
Examples:
https://x-research.suzi.trade/x402/read?tweetId=1873471977766361323
https://x-research.suzi.trade/x402/read?tweetId=https%3A%2F%2Fx.com%2Fsolana%2Fstatus%2F1873471977766361323
Use this when the user wants a single post or article. If they want the whole conversation, switch to thread/100.
Hosted equivalent of ct-search.ts thread and read --thread.
GET /x402/thread/100
Query params:
tweetIdrequired: raw tweet ID or full status URLfreshoptional
Example:
https://x-research.suzi.trade/x402/thread/100?tweetId=1873471977766361323
The route returns the root tweet plus up to 100 tweets from the same conversation.
Hosted equivalent of the built-in trending query plans.
GET /x402/trending/solanaGET /x402/trending/general
Query params:
windowoptional:1h|6h|24h, default6htopoptional: max20freshoptional
Examples:
https://x-research.suzi.trade/x402/trending/solana?window=6h&top=10
https://x-research.suzi.trade/x402/trending/general?window=1h&top=5&fresh=true
Important nuance:
- These routes return recent tweet objects from the built-in trending query plans.
- They do not return the CLI's formatted ticker aggregation or raid summary directly.
- For ticker extraction, use
scripts/postprocess/extract-tickers.ts. - For raid detection, use
scripts/postprocess/detect-raids.tsorscripts/postprocess/trending.ts. - For ranked or formatted output, use
scripts/postprocess/enrich.tsorscripts/postprocess/format.ts.
Public standard hosted routes:
readsearch/20search/100accounts-feed/20accounts-feed/100thread/100trending/solanatrending/general
Not on the public standard surface:
/metered/*- local token onboarding
cost- local watchlist category resolution
- CLI-only formatter output
- CLI-only post-processing flags like
--extract-tickersand--extract-cas
When those behaviors are needed, either:
- compute them client-side from the returned tweet objects, or
- use
ct-search.tsdirectly for the local-only flow
The hosted API returns raw tweet JSON. The repo ships a postprocess layer under scripts/postprocess/ to restore most of the original CLI behavior on top of hosted responses.
Use these scripts when the environment already has the final hosted JSON response and you want parity with the original skill without switching back to ct-search.ts.
scripts/postprocess/format.tsFull CLI-style formatter for hostedsearch,read,thread,accounts-feed, andtrendingresponses. Supports--extract-tickersand--extract-cas.scripts/postprocess/enrich.tsAdds TweetRank scoring, source labels, and a confidence field to hosted responses.scripts/postprocess/trending.tsRebuilds the richer trending output from hosted/x402/trending/*responses, including ticker aggregation and raid detection.scripts/postprocess/extract-tickers.tsHosted equivalent of CLI--extract-tickers.scripts/postprocess/extract-cas.tsHosted equivalent of CLI--extract-cas.scripts/postprocess/detect-raids.tsStandalone coordinated-raid analysis from hosted tweet batches.scripts/postprocess/watchlist.tsShared watchlist loader used by the postprocess scripts.scripts/postprocess/read-stdin.tsShared stdin JSON reader and response normalizer for hosted responses.
Examples:
cat hosted-response.json | bun run scripts/postprocess/format.ts --extract-tickers
cat hosted-response.json | bun run scripts/postprocess/enrich.ts
cat hosted-trending.json | bun run scripts/postprocess/trending.ts --min-mentions 3
cat hosted-response.json | bun run scripts/postprocess/detect-raids.ts --jsonIf you are implementing a client, use this split:
- hosted
/x402/*route for transport and payment scripts/postprocess/*for local enrichment, ranking, extraction, and formatting
Use references/x-api.md for operator rules and lib/filters.ts for the auto-appended noise filters:
- Put only X v2 search terms and operators in
q. - Use quotes for exact phrases and
ORfor variants. - Prefer
from=for account restriction instead of hand-writing manyfrom:operators inq. - Do not put
min_faves:,min_retweets:,min_replies:,place:,bio:,sample:, or other v1.1-only operators inq. - Do not manually add the standard built-in noise filters unless you are intentionally changing behavior.
- Do not include literal
&insideq. - URL-encode
q,tweetId, and other user-supplied values.
Follow this workflow against the hosted routes:
- Decompose the user request into one to three targeted CT searches.
- Start with
/x402/search/20. - If needed, narrow with
from,since, ormin_likesbefore paying for larger pulls. - Use
readorthread/100for high-signal posts worth deeper inspection. - Use
accounts-feed/*for named-account monitoring andtrending/*for broad discovery. - Synthesize by theme, not by raw endpoint.
- Suggest verification steps using the tools actually available in the session.
Too noisy:
- raise
min_likes - narrow
since, usually to6h - restrict with
from - use
accounts-feed/*for explicit author sets
Too few results:
- broaden the query with
ORvariants - extend the window to
7d - remove restrictive keywords
- lower
min_likes
Need expert takes:
- use
fromwith known analysts or watchlist authors - include
has:linksinqwhen looking for substantive threads
Need spam or raid detection:
- run
scripts/postprocess/enrich.tsfor trust labels - run
scripts/postprocess/detect-raids.tsorscripts/postprocess/trending.ts - watch for low unique-author count and high low-cred author ratio
The hosted API returns stripped tweet objects and metadata, not the full CLI presentation layer.
When summarizing hosted results, do these checks:
- identify repeated narratives across independent authors
- separate signal from coordinated hype
- keep contract addresses and ticker mentions unverified until checked elsewhere
- present confidence and failure modes explicitly
If the task requires near-CLI parity, use this mapping:
- query defaults, search flow, and cost posture:
ct-search.ts - noise filters and quick-mode reply filtering:
lib/filters.ts - trust labels, confidence, ranking, and raid scoring:
lib/tweetrank.ts - hosted route semantics and parameter handling:
lib/http-service.ts - public route docs and example outputs:
lib/http-public-docs.ts - hosted-response formatting and enrichment:
scripts/postprocess/*.ts
After completing CT research, check which tools are available in the session and suggest verification or execution follow-ups.
Common patterns:
- token found: suggest TVL, price, liquidity, or market checks
- contract address found: suggest Solscan, Etherscan, DexScreener, or rug-check style verification
- narrative found: suggest prediction-market or onchain checks
- strategy found: suggest yield or protocol comparison tools
Always frame these as ways to verify CT leads, not confirm them.
When using scripts/postprocess/enrich.ts, format.ts, or manual synthesis, use these labels:
WATCHLIST: author is on the watchlist and gets the highest trustHIGH-CRED: strong credibility signalsUNKNOWN: not enough signal to trustSUSPICIOUS: bot-like or low-credibility patternsARTICLE: long-form X post
Always communicate:
- confidence as
HIGH,MED, orLOW - contract addresses as
UNVERIFIEDuntil checked elsewhere - at least one risk or failure mode for each important finding
- Always start with
/x402/search/20. - Use
/x402/search/100only when the first pass is insufficient. - Prefer a targeted follow-up over a broad rerun.
- Cache first. Add
fresh=trueonly when the user explicitly wants live data. - If the user asks about exact local spend history, that lives in
ct-search.ts cost, not the public hosted surface.
- Default
since:24hfor trending or narratives - Default
since:7dfor broader research or strategy discovery - Default trending window:
6h - Default stance: cached first,
fresh=trueonly when explicitly requested - Default output posture: summarize, then suggest verification