[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-trail-of-bits-x-research":3,"mdc--5cfuuq-key":34,"related-repo-trail-of-bits-x-research":1626,"related-org-trail-of-bits-x-research":1737},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"x-research","search X for real-time perspectives","Searches X\u002FTwitter for real-time perspectives, dev discussions, product feedback, breaking news, and expert opinions using the X API v2. Provides search with engagement sorting, user profiles, thread fetching, watchlists, and result caching. Use when: (1) user says \"x research\", \"search x for\", \"search twitter for\", \"what are people saying about\", \"what's twitter saying\", \"check x for\", \"x search\", (2) user needs recent X discourse on a topic (library releases, API changes, product launches, industry events), (3) user wants to find what devs\u002Fexperts\u002Fcommunity thinks about a topic. NOT for: posting tweets or account management.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"trail-of-bits","Trail of Bits","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Ftrail-of-bits.png","trailofbits",[13,17,20],{"name":14,"slug":15,"type":16},"Research","research","tag",{"name":18,"slug":19,"type":16},"Social Media","social-media",{"name":21,"slug":22,"type":16},"Communications","communications",460,"https:\u002F\u002Fgithub.com\u002Ftrailofbits\u002Fskills-curated","2026-07-17T06:07:07.572788",null,29,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Curated, community-vetted Claude Code plugin marketplace","https:\u002F\u002Fgithub.com\u002Ftrailofbits\u002Fskills-curated\u002Ftree\u002FHEAD\u002Fplugins\u002Fx-research\u002Fskills\u002Fx-research","---\nname: x-research\ndescription: >\n  Searches X\u002FTwitter for real-time perspectives, dev discussions, product feedback,\n  breaking news, and expert opinions using the X API v2. Provides search with\n  engagement sorting, user profiles, thread fetching, watchlists, and result caching.\n  Use when: (1) user says \"x research\", \"search x for\", \"search twitter for\",\n  \"what are people saying about\", \"what's twitter saying\", \"check x for\", \"x search\",\n  (2) user needs recent X discourse on a topic (library releases, API changes, product\n  launches, industry events), (3) user wants to find what devs\u002Fexperts\u002Fcommunity thinks\n  about a topic. NOT for: posting tweets or account management.\nallowed-tools:\n  - Bash\n  - Read\n  - Grep\n  - Glob\n  - Write\n  - WebFetch\n---\n\n# X Research\n\nAgentic research over X\u002FTwitter. Decompose research questions into targeted searches,\niteratively refine, follow threads, deep-dive linked content, and synthesize sourced\nbriefings.\n\nFor X API details (endpoints, operators, response format): read\n`{baseDir}\u002Fskills\u002Fx-research\u002Freferences\u002Fx-api.md`.\n\n## Prerequisites\n\n- **X API Bearer Token** -- set `X_BEARER_TOKEN` (or `XAI_API_KEY`) env var\n- **Python 3.11+** and **uv** (`pip install uv` or https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002F)\n\n## CLI Tool\n\nAll commands use `uv run` for automatic dependency management:\n\n### Search\n\n```bash\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py search \"\u003Cquery>\" [options]\n```\n\n**Options:**\n- `--sort likes|impressions|retweets|recent` -- sort order (default: likes)\n- `--since 1h|3h|12h|1d|7d` -- time filter (default: last 7 days)\n- `--min-likes N` -- filter by minimum likes\n- `--min-impressions N` -- filter by minimum impressions\n- `--pages N` -- pages to fetch, 1-5 (default: 1, 100 tweets\u002Fpage)\n- `--limit N` -- max results to display (default: 15)\n- `--quick` -- quick mode: 1 page, max 10 results, auto noise filter, 1hr cache\n- `--from-user \u003Cusername>` -- shorthand for `from:username` in query\n- `--quality` -- filter low-engagement tweets (min 10 likes, post-hoc)\n- `--no-replies` -- exclude replies\n- `--save` -- save results to `~\u002Fx-research-output\u002F`\n- `--json` -- raw JSON output\n- `--markdown` -- markdown output for research docs\n\nAuto-adds `-is:retweet` unless query already includes it. All searches display estimated API cost.\n\n**Examples:**\n```bash\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py search \"claude code\" --sort likes --limit 10\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py search \"from:anthropic\" --sort recent\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py search \"(cursor OR windsurf) AI editor\" --pages 2 --save\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py search \"AI agents\" --quick\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py search \"AI agents\" --quality --quick\n```\n\n### Profile\n\n```bash\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py profile \u003Cusername> [--count N] [--replies] [--json]\n```\n\nFetches recent tweets from a specific user (excludes replies by default).\n\n### Thread\n\n```bash\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py thread \u003Ctweet_id> [--pages N]\n```\n\nFetches full conversation thread by root tweet ID.\n\n### Single Tweet\n\n```bash\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py tweet \u003Ctweet_id> [--json]\n```\n\n### Watchlist\n\n```bash\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py watchlist                        # Show all\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py watchlist add \u003Cuser> [note]      # Add account\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py watchlist remove \u003Cuser>           # Remove\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py watchlist check                   # Check recent\n```\n\nWatchlist stored in `{baseDir}\u002Fskills\u002Fx-research\u002Fdata\u002Fwatchlist.json`.\n\n### Cache\n\n```bash\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py cache clear\n```\n\n15-minute TTL. Avoids re-fetching identical queries.\n\n## Research Loop (Agentic)\n\nWhen doing deep research (not just a quick search), follow this loop:\n\n### 1. Decompose the Question into Queries\n\nTurn the research question into 3-5 keyword queries using X search operators:\n\n- **Core query**: Direct keywords for the topic\n- **Expert voices**: `from:` specific known experts\n- **Pain points**: Keywords like `(broken OR bug OR issue OR migration)`\n- **Positive signal**: Keywords like `(shipped OR love OR fast OR benchmark)`\n- **Links**: `url:github.com` or `url:` specific domains\n- **Noise reduction**: `-is:retweet` (auto-added), add `-is:reply` if needed\n- **Spam filter**: Add `-airdrop -giveaway -whitelist` for crypto-adjacent topics\n\n### 2. Search and Extract\n\nRun each query via CLI. After each, assess:\n- Signal or noise? Adjust operators.\n- Key voices worth searching `from:` specifically?\n- Threads worth following via `thread` command?\n- Linked resources worth deep-diving with `WebFetch`?\n\n### 3. Follow Threads\n\nWhen a tweet has high engagement or is a thread starter:\n```bash\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py thread \u003Ctweet_id>\n```\n\n### 4. Deep-Dive Linked Content\n\nWhen tweets link to GitHub repos, blog posts, or docs, fetch with `WebFetch`. Prioritize links that:\n- Multiple tweets reference\n- Come from high-engagement tweets\n- Point to technical resources directly relevant to the question\n\n### 5. Synthesize\n\nGroup findings by theme, not by query:\n\n```\n### [Theme\u002FFinding Title]\n\n[1-2 sentence summary]\n\n- @username: \"[key quote]\" (NL, NI) [Tweet](url)\n- @username2: \"[another perspective]\" (NL, NI) [Tweet](url)\n\nResources shared:\n- [Resource title](url) -- [what it is]\n```\n\n### 6. Save\n\nUse `--save` flag or save manually.\n\n## Refinement Heuristics\n\n- **Too much noise?** Add `-is:reply`, use `--sort likes`, narrow keywords\n- **Too few results?** Broaden with `OR`, remove restrictive operators\n- **Spam flooding results?** Add `-$ -airdrop -giveaway -whitelist`\n- **Expert takes only?** Use `from:` or `--min-likes 50`\n- **Substance over hot takes?** Search with `has:links`\n\n## When to Use\n\n- Researching what developers\u002Fexperts\u002Fcommunity thinks about a topic\n- Getting real-time perspectives on breaking news or product launches\n- Finding technical discussions about libraries, frameworks, or APIs\n- Monitoring what key accounts are posting about\n- Gathering sourced evidence for competitive analysis or market research\n- Quick pulse check on a topic before deeper investigation\n\n## When NOT to Use\n\n- Posting tweets, replying, or managing an X account (read-only tool)\n- Historical research beyond 7 days (uses recent search endpoint only)\n- Searching non-X platforms (use web search tools instead)\n- Tasks where web search provides better results (X is best for real-time\n  opinions, discussions, and breaking news -- not reference docs)\n\n## Cost Awareness\n\nX API uses pay-per-use pricing ($0.005\u002Fpost read, $0.01\u002Fuser lookup). Quick mode\nkeeps costs under ~$0.50\u002Fsearch. Always check the cost display after each search.\nCache prevents duplicate charges. See `references\u002Fx-api.md` for full pricing.\n\n## File Structure\n\n```\nskills\u002Fx-research\u002F\n  SKILL.md           (this file)\n  scripts\u002F\n    x_search.py      (CLI entry point, run with uv)\n    x_api.py         (X API wrapper)\n    x_cache.py       (file-based cache, 15min TTL)\n    x_format.py      (terminal + markdown formatters)\n  data\u002F\n    watchlist.json   (accounts to monitor)\n    cache\u002F           (auto-managed)\n  references\u002F\n    x-api.md         (X API endpoint reference)\n```\n",{"data":35,"body":43},{"name":4,"description":6,"allowed-tools":36},[37,38,39,40,41,42],"Bash","Read","Grep","Glob","Write","WebFetch",{"type":44,"children":45},"root",[46,54,60,74,81,148,154,167,174,234,242,402,415,423,652,658,734,739,745,800,805,811,859,865,1024,1036,1042,1074,1079,1085,1090,1096,1101,1229,1235,1240,1284,1290,1295,1338,1344,1356,1374,1380,1385,1395,1401,1413,1419,1518,1524,1557,1563,1586,1592,1605,1611,1620],{"type":47,"tag":48,"props":49,"children":50},"element","h1",{"id":4},[51],{"type":52,"value":53},"text","X Research",{"type":47,"tag":55,"props":56,"children":57},"p",{},[58],{"type":52,"value":59},"Agentic research over X\u002FTwitter. Decompose research questions into targeted searches,\niteratively refine, follow threads, deep-dive linked content, and synthesize sourced\nbriefings.",{"type":47,"tag":55,"props":61,"children":62},{},[63,65,72],{"type":52,"value":64},"For X API details (endpoints, operators, response format): read\n",{"type":47,"tag":66,"props":67,"children":69},"code",{"className":68},[],[70],{"type":52,"value":71},"{baseDir}\u002Fskills\u002Fx-research\u002Freferences\u002Fx-api.md",{"type":52,"value":73},".",{"type":47,"tag":75,"props":76,"children":78},"h2",{"id":77},"prerequisites",[79],{"type":52,"value":80},"Prerequisites",{"type":47,"tag":82,"props":83,"children":84},"ul",{},[85,113],{"type":47,"tag":86,"props":87,"children":88},"li",{},[89,95,97,103,105,111],{"type":47,"tag":90,"props":91,"children":92},"strong",{},[93],{"type":52,"value":94},"X API Bearer Token",{"type":52,"value":96}," -- set ",{"type":47,"tag":66,"props":98,"children":100},{"className":99},[],[101],{"type":52,"value":102},"X_BEARER_TOKEN",{"type":52,"value":104}," (or ",{"type":47,"tag":66,"props":106,"children":108},{"className":107},[],[109],{"type":52,"value":110},"XAI_API_KEY",{"type":52,"value":112},") env var",{"type":47,"tag":86,"props":114,"children":115},{},[116,121,123,128,130,136,138,146],{"type":47,"tag":90,"props":117,"children":118},{},[119],{"type":52,"value":120},"Python 3.11+",{"type":52,"value":122}," and ",{"type":47,"tag":90,"props":124,"children":125},{},[126],{"type":52,"value":127},"uv",{"type":52,"value":129}," (",{"type":47,"tag":66,"props":131,"children":133},{"className":132},[],[134],{"type":52,"value":135},"pip install uv",{"type":52,"value":137}," or ",{"type":47,"tag":139,"props":140,"children":144},"a",{"href":141,"rel":142},"https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002F",[143],"nofollow",[145],{"type":52,"value":141},{"type":52,"value":147},")",{"type":47,"tag":75,"props":149,"children":151},{"id":150},"cli-tool",[152],{"type":52,"value":153},"CLI Tool",{"type":47,"tag":55,"props":155,"children":156},{},[157,159,165],{"type":52,"value":158},"All commands use ",{"type":47,"tag":66,"props":160,"children":162},{"className":161},[],[163],{"type":52,"value":164},"uv run",{"type":52,"value":166}," for automatic dependency management:",{"type":47,"tag":168,"props":169,"children":171},"h3",{"id":170},"search",[172],{"type":52,"value":173},"Search",{"type":47,"tag":175,"props":176,"children":181},"pre",{"className":177,"code":178,"language":179,"meta":180,"style":180},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","uv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py search \"\u003Cquery>\" [options]\n","bash","",[182],{"type":47,"tag":66,"props":183,"children":184},{"__ignoreMap":180},[185],{"type":47,"tag":186,"props":187,"children":190},"span",{"class":188,"line":189},"line",1,[191,196,202,207,212,218,223,228],{"type":47,"tag":186,"props":192,"children":194},{"style":193},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[195],{"type":52,"value":127},{"type":47,"tag":186,"props":197,"children":199},{"style":198},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[200],{"type":52,"value":201}," run",{"type":47,"tag":186,"props":203,"children":204},{"style":198},[205],{"type":52,"value":206}," {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py",{"type":47,"tag":186,"props":208,"children":209},{"style":198},[210],{"type":52,"value":211}," search",{"type":47,"tag":186,"props":213,"children":215},{"style":214},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[216],{"type":52,"value":217}," \"",{"type":47,"tag":186,"props":219,"children":220},{"style":198},[221],{"type":52,"value":222},"\u003Cquery>",{"type":47,"tag":186,"props":224,"children":225},{"style":214},[226],{"type":52,"value":227},"\"",{"type":47,"tag":186,"props":229,"children":231},{"style":230},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[232],{"type":52,"value":233}," [options]\n",{"type":47,"tag":55,"props":235,"children":236},{},[237],{"type":47,"tag":90,"props":238,"children":239},{},[240],{"type":52,"value":241},"Options:",{"type":47,"tag":82,"props":243,"children":244},{},[245,256,267,278,289,300,311,322,341,352,363,380,391],{"type":47,"tag":86,"props":246,"children":247},{},[248,254],{"type":47,"tag":66,"props":249,"children":251},{"className":250},[],[252],{"type":52,"value":253},"--sort likes|impressions|retweets|recent",{"type":52,"value":255}," -- sort order (default: likes)",{"type":47,"tag":86,"props":257,"children":258},{},[259,265],{"type":47,"tag":66,"props":260,"children":262},{"className":261},[],[263],{"type":52,"value":264},"--since 1h|3h|12h|1d|7d",{"type":52,"value":266}," -- time filter (default: last 7 days)",{"type":47,"tag":86,"props":268,"children":269},{},[270,276],{"type":47,"tag":66,"props":271,"children":273},{"className":272},[],[274],{"type":52,"value":275},"--min-likes N",{"type":52,"value":277}," -- filter by minimum likes",{"type":47,"tag":86,"props":279,"children":280},{},[281,287],{"type":47,"tag":66,"props":282,"children":284},{"className":283},[],[285],{"type":52,"value":286},"--min-impressions N",{"type":52,"value":288}," -- filter by minimum impressions",{"type":47,"tag":86,"props":290,"children":291},{},[292,298],{"type":47,"tag":66,"props":293,"children":295},{"className":294},[],[296],{"type":52,"value":297},"--pages N",{"type":52,"value":299}," -- pages to fetch, 1-5 (default: 1, 100 tweets\u002Fpage)",{"type":47,"tag":86,"props":301,"children":302},{},[303,309],{"type":47,"tag":66,"props":304,"children":306},{"className":305},[],[307],{"type":52,"value":308},"--limit N",{"type":52,"value":310}," -- max results to display (default: 15)",{"type":47,"tag":86,"props":312,"children":313},{},[314,320],{"type":47,"tag":66,"props":315,"children":317},{"className":316},[],[318],{"type":52,"value":319},"--quick",{"type":52,"value":321}," -- quick mode: 1 page, max 10 results, auto noise filter, 1hr cache",{"type":47,"tag":86,"props":323,"children":324},{},[325,331,333,339],{"type":47,"tag":66,"props":326,"children":328},{"className":327},[],[329],{"type":52,"value":330},"--from-user \u003Cusername>",{"type":52,"value":332}," -- shorthand for ",{"type":47,"tag":66,"props":334,"children":336},{"className":335},[],[337],{"type":52,"value":338},"from:username",{"type":52,"value":340}," in query",{"type":47,"tag":86,"props":342,"children":343},{},[344,350],{"type":47,"tag":66,"props":345,"children":347},{"className":346},[],[348],{"type":52,"value":349},"--quality",{"type":52,"value":351}," -- filter low-engagement tweets (min 10 likes, post-hoc)",{"type":47,"tag":86,"props":353,"children":354},{},[355,361],{"type":47,"tag":66,"props":356,"children":358},{"className":357},[],[359],{"type":52,"value":360},"--no-replies",{"type":52,"value":362}," -- exclude replies",{"type":47,"tag":86,"props":364,"children":365},{},[366,372,374],{"type":47,"tag":66,"props":367,"children":369},{"className":368},[],[370],{"type":52,"value":371},"--save",{"type":52,"value":373}," -- save results to ",{"type":47,"tag":66,"props":375,"children":377},{"className":376},[],[378],{"type":52,"value":379},"~\u002Fx-research-output\u002F",{"type":47,"tag":86,"props":381,"children":382},{},[383,389],{"type":47,"tag":66,"props":384,"children":386},{"className":385},[],[387],{"type":52,"value":388},"--json",{"type":52,"value":390}," -- raw JSON output",{"type":47,"tag":86,"props":392,"children":393},{},[394,400],{"type":47,"tag":66,"props":395,"children":397},{"className":396},[],[398],{"type":52,"value":399},"--markdown",{"type":52,"value":401}," -- markdown output for research docs",{"type":47,"tag":55,"props":403,"children":404},{},[405,407,413],{"type":52,"value":406},"Auto-adds ",{"type":47,"tag":66,"props":408,"children":410},{"className":409},[],[411],{"type":52,"value":412},"-is:retweet",{"type":52,"value":414}," unless query already includes it. All searches display estimated API cost.",{"type":47,"tag":55,"props":416,"children":417},{},[418],{"type":47,"tag":90,"props":419,"children":420},{},[421],{"type":52,"value":422},"Examples:",{"type":47,"tag":175,"props":424,"children":426},{"className":177,"code":425,"language":179,"meta":180,"style":180},"uv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py search \"claude code\" --sort likes --limit 10\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py search \"from:anthropic\" --sort recent\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py search \"(cursor OR windsurf) AI editor\" --pages 2 --save\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py search \"AI agents\" --quick\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py search \"AI agents\" --quality --quick\n",[427],{"type":47,"tag":66,"props":428,"children":429},{"__ignoreMap":180},[430,483,525,573,611],{"type":47,"tag":186,"props":431,"children":432},{"class":188,"line":189},[433,437,441,445,449,453,458,462,467,472,477],{"type":47,"tag":186,"props":434,"children":435},{"style":193},[436],{"type":52,"value":127},{"type":47,"tag":186,"props":438,"children":439},{"style":198},[440],{"type":52,"value":201},{"type":47,"tag":186,"props":442,"children":443},{"style":198},[444],{"type":52,"value":206},{"type":47,"tag":186,"props":446,"children":447},{"style":198},[448],{"type":52,"value":211},{"type":47,"tag":186,"props":450,"children":451},{"style":214},[452],{"type":52,"value":217},{"type":47,"tag":186,"props":454,"children":455},{"style":198},[456],{"type":52,"value":457},"claude code",{"type":47,"tag":186,"props":459,"children":460},{"style":214},[461],{"type":52,"value":227},{"type":47,"tag":186,"props":463,"children":464},{"style":198},[465],{"type":52,"value":466}," --sort",{"type":47,"tag":186,"props":468,"children":469},{"style":198},[470],{"type":52,"value":471}," likes",{"type":47,"tag":186,"props":473,"children":474},{"style":198},[475],{"type":52,"value":476}," --limit",{"type":47,"tag":186,"props":478,"children":480},{"style":479},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[481],{"type":52,"value":482}," 10\n",{"type":47,"tag":186,"props":484,"children":486},{"class":188,"line":485},2,[487,491,495,499,503,507,512,516,520],{"type":47,"tag":186,"props":488,"children":489},{"style":193},[490],{"type":52,"value":127},{"type":47,"tag":186,"props":492,"children":493},{"style":198},[494],{"type":52,"value":201},{"type":47,"tag":186,"props":496,"children":497},{"style":198},[498],{"type":52,"value":206},{"type":47,"tag":186,"props":500,"children":501},{"style":198},[502],{"type":52,"value":211},{"type":47,"tag":186,"props":504,"children":505},{"style":214},[506],{"type":52,"value":217},{"type":47,"tag":186,"props":508,"children":509},{"style":198},[510],{"type":52,"value":511},"from:anthropic",{"type":47,"tag":186,"props":513,"children":514},{"style":214},[515],{"type":52,"value":227},{"type":47,"tag":186,"props":517,"children":518},{"style":198},[519],{"type":52,"value":466},{"type":47,"tag":186,"props":521,"children":522},{"style":198},[523],{"type":52,"value":524}," recent\n",{"type":47,"tag":186,"props":526,"children":528},{"class":188,"line":527},3,[529,533,537,541,545,549,554,558,563,568],{"type":47,"tag":186,"props":530,"children":531},{"style":193},[532],{"type":52,"value":127},{"type":47,"tag":186,"props":534,"children":535},{"style":198},[536],{"type":52,"value":201},{"type":47,"tag":186,"props":538,"children":539},{"style":198},[540],{"type":52,"value":206},{"type":47,"tag":186,"props":542,"children":543},{"style":198},[544],{"type":52,"value":211},{"type":47,"tag":186,"props":546,"children":547},{"style":214},[548],{"type":52,"value":217},{"type":47,"tag":186,"props":550,"children":551},{"style":198},[552],{"type":52,"value":553},"(cursor OR windsurf) AI editor",{"type":47,"tag":186,"props":555,"children":556},{"style":214},[557],{"type":52,"value":227},{"type":47,"tag":186,"props":559,"children":560},{"style":198},[561],{"type":52,"value":562}," --pages",{"type":47,"tag":186,"props":564,"children":565},{"style":479},[566],{"type":52,"value":567}," 2",{"type":47,"tag":186,"props":569,"children":570},{"style":198},[571],{"type":52,"value":572}," --save\n",{"type":47,"tag":186,"props":574,"children":576},{"class":188,"line":575},4,[577,581,585,589,593,597,602,606],{"type":47,"tag":186,"props":578,"children":579},{"style":193},[580],{"type":52,"value":127},{"type":47,"tag":186,"props":582,"children":583},{"style":198},[584],{"type":52,"value":201},{"type":47,"tag":186,"props":586,"children":587},{"style":198},[588],{"type":52,"value":206},{"type":47,"tag":186,"props":590,"children":591},{"style":198},[592],{"type":52,"value":211},{"type":47,"tag":186,"props":594,"children":595},{"style":214},[596],{"type":52,"value":217},{"type":47,"tag":186,"props":598,"children":599},{"style":198},[600],{"type":52,"value":601},"AI agents",{"type":47,"tag":186,"props":603,"children":604},{"style":214},[605],{"type":52,"value":227},{"type":47,"tag":186,"props":607,"children":608},{"style":198},[609],{"type":52,"value":610}," --quick\n",{"type":47,"tag":186,"props":612,"children":614},{"class":188,"line":613},5,[615,619,623,627,631,635,639,643,648],{"type":47,"tag":186,"props":616,"children":617},{"style":193},[618],{"type":52,"value":127},{"type":47,"tag":186,"props":620,"children":621},{"style":198},[622],{"type":52,"value":201},{"type":47,"tag":186,"props":624,"children":625},{"style":198},[626],{"type":52,"value":206},{"type":47,"tag":186,"props":628,"children":629},{"style":198},[630],{"type":52,"value":211},{"type":47,"tag":186,"props":632,"children":633},{"style":214},[634],{"type":52,"value":217},{"type":47,"tag":186,"props":636,"children":637},{"style":198},[638],{"type":52,"value":601},{"type":47,"tag":186,"props":640,"children":641},{"style":214},[642],{"type":52,"value":227},{"type":47,"tag":186,"props":644,"children":645},{"style":198},[646],{"type":52,"value":647}," --quality",{"type":47,"tag":186,"props":649,"children":650},{"style":198},[651],{"type":52,"value":610},{"type":47,"tag":168,"props":653,"children":655},{"id":654},"profile",[656],{"type":52,"value":657},"Profile",{"type":47,"tag":175,"props":659,"children":661},{"className":177,"code":660,"language":179,"meta":180,"style":180},"uv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py profile \u003Cusername> [--count N] [--replies] [--json]\n",[662],{"type":47,"tag":66,"props":663,"children":664},{"__ignoreMap":180},[665],{"type":47,"tag":186,"props":666,"children":667},{"class":188,"line":189},[668,672,676,680,685,690,695,700,705,710,715,720,725,729],{"type":47,"tag":186,"props":669,"children":670},{"style":193},[671],{"type":52,"value":127},{"type":47,"tag":186,"props":673,"children":674},{"style":198},[675],{"type":52,"value":201},{"type":47,"tag":186,"props":677,"children":678},{"style":198},[679],{"type":52,"value":206},{"type":47,"tag":186,"props":681,"children":682},{"style":198},[683],{"type":52,"value":684}," profile",{"type":47,"tag":186,"props":686,"children":687},{"style":214},[688],{"type":52,"value":689}," \u003C",{"type":47,"tag":186,"props":691,"children":692},{"style":198},[693],{"type":52,"value":694},"usernam",{"type":47,"tag":186,"props":696,"children":697},{"style":230},[698],{"type":52,"value":699},"e",{"type":47,"tag":186,"props":701,"children":702},{"style":214},[703],{"type":52,"value":704},">",{"type":47,"tag":186,"props":706,"children":707},{"style":230},[708],{"type":52,"value":709}," [--count ",{"type":47,"tag":186,"props":711,"children":712},{"style":198},[713],{"type":52,"value":714},"N]",{"type":47,"tag":186,"props":716,"children":717},{"style":230},[718],{"type":52,"value":719}," [--replies] ",{"type":47,"tag":186,"props":721,"children":722},{"style":214},[723],{"type":52,"value":724},"[",{"type":47,"tag":186,"props":726,"children":727},{"style":230},[728],{"type":52,"value":388},{"type":47,"tag":186,"props":730,"children":731},{"style":214},[732],{"type":52,"value":733},"]\n",{"type":47,"tag":55,"props":735,"children":736},{},[737],{"type":52,"value":738},"Fetches recent tweets from a specific user (excludes replies by default).",{"type":47,"tag":168,"props":740,"children":742},{"id":741},"thread",[743],{"type":52,"value":744},"Thread",{"type":47,"tag":175,"props":746,"children":748},{"className":177,"code":747,"language":179,"meta":180,"style":180},"uv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py thread \u003Ctweet_id> [--pages N]\n",[749],{"type":47,"tag":66,"props":750,"children":751},{"__ignoreMap":180},[752],{"type":47,"tag":186,"props":753,"children":754},{"class":188,"line":189},[755,759,763,767,772,776,781,786,790,795],{"type":47,"tag":186,"props":756,"children":757},{"style":193},[758],{"type":52,"value":127},{"type":47,"tag":186,"props":760,"children":761},{"style":198},[762],{"type":52,"value":201},{"type":47,"tag":186,"props":764,"children":765},{"style":198},[766],{"type":52,"value":206},{"type":47,"tag":186,"props":768,"children":769},{"style":198},[770],{"type":52,"value":771}," thread",{"type":47,"tag":186,"props":773,"children":774},{"style":214},[775],{"type":52,"value":689},{"type":47,"tag":186,"props":777,"children":778},{"style":198},[779],{"type":52,"value":780},"tweet_i",{"type":47,"tag":186,"props":782,"children":783},{"style":230},[784],{"type":52,"value":785},"d",{"type":47,"tag":186,"props":787,"children":788},{"style":214},[789],{"type":52,"value":704},{"type":47,"tag":186,"props":791,"children":792},{"style":230},[793],{"type":52,"value":794}," [--pages ",{"type":47,"tag":186,"props":796,"children":797},{"style":198},[798],{"type":52,"value":799},"N]\n",{"type":47,"tag":55,"props":801,"children":802},{},[803],{"type":52,"value":804},"Fetches full conversation thread by root tweet ID.",{"type":47,"tag":168,"props":806,"children":808},{"id":807},"single-tweet",[809],{"type":52,"value":810},"Single Tweet",{"type":47,"tag":175,"props":812,"children":814},{"className":177,"code":813,"language":179,"meta":180,"style":180},"uv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py tweet \u003Ctweet_id> [--json]\n",[815],{"type":47,"tag":66,"props":816,"children":817},{"__ignoreMap":180},[818],{"type":47,"tag":186,"props":819,"children":820},{"class":188,"line":189},[821,825,829,833,838,842,846,850,854],{"type":47,"tag":186,"props":822,"children":823},{"style":193},[824],{"type":52,"value":127},{"type":47,"tag":186,"props":826,"children":827},{"style":198},[828],{"type":52,"value":201},{"type":47,"tag":186,"props":830,"children":831},{"style":198},[832],{"type":52,"value":206},{"type":47,"tag":186,"props":834,"children":835},{"style":198},[836],{"type":52,"value":837}," tweet",{"type":47,"tag":186,"props":839,"children":840},{"style":214},[841],{"type":52,"value":689},{"type":47,"tag":186,"props":843,"children":844},{"style":198},[845],{"type":52,"value":780},{"type":47,"tag":186,"props":847,"children":848},{"style":230},[849],{"type":52,"value":785},{"type":47,"tag":186,"props":851,"children":852},{"style":214},[853],{"type":52,"value":704},{"type":47,"tag":186,"props":855,"children":856},{"style":230},[857],{"type":52,"value":858}," [--json]\n",{"type":47,"tag":168,"props":860,"children":862},{"id":861},"watchlist",[863],{"type":52,"value":864},"Watchlist",{"type":47,"tag":175,"props":866,"children":868},{"className":177,"code":867,"language":179,"meta":180,"style":180},"uv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py watchlist                        # Show all\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py watchlist add \u003Cuser> [note]      # Add account\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py watchlist remove \u003Cuser>           # Remove\nuv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py watchlist check                   # Check recent\n",[869],{"type":47,"tag":66,"props":870,"children":871},{"__ignoreMap":180},[872,898,950,995],{"type":47,"tag":186,"props":873,"children":874},{"class":188,"line":189},[875,879,883,887,892],{"type":47,"tag":186,"props":876,"children":877},{"style":193},[878],{"type":52,"value":127},{"type":47,"tag":186,"props":880,"children":881},{"style":198},[882],{"type":52,"value":201},{"type":47,"tag":186,"props":884,"children":885},{"style":198},[886],{"type":52,"value":206},{"type":47,"tag":186,"props":888,"children":889},{"style":198},[890],{"type":52,"value":891}," watchlist",{"type":47,"tag":186,"props":893,"children":895},{"style":894},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[896],{"type":52,"value":897},"                        # Show all\n",{"type":47,"tag":186,"props":899,"children":900},{"class":188,"line":485},[901,905,909,913,917,922,926,931,936,940,945],{"type":47,"tag":186,"props":902,"children":903},{"style":193},[904],{"type":52,"value":127},{"type":47,"tag":186,"props":906,"children":907},{"style":198},[908],{"type":52,"value":201},{"type":47,"tag":186,"props":910,"children":911},{"style":198},[912],{"type":52,"value":206},{"type":47,"tag":186,"props":914,"children":915},{"style":198},[916],{"type":52,"value":891},{"type":47,"tag":186,"props":918,"children":919},{"style":198},[920],{"type":52,"value":921}," add",{"type":47,"tag":186,"props":923,"children":924},{"style":214},[925],{"type":52,"value":689},{"type":47,"tag":186,"props":927,"children":928},{"style":198},[929],{"type":52,"value":930},"use",{"type":47,"tag":186,"props":932,"children":933},{"style":230},[934],{"type":52,"value":935},"r",{"type":47,"tag":186,"props":937,"children":938},{"style":214},[939],{"type":52,"value":704},{"type":47,"tag":186,"props":941,"children":942},{"style":230},[943],{"type":52,"value":944}," [note]      ",{"type":47,"tag":186,"props":946,"children":947},{"style":894},[948],{"type":52,"value":949},"# Add account\n",{"type":47,"tag":186,"props":951,"children":952},{"class":188,"line":527},[953,957,961,965,969,974,978,982,986,990],{"type":47,"tag":186,"props":954,"children":955},{"style":193},[956],{"type":52,"value":127},{"type":47,"tag":186,"props":958,"children":959},{"style":198},[960],{"type":52,"value":201},{"type":47,"tag":186,"props":962,"children":963},{"style":198},[964],{"type":52,"value":206},{"type":47,"tag":186,"props":966,"children":967},{"style":198},[968],{"type":52,"value":891},{"type":47,"tag":186,"props":970,"children":971},{"style":198},[972],{"type":52,"value":973}," remove",{"type":47,"tag":186,"props":975,"children":976},{"style":214},[977],{"type":52,"value":689},{"type":47,"tag":186,"props":979,"children":980},{"style":198},[981],{"type":52,"value":930},{"type":47,"tag":186,"props":983,"children":984},{"style":230},[985],{"type":52,"value":935},{"type":47,"tag":186,"props":987,"children":988},{"style":214},[989],{"type":52,"value":704},{"type":47,"tag":186,"props":991,"children":992},{"style":894},[993],{"type":52,"value":994},"           # Remove\n",{"type":47,"tag":186,"props":996,"children":997},{"class":188,"line":575},[998,1002,1006,1010,1014,1019],{"type":47,"tag":186,"props":999,"children":1000},{"style":193},[1001],{"type":52,"value":127},{"type":47,"tag":186,"props":1003,"children":1004},{"style":198},[1005],{"type":52,"value":201},{"type":47,"tag":186,"props":1007,"children":1008},{"style":198},[1009],{"type":52,"value":206},{"type":47,"tag":186,"props":1011,"children":1012},{"style":198},[1013],{"type":52,"value":891},{"type":47,"tag":186,"props":1015,"children":1016},{"style":198},[1017],{"type":52,"value":1018}," check",{"type":47,"tag":186,"props":1020,"children":1021},{"style":894},[1022],{"type":52,"value":1023},"                   # Check recent\n",{"type":47,"tag":55,"props":1025,"children":1026},{},[1027,1029,1035],{"type":52,"value":1028},"Watchlist stored in ",{"type":47,"tag":66,"props":1030,"children":1032},{"className":1031},[],[1033],{"type":52,"value":1034},"{baseDir}\u002Fskills\u002Fx-research\u002Fdata\u002Fwatchlist.json",{"type":52,"value":73},{"type":47,"tag":168,"props":1037,"children":1039},{"id":1038},"cache",[1040],{"type":52,"value":1041},"Cache",{"type":47,"tag":175,"props":1043,"children":1045},{"className":177,"code":1044,"language":179,"meta":180,"style":180},"uv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py cache clear\n",[1046],{"type":47,"tag":66,"props":1047,"children":1048},{"__ignoreMap":180},[1049],{"type":47,"tag":186,"props":1050,"children":1051},{"class":188,"line":189},[1052,1056,1060,1064,1069],{"type":47,"tag":186,"props":1053,"children":1054},{"style":193},[1055],{"type":52,"value":127},{"type":47,"tag":186,"props":1057,"children":1058},{"style":198},[1059],{"type":52,"value":201},{"type":47,"tag":186,"props":1061,"children":1062},{"style":198},[1063],{"type":52,"value":206},{"type":47,"tag":186,"props":1065,"children":1066},{"style":198},[1067],{"type":52,"value":1068}," cache",{"type":47,"tag":186,"props":1070,"children":1071},{"style":198},[1072],{"type":52,"value":1073}," clear\n",{"type":47,"tag":55,"props":1075,"children":1076},{},[1077],{"type":52,"value":1078},"15-minute TTL. Avoids re-fetching identical queries.",{"type":47,"tag":75,"props":1080,"children":1082},{"id":1081},"research-loop-agentic",[1083],{"type":52,"value":1084},"Research Loop (Agentic)",{"type":47,"tag":55,"props":1086,"children":1087},{},[1088],{"type":52,"value":1089},"When doing deep research (not just a quick search), follow this loop:",{"type":47,"tag":168,"props":1091,"children":1093},{"id":1092},"_1-decompose-the-question-into-queries",[1094],{"type":52,"value":1095},"1. Decompose the Question into Queries",{"type":47,"tag":55,"props":1097,"children":1098},{},[1099],{"type":52,"value":1100},"Turn the research question into 3-5 keyword queries using X search operators:",{"type":47,"tag":82,"props":1102,"children":1103},{},[1104,1114,1132,1148,1163,1187,1211],{"type":47,"tag":86,"props":1105,"children":1106},{},[1107,1112],{"type":47,"tag":90,"props":1108,"children":1109},{},[1110],{"type":52,"value":1111},"Core query",{"type":52,"value":1113},": Direct keywords for the topic",{"type":47,"tag":86,"props":1115,"children":1116},{},[1117,1122,1124,1130],{"type":47,"tag":90,"props":1118,"children":1119},{},[1120],{"type":52,"value":1121},"Expert voices",{"type":52,"value":1123},": ",{"type":47,"tag":66,"props":1125,"children":1127},{"className":1126},[],[1128],{"type":52,"value":1129},"from:",{"type":52,"value":1131}," specific known experts",{"type":47,"tag":86,"props":1133,"children":1134},{},[1135,1140,1142],{"type":47,"tag":90,"props":1136,"children":1137},{},[1138],{"type":52,"value":1139},"Pain points",{"type":52,"value":1141},": Keywords like ",{"type":47,"tag":66,"props":1143,"children":1145},{"className":1144},[],[1146],{"type":52,"value":1147},"(broken OR bug OR issue OR migration)",{"type":47,"tag":86,"props":1149,"children":1150},{},[1151,1156,1157],{"type":47,"tag":90,"props":1152,"children":1153},{},[1154],{"type":52,"value":1155},"Positive signal",{"type":52,"value":1141},{"type":47,"tag":66,"props":1158,"children":1160},{"className":1159},[],[1161],{"type":52,"value":1162},"(shipped OR love OR fast OR benchmark)",{"type":47,"tag":86,"props":1164,"children":1165},{},[1166,1171,1172,1178,1179,1185],{"type":47,"tag":90,"props":1167,"children":1168},{},[1169],{"type":52,"value":1170},"Links",{"type":52,"value":1123},{"type":47,"tag":66,"props":1173,"children":1175},{"className":1174},[],[1176],{"type":52,"value":1177},"url:github.com",{"type":52,"value":137},{"type":47,"tag":66,"props":1180,"children":1182},{"className":1181},[],[1183],{"type":52,"value":1184},"url:",{"type":52,"value":1186}," specific domains",{"type":47,"tag":86,"props":1188,"children":1189},{},[1190,1195,1196,1201,1203,1209],{"type":47,"tag":90,"props":1191,"children":1192},{},[1193],{"type":52,"value":1194},"Noise reduction",{"type":52,"value":1123},{"type":47,"tag":66,"props":1197,"children":1199},{"className":1198},[],[1200],{"type":52,"value":412},{"type":52,"value":1202}," (auto-added), add ",{"type":47,"tag":66,"props":1204,"children":1206},{"className":1205},[],[1207],{"type":52,"value":1208},"-is:reply",{"type":52,"value":1210}," if needed",{"type":47,"tag":86,"props":1212,"children":1213},{},[1214,1219,1221,1227],{"type":47,"tag":90,"props":1215,"children":1216},{},[1217],{"type":52,"value":1218},"Spam filter",{"type":52,"value":1220},": Add ",{"type":47,"tag":66,"props":1222,"children":1224},{"className":1223},[],[1225],{"type":52,"value":1226},"-airdrop -giveaway -whitelist",{"type":52,"value":1228}," for crypto-adjacent topics",{"type":47,"tag":168,"props":1230,"children":1232},{"id":1231},"_2-search-and-extract",[1233],{"type":52,"value":1234},"2. Search and Extract",{"type":47,"tag":55,"props":1236,"children":1237},{},[1238],{"type":52,"value":1239},"Run each query via CLI. After each, assess:",{"type":47,"tag":82,"props":1241,"children":1242},{},[1243,1248,1260,1272],{"type":47,"tag":86,"props":1244,"children":1245},{},[1246],{"type":52,"value":1247},"Signal or noise? Adjust operators.",{"type":47,"tag":86,"props":1249,"children":1250},{},[1251,1253,1258],{"type":52,"value":1252},"Key voices worth searching ",{"type":47,"tag":66,"props":1254,"children":1256},{"className":1255},[],[1257],{"type":52,"value":1129},{"type":52,"value":1259}," specifically?",{"type":47,"tag":86,"props":1261,"children":1262},{},[1263,1265,1270],{"type":52,"value":1264},"Threads worth following via ",{"type":47,"tag":66,"props":1266,"children":1268},{"className":1267},[],[1269],{"type":52,"value":741},{"type":52,"value":1271}," command?",{"type":47,"tag":86,"props":1273,"children":1274},{},[1275,1277,1282],{"type":52,"value":1276},"Linked resources worth deep-diving with ",{"type":47,"tag":66,"props":1278,"children":1280},{"className":1279},[],[1281],{"type":52,"value":42},{"type":52,"value":1283},"?",{"type":47,"tag":168,"props":1285,"children":1287},{"id":1286},"_3-follow-threads",[1288],{"type":52,"value":1289},"3. Follow Threads",{"type":47,"tag":55,"props":1291,"children":1292},{},[1293],{"type":52,"value":1294},"When a tweet has high engagement or is a thread starter:",{"type":47,"tag":175,"props":1296,"children":1298},{"className":177,"code":1297,"language":179,"meta":180,"style":180},"uv run {baseDir}\u002Fskills\u002Fx-research\u002Fscripts\u002Fx_search.py thread \u003Ctweet_id>\n",[1299],{"type":47,"tag":66,"props":1300,"children":1301},{"__ignoreMap":180},[1302],{"type":47,"tag":186,"props":1303,"children":1304},{"class":188,"line":189},[1305,1309,1313,1317,1321,1325,1329,1333],{"type":47,"tag":186,"props":1306,"children":1307},{"style":193},[1308],{"type":52,"value":127},{"type":47,"tag":186,"props":1310,"children":1311},{"style":198},[1312],{"type":52,"value":201},{"type":47,"tag":186,"props":1314,"children":1315},{"style":198},[1316],{"type":52,"value":206},{"type":47,"tag":186,"props":1318,"children":1319},{"style":198},[1320],{"type":52,"value":771},{"type":47,"tag":186,"props":1322,"children":1323},{"style":214},[1324],{"type":52,"value":689},{"type":47,"tag":186,"props":1326,"children":1327},{"style":198},[1328],{"type":52,"value":780},{"type":47,"tag":186,"props":1330,"children":1331},{"style":230},[1332],{"type":52,"value":785},{"type":47,"tag":186,"props":1334,"children":1335},{"style":214},[1336],{"type":52,"value":1337},">\n",{"type":47,"tag":168,"props":1339,"children":1341},{"id":1340},"_4-deep-dive-linked-content",[1342],{"type":52,"value":1343},"4. Deep-Dive Linked Content",{"type":47,"tag":55,"props":1345,"children":1346},{},[1347,1349,1354],{"type":52,"value":1348},"When tweets link to GitHub repos, blog posts, or docs, fetch with ",{"type":47,"tag":66,"props":1350,"children":1352},{"className":1351},[],[1353],{"type":52,"value":42},{"type":52,"value":1355},". Prioritize links that:",{"type":47,"tag":82,"props":1357,"children":1358},{},[1359,1364,1369],{"type":47,"tag":86,"props":1360,"children":1361},{},[1362],{"type":52,"value":1363},"Multiple tweets reference",{"type":47,"tag":86,"props":1365,"children":1366},{},[1367],{"type":52,"value":1368},"Come from high-engagement tweets",{"type":47,"tag":86,"props":1370,"children":1371},{},[1372],{"type":52,"value":1373},"Point to technical resources directly relevant to the question",{"type":47,"tag":168,"props":1375,"children":1377},{"id":1376},"_5-synthesize",[1378],{"type":52,"value":1379},"5. Synthesize",{"type":47,"tag":55,"props":1381,"children":1382},{},[1383],{"type":52,"value":1384},"Group findings by theme, not by query:",{"type":47,"tag":175,"props":1386,"children":1390},{"className":1387,"code":1389,"language":52},[1388],"language-text","### [Theme\u002FFinding Title]\n\n[1-2 sentence summary]\n\n- @username: \"[key quote]\" (NL, NI) [Tweet](url)\n- @username2: \"[another perspective]\" (NL, NI) [Tweet](url)\n\nResources shared:\n- [Resource title](url) -- [what it is]\n",[1391],{"type":47,"tag":66,"props":1392,"children":1393},{"__ignoreMap":180},[1394],{"type":52,"value":1389},{"type":47,"tag":168,"props":1396,"children":1398},{"id":1397},"_6-save",[1399],{"type":52,"value":1400},"6. Save",{"type":47,"tag":55,"props":1402,"children":1403},{},[1404,1406,1411],{"type":52,"value":1405},"Use ",{"type":47,"tag":66,"props":1407,"children":1409},{"className":1408},[],[1410],{"type":52,"value":371},{"type":52,"value":1412}," flag or save manually.",{"type":47,"tag":75,"props":1414,"children":1416},{"id":1415},"refinement-heuristics",[1417],{"type":52,"value":1418},"Refinement Heuristics",{"type":47,"tag":82,"props":1420,"children":1421},{},[1422,1447,1465,1480,1502],{"type":47,"tag":86,"props":1423,"children":1424},{},[1425,1430,1432,1437,1439,1445],{"type":47,"tag":90,"props":1426,"children":1427},{},[1428],{"type":52,"value":1429},"Too much noise?",{"type":52,"value":1431}," Add ",{"type":47,"tag":66,"props":1433,"children":1435},{"className":1434},[],[1436],{"type":52,"value":1208},{"type":52,"value":1438},", use ",{"type":47,"tag":66,"props":1440,"children":1442},{"className":1441},[],[1443],{"type":52,"value":1444},"--sort likes",{"type":52,"value":1446},", narrow keywords",{"type":47,"tag":86,"props":1448,"children":1449},{},[1450,1455,1457,1463],{"type":47,"tag":90,"props":1451,"children":1452},{},[1453],{"type":52,"value":1454},"Too few results?",{"type":52,"value":1456}," Broaden with ",{"type":47,"tag":66,"props":1458,"children":1460},{"className":1459},[],[1461],{"type":52,"value":1462},"OR",{"type":52,"value":1464},", remove restrictive operators",{"type":47,"tag":86,"props":1466,"children":1467},{},[1468,1473,1474],{"type":47,"tag":90,"props":1469,"children":1470},{},[1471],{"type":52,"value":1472},"Spam flooding results?",{"type":52,"value":1431},{"type":47,"tag":66,"props":1475,"children":1477},{"className":1476},[],[1478],{"type":52,"value":1479},"-$ -airdrop -giveaway -whitelist",{"type":47,"tag":86,"props":1481,"children":1482},{},[1483,1488,1490,1495,1496],{"type":47,"tag":90,"props":1484,"children":1485},{},[1486],{"type":52,"value":1487},"Expert takes only?",{"type":52,"value":1489}," Use ",{"type":47,"tag":66,"props":1491,"children":1493},{"className":1492},[],[1494],{"type":52,"value":1129},{"type":52,"value":137},{"type":47,"tag":66,"props":1497,"children":1499},{"className":1498},[],[1500],{"type":52,"value":1501},"--min-likes 50",{"type":47,"tag":86,"props":1503,"children":1504},{},[1505,1510,1512],{"type":47,"tag":90,"props":1506,"children":1507},{},[1508],{"type":52,"value":1509},"Substance over hot takes?",{"type":52,"value":1511}," Search with ",{"type":47,"tag":66,"props":1513,"children":1515},{"className":1514},[],[1516],{"type":52,"value":1517},"has:links",{"type":47,"tag":75,"props":1519,"children":1521},{"id":1520},"when-to-use",[1522],{"type":52,"value":1523},"When to Use",{"type":47,"tag":82,"props":1525,"children":1526},{},[1527,1532,1537,1542,1547,1552],{"type":47,"tag":86,"props":1528,"children":1529},{},[1530],{"type":52,"value":1531},"Researching what developers\u002Fexperts\u002Fcommunity thinks about a topic",{"type":47,"tag":86,"props":1533,"children":1534},{},[1535],{"type":52,"value":1536},"Getting real-time perspectives on breaking news or product launches",{"type":47,"tag":86,"props":1538,"children":1539},{},[1540],{"type":52,"value":1541},"Finding technical discussions about libraries, frameworks, or APIs",{"type":47,"tag":86,"props":1543,"children":1544},{},[1545],{"type":52,"value":1546},"Monitoring what key accounts are posting about",{"type":47,"tag":86,"props":1548,"children":1549},{},[1550],{"type":52,"value":1551},"Gathering sourced evidence for competitive analysis or market research",{"type":47,"tag":86,"props":1553,"children":1554},{},[1555],{"type":52,"value":1556},"Quick pulse check on a topic before deeper investigation",{"type":47,"tag":75,"props":1558,"children":1560},{"id":1559},"when-not-to-use",[1561],{"type":52,"value":1562},"When NOT to Use",{"type":47,"tag":82,"props":1564,"children":1565},{},[1566,1571,1576,1581],{"type":47,"tag":86,"props":1567,"children":1568},{},[1569],{"type":52,"value":1570},"Posting tweets, replying, or managing an X account (read-only tool)",{"type":47,"tag":86,"props":1572,"children":1573},{},[1574],{"type":52,"value":1575},"Historical research beyond 7 days (uses recent search endpoint only)",{"type":47,"tag":86,"props":1577,"children":1578},{},[1579],{"type":52,"value":1580},"Searching non-X platforms (use web search tools instead)",{"type":47,"tag":86,"props":1582,"children":1583},{},[1584],{"type":52,"value":1585},"Tasks where web search provides better results (X is best for real-time\nopinions, discussions, and breaking news -- not reference docs)",{"type":47,"tag":75,"props":1587,"children":1589},{"id":1588},"cost-awareness",[1590],{"type":52,"value":1591},"Cost Awareness",{"type":47,"tag":55,"props":1593,"children":1594},{},[1595,1597,1603],{"type":52,"value":1596},"X API uses pay-per-use pricing ($0.005\u002Fpost read, $0.01\u002Fuser lookup). Quick mode\nkeeps costs under ~$0.50\u002Fsearch. Always check the cost display after each search.\nCache prevents duplicate charges. See ",{"type":47,"tag":66,"props":1598,"children":1600},{"className":1599},[],[1601],{"type":52,"value":1602},"references\u002Fx-api.md",{"type":52,"value":1604}," for full pricing.",{"type":47,"tag":75,"props":1606,"children":1608},{"id":1607},"file-structure",[1609],{"type":52,"value":1610},"File Structure",{"type":47,"tag":175,"props":1612,"children":1615},{"className":1613,"code":1614,"language":52},[1388],"skills\u002Fx-research\u002F\n  SKILL.md           (this file)\n  scripts\u002F\n    x_search.py      (CLI entry point, run with uv)\n    x_api.py         (X API wrapper)\n    x_cache.py       (file-based cache, 15min TTL)\n    x_format.py      (terminal + markdown formatters)\n  data\u002F\n    watchlist.json   (accounts to monitor)\n    cache\u002F           (auto-managed)\n  references\u002F\n    x-api.md         (X API endpoint reference)\n",[1616],{"type":47,"tag":66,"props":1617,"children":1618},{"__ignoreMap":180},[1619],{"type":52,"value":1614},{"type":47,"tag":1621,"props":1622,"children":1623},"style",{},[1624],{"type":52,"value":1625},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1627,"total":1736},[1628,1644,1656,1675,1691,1707,1717],{"slug":1629,"name":1629,"fn":1630,"description":1631,"org":1632,"tags":1633,"stars":23,"repoUrl":24,"updatedAt":1643},"ffuf-web-fuzzing","perform web fuzzing with ffuf","Expert guidance for ffuf web fuzzing during authorized penetration testing. Covers directory discovery, subdomain enumeration, parameter fuzzing, authenticated fuzzing with raw requests, auto-calibration, and result analysis. Use when running ffuf scans, analyzing ffuf output, or building fuzzing strategies for web targets.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1634,1637,1640],{"name":1635,"slug":1636,"type":16},"Code Analysis","code-analysis",{"name":1638,"slug":1639,"type":16},"Security","security",{"name":1641,"slug":1642,"type":16},"Testing","testing","2026-07-17T06:05:08.247908",{"slug":1645,"name":1645,"fn":1646,"description":1647,"org":1648,"tags":1649,"stars":23,"repoUrl":24,"updatedAt":1655},"ghidra-headless","reverse engineer binaries with Ghidra","Reverse engineers binaries using Ghidra's headless analyzer. Use when decompiling executables, extracting functions, strings, symbols, or analyzing call graphs from compiled binaries without the Ghidra GUI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1650,1651,1654],{"name":1635,"slug":1636,"type":16},{"name":1652,"slug":1653,"type":16},"Debugging","debugging",{"name":1638,"slug":1639,"type":16},"2026-07-18T05:47:30.015093",{"slug":1657,"name":1657,"fn":1658,"description":1659,"org":1660,"tags":1661,"stars":23,"repoUrl":24,"updatedAt":1674},"grilling","stress-test plans and decisions","Interviews the user relentlessly about a plan, decision, or idea until every branch of the decision tree is resolved. Use when the user wants to stress-test their thinking, sharpen a plan or design before acting, or uses any 'grill' trigger phrase (e.g. \"grill me on this\").",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1662,1665,1668,1671],{"name":1663,"slug":1664,"type":16},"Analysis","analysis",{"name":1666,"slug":1667,"type":16},"Coaching","coaching",{"name":1669,"slug":1670,"type":16},"Ideation","ideation",{"name":1672,"slug":1673,"type":16},"Strategy","strategy","2026-07-18T05:48:12.46583",{"slug":1676,"name":1676,"fn":1677,"description":1678,"org":1679,"tags":1680,"stars":23,"repoUrl":24,"updatedAt":1690},"handoff","compact conversation for session handoff","Compacts the current conversation into a handoff document so a fresh agent can continue the work in a new session.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1681,1684,1687],{"name":1682,"slug":1683,"type":16},"Agents","agents",{"name":1685,"slug":1686,"type":16},"Context","context",{"name":1688,"slug":1689,"type":16},"Productivity","productivity","2026-07-18T05:47:03.196098",{"slug":1692,"name":1692,"fn":1693,"description":1694,"org":1695,"tags":1696,"stars":23,"repoUrl":24,"updatedAt":1706},"humanizer","edit text to sound human-written","Remove signs of AI-generated writing from text. Use when editing or reviewing\ntext to make it sound more natural and human-written. Based on Wikipedia's\ncomprehensive \"Signs of AI writing\" guide. Detects and fixes patterns including:\ninflated symbolism, promotional language, superficial -ing analyses, vague\nattributions, em dash overuse, rule of three, AI vocabulary words, negative\nparallelisms, and excessive conjunctive phrases. 30c5c8d (Update humanizer plugin to upstream v2.2.0)\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1697,1700,1703],{"name":1698,"slug":1699,"type":16},"Content Creation","content-creation",{"name":1701,"slug":1702,"type":16},"Editing","editing",{"name":1704,"slug":1705,"type":16},"Writing","writing","2026-07-18T05:47:18.1749",{"slug":1708,"name":1708,"fn":1709,"description":1710,"org":1711,"tags":1712,"stars":23,"repoUrl":24,"updatedAt":1716},"last30days","research recent community discussions and trends","Researches a topic from the last 30 days on Reddit, X, and the web. Surfaces real community discussions with engagement metrics and synthesizes findings into actionable insights. Use when the user wants to know what people are saying about a topic right now.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1713,1714,1715],{"name":1663,"slug":1664,"type":16},{"name":14,"slug":15,"type":16},{"name":18,"slug":19,"type":16},"2026-07-17T06:04:39.744471",{"slug":1718,"name":1718,"fn":1719,"description":1720,"org":1721,"tags":1722,"stars":23,"repoUrl":24,"updatedAt":1735},"openai-cloudflare-deploy","deploy applications to Cloudflare","Deploy applications and infrastructure to Cloudflare using Workers, Pages, and related platform services. Use when the user asks to deploy, host, publish, or set up a project on Cloudflare. Originally from OpenAI's curated skills catalog.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1723,1726,1729,1732],{"name":1724,"slug":1725,"type":16},"Cloudflare","cloudflare",{"name":1727,"slug":1728,"type":16},"Cloudflare Pages","cloudflare-pages",{"name":1730,"slug":1731,"type":16},"Cloudflare Workers","cloudflare-workers",{"name":1733,"slug":1734,"type":16},"Deployment","deployment","2026-07-17T06:04:46.574433",31,{"items":1738,"total":1886},[1739,1754,1764,1780,1795,1806,1818,1828,1841,1852,1864,1875],{"slug":1740,"name":1740,"fn":1741,"description":1742,"org":1743,"tags":1744,"stars":1751,"repoUrl":1752,"updatedAt":1753},"address-sanitizer","detect memory errors during fuzzing","AddressSanitizer detects memory errors during fuzzing. Use when fuzzing C\u002FC++ code to find buffer overflows and use-after-free bugs.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1745,1748,1749,1750],{"name":1746,"slug":1747,"type":16},"C#","c",{"name":1652,"slug":1653,"type":16},{"name":1638,"slug":1639,"type":16},{"name":1641,"slug":1642,"type":16},6139,"https:\u002F\u002Fgithub.com\u002Ftrailofbits\u002Fskills","2026-07-17T06:05:14.925095",{"slug":1755,"name":1755,"fn":1756,"description":1757,"org":1758,"tags":1759,"stars":1751,"repoUrl":1752,"updatedAt":1763},"aflpp","perform multi-core fuzzing of C\u002FC++ projects","AFL++ is a fork of AFL with better fuzzing performance and advanced features. Use for multi-core fuzzing of C\u002FC++ projects.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1760,1761,1762],{"name":1746,"slug":1747,"type":16},{"name":1638,"slug":1639,"type":16},{"name":1641,"slug":1642,"type":16},"2026-07-17T06:05:12.433192",{"slug":1765,"name":1765,"fn":1766,"description":1767,"org":1768,"tags":1769,"stars":1751,"repoUrl":1752,"updatedAt":1779},"agentic-actions-auditor","audit GitHub Actions for security vulnerabilities","Audits GitHub Actions workflows for security vulnerabilities in AI agent integrations including Claude Code Action, Gemini CLI, OpenAI Codex, and GitHub AI Inference. Detects attack vectors where attacker-controlled input reaches AI agents running in CI\u002FCD pipelines, including env var intermediary patterns, direct expression injection, dangerous sandbox configurations, and wildcard user allowlists. Use when reviewing workflow files that invoke AI coding agents, auditing CI\u002FCD pipeline security for prompt injection risks, or evaluating agentic action configurations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1770,1771,1774,1775,1778],{"name":1682,"slug":1683,"type":16},{"name":1772,"slug":1773,"type":16},"CI\u002FCD","ci-cd",{"name":1635,"slug":1636,"type":16},{"name":1776,"slug":1777,"type":16},"GitHub Actions","github-actions",{"name":1638,"slug":1639,"type":16},"2026-07-18T05:47:48.564744",{"slug":1781,"name":1781,"fn":1782,"description":1783,"org":1784,"tags":1785,"stars":1751,"repoUrl":1752,"updatedAt":1794},"algorand-vulnerability-scanner","scan Algorand smart contracts for vulnerabilities","Scans Algorand smart contracts for 11 common vulnerabilities including rekeying attacks, unchecked transaction fees, missing field validations, and access control issues. Use when auditing Algorand projects (TEAL\u002FPyTeal).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1786,1789,1790,1791],{"name":1787,"slug":1788,"type":16},"Audit","audit",{"name":1635,"slug":1636,"type":16},{"name":1638,"slug":1639,"type":16},{"name":1792,"slug":1793,"type":16},"Smart Contracts","smart-contracts","2026-07-18T05:47:43.989063",{"slug":1796,"name":1796,"fn":1797,"description":1798,"org":1799,"tags":1800,"stars":1751,"repoUrl":1752,"updatedAt":1805},"ask-questions-if-underspecified","clarify requirements before implementation","Clarify requirements before implementing. Use when serious doubts arise.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1801,1804],{"name":1802,"slug":1803,"type":16},"Engineering","engineering",{"name":1688,"slug":1689,"type":16},"2026-07-17T06:05:33.543262",{"slug":1807,"name":1807,"fn":1808,"description":1809,"org":1810,"tags":1811,"stars":1751,"repoUrl":1752,"updatedAt":1817},"atheris","fuzz Python code with Atheris","Atheris is a coverage-guided Python fuzzer based on libFuzzer. Use for fuzzing pure Python code and Python C extensions.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1812,1815,1816],{"name":1813,"slug":1814,"type":16},"Python","python",{"name":1638,"slug":1639,"type":16},{"name":1641,"slug":1642,"type":16},"2026-07-17T06:05:14.575191",{"slug":1819,"name":1819,"fn":1820,"description":1821,"org":1822,"tags":1823,"stars":1751,"repoUrl":1752,"updatedAt":1827},"audit-augmentation","augment code graphs with audit findings","Augments Trailmark code graphs with external audit findings from SARIF static analysis results, weAudit annotation files, and version-gated Trailmark 0.4.x binary-analysis graph exports. Maps findings to graph nodes by file and line overlap, creates severity-based subgraphs, and enables cross-referencing findings with pre-analysis data (blast radius, taint, etc.). Use when projecting SARIF results onto a code graph, overlaying weAudit annotations, importing binary graph findings, cross-referencing Semgrep, CodeQL, or binary-analysis findings with call graph data, or visualizing audit findings in the context of code structure.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1824,1825,1826],{"name":1787,"slug":1788,"type":16},{"name":1635,"slug":1636,"type":16},{"name":1638,"slug":1639,"type":16},"2026-08-01T05:44:54.920542",{"slug":1829,"name":1829,"fn":1830,"description":1831,"org":1832,"tags":1833,"stars":1751,"repoUrl":1752,"updatedAt":1840},"audit-context-building","build architectural context for code analysis","Enables ultra-granular, line-by-line code analysis to build deep architectural context before vulnerability or bug finding.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1834,1837,1838,1839],{"name":1835,"slug":1836,"type":16},"Architecture","architecture",{"name":1787,"slug":1788,"type":16},{"name":1635,"slug":1636,"type":16},{"name":1802,"slug":1803,"type":16},"2026-07-18T05:47:40.122449",{"slug":1842,"name":1842,"fn":1843,"description":1844,"org":1845,"tags":1846,"stars":1751,"repoUrl":1752,"updatedAt":1851},"audit-prep-assistant","prepare codebases for security audits","Prepares codebases for security review using Trail of Bits' checklist. Helps set review goals, runs static analysis tools, increases test coverage, removes dead code, ensures accessibility, and generates documentation (flowcharts, user stories, inline comments).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1847,1848,1849,1850],{"name":1787,"slug":1788,"type":16},{"name":1635,"slug":1636,"type":16},{"name":1802,"slug":1803,"type":16},{"name":1638,"slug":1639,"type":16},"2026-07-18T05:47:39.210985",{"slug":1853,"name":1853,"fn":1854,"description":1855,"org":1856,"tags":1857,"stars":1751,"repoUrl":1752,"updatedAt":1863},"burpsuite-project-parser","parse Burp Suite project files","Searches and explores Burp Suite project files (.burp) from the command line. Use when searching response headers or bodies with regex patterns, extracting security audit findings, dumping proxy history or site map data, or analyzing HTTP traffic captured in a Burp project.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1858,1859,1862],{"name":1787,"slug":1788,"type":16},{"name":1860,"slug":1861,"type":16},"CLI","cli",{"name":1638,"slug":1639,"type":16},"2026-07-17T06:05:33.198077",{"slug":1865,"name":1865,"fn":1866,"description":1867,"org":1868,"tags":1869,"stars":1751,"repoUrl":1752,"updatedAt":1874},"c-review","audit C and C++ code","Performs comprehensive C\u002FC++ security review for memory corruption, integer overflows, race conditions, and platform-specific vulnerabilities. Use when auditing native C\u002FC++ applications, reviewing daemons or services for memory safety, or hunting integer overflow \u002F use-after-free \u002F race conditions in userspace code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1870,1871,1872,1873],{"name":1787,"slug":1788,"type":16},{"name":1746,"slug":1747,"type":16},{"name":1635,"slug":1636,"type":16},{"name":1638,"slug":1639,"type":16},"2026-07-17T06:05:11.333374",{"slug":1876,"name":1876,"fn":1877,"description":1878,"org":1879,"tags":1880,"stars":1751,"repoUrl":1752,"updatedAt":1885},"cairo-vulnerability-scanner","scan Cairo and StarkNet contracts for vulnerabilities","Scans Cairo\u002FStarkNet smart contracts for 6 critical vulnerabilities including felt252 arithmetic overflow, L1-L2 messaging issues, address conversion problems, and signature replay. Use when auditing StarkNet projects.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1881,1882,1883,1884],{"name":1787,"slug":1788,"type":16},{"name":1635,"slug":1636,"type":16},{"name":1638,"slug":1639,"type":16},{"name":1792,"slug":1793,"type":16},"2026-07-18T05:47:42.84568",111]