Skill Trust Decision

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.

Install decision first Source: GitHub Scanned: Jun 19, 2026
Files 26
Artifacts 64
Violations 3
Findings 6
Most direct threat evidence

Why this conclusion was reached

2/4 dimensions flagged
Block
Declared vs actual capability

3 undeclared or violating capabilities were inferred.

Block
Hidden execution and egress

3 high-risk artifacts or egress signals were extracted.

Pass
Attack chain and severe findings

There is no explicit malicious chain in the report.

Pass
Dependencies and supply chain hygiene

Dependencies are present but no obvious high-risk issue stands out.

What drove the risk score up

Undeclared shell execution +15

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

Undeclared credential access +5

x-profile-analyzer.py reads OpenClaw's ~/.openclaw/agents/main/agent/auth-profiles.json for API keys — not declared in SKILL.md

Undeclared filesystem writes +5

Writes to ~/.tweet-growth/, ~/.x-tweet-fetcher/, ~/.cache/ without declaration in SKILL.md

Undeclared optional dependencies +5

SKILL.md claims 'zero dependencies' for basic mode but sogou_wechat.py imports 'requests' and common.py imports 'duckduckgo_search'

Hardcoded root paths +5

Default router paths hardcoded to /root/router-agent/* assume root access

Most important evidence

Medium Doc Mismatch

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
Add 'shell:WRITE' to capability declarations in SKILL.md. Document SSH/router proxy features explicitly.
Medium Credential Theft

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
Declare credential access in SKILL.md. Document which files are read and why. Consider prompting for API keys instead of silently reading from other agent files.
Medium Doc Mismatch

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
Update SKILL.md to list actual dependencies per feature: requests for sogou_wechat, duckduckgo_search for search_web(), playwright for browser backend.
Low Priv Escalation

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
Declare filesystem:WRITE and list all written paths in SKILL.md.
Low Priv Escalation

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
Use non-root default paths or document the root requirement explicitly.
Low Doc Mismatch

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
Replace curl|sh pattern with direct package manager installation (e.g., `apt install nim` or download official binary).

Declared capability vs actual capability

Network Pass
Declared READ
Inferred READ
SKILL.md: FxTwitter API, Nitter, Camofox, Sogou
Shell Block
Declared NONE
Inferred WRITE
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)
Filesystem Block
Declared NONE
Inferred WRITE
growth_config.py:11-13 (~/.tweet-growth), tweet_growth_cli.py:27, fetch_tweet.py:1625 (~/.x-tweet-fetcher), version_check.py:50 (~/.cache)
Environment Block
Declared NONE
Inferred READ
Multiple scripts read MINIMAX_API_KEY, OPENAI_API_KEY, NITTER_URL, GITHUB_TOKEN, SOGOU_SSH_HOST, ROUTER_CMD_QUEUE
Skill Invoke Pass
Declared NONE
Inferred NONE
No skill_invoke calls found
Clipboard Pass
Declared NONE
Inferred NONE
Not used
Browser Pass
Declared NONE
Inferred READ
playwright_client.py, camofox_client.py — browser automation used but declared as Camofox setup
Database Pass
Declared NONE
Inferred NONE
Not used

Suspicious artifacts and egress

Critical Dangerous Command
curl https://nim-lang.org/choosenim/init.sh -sSf | sh

README.md:185

High IP Address
120.0.0.0

scripts/fetch_china.py:903

High IP Address
124.0.0.0

scripts/playwright_client.py:95

Medium External URL
https://img.shields.io/badge/License-MIT-yellow.svg

README.md:7

Medium External URL
https://img.shields.io/badge/OpenClaw-Skill-blue.svg

README.md:8

Medium External URL
https://img.shields.io/badge/Python-3.7+-green.svg

README.md:9

Medium External URL
https://www.python.org

README.md:9

Medium External URL
https://img.shields.io/github/stars/ythx-101/x-tweet-fetcher?style=social

README.md:10

Medium External URL
https://x.com/elonmusk/status/123456789

README.md:100

Medium External URL
http://127.0.0.1:8788

README.md:107

Medium External URL
https://x.com/user/article/123

README.md:132

Medium External URL
https://mp.weixin.qq.com/s/...

README.md:135

Dependencies and supply chain

PackageVersionSourceKnown vulnNotes
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

26 files · 11781 lines
Python 20 files · 11027 linesMarkdown 3 files · 729 linesOther 2 files · 22 linesIgnore 1 files · 3 lines
Files of concern · 12
scripts/fetch_tweet.py Python · 2247 lines
https://api.fxtwitter.com/ · https://pbs.twimg.com/media/ · https://x.com/i/lists/123456789 · https://twitter.com/i/lists/123456789 · https://x.com/i/article/2011779830157557760 · https://x.com/i/article/ · https://x.com/i/article/ID
scripts/fetch_china.py Python · 1748 lines
120.0.0.0 · https://weibo.com/UID/PostID · https://edith.xiaohongshu.com/api/sns/web/v1/feed · https://edith.xiaohongshu.com/api/sns/web/v1/search/notes · https://www.xiaohongshu.com/explore/67b8e3f5000000000b00d8e2 · https://www.xiaohongshu.com/discovery/item/67b8e3f5000000000b00d8e2 · https://www.xiaohongshu.com/explore/
scripts/to_obsidian.py Python · 960 lines
https://x.com/yanhua1010/status/xxx · https://pbs\.twimg\.com/media/[^ · https://pbs\.twimg\.com/media/([A-Za-z0-9_\-
scripts/paper_recommend.py Python · 738 lines
https://doi.org/10.48550/arXiv. · https://openalex.org/ · https://doi.org/
scripts/nitter_client.py Python · 692 lines
https://pbs.twimg.com/
scripts/playwright_client.py Python · 671 lines
124.0.0.0
scripts/paper_to_obsidian.py Python · 681 lines
https://ar5iv.labs.arxiv.org/html/2401.02385 · https://ar5iv.labs.arxiv.org · http://export.arxiv.org/api/query?id_list=
scripts/tweet_growth.py Python · 590 lines
https://api.fxtwitter.com/i/status/
scripts/arxiv_author_finder.py Python · 520 lines
https://arxiv.org/abs/2603.10165 · https://arxiv.org/abs/ · https://arxiv.org/abs/1706.03762
scripts/x-profile-analyzer.py Python · 509 lines
Reads OpenClaw agent auth-profiles.json for API keys · https://api.minimax.io/anthropic/v1/messages · https://www.minimaxi.com
scripts/common.py Python · 414 lines
http://www.w3.org/2005/Atom · http://arxiv.org/schemas/atom · https://(?:twitter\.com|x\.com · http://schema.org/Organization · https://search.brave.com/search?q=
scripts/sogou_wechat.py Python · 329 lines
SKILL.md claims 'zero dependencies' but requests library is imported · Hardcoded root-level default paths · https://weixin.sogou.com/weixin?type=2&query= · https://weixin.sogou.com

Security positives

No base64-encoded payloads or obfuscated code found
No credential exfiltration or data发送到 external servers beyond documented API calls
No reverse shell, C2 communication, or persistent backdoor mechanisms
No direct IP network requests to suspicious destinations
SSH/SCP commands use shlex.quote() for proper shell escaping (sogou_wechat.py)
Router path validation checks for path traversal ('..') before writing
API keys are used for their intended purpose (AI analysis, GitHub API) not exfiltrated
No supply_chain typosquatting or malicious dependency patterns detected