follow-news@3.18.0
CAUTION· static onlyPublisher claims: "Generate tech news digests with unified source model, internal ranking, and multi-format output. Seven-source data collection from RSS feeds, Twitter/X KOLs,..." Observed in sandbox: static analysis only — behavior not yet observed.
Coverage
Static only; nothing was run yet.The label rests on the code, the instruction files and the publisher. The honeypot run replaces this verdict when it completes.
Is [email protected] safe to install?
KillerSkills analysed it statically (a sandbox run is pending) on 2026-11-15 and scored it 49/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Auto-update or dynamic fetch configuration; Auto-update or dynamic fetch configuration; Auto-update or dynamic fetch configuration. Summary: static analysis only — behavior not yet observed.
Behavior trace
Queued for honeypot run · static analysis onlyThis version has not been detonated yet. The score above counts behavior as unknown (50/100), so it cannot read Verified until the honeypot run completes and replaces this verdict.
Static findings
result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.return subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.OPENCLI_AUTO_UPDATE_DEFAULT = TrueFix: Pin versions and sources; vendor anything fetched at install time.| Write | `/tmp/td-*.json` | Temporary pipeline intermediate outputs. |Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.Reads sources.json, filters Reddit sources, fetches posts via Reddit JSON API,Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.…description":"Previous digests for deduplication."}],"write":[{"path":"/tmp/td-*.json","description":"Temporary pipeline intermediate outputs."},{"path":"/tmp/td-email.html","description":"Temporary email HTML body."},{"…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.opencli_auto_update=(not args.no_update) and _opencli_auto_update_enabled(),Fix: Pin versions and sources; vendor anything fetched at install time.python3 enrich-articles.py --input merged.json --output enriched.json [--min-score 10] [--verbose]Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.if not _opencli_auto_update_enabled():Fix: Pin versions and sources; vendor anything fetched at install time.parser.add_argument("--output", "-o", type=Path, default=Path("/tmp/td-merged.json"), help="Final merged output")Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.return subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.…. ### Credential & File Access Scripts do **not** directly read `~/.config/`, `~/.ssh/`, or any credential files. API tokens used directly by the scripts are read fr…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.OPENCLI_AUTO_UPDATE - Enable OpenCLI automatic update check (default: 1/true)Fix: Pin versions and sources; vendor anything fetched at install time.return subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.def _opencli_auto_update_enabled() -> bool:Fix: Pin versions and sources; vendor anything fetched at install time.Reads sources.json, filters Twitter sources, fetches recent posts usingFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…ed from fetched data. ### Credential & File Access Scripts do **not** directly read `~/.config/`, `~/.ssh/`, or any credential files. API tokens used directly by the scripts are read fr…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.parser.add_argument("--debug", action="store_true", help="Keep intermediate fetch outputs (rss.json, twitter.json, etc.) alongside final output")Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.python3 merge-sources.py --rss rss.json --output merged.json --verboseFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.python3 scripts/enrich-articles.py --input merged.json --output enriched.json [--min-score 10] [--max-articles 15] [--verbose]Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out."Origin": f"http://192.168.1.12:{port}",Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.python3 source-health.py --rss rss.json --twitter twitter.json --github github.json [--output health.json]Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.if _OPENCLI_AUTO_UPDATE_PARAM_INDEX is None:Fix: Pin versions and sources; vendor anything fetched at install time.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out."fetch_with_backend_chain was called without expected opencli_auto_update positional arg"Fix: Pin versions and sources; vendor anything fetched at install time."Origin": f"http://192.168.1.12:{port}",Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.def test_auto_update_runs_before_min_version_gate(Fix: Pin versions and sources; vendor anything fetched at install time.def test_auto_update_forces_retry_when_throttled_and_version_too_old(Fix: Pin versions and sources; vendor anything fetched at install time.…h Korea’s tax authority mistakenly published the recovery mnemonic for a seized crypto wallet in a press release photo, and soon after about $4.8 million worth of tokens were…Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.backend = fetch_twitter.OpenCliBackend(auto_update=True, no_cache=True)Fix: Pin versions and sources; vendor anything fetched at install time.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
31 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim tangwz: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Auto-update or dynamic fetch configuration≈ +4 on the totalPin versions and sources; vendor anything fetched at install time.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Reads credential paths from the home directory≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
- File type combined with upload action≈ +2 on the totalRemove the call, or declare the host in frontmatter and explain in the README what is sent and why.