market-debrief-cn — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited market-debrief-cn (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
核心目标不是「描述今天发生了什么」,而是「理解今天市场在定价什么、定价是否合理、明天可能发生什么」。
Phase 1: 确认日期 → 数据采集(akshare + tavily)
Phase 2: 三个 Subagent 并行分析
Phase 3: 渲染 Agent 整合输出 HTMLSKILL_ROOT:market-debrief-cn skill 目录(即当前 SKILL.md 所在目录)ASSETS_DIR:SKILL_ROOT/assets(所有 JSON 中间产物固定写这里)PROJECT_ROOT:本次运行 skill 的项目根目录(最终 HTML 固定写这里)不允许把 HTML 写入 ASSETS_DIR,也不允许把 JSON 中间产物写入 PROJECT_ROOT。
解析用户意图,确认目标交易日期。默认为最近一个已收盘的交易日。
python scripts/fetch_market_data.py --date YYYYMMDD脚本自动拉取 12 类数据(详见 references/akshare-api.md):
脚本自动写入 SKILL_ROOT/assets/market_data_YYYY-MM-DD.json(目录不存在时自动创建)。
⚠️ 东方财富数据源偶尔限流导致个别接口失败(返回空数组)——脚本已内置容错,失败项会在 stderr 显示 [WARN],并记录在输出 JSON 的 _failed_items 字段中。若关键数据缺失,可等待 10 秒后重跑。
使用 Tavily 搜索当日关键事件,自动执行 7 组查询(政策、板块、外盘、宏观、机构观点、北向资金、突发事件)。
Windows(推荐,跨平台):
python scripts/search_news.py --date YYYY-MM-DDLinux / macOS:
bash scripts/search_news.sh '{"date": "YYYY-MM-DD"}'两个脚本输出格式完全相同,自动写入 SKILL_ROOT/assets/news_data_YYYY-MM-DD.json。其中:
results:去噪+去重+按质量排序后的新闻列表(优先用于分析)query_batches:各查询原始回包(用于追溯)_failed_queries:失败查询数量⚠️ 需要 Tavily API token。优先级:TAVILY_API_KEY 环境变量(支持 tvly-... 格式)→ ~/.mcp-auth/ JWT 缓存。若两者均不可用,脚本会报错退出——必须先解决认证问题再继续(见 Step 4 双源要求)。
在完成行情数据采集后,运行分析脚本对原始数据做预处理,输出结构化量化指标:
python scripts/analyze_market.py --date YYYYMMDD脚本自动写入 SKILL_ROOT/assets/analysis_YYYY-MM-DD.json,包含:
| 模块 | 预计算内容 |
|---|---|
| 情绪评分 | 综合分(0-100)、散户/机构拆解分、各分项得分、60日成交额百分位 |
| 技术矩阵 | 6指数 MA5/10/20/60/120/250 值及偏离度、均线排列判断、量比、K线形态识别 |
| 支撑/压力位 | MA位/斐波那契38.2%/50%/61.8%/VWAP30日/整数关口,距当前价%标注 |
| 涨跌拆解 | 隔夜涨幅=开盘/前收-1(反映消息面)、日内涨幅=收盘/开盘-1(反映盘中行为) |
| 行业分析 | 四分类强弱表、成长/价值均涨幅差、资金净流入 TOP3/BOTTOM3 行业 |
| 涨停生态 | 封板率、连板分布、最高连板数+名称、主题集中度、赚钱效应评级 |
| 资金结构 | 超大/大/中/小单净流入(亿元)、机构/散户行为类型判断、资金迁移类型 |
| 估值 & ERP | 各指数 PE 历史百分位、全A PB、ERP%(含60日均值/标准差/信号) |
| 北向资金 | 当日净额、20日序列、20日累计、趋势描述 |
若脚本运行失败(numpy/pandas 未安装等),可跳过此步——AI 将从原始 market_data JSON 直接分析,但准确度会有所下降。依赖:pip install numpy pandas
读取 SKILL_ROOT/assets/market_data_YYYY-MM-DD.json、SKILL_ROOT/assets/analysis_YYYY-MM-DD.json 和 SKILL_ROOT/assets/news_data_YYYY-MM-DD.json,构建三个 Subagent 的数据子集。
⚠️ 双源强制要求:三个 Subagent 必须同时持有 akshare 行情数据和 tavily 新闻数据。若 news_data 文件不存在或为空,必须先执行 Step 3 搜索新闻,不允许跳过新闻采集直接进入 Phase 2。两类数据是报告深度的双支柱,缺少任一类都会导致分析仅停留在数字描述层面。
检查采集状态:
market_data["_failed_items"] 非空,记录失败项列表(例:["index pe", "lhb"])news_data["_failed_queries"] > 0,记录失败查询数data_warnings 传递给渲染 Agent,用于最终回复告知用户使用 subagent 并行启动三个分析任务。每个 subagent 的 prompt 包含:角色定义 + 对应数据子集 + 分析任务清单 + 输出格式。
分析框架详见 → references/analysis-framework.md
所有 Subagent 的核心输出要求:除了量化数据字段,每个模块必须输出 analysis_text 叙述字段(见 analysis-framework.md 各 Subagent JSON schema)。叙述字段必须双源融合——同时引用 akshare 数字和 tavily 新闻事件,推断市场参与者动机,不只描述现象。
强制要求:Module 1 和 Module 6 必须额外输出“预期差 / 明日验证点 / 证伪条件”结构。不能只解释今天发生了什么,还必须说明:市场原先在定价什么、今天新增信息改了什么、明天看什么来证明这个判断对或错。
模块: Module 1(宏观定价扫描)+ Module 2(市场情绪温度计)
提供数据: tavily 新闻、analysis.sentiment(各分项得分、综合分、散户/机构分、60日百分位)、analysis.northbound(趋势描述)、market_data(涨跌停原始数据、两融)
核心任务:
analysis.sentiment.composite_score 作为综合情绪分(无需重算)analysis.sentiment.divergence_type)输出: JSON(结构见 analysis-framework.md「Subagent A」节)
模块: Module 3(板块结构性分析)+ Module 4(资金路线图)
提供数据: analysis.industry(四分类表、成长/价值风格、资金流向TOP/BOTTOM3、迁移类型)、analysis.limit_up_ecology(封板率、连板分布、主题集中度、赚钱效应)、analysis.fund_structure(机构/散户行为类型、超大单趋势)、market_data.lhb_jgmmtj、market_data.lhb_stocks
核心任务:
analysis.industry.heatmap 做行业四分类(无需重算)analysis.industry.style 输出成长/价值量化对比analysis.limit_up_ecology 涨停板生态指标analysis.fund_structure.behavior_type + market_data.lhb_jgmmtj/lhb_stocks 解读资金意图输出: JSON(结构见 analysis-framework.md「Subagent B」节)
输出: JSON(结构见 analysis-framework.md「Subagent B」节)
模块: Module 5(技术形态与估值)+ Module 6(次日预判与历史镜像)
提供数据: analysis.technical(MA矩阵、均线排列、量比、K线形态、支撑/压力位、日内/隔夜拆解)、analysis.valuation(PE百分位、ERP信号)、指数原始日线序列(用于图表渲染)
核心任务:
analysis.technical[指数].ma_arrangement、ma_deviations、kline_pattern 输出技术矩阵analysis.technical[指数].supports/resistances 列出支撑/压力位(已附计算依据)analysis.valuation.erp.erp_signal 输出 ERP 信号analysis.valuation.index_pe[指数].pe_zone 输出估值水位档位输出: JSON(结构见 analysis-framework.md「Subagent C」节)
收集三份 JSON 后,交给渲染 Agent。
1. 交叉证伪机制(Cross-Validation) 禁止简单复读新闻中的利好与利空。必须执行新闻事件与盘面数据的交叉对比:
market_data.lhb_jgmmtj(龙虎榜机构买卖)或 analysis.industry.fund_flow_top3_outflow:2. 必须建立因果链条 禁止仅罗列“指数涨跌”或“新闻标题”。所有结论必须符合 数据(Data) + 事件(Event) -> 归因(Attribution) -> 验证(Verification) 的结构。
3. 必须使用量化锚点与速率(Velocity)
composite_score、divergence(散户/机构分歧)以及 momentum_velocity(加速度)。analysis.technical 中的 volume_price_desc 判断量价关系(如缩量下跌、放量滞涨等)。northbound(北向)与 sector_fund_flow(内资)的背离或共振,且留意机构/散户流向。4. 数据失败处理 若 market_data 中存在 _failed_items,必须在报告开头显著位置(引用块)提示:“⚠️ 部分数据源(如龙虎榜)暂时不可用,相关模块分析可能受限”。
HTML 设计规范详见 → references/html-design-spec.md
#FAF7F2),涨红(#C0392B)跌蓝深(#1A2E3E),espresso header(#1C0F08)"Georgia", "Noto Serif SC", "PingFang SC" 优先,展现权威感SFMono-Regular, Menlo, Consolas)0 4px 16px rgba(0,0,0,0.08)analysis_text 的 .insight-block 深度解读段落,禁止只渲染数字表格/图表而省略文字分析。叙述区块 CSS 组件见 html-design-spec.md「深度叙述区块」节。.dashboard-strip、.viz-card、.table-wrap、.chart-frame),禁止裸露图表直接贴在模块根节点下。.chart-frame 顶部必须带有醒目的文字标签(HTML 标题或说明段落),告知用户正在看什么指标(如:<div class="chart-title">主力30日净流入趋势</div>);严禁生成没有任何文字说明“裸图表”;对于时序折线/柱状图必须强制开启 dataZoom 以供拖拽缩放;必须配置带有单位(% 或 亿元)的 tooltip { trigger: 'axis' } 和 legend。module1.expectation_gap 的主叙事摘要。validates 与 invalidation,禁止只渲染概率和区间。[顶部仪表盘横条] 三行布局:品牌行 | 指数行(6个指数)| 概览行(成交/情绪/涨停/北向)
[Module 1] 宏观定价扫描 ← Subagent A
[Module 2] 市场情绪温度计 ← Subagent A
[Module 3] 板块结构性分析 ← Subagent B
[Module 4] 资金路线图 ← Subagent B
[Module 5] 技术形态与估值 ← Subagent C
[Module 6] 次日预判与历史镜像 ← Subagent C
[页脚] 数据来源声明 + 免责声明| 模块 | 图表 | 引擎 | 尺寸 | 交互 |
|---|---|---|---|---|
| M1 | 事件定价状态徽章表 | CSS badge | — | — |
| M1 | 外盘市场胶囊行 | CSS pill | — | — |
| M2 | 综合情绪仪表盘(大) + 散户/机构仪表盘(小×2) | ECharts gauge | 350px / 220px | tooltip |
| M2 | 5日情绪折线(含markArea过热区) | ECharts line | 200px mini | hover |
| M2 | 分项评分进度条表 | CSS | — | — |
| M3 | 行业涨跌幅横向条形图(全行业排序) | ECharts bar | tall 460px | dataZoom+tooltip |
| M3 | 轮动5阶段进度条(含脉冲动画) | CSS | — | — |
| M3 | 涨停生态雷达图 | ECharts radar | half 280px | tooltip |
| M4 | 资金结构分组柱状图(四类资金) | ECharts bar | full 380px | tooltip |
| M4 | 主力资金30日走势折线 | ECharts line | mini 200px | hover |
| M4 | 资金迁移桑基图 | ECharts sankey | full 380px | emphasis adjacency |
| M5 | K线图(60日,含MA5/20/60+量能附图,Tab切换三指数) | ECharts candlestick | tall 460px | dataZoom+tab |
| M5 | 多指数PE百分位彩色轨道(4条) | CSS | — | hover data-pct |
| M5 | ERP双轴折线(近2年) | ECharts line | full 380px | tooltip markLine |
| M6 | 三情景概率分段条 | CSS | 44px | — |
| M6 | 情景卡片accordion(3张可展开) | HTML/CSS/JS | — | click toggle |
| M6 | 观测清单交互表(优先级badge) | CSS badge+table | — | — |
原则:每个模块至少含 2个 可视化组件(图表或交互组件),禁止出现纯文字罗列的模块。
将最终 HTML 写入PROJECT_ROOT(运行 skill 的项目根目录):
market-debrief-YYYY-MM-DD.html数据中间产物继续存放于SKILL_ROOT/assets/,最终成品 HTML 单独放在PROJECT_ROOT,便于直接预览、分享和版本比对:
>
-SKILL_ROOT/assets/market_data_YYYY-MM-DD.json— 原始行情数据 -SKILL_ROOT/assets/analysis_YYYY-MM-DD.json— 量化指标分析结果(新) -SKILL_ROOT/assets/news_data_YYYY-MM-DD.json— 新闻搜索结果 -PROJECT_ROOT/market-debrief-YYYY-MM-DD.html— 最终日报
输出动作要求:渲染完成后,必须显式执行“写入 PROJECT_ROOT HTML 文件”这一步,不允许把最终 HTML 留在 SKILL_ROOT/assets/、临时目录或对话内联代码块中。
禁用表达(出现即重写):
| ❌ 禁止 | ✅ 替代 |
|---|---|
| 市场情绪有所回暖 | 情绪综合分从52升至65 |
| 需关注风险 | 若明日上证跌破4050(MA20),触发悲观情景 |
| 可能震荡上行 | 核心情景(60%):上证4100-4160区间震荡 |
| 技术面显示支撑 | MA60(3980点)构成近期强支撑,距当前3.8% |
| 资金面较为活跃 | 今日成交1.06万亿,为20日均值的1.12倍 |
每期必含量化锚点:
先说好还是不好,再说为什么。 每个模块标题和首句即结论。
保留英文:PE、PB、ERP、MA、ETF、MLF、EPS、ROE、CPI、PMI
必须中文:所有分析结论、图表标题、评价性用语、方向性判断
禁止出现:「总而言之」「需要指出的是」「值得注意的是」「总体来看」「综上所述」
生成报告完毕后,在最终回复中必须以中文明确告知用户:
⚠️ 本期数据采集部分失败,以下内容未能获取,相关模块分析准确度可能受影响:
>
- 行情数据:龙虎榜机构统计(lhb_jgmmtj)或龙虎榜个股统计(lhb_stocks)、指数PE(index pe) - 新闻查询:2/4 个查询无有效返回
来源:读取 SKILL_ROOT/assets/market_data_YYYY-MM-DD.json 中的 _failed_items 字段,以及 SKILL_ROOT/assets/news_data_YYYY-MM-DD.json 中的 _failed_queries 字段。
| 需要什么 | 去哪找 |
|---|---|
| AkShare 接口参数与字段 | references/akshare-api.md |
| 六模块分析框架 + Subagent JSON 格式 | references/analysis-framework.md |
| HTML 设计规范 + 色彩/排版/组件 | references/html-design-spec.md |
| 脚本 | 用途 | 依赖 |
|---|---|---|
scripts/fetch_market_data.py | AkShare 行情原始数据一键采集 → JSON | akshare, pandas |
scripts/analyze_market.py | 量化指标计算引擎:情绪/技术/估值/行业/资金 → JSON | numpy, pandas |
scripts/search_news.py | Tavily 新闻搜索 → JSON(Windows / 跨平台推荐) | requests, Tavily |
scripts/search_news.sh | Tavily 新闻搜索 → JSON(Linux / macOS) | jq, curl, Tavily |
依赖安装:pip install akshare numpy pandas requests、jq + curl(Bash,可选)、Tavily API token(可选)
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.