x-scout
X-Scout performs undeclared analytics phone-home on every execution and stores credentials in plaintext at ~/.x-scout/config.json, with shell execution via subprocess undocumented in SKILL.md.
Why this conclusion was reached
2/4 dimensions flagged2 undeclared or violating capabilities were inferred.
13 lower-risk artifacts were extracted and still need context.
The report includes 3 attack-chain steps and 2 severe findings.
2 dependency or supply-chain issues need attention.
Attack Chain
Entry · setup.sh:165
usage · x_scout.py:100
Persistence · x_scout.py:165
What drove the risk score up
POSTs to clawagents.dev/usage on every run with query hashes, install_id, mode, and result counts. Not declared in SKILL.md.
subprocess.run() used for yt-dlp, ffmpeg, pip install in x_scout.py. setup.sh uses bash and pip. Not declared in allowed-tools or SKILL.md.
Writes all API keys in plaintext to ~/.x-scout/config.json. No mention in SKILL.md of file write to HOME directory.
Most important evidence
Silent phone-home analytics on every execution
x_scout.py reports usage to https://clawagents.dev/reddit-rank/v1/xs/usage on every CLI invocation. Payload includes install_id, version, mode, query_hash (SHA256 of search terms), results count, and timestamp. This behavior is not declared in SKILL.md and sends search queries to an external server.
x_scout.py:100 Setup registration phone-home with API key presence
setup.sh POSTs install metadata to https://clawagents.dev/reddit-rank/v1/xs/register including which optional API keys are configured (has_openrouter, has_cerebras, has_deepgram booleans). This reveals what services the user has enabled.
setup.sh:165 Plaintext credential storage in sensitive path
All API keys (TWITTERAPI_KEY, OPENROUTER_API_KEY, CEREBRAS_API_KEYS, DEEPGRAM_API_KEY) are written in plaintext to ~/.x-scout/config.json. This is a sensitive path (~/.x-scout) that could be targeted by credential theft malware.
x_scout.py:165 Undeclared shell execution via subprocess
SKILL.md does not declare any shell execution capability. However, x_scout.py uses subprocess.run() to execute yt-dlp, ffmpeg, and pip install commands. setup.sh executes bash scripts and pip. This is a mismatch between documented and actual capabilities.
x_scout.py:280 Unpinned dependencies in requirements.txt
requirements.txt specifies 'requests>=2.28.0' and 'python-dotenv>=1.0.0' without upper bounds. This allows dependency confusion or malicious package updates to be installed silently.
requirements.txt:1 Analytics registration endpoint reveals skill branding
The analytics URL 'clawagents.dev/reddit-rank/v1/xs/...' contains 'reddit-rank' which suggests this code may have been adapted from a Reddit-focused tool. SKILL.md branding as 'X-Scout' for Twitter scraping appears different from the analytics endpoint naming.
setup.sh:15 Declared capability vs actual capability
x_scout.py:~100 writes ~/.x-scout/config.json x_scout.py:~100 POSTs analytics to clawagents.dev x_scout.py:subprocess.run for yt-dlp/ffmpeg os.environ.get for API keys Suspicious artifacts and egress
https://clawagents.dev/x-scout SKILL.md:15
https://x.com/user/status/123456 SKILL.md:59
https://clawagents.dev/reddit-rank/v1/xs/register setup.sh:8
https://twitterapi.io setup.sh:109
https://openrouter.ai$ setup.sh:125
https://cerebras.ai setup.sh:137
https://deepgram.com setup.sh:149
https://x.com/user/status/123\ setup.sh:223
https://api.twitterapi.io/twitter x_scout.py:67
https://openrouter.ai/api/v1 x_scout.py:71
https://api.cerebras.ai/v1/chat/completions x_scout.py:75
https://clawagents.dev/reddit-rank/v1/xs/usage x_scout.py:97
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| requests | >=2.28.0 | pip | No | Version not pinned, only lower bound specified |
| python-dotenv | >=1.0.0 | pip | No | Version not pinned, only lower bound specified |
File composition
x_scout.py setup.sh SKILL.md requirements.txt