x-tweet-fetcher
Skill fetches tweets and Chinese platform content as documented, but SKILL.md omits several significant capabilities: shell execution via subprocess (SSH/SCP, router command-queue), undeclared filesystem writes to home directory, and credential reading from OpenClaw's auth-profiles.json.
Why this conclusion was reached
2/4 dimensions flagged3 undeclared or violating capabilities were inferred.
3 high-risk artifacts or egress signals were extracted.
There is no explicit malicious chain in the report.
Dependencies are present but no obvious high-risk issue stands out.
What drove the risk score up
SKILL.md does not declare subprocess usage in sogou_wechat.py (SSH/SCP), paper_recommend.py, to_obsidian.py, or fetch_china.py router queue pattern
x-profile-analyzer.py reads OpenClaw's ~/.openclaw/agents/main/agent/auth-profiles.json for API keys — not declared in SKILL.md
Writes to ~/.tweet-growth/, ~/.x-tweet-fetcher/, ~/.cache/ without declaration in SKILL.md
SKILL.md claims 'zero dependencies' for basic mode but sogou_wechat.py imports 'requests' and common.py imports 'duckduckgo_search'
Default router paths hardcoded to /root/router-agent/* assume root access
Most important evidence
Shell execution not declared in SKILL.md
SKILL.md describes a tweet-fetcher but never mentions subprocess/shell execution. Four scripts use subprocess: sogou_wechat.py (SSH/SCP), paper_recommend.py (python3), to_obsidian.py (python3), and fetch_china.py (router cmd-queue). This is the primary doc-to-code mismatch.
sogou_wechat.py:167 Reads OpenClaw agent auth-profiles.json for API keys
x-profile-analyzer.py silently reads ~/.openclaw/agents/main/agent/auth-profiles.json to load MiniMax API keys. This accesses another AI agent's stored credentials without user awareness or declaration in SKILL.md.
scripts/x-profile-analyzer.py:40 SKILL.md claims 'zero dependencies' but requests library is imported
SKILL.md states 'Basic: Python 3.7+, no external packages' but sogou_wechat.py uses `import requests` and common.py conditionally uses duckduckgo_search. These are not pip-installable stdlib modules.
scripts/sogou_wechat.py:28 Undeclared filesystem writes to home directory
Multiple scripts write cache and data files to ~/.tweet-growth/, ~/.x-tweet-fetcher/, and ~/.cache/ without declaring filesystem:WRITE in SKILL.md.
scripts/growth_config.py:11 Hardcoded root-level default paths
Default router command-queue paths are hardcoded to /root/router-agent/* which assumes root privileges and a specific deployment setup. While overrideable via env vars, the defaults leak an expectation of root access.
scripts/sogou_wechat.py:38 curl|sh pattern in README.md for Nitter installation
README.md line 185 instructs users to run `curl https://nim-lang.org/choosenim/init.sh -sSf | sh` for Nim installation as part of the Nitter self-hosting guide. While in documentation only (not executed by skill code), this is a well-known risky pattern that should be replaced with safer installation instructions.
README.md:185 Declared capability vs actual capability
SKILL.md: FxTwitter API, Nitter, Camofox, Sogou sogou_wechat.py:167-171 (ssh/scp subprocess), paper_recommend.py:199 (python3 subprocess), to_obsidian.py:837 (subprocess.run), fetch_china.py:1285-1306 (router cmd-queue) growth_config.py:11-13 (~/.tweet-growth), tweet_growth_cli.py:27, fetch_tweet.py:1625 (~/.x-tweet-fetcher), version_check.py:50 (~/.cache) Multiple scripts read MINIMAX_API_KEY, OPENAI_API_KEY, NITTER_URL, GITHUB_TOKEN, SOGOU_SSH_HOST, ROUTER_CMD_QUEUE No skill_invoke calls found Not used playwright_client.py, camofox_client.py — browser automation used but declared as Camofox setup Not used Suspicious artifacts and egress
curl https://nim-lang.org/choosenim/init.sh -sSf | sh README.md:185
120.0.0.0 scripts/fetch_china.py:903
124.0.0.0 scripts/playwright_client.py:95
https://img.shields.io/badge/License-MIT-yellow.svg README.md:7
https://img.shields.io/badge/OpenClaw-Skill-blue.svg README.md:8
https://img.shields.io/badge/Python-3.7+-green.svg README.md:9
https://www.python.org README.md:9
https://img.shields.io/github/stars/ythx-101/x-tweet-fetcher?style=social README.md:10
https://x.com/elonmusk/status/123456789 README.md:100
http://127.0.0.1:8788 README.md:107
https://x.com/user/article/123 README.md:132
https://mp.weixin.qq.com/s/... README.md:135
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| requests | unpinned | pip | No | Imported by sogou_wechat.py but not declared in SKILL.md |
| duckduckgo-search | unpinned | pip | No | Conditionally imported by common.py search_web() |
| playwright | unpinned | pip | No | Used by playwright_client.py for browser backend |
File composition
scripts/fetch_tweet.py scripts/fetch_china.py scripts/to_obsidian.py scripts/paper_recommend.py scripts/nitter_client.py scripts/playwright_client.py scripts/paper_to_obsidian.py scripts/tweet_growth.py scripts/arxiv_author_finder.py scripts/x-profile-analyzer.py scripts/common.py scripts/sogou_wechat.py