Low Risk — Risk Score 18/100
Last scan:1 day ago Rescan
18 /100
scry
Research any topic across 26+ sources: Reddit, X, YouTube, GitHub, HN, Bluesky, ArXiv, Dev.to, Polymarket, and more
A legitimate multi-source research tool with no malicious behavior detected; the pre-scan IOCs were false positives (Chrome version strings misidentified as IP addresses), and credential handling is necessary for X/Twitter search functionality.
Skill Namescry
Duration65.2s
Enginepi
Safe to install
Approve for use. The hardcoded IPs flagged in the pre-scan are actually Chrome User-Agent version strings (129.0.0.0, 131.0.0.0), not malicious infrastructure. The skill performs documented public-API research with proper credential handling.

Findings 4 items

Severity Finding Location
Low
Twitter credentials (AUTH_TOKEN/CT0) not declared in Security section Doc Mismatch
SKILL.md's 'Security & Permissions' section lists gh CLI and yt-dlp but omits that AUTH_TOKEN and CT0 environment variables are read for X/Twitter cookie-based authentication. This is a minor documentation gap — the behavior is benign and necessary.
Runs `gh` CLI for GitHub search (uses your existing auth)
→ Add AUTH_TOKEN/CT0 to the 'What this skill does' section under Security & Permissions
SKILL.md:199
Low
Browser cookie reading not declared in SKILL.md Doc Mismatch
The vendored bird-search package can read Twitter cookies directly from browser storage (Safari/Chrome/Firefox) via @steipete/sweet-cookie, not just from environment variables. This is not declared in SKILL.md.
getCookies({ url: TWITTER_URL, origins: TWITTER_ORIGINS, names: [...TWITTER_COOKIE_NAMES], browsers: [options.source] })
→ Document that the skill may access browser-stored Twitter cookies if env vars are not set
vendor/bird-search/lib/cookies.js:47
Info
Unpinned Node.js dependency Supply Chain
The @steipete/sweet-cookie package used by bird-search has no version pinning in package.json. However, this is a bundled vendor dependency, not installed at runtime.
package is bundled in vendor/ directory
→ Verify the bundled package is from a trusted source before deploying
vendor/bird-search/node_modules/@steipete/sweet-cookie/package.json:1
Info
Subprocess inherits full environment Sensitive Access
x_twitter.py copies os.environ to the node subprocess. While AUTH_TOKEN/CT0 are explicitly set, any other sensitive env vars (AWS_*, DB_HOST, etc.) present in the parent environment would also be inherited.
env = os.environ.copy()
→ Consider passing only necessary credential variables instead of full environment copy
scripts/lib/sources/x_twitter.py:103
ResourceDeclaredInferredStatusEvidence
Filesystem WRITE WRITE ✓ Aligned SKILL.md:114 — cache stored in ~/.cache/scry/
Network READ READ ✓ Aligned SKILL.md:115 — searches 26+ public APIs and RSS feeds
Shell WRITE WRITE ✓ Aligned SKILL.md:116 — runs gh CLI and yt-dlp; x_twitter.py:110 — node subprocess
Environment NONE READ ✓ Aligned env.py:28-34 reads API keys; AUTH_TOKEN/CT0 not declared in SKILL.md
Browser NONE READ ✓ Aligned cookies.js:47-57 — reads Twitter cookies from Safari/Chrome/Firefox via @steipet…
2 High 59 findings
📡
High IP Address 硬编码 IP 地址
129.0.0.0
vendor/bird-search/lib/runtime-query-ids.js:37
📡
High IP Address 硬编码 IP 地址
131.0.0.0
vendor/bird-search/lib/twitter-client-base.js:24
🔗
Medium External URL 外部 URL
https://arxiv.org/abs/...
SKILL.md:125
🔗
Medium External URL 外部 URL
https://www.reddit.com
scripts/lib/http.py:124
🔗
Medium External URL 外部 URL
http://www.w3.org/2005/Atom
scripts/lib/sources/arxiv.py:11
🔗
Medium External URL 外部 URL
http://export.arxiv.org/api/query
scripts/lib/sources/arxiv.py:37
🔗
Medium External URL 外部 URL
https://api.semanticscholar.org/graph/v1/paper/arXiv:
scripts/lib/sources/arxiv.py:137
🔗
Medium External URL 外部 URL
https://api.bsky.app/xrpc/app.bsky.feed.searchPosts
scripts/lib/sources/bluesky.py:31
🔗
Medium External URL 外部 URL
https://bsky.app/profile/
scripts/lib/sources/bluesky.py:71
🔗
Medium External URL 外部 URL
https://api.coingecko.com/api/v3/search?query=
scripts/lib/sources/coingecko.py:31
🔗
Medium External URL 外部 URL
https://www.coingecko.com/en/coins/
scripts/lib/sources/coingecko.py:56
🔗
Medium External URL 外部 URL
https://api.coingecko.com/api/v3/coins/
scripts/lib/sources/coingecko.py:60
🔗
Medium External URL 外部 URL
https://dev.to/api/articles?per_page=
scripts/lib/sources/devto.py:79
🔗
Medium External URL 外部 URL
https://api.gdeltproject.org/api/v2/doc/doc
scripts/lib/sources/gdelt.py:32
🔗
Medium External URL 外部 URL
https://gitlab.com/api/v4/projects
scripts/lib/sources/gitlab.py:32
🔗
Medium External URL 外部 URL
https://news.google.com/rss/search
scripts/lib/sources/google_news.py:60
🔗
Medium External URL 外部 URL
https://hn.algolia.com/api/v1/search
scripts/lib/sources/hackernews.py:35
🔗
Medium External URL 外部 URL
https://news.ycombinator.com/item?id=
scripts/lib/sources/hackernews.py:54
🔗
Medium External URL 外部 URL
https://hn.algolia.com/api/v1/items/
scripts/lib/sources/hackernews.py:91
🔗
Medium External URL 外部 URL
https://huggingface.co/api/models
scripts/lib/sources/huggingface.py:34
🔗
Medium External URL 外部 URL
https://huggingface.co/
scripts/lib/sources/huggingface.py:52
🔗
Medium External URL 外部 URL
https://huggingface.co/api/spaces
scripts/lib/sources/huggingface.py:87
🔗
Medium External URL 外部 URL
https://huggingface.co/spaces/
scripts/lib/sources/huggingface.py:105
🔗
Medium External URL 外部 URL
https://api.scrapecreators.com/v1/instagram/reels/search
scripts/lib/sources/instagram.py:30
🔗
Medium External URL 外部 URL
https://lobste.rs/hottest.json
scripts/lib/sources/lobsters.py:34
🔗
Medium External URL 外部 URL
https://lobste.rs/newest.json
scripts/lib/sources/lobsters.py:34
🔗
Medium External URL 外部 URL
https://mastodon.social/api/v1/timelines/tag/
scripts/lib/sources/mastodon.py:42
🔗
Medium External URL 外部 URL
https://api.openalex.org/works
scripts/lib/sources/openalex.py:31
🔗
Medium External URL 外部 URL
https://doi.org/
scripts/lib/sources/openalex.py:55
🔗
Medium External URL 外部 URL
https://openalex.org/works/
scripts/lib/sources/openalex.py:58
🔗
Medium External URL 外部 URL
https://gamma-api.polymarket.com/public-search
scripts/lib/sources/polymarket.py:32
🔗
Medium External URL 外部 URL
https://polymarket.com/event/
scripts/lib/sources/polymarket.py:56
🔗
Medium External URL 外部 URL
https://api.producthunt.com/v2/api/graphql
scripts/lib/sources/product_hunt.py:48
🔗
Medium External URL 外部 URL
https://www.reddit.com/search/.json
scripts/lib/sources/reddit.py:31
🔗
Medium External URL 外部 URL
https://efts.sec.gov/LATEST/search-index
scripts/lib/sources/sec_edgar.py:31
🔗
Medium External URL 外部 URL
https://www.sec.gov/Archives/edgar/data/
scripts/lib/sources/sec_edgar.py:81
🔗
Medium External URL 外部 URL
https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&company=
scripts/lib/sources/sec_edgar.py:83
🔗
Medium External URL 外部 URL
https://api.semanticscholar.org/graph/v1/paper/search
scripts/lib/sources/semantic_scholar.py:31
🔗
Medium External URL 外部 URL
https://www.semanticscholar.org/paper/
scripts/lib/sources/semantic_scholar.py:56
🔗
Medium External URL 外部 URL
https://api.stackexchange.com/2.3/search/advanced
scripts/lib/sources/stackoverflow.py:31
🔗
Medium External URL 外部 URL
https://substack.com/api/v1/post/search
scripts/lib/sources/substack.py:31
🔗
Medium External URL 外部 URL
https://www.techmeme.com/feed.xml
scripts/lib/sources/techmeme.py:34
🔗
Medium External URL 外部 URL
https://api.scrapecreators.com/v1/tiktok/search/keyword
scripts/lib/sources/tiktok.py:30
🔗
Medium External URL 外部 URL
https://www.tiktok.com/video/
scripts/lib/sources/tiktok.py:58
🔗
Medium External URL 外部 URL
https://en.wikipedia.org/w/api.php
scripts/lib/sources/wikipedia.py:33
🔗
Medium External URL 外部 URL
https://en.wikipedia.org/wiki/
scripts/lib/sources/wikipedia.py:59
🔗
Medium External URL 外部 URL
https://api.x.ai/v1/responses
scripts/lib/sources/x_twitter.py:28
🔗
Medium External URL 外部 URL
https://x.com/user/status/...
scripts/lib/sources/x_twitter.py:51
🔗
Medium External URL 外部 URL
https://www.youtube.com/watch?v=
scripts/lib/sources/youtube.py:72
🔗
Medium External URL 外部 URL
https://twitter.com/
vendor/bird-search/lib/cookies.js:8
🔗
Medium External URL 外部 URL
https://x.com/?lang=en
vendor/bird-search/lib/runtime-query-ids.js:7
🔗
Medium External URL 外部 URL
https://x.com/explore
vendor/bird-search/lib/runtime-query-ids.js:8
🔗
Medium External URL 外部 URL
https://x.com/notifications
vendor/bird-search/lib/runtime-query-ids.js:9
🔗
Medium External URL 外部 URL
https://x.com/settings/profile
vendor/bird-search/lib/runtime-query-ids.js:10
🔗
Medium External URL 外部 URL
https://x.com/i/api/graphql
vendor/bird-search/lib/twitter-client-constants.js:3
🔗
Medium External URL 外部 URL
https://upload.twitter.com/i/media/upload.json
vendor/bird-search/lib/twitter-client-constants.js:5
🔗
Medium External URL 外部 URL
https://x.com/i/api/1.1/media/metadata/create.json
vendor/bird-search/lib/twitter-client-constants.js:6
🔗
Medium External URL 外部 URL
https://x.com/i/api/1.1/statuses/update.json
vendor/bird-search/lib/twitter-client-constants.js:7
🔗
Medium External URL 外部 URL
https://x.com/i/status/$
vendor/bird-search/lib/twitter-client-utils.js:213

File Tree

61 files · 272.7 KB · 8043 lines
Python 45f · 5564L JavaScript 11f · 1945L Markdown 2f · 484L JSON 3f · 50L
├─ 📁 scripts
│ ├─ 📁 lib
│ │ ├─ 📁 sources
│ │ │ ├─ 🐍 __init__.py Python 1L · 22 B
│ │ │ ├─ 🐍 arxiv.py Python 150L · 4.9 KB
│ │ │ ├─ 🐍 bluesky.py Python 115L · 3.4 KB
│ │ │ ├─ 🐍 coingecko.py Python 141L · 4.7 KB
│ │ │ ├─ 🐍 devto.py Python 132L · 3.7 KB
│ │ │ ├─ 🐍 gdelt.py Python 89L · 2.6 KB
│ │ │ ├─ 🐍 github.py Python 238L · 8.9 KB
│ │ │ ├─ 🐍 gitlab.py Python 88L · 2.6 KB
│ │ │ ├─ 🐍 google_news.py Python 121L · 3.3 KB
│ │ │ ├─ 🐍 hackernews.py Python 117L · 3.6 KB
│ │ │ ├─ 🐍 huggingface.py Python 142L · 4.7 KB
│ │ │ ├─ 🐍 instagram.py Python 90L · 3.1 KB
│ │ │ ├─ 🐍 lobsters.py Python 91L · 3.1 KB
│ │ │ ├─ 🐍 mastodon.py Python 96L · 3.1 KB
│ │ │ ├─ 🐍 openalex.py Python 128L · 4.2 KB
│ │ │ ├─ 🐍 polymarket.py Python 133L · 4.3 KB
│ │ │ ├─ 🐍 product_hunt.py Python 109L · 2.8 KB
│ │ │ ├─ 🐍 reddit.py Python 90L · 2.7 KB
│ │ │ ├─ 🐍 sec_edgar.py Python 107L · 3.5 KB
│ │ │ ├─ 🐍 semantic_scholar.py Python 88L · 2.7 KB
│ │ │ ├─ 🐍 stackoverflow.py Python 100L · 3.0 KB
│ │ │ ├─ 🐍 substack.py Python 91L · 2.8 KB
│ │ │ ├─ 🐍 techmeme.py Python 98L · 3.0 KB
│ │ │ ├─ 🐍 threads.py Python 35L · 1006 B
│ │ │ ├─ 🐍 tiktok.py Python 94L · 3.1 KB
│ │ │ ├─ 🐍 wikipedia.py Python 83L · 2.3 KB
│ │ │ ├─ 🐍 x_twitter.py Python 364L · 12.7 KB
│ │ │ └─ 🐍 youtube.py Python 241L · 7.5 KB
│ │ ├─ 🐍 __init__.py Python 1L · 21 B
│ │ ├─ 🐍 cache.py Python 48L · 1.4 KB
│ │ ├─ 🐍 conflict.py Python 95L · 3.2 KB
│ │ ├─ 🐍 dates.py Python 82L · 2.2 KB
│ │ ├─ 🐍 dedupe.py Python 115L · 3.8 KB
│ │ ├─ 🐍 domain.py Python 167L · 6.7 KB
│ │ ├─ 🐍 env.py Python 87L · 2.9 KB
│ │ ├─ 🐍 http.py Python 132L · 4.8 KB
│ │ ├─ 🐍 normalize.py Python 79L · 2.5 KB
│ │ ├─ 🐍 query.py Python 116L · 3.7 KB
│ │ ├─ 🐍 render.py Python 278L · 9.9 KB
│ │ ├─ 🐍 schema.py Python 158L · 5.1 KB
│ │ ├─ 🐍 score.py Python 154L · 4.9 KB
│ │ ├─ 🐍 source_base.py Python 68L · 1.8 KB
│ │ └─ 🐍 source_registry.py Python 125L · 4.4 KB
│ ├─ 🐍 benchmark.py Python 206L · 7.0 KB
│ └─ 🐍 scry.py Python 281L · 8.9 KB
├─ 📁 vendor
│ └─ 📁 bird-search
│ ├─ 📁 lib
│ │ ├─ 📜 cookies.js JavaScript 172L · 6.1 KB
│ │ ├─ 📋 features.json JSON 17L · 523 B
│ │ ├─ 📜 paginate-cursor.js JavaScript 36L · 1.2 KB
│ │ ├─ 📋 query-ids.json JSON 20L · 815 B
│ │ ├─ 📜 runtime-features.js JavaScript 150L · 4.9 KB
│ │ ├─ 📜 runtime-query-ids.js JavaScript 263L · 9.2 KB
│ │ ├─ 📜 twitter-client-base.js JavaScript 128L · 4.7 KB
│ │ ├─ 📜 twitter-client-constants.js JavaScript 49L · 2.5 KB
│ │ ├─ 📜 twitter-client-features.js JavaScript 346L · 18.0 KB
│ │ ├─ 📜 twitter-client-search.js JavaScript 156L · 7.1 KB
│ │ ├─ 📜 twitter-client-types.js JavaScript 1L · 59 B
│ │ └─ 📜 twitter-client-utils.js JavaScript 510L · 18.7 KB
│ ├─ 📜 bird-search.mjs JavaScript 134L · 3.7 KB
│ └─ 📋 package.json JSON 13L · 331 B
├─ 📝 README.md Markdown 266L · 7.1 KB
└─ 📝 SKILL.md Markdown 218L · 7.0 KB

Dependencies 1 items

PackageVersionSourceKnown VulnsNotes
@steipete/sweet-cookie unpinned (bundled in vendor/) npm (vendored) No Bundled in vendor/node_modules/, not installed at runtime

Security Positives

✓ No obfuscation, base64-encoded strings, or anti-analysis techniques found
✓ No data exfiltration — all outbound calls are to documented public APIs
✓ No credential harvesting — API keys are used only for their respective services
✓ No reverse shell, C2, or persistence mechanisms detected
✓ Cache is local-only (~/.cache/scry/) with 24h TTL
✓ SKILL.md provides comprehensive and accurate security documentation
✓ No access to sensitive paths like ~/.ssh, ~/.aws, or .env files
✓ Node.js subprocess is a vendored, auditable package, not a binary blob