atris/skills/x-search/SKILL.md
X/Twitter search via xAI Grok API. Use when user wants to search tweets, monitor topics, find viral posts, or run social listening. Costs 5 credits per search. Triggers on x search, tweet search, twitter search, social listening, revenue intel, viral tweets.
npx skillsauth add atrislabs/atris x-searchInstall 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.
Drop this in
~/.claude/skills/x-search/SKILL.mdand Claude Code becomes your X/Twitter intelligence tool.
Before any X search operation, run this bootstrap to ensure everything is set up:
#!/bin/bash
set -e
# 1. Check if atris CLI is installed
if ! command -v atris &> /dev/null; then
echo "Installing atris CLI..."
npm install -g atris
fi
# 2. Check if logged in to AtrisOS
if [ ! -f ~/.atris/credentials.json ]; then
echo "Not logged in to AtrisOS."
echo ""
echo "Option 1 (interactive): Run 'atris login' and follow prompts"
echo "Option 2 (non-interactive): Get token from https://atris.ai/auth/cli"
echo " Then run: atris login --token YOUR_TOKEN"
echo ""
exit 1
fi
# 3. Extract token
if command -v node &> /dev/null; then
TOKEN=$(node -e "console.log(require('$HOME/.atris/credentials.json').token)")
elif command -v python3 &> /dev/null; then
TOKEN=$(python3 -c "import json,os; print(json.load(open(os.path.expanduser('~/.atris/credentials.json')))['token'])")
elif command -v jq &> /dev/null; then
TOKEN=$(jq -r '.token' ~/.atris/credentials.json)
else
echo "Error: Need node, python3, or jq to read credentials"
exit 1
fi
# 4. Quick auth check
STATUS=$(curl -s "https://api.atris.ai/api/me" \
-H "Authorization: Bearer $TOKEN")
if echo "$STATUS" | grep -q "Token expired\|Not authenticated\|Unauthorized"; then
echo "Token expired. Please re-authenticate:"
echo " Run: atris login --force"
exit 1
fi
echo "Ready. X Search is available (5 credits per search)."
export ATRIS_TOKEN="$TOKEN"
Base: https://api.atris.ai/api/x-search
All requests require: -H "Authorization: Bearer $TOKEN"
TOKEN=$(node -e "console.log(require('$HOME/.atris/credentials.json').token)")
curl -s -X POST "https://api.atris.ai/api/x-search/search" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query": "\"CRM is dead\" OR \"Salesforce alternative\"",
"limit": 10
}'
With date filter (last N days only):
curl -s -X POST "https://api.atris.ai/api/x-search/search" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query": "AI agents replacing SaaS",
"limit": 10,
"days_back": 7
}'
Response:
{
"status": "success",
"credits_used": 5,
"credits_remaining": 995,
"data": {
"content": "1. @levelsio: AI agents are replacing...",
"citations": ["https://x.com/levelsio/status/..."],
"usage": {"prompt_tokens": 200, "completion_tokens": 800}
}
}
curl -s -X POST "https://api.atris.ai/api/x-search/research-person" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Leah Bonvissuto",
"handle": "leahbon",
"company": "Presentr",
"context": "Interested in revenue intelligence and AI for GTM"
}'
Response:
{
"status": "success",
"credits_used": 5,
"credits_remaining": 990,
"data": {
"content": "### 1. Profile\n**Name:** Leah Bonvissuto\n...",
"citations": ["https://x.com/..."],
"usage": {"prompt_tokens": 300, "completion_tokens": 1200}
}
}
POST /x-search/search with {query, limit}POST /x-search/search with {query, limit, days_back: 7}POST /x-search/research-person with {name, handle, company, context}"CRM is dead" OR "Salesforce is dead" OR "HubSpot sucks""revenue operations" (broken OR frustrated OR replacing)(founder OR CEO) "tech stack" (consolidating OR ripping out)POST /x-search/search with query including min_faves:50| Goal | Query Example |
|------|--------------|
| Specific phrase | "revenue operations" |
| OR logic | "CRM is dead" OR "Salesforce alternative" |
| From a user | from:levelsio |
| High engagement | "AI agents" min_faves:50 |
| Exclude retweets | "your query" -is:retweet |
| Multiple keywords | (founder OR CEO) ("AI adoption" OR "AI native") |
402 Insufficient credits| Error | Meaning | Solution |
|-------|---------|----------|
| 401 Not authenticated | Invalid/expired token | Run atris login |
| 402 Insufficient credits | Not enough credits | Purchase credits at atris.ai |
| 502 Search failed | xAI API issue | Retry in a few seconds |
# Setup (one time)
npm install -g atris && atris login
# Get token
TOKEN=$(node -e "console.log(require('$HOME/.atris/credentials.json').token)")
# Search tweets
curl -s -X POST "https://api.atris.ai/api/x-search/search" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"query": "AI agents", "limit": 10}'
# Search last 7 days only
curl -s -X POST "https://api.atris.ai/api/x-search/search" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"query": "AI agents", "limit": 10, "days_back": 7}'
# Research a person
curl -s -X POST "https://api.atris.ai/api/x-search/research-person" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"name": "John Doe", "handle": "johndoe", "company": "Acme"}'
development
Wake a team member by name — 'gm <member>' or 'wake up <member>' — and run ONE closed-loop tick: boot, inbox, claim, one bounded slice, verify, commit+push, proof, receipt. Optionally dispatch the build to an engine (codex/cursor/devin). Triggers on: gm, good morning, wake up <member>, wake the team, run a tick as <member>.
development
Dispatch coding work to an installed terminal agent — Codex, Cursor, or Devin — as an interchangeable worker engine. Claude orchestrates: writes the bounded prompt, the engine builds, Claude verifies and lands. Triggers on: use codex, use cursor, use devin, engine, dispatch to, worker agent, second opinion build.
development
Live RL tuner for skills. Watches skill invocations, reads user reaction, proposes targeted SKILL.md overlay edits, requires explicit approval, writes scorecards. The in-session half of the skill-RL loop (Path B). Triggers on: tune, sharpen, skill feedback, that was shit, that was great, make X better.
development
Run one RL improvement tick on the workspace via POST /api/improve. Ships one verifiable change, scores it, writes the scorecard. The thing you pay for. Triggers on: improve, make this better, ship one thing, run a tick, get smarter.