a-stock-report@3.5.4
CAUTION· static onlyPublisher claims: "A股数据驱动型报告自动生成与推送系统,支持晨报 / 收盘小结 / 晚报 / 盘中预警 / IPO周报 / 财经周末版。内置投资者情绪打分(6维度,满分100)与AI后市展望。" 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-12 and scored it 55/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: Access to sensitive file paths; Access to sensitive file paths; Access to sensitive file paths. 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
- [v3.2.7 — .env 路径根除:8 脚本多路径回退](knowledge/changelog/v3.2.7.md) — 2026-06-10 下午Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.> **注意**:本 skill **只用 2 个 key**(WECOM + IWENCAI)。妙想 `MX_APIKEY` / Tushare `TUSHARE_TOKEN` 等由其他 skill(mx-data / mx-xuangu 等)使用,**不要加进 A-stock-report 的 `.env`**。Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# 2. 复制粘贴该命令到终端跑(已含 source .env + python3 路径 + 默认参数)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.2. 确认无进程在跑(`ps -ef | grep send_close`)后,手动 `rm /tmp/a_stock_close_summary.lock`Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.所有 6 个任务的完整命令(`source .env` + `python3 脚本路径` + 可选参数)都集中在 **`cron_jobs/cron_mirror.json` 的 `tasks.<name>.prompt` 字段**。Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.`.env` 文件格式示例:Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.os.environ.get("ENV_FILE", os.path.join(os.path.dirname(os.path.abspath(__file__)), "../.env")),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.os.environ.get("ENV_FILE_FALLBACK", "/workspace/.env"),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.os.environ.get("ENV_FILE", os.path.join(os.path.dirname(os.path.abspath(__file__)), "../.env")),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.os.environ.get("ENV_FILE", os.path.join(os.path.dirname(os.path.abspath(__file__)), "../.env")),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.os.environ.get("ENV_FILE_FALLBACK", "/workspace/.env"),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.… PE分位数、股市风险溢价(ERP)等结构化数据,输出 JSON + 晚报 Markdown。\n\n2. 读取采集结果文件 /tmp/evening_data.json,结合采集的晚报 Markdown,用 batch_web_search 搜索今日财经要闻(6-8条):\n - \"A股重要财经要闻 宏观政策 2026年6月12日(周五)\"\n - \"A股板块异动 热点题材 2026年6月12日(周五)\"\n \n ⚠️ 搜索失败 fallback:若 batch…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.os.environ.get("ENV_FILE", os.path.join(os.path.dirname(os.path.abspath(__file__)), "../.env")),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."loaded_by": "每个 send 脚本头部白名单加载 .env(仅 WECOM_WEBHOOK_KEY / IWENCAI_API_KEY / TUSHARE_TOKEN)",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…=false / formatted_content=[])或返回 {\"error\": \"调用结果不可用\"}(MCP server 端瞬时挂,agent.log 累计失败率 20%),\n **先重试 1 次**(cost 低, 23s 内自愈 — 0fbdf302145e 6/14 样本),\n **重试仍失败则立即改用** mcp_matrix_extract_content_from_websites 抓 https://finance.eastmoney.c…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.# ── 白名单 .env 加载 ──────────────────────────────────────────Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.r = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out."prompt": "source /workspace/.env && python3 /root/.hermes/skills/A-stock-report/scripts/send_close_summary.py",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# 多路径回退(v3.2.7 修复):../.env(skill 自带,可选)→ /workspace/.env(项目级,SKILL.md line70 规定)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…ATA}}\n ──── v3.4 数据驱动 - 自动注入段结束 ────\n\n4. 调用周末要闻推送脚本:\n source /workspace/.env && python3 /root/.hermes/skills/A-stock-report/scripts/send_weekend_news.py\n\n…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.{ "prompt": "0. 【强约束 — LLM 必读】渲染晨报前必须先 cat /tmp/morning_data.json 读真实数字:\n cat /tmp/morning_data.json\n 然后仅用其中真实数字填充模板占位符(XXXXX.XX = price、+X.XX% = pct、XX.XX = vix.value 等)。\n 严禁凭模型知识/印象/历史样本自编数字(包括\"约\"、\"差不多\"、\"估计\"等),缺失字段标\"❌ 数据缺失\"。\n …Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.os.environ.get("ENV_FILE", os.path.join(os.path.dirname(os.path.abspath(__file__)), "../.env")),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."prompt": "source /workspace/.env && python3 /root/.hermes/skills/A-stock-report/scripts/send_ipo_report.py",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.{ "_note": "本文件为历史参考(2026-04-04 快照)。当前真相请看:\n - cron_jobs/cron_mirror.json(独立脚本任务真相)\n - templates/*.json(LLM 驱动型任务 prompt 真相)\n - scripts/_send_lib.py(推送共用库,看 get_webhook_url() 实现)\n - ~/.hermes/cron/jobs.json(实际运行的 cron 任…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…错时用 `--fix-hint` 看修复建议。脚本会检查 A) templates ↔ dispatcher 任务集、B) cron_mirror ↔ jobs.json prompt 字字一致、C) SKILL.md 引用真实存在、D) dispatcher 任务不在 mirror 出现、E) SKILL.md 主体无硬编码 cron 表达式 / .env 路径 / source+send 一行命令(v3.1.6+ E 段)。 ### 1. 晨报(详见 templates…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."""E. SKILL.md 主体(任务清单段之外)禁止出现 cron 表达式和 source .env 命令Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.os.environ.get("ENV_FILE_FALLBACK", "/workspace/.env"),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.header("E. SKILL.md 主体禁止硬编码 cron 表达式和 .env 路径")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.os.environ.get("ENV_FILE_FALLBACK", "/workspace/.env"),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- v3.1.6 加 E 段(SKILL.md 主体禁 cron/.env/source+send 残留)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.os.environ.get("ENV_FILE", os.path.join(os.path.dirname(os.path.abspath(__file__)), "../.env")),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."/workspace/.env",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.os.environ.get("ENV_FILE_FALLBACK", "/workspace/.env"),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…注:模板里的 XXXXX.XX 是格式示例,不是可编造的占位符。\n\n1. 调用晨报数据采集脚本获取结构化数据:\n source /workspace/.env && python3 /root/.hermes/skills/A-stock-report/scripts/collect_morning_data.py\…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.os.environ.get("ENV_FILE_FALLBACK", "/workspace/.env"),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.os.environ.get("ENV_FILE_FALLBACK", "/workspace/.env"),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.os.path.join(os.path.dirname(os.path.abspath(__file__)), "../.env"),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env_pat = re.compile(r"source /workspace/\.env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."prompt": "source /workspace/.env && python3 /root/.hermes/skills/A-stock-report/scripts/send_intraday_alert.py 2>&1",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.os.environ.get("ENV_FILE", os.path.join(os.path.dirname(os.path.abspath(__file__)), "../.env")),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.r = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.send_inline_pat = re.compile(r"source /workspace/\.env.*python3.*send_\w+\.py")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.{ "prompt": "1. 调用晚报数据采集脚本,将结果写入约定路径:\n source /workspace/.env && python3 /root/.hermes/skills/A-stock-report/scripts/collect_evening_data.py\…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.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
25 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim cookfish1979: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- 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.
- Destructive file system command detected≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- 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.
- Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.