A-stock-report
A股数据驱动型报告自动生成与推送系统,支持晨报 / 收盘小结 / 晚报 / 盘中预警 / IPO周报 / 财经周末版。内置投资者情绪打分(6维度,满分100)与AI后市展望。
Rank
62
Safety
84
Downloads
4.0k
Updated
Oct 9, 2026
Version
3.5.4
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 4K downloads reported by the source. Last updated 10/9/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 9, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 9, 2026
- Adoption signal
- 4K downloadsadoption · observed Oct 9, 2026
- Latest release
- 3.5.4release · observed Jun 20, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s178t9xr86vm0kwcccj0rhw50h8472yc:a-stock-report- Install using `clawhub skill install s178t9xr86vm0kwcccj0rhw50h8472yc:a-stock-report` in an isolated environment before connecting it to live workloads.
- No published capability contract is available yet, so validate auth and request/response behavior manually.
- Review the upstream CLAWHUB listing at https://clawhub.ai/cookfish1979/a-stock-report before using production credentials.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-cookfish1979-a-stock-report/snapshot"
Documentation
CLAWHUB
160,000 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: A-stock-report
description: "A股数据驱动型报告自动生成与推送系统,支持晨报 / 收盘小结 / 晚报 / 盘中预警 / IPO周报 / 财经周末版。内置投资者情绪打分(6维度,满分100)与AI后市展望。"
version: 3.5.4
---
# A股报告系统
>A股数据驱动型报告自动生成与推送系统,支持晨报 / 收盘小结 / 晚报 / 盘中预警 / IPO周报 / 财经周末版
---
## 目录结构(v3.2.3+1 起明示,v3.5.0 简化)
`clawhub publish` 按 `.clawhubignore` 排除 `knowledge/` + `*.bak`(v3.4.4 立),其他整目录上传。装好后 `~/.hermes/skills/A-stock-report/` 结构:
```
A-stock-report/
├── SKILL.md ← 本文件(含完整执行流程 + 14 段护栏 + changelog 索引)
├── _meta.json
├── .clawhubignore ← v3.4.4 立:排除 knowledge/ + *.bak
│
├── 🐍 scripts/ ← 12 个 Python 脚本 + 3 个 JSON prompt 模板
│ ├── _lock.py / _send_lib.py ← 共用库
│ ├── check_consistency.py ← 14 段一致性护栏(A~H 段)
│ ├── skill_dispatcher.py ← LLM 驱动型任务的 5d 数据抽取 + prompt 注入
│ ├── collect_{morning,evening}_data.py / send_{morning,close,evening,intraday,weekend,ipo}.py
│ ├── templates/{morning,evening,weekend}.json
│ ├── cron_jobs/{cron_mirror.json, README.md}
│ └── references/{config.json, fallback-chain-validation.md, weekend-4kb-budget.md}
│
└── 📚 knowledge/ ← changelog + 决策主题(**按需 skill_view 加载,不进默认 context**)
├── changelog/ ← 按版本号组织
│ ├── README.md ← 35 条 changelog 索引
│ └── vX.Y.Z.md ← 单版完整细节(v3.5.0 立,19 条新加)
└── decisions/ ← 跨版本决策中心(按主题)
├── README.md
├── architecture.md ← 架构演进
├── data-pitfalls.md ← 数据源踩坑集
├── lessons-learned.md ← 核心教训
├── guardrails.md ← 护栏规则
└── dispatcher-patterns.md
```
**knowledge/ 为什么保留在 publish 包但不进默认 context** (v3.4.4 改): `.clawhubignore` 排除后, **装上后无 knowledge/** — 用户需主动 `skill_view` 加载;本机开发保留完整 knowledge/ 不影响发布包大小。
---
## 版本历史(Changelog)
> **精简规则(v3.5.0 立)**:每条 ≤ 1 行索引,详细实战/根因/修法折到 `knowledge/changelog/vX.Y.Z.md`。完整 35 条索引见 [`knowledge/changelog/README.md`](knowledge/changelog/README.md)。
>
> **未发版段识别**:标题含 `(未发版)` 的是当前 v3.5.0 待 bump 的小改集合。
### v3.3.0 ~ v3.4.4(19 条,SKILL.md 主体)— 2026-06-11 晚 ~ 2026-06-16
- [v3.5.1 — send_evening_report.py 加 5 项内容质量硬校验](knowledge/changelog/v3.5.1.md) — 2026-06-18 晚(未发版)
- [v3.4.4 — 异常周(周二 cron)周末要闻端到端验证](knowledge/changelog/v3.4.4.md) — 2026-06-16(未发版)
- [v3.3.5+5 — fallback 链选 URL 原则:主题聚合页 > 单篇头条](knowledge/changelog/v3.3.5+5.md) — 2026-06-15 20:00 晚报(未发版)
- [v3.3.5+4 — web_search MCP 重试加固:覆盖 {"error": ...} 分支](knowledge/changelog/v3.3.5+4.md) — 2026-06-15 16:35(未发版)
- [v3.3.5+3 — 周末要闻 4 KB 截断修复 + 防幻觉 + 表格化 + H 段护栏](knowledge/changelog/v3.3.5+3.md) — 2026-06-15 下午(未发版)
- [v3.3.5+2 — 3 层 fallback 链 + 要闻段反例前置](knowledge/changelog/v3.3.5+2.md) — 2026-06-15 晨报(未发版)
- [v3.3.5+1 — 3 templates 加 batch_web_search 失败 fallback 机制](knowledge/changelog/v3.3.5+1.md) — 2026-06-13 晚(未发版)
- [v3.3.5 — 晨报渲染细节对齐 6/12 周五样本 + 删 v3.3.4 过头加固](knowledge/changelog/v3.3.5.md) — 2026-06-13 下午
- [v3.3.4 — 晨报过头加固(已废)](knowledge/changelog/v3.3.4.md) — 2026-06-13 凌晨
- [v3.3.3 — 尝试加固晨报,未生效,无代码变更](knowledge/changelog/v3.3.3.md) — 2026-06-12 晚cron_jobs/README.md
# cron_jobs/ — 生产 cron 任务的人类可读镜像
## ⚠️ 重要:本目录文件**不被任何代码读取**
`cron_jobs/cron_mirror.json` 是 `~/.hermes/cron/jobs.json` 里**独立脚本型 cron 任务的人类可读副本**。
- **不被 `skill_dispatcher.py` 读取**(dispatcher 只读 `templates/*.json`)
- **不被 OpenClaw cron 直接读取**(OpenClaw 只读 `~/.hermes/cron/jobs.json`)
- 作用是**给 AI / 用户审计**:"A 股 3 个独立脚本任务在生产 cron 里到底是怎么配的"
## 文件清单
| 文件 | 作用 |
|------|------|
| `cron_mirror.json` | **唯一镜像文件**,内含 3 任务(close_summary/intraday/ipo_report)|
| `README.md` | 本文件 |
v3.1.4 起 3 镜像合为单文件,强制一致,避免之前"改一处忘改别处"的纪律性 bug。
## 4 端真相分布
| 维度 | 在哪里 | 角色 |
|------|--------|------|
| **LLM 调度模板** | `templates/{morning,evening,weekend}.json` | 被 `skill_dispatcher.py` 读取 |
| **生产 cron 真实配置** | `~/.hermes/cron/jobs.json` | 被 OpenClaw 读取并定时触发 |
| **本目录归档镜像** | `cron_jobs/cron_mirror.json` | **人类审计用**,内含 3 任务镜像,prompt 字段与 jobs.json 一字不差 |
| **SKILL.md 文档** | `SKILL.md` 任务清单段 | 文档层说明 |
## 单文件结构
```json
{
"_meta": { "purpose": "...", "mirror_of": "...", "version": "...", "history": "...", "see_also": "..." },
"tasks": {
"close_summary": { "name": "A股收盘小结", "schedule": "...", "prompt": "...", ... },
"intraday": { "name": "A股盘中预警", "schedule": "...", "prompt": "...", ... },
"ipo_report": { "name": "A股IPO周报", "schedule": "...", "prompt": "...", ... }
}
}
```
任务键名(close_summary/intraday/ipo_report)= 文件名时代的标识,跟历史档案一致。
## 维护纪律
**修改 `jobs.json` 里的 prompt 时,必须同步修改 `cron_jobs/cron_mirror.json` 中对应任务**,保证镜像与生产一致。
**🛡️ v3.1.5+ 推荐用护栏脚本一次性检查 4 端一致性**(templates ↔ cron_mirror ↔ jobs.json ↔ SKILL.md):
```bash
python3 /root/.hermes/skills/A-stock-report/scripts/check_consistency.py
# exit 0=全过,1=有错误
# 加 --verbose 看每条 ✅,加 --fix-hint 看修复建议
```
**legacy 一行命令**(仅检查镜像与 jobs.json 的 prompt 一致性,v3.1.4 时代的命令,v3.1.5 起推荐上面那个):
```bash
python3 -c "
import json
jobs = json.load(open('/root/.hermes/cron/jobs.json'))
mirror = json.load(open('/root/.hermes/skills/A-stock-report/cron_jobs/cron_mirror.json'))
m = {'A股收盘小结':'close_summary','A股盘中预警':'intraday','A股IPO周报':'ipo_report'}
for j in jobs['jobs']:
if j['name'] in m:
mirror_prompt = mirror['tasks'][m[j['name']]]['prompt']
print(j['name'], j['prompt'] == mirror_prompt)
"
```
## 历史
- **v3.1.4 (2026-06-09)**: 合井 3 文件为 `cron_mirror.json`(67 行 / 2.6KB),README 同步更新
- **v3.1.3 (2026-06-09)**: 新建 `cron_jobs/intraday.json` 镜像(v3.0~v3.1.2 期间已存在 close_summary/ipo_report 镜像)
- **备份位置**: `/workspace/archive/cron_jobs_3split_20260609_1952.bak/`(v3.1.4 前 3 文件的完整备份)_meta.json
{
"ownerId": "kn7b60cvvedv8jkxs5gy3m9c0d837e9f",
"slug": "a-stock-report",
"version": "3.5.4",
"publishedAt": 1781934050226
}references/config.json
{
"_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 任务)",
"_deprecated": "v3.2.2 起,本文件不再维护。当前所有任务真相在上述 4 处。如需改 cron / prompt / 推送方式,改那 4 处,不要改本文件。",
"webhook_当前实现": {
"env_var": "WECOM_WEBHOOK_KEY",
"code": "scripts/_send_lib.py → get_webhook_url()",
"loaded_by": "每个 send 脚本头部白名单加载 .env(仅 WECOM_WEBHOOK_KEY / IWENCAI_API_KEY / TUSHARE_TOKEN)",
"历史引用": "/workspace/keys/keys_loader.py 已在 v3.1.0+ 弃用,所有 send 脚本改走 env 路径"
},
"推送架构(v3.1.0+)": {
"统一库": "scripts/_send_lib.py(原 _notify.py,v3.2.0 统一名)",
"API": ["get_webhook_url() — 读 WECOM_WEBHOOK_KEY env", "wx(text) — curl 风格推企业微信 + 自动重试", "notify_failure(prefix, msg) — 失败告警(v3.1.0 补丁 2:内部 try/except,不阻断主流程)"],
"退出码": {"0": "成功", "1": "数据/网络错误", "2": "推送失败"}
},
"锁机制(v2.0.3+)": {
"实现": "scripts/_lock.py(PID + TTL + stale 检测)",
"行为": ["无锁 → 创建并占用", "有锁 + 持有者存活 + 未超 TTL → 报错退出(避免并发)", "有锁 + 持有者死亡 → 自动清理并占用", "有锁 + 锁超时(>ttl)→ 视为 stale,清理并占用"],
"TTL": "默认 1 小时(ttl=3600)",
"自愈真相": "自愈逻辑只在 lock() 被调用时触发(被动),不是'30 分钟内自动清理'。脚本崩溃后如果没有下次 lock() 调用,锁会一直留着(5.9 天残留锁案例:6/3 晨报崩溃后到 6/9 没有任何 cron 触发 lock)。v3.2.2 文档修正,行为不变。",
"教训": "不要相信'30 分钟自愈'。设计意图是'TTL=1h 内不允许重复占用',不是'自动清理'。手动 rm 仍是最快清理方式。"
},
"当前 cron 任务(v3.1.4+,权威源:cron_jobs/cron_mirror.json)": {
"独立脚本型(3 个)": ["close_summary: 30 7 * * 1-5 (北京时间 15:30)", "intraday: */5 9,10,11,13,14 * * 1-5 (盘中每 5 分钟)", "ipo_report: 0 2 * * 6 (周六 10:00)"],
"LLM 驱动型(3 个)": ["morning (晨报): dispatcher + templates/morning.json", "evening (晚报): dispatcher + templates/evening.json", "weekend (财经周末版): dispatcher + templates/weekend.json"],
"_deprecated_4_月_快照": "本文件 4/4 列出的'工作区整理'cron 不在当前 jobs.json,已删。"
}
}references/fallback-chain-validation.md
# Fallback Chain Validation Log
## v3.3.5+2 — 3 层 fallback 链验证矩阵
### 链结构(cron prompt 已注入 3 templates)
```
L1: batch_web_search (主源:财联社/新华/证券时报)
↓ 失败(success=false / formatted_content=[] / {"error": "..."})
L2: extract_content_from_websites 抓 https://www.cls.cn/telegraph
↓ 失败(JS 动态加载,curl 占位)
L3: extract_content_from_websites 多源池(按任务类型动态选最权威 2 个):
- 东方财富快讯 https://finance.eastmoney.com/news/cywjh.html(SSG 渲染 + 结构化列表)
- 新浪财经首页 https://finance.sina.com.cn/(含"国际焦点"分类)
- 21 经济网 https://www.21jingji.com/
- 中金 https://www.cnfin.com/
```
### 验证矩阵
| 任务 | L1 状态 | L2 状态 | L3 使用源 | 备注 |
|------|---------|---------|-----------|------|
| 6/15 晨报 | ❌ MCP `{"error":"..."}` | ❌ JS 占位 | 东方财富快讯 + 新浪首页 | 7 条要闻全事件型 |
| 6/15 周末 | ❌ MCP `{"error":"..."}` | ❌ JS 占位 | 东方财富 + 21jingji | 表格化输出 |
| **6/15 晚报** | ✅ 成功(7 条要闻) | n/a | n/a | **L1 一次过,未触发 fallback** |
### 6/15 晚报实跑数据(验证非 fallback 路径主流通畅)
- L1 成功:`batch_web_search` 返回 20 条 organic results(10/查询 × 2 查询)
- 主源用:`操盘必读 6/15`(mp.cnfol.com) + `证券时报 gs.html` + `新浪财经 6/15 要闻`(3 源)
- L1 来源的多样性证明 L1 主流通畅,**fallback 仅作兜底**
## ⚠️ 维护教训 — 选 fallback URL 优先用"主题聚合页"而非"单篇文章"
### 6/15 晚报实跑发现(2026-06-15 20:00 cron)
- 尝试抓 `https://finance.sina.com.cn/headline/2026-06-15/doc-inicmxay6762199.shtml`
- 返回内容**完全不是 A 股要闻**——是关于美伊协议 / 原油 / 黄金的**地缘 + 大宗商品**文
- 该 URL 是新浪"headline"频道下的**单篇头条文章**,主题不可预测(每天头条可能是美股/地缘/科技/财经/体育)
- 当时 L1 已成功(20 条 organic),未强制依赖 L3 这条 URL,但若 L1+L2 失败时正好撞上"非 A 股主题"的头条 → fallback 也白搭
### 修复指引(v3.3.5+5 起生效)
- ✅ 优先用**主题聚合页**(每天 N 条要闻,主题限定财经):
- 东方财富快讯 `cywjh.html` — SSG 渲染 + 结构化列表(**最稳**)
- 新浪财经**首页** `finance.sina.com.cn/` — 含"国际焦点"分类
- 21 经济网首页 / 中金首页
- ❌ 避免用**单篇头条文章**(URL 含 `/doc-...shtml` 或 `/20XX-XX-XX/doc-...`)— 主题不可控
- 当前 templates 3 个 fallback 提示段已用 `finance.sina.com.cn/`(首页)— **正确**
- 该问题不影响当前协议(L1+L2 成功率已够高),仅作未来扩展 fallback 池时的选 URL 规范
## 历史教训(v3.3.5+1 → v3.3.5+4 演进)
- **L1 失败率 20%**(agent.log 35 次调用 7 次失败)→ v3.3.5+4 加 retry-once
- **L2 失败率 100%**(cls.cn/telegraph 是 JS 动态加载)→ v3.3.5+2 改用 SSG 页
- **L3 选 URL 原则**:聚合 > 单篇(v3.3.5+5)
## 维护建议
- 每次 cron 失败时检查本表更新
- 季度审计 fallback URL 是否仍可达(curl 200/200 含内容)
- 主题聚合页优先级:东方财富快讯 > 新浪首页 ≥ 21jingji ≥ 中金AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/cookfish1979/skills/a-stock-report",
"sourceUrl": "https://clawhub.ai/cookfish1979/skills/a-stock-report",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T06:09:28.258Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-cookfish1979-a-stock-report/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-cookfish1979-a-stock-report/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-09T06:09:28.258Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "4K downloads",
"href": "https://clawhub.ai/cookfish1979/a-stock-report",
"sourceUrl": "https://clawhub.ai/cookfish1979/a-stock-report",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T06:09:28.258Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "3.5.4",
"href": "https://clawhub.ai/cookfish1979/a-stock-report",
"sourceUrl": "https://clawhub.ai/cookfish1979/a-stock-report",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-06-20T05:40:50.226Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-cookfish1979-a-stock-report/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-cookfish1979-a-stock-report/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 3.5.4",
"description": "v3.5.4 (2026-06-19): 1) send_*.py 全部 7 个脚本重构 .env 加载 (注释去密钥字样 + 路径走 ENV_FILE 系列变量); 2) SKILL.md L98 安全配置段同步改用 ENV_FILE 变量描述。注: v3.5.3 publish 时版本号不一致, v3.5.4 严格对齐 SKILL.md + _meta.json。",
"href": "https://clawhub.ai/cookfish1979/a-stock-report",
"sourceUrl": "https://clawhub.ai/cookfish1979/a-stock-report",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-06-20T05:40:50.226Z",
"isPublic": true
}
]
}Record generated Oct 9, 2026.
