用 grill-me 推导盘前简报 MVP:12 题钉边界 + schema 收束
1. grill-me skill是什么、解决什么问题
grill-me skill的核心就一条:一次只问一个问题,沿决策树把你逼到边界清楚。
和普通「帮我设计一个系统」的区别:
| 普通对话 | grill-me |
|---|---|
| AI 一次吐完整方案 | 逐题确认,你不同意就改 |
| 容易过度工程 | 每题都问「MVP 要不要」 |
| 字段/schema 凭空长出来 | 从场景倒推,能解释每个字段为啥存在 |
| 写完才发现和场景对不上 | 先钉使用者、动作、审计定义,再谈技术 |
Skill 原文很短:
Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the decision tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer. Ask the questions one at a time.使用Cursor安装后触发:
2. 我为什么选这个主题做实战
盘前简报是个边界敏感的 MVP:
- 读者、场景、产物形态若不先钉死,「可审计」很容易做成合规系统或日志洪水
- 字段多一层(行情、新闻、假设验证、报告)——适合练「每个字段为啥存在」
- 业务上要说得清:辅助 PM,不是替 PM 下判断——这类产品哲学不拷问清楚,后面 schema 会歪
整场 grilling 大约12 题,从「谁在读」一直收到「什么叫能交差」。下面按题号贴真实对话。
3. 完整对话实录( 按题号展示重要部分)
第 1 题:读者与核心动作
Cursor:
我:
第 2 题:「可审计」到底指什么
Cursor:
我:
第 3 题:标的范围
Cursor:
我:
第 4 题:单只股票最少输出什么
Cursor:
我(先没直接选,让 AI 解释):
Cursor用「晨会四问」倒推(部分截图):
我(收紧范围):
Cursor 据此改版:
我(继续追问):
Cursor 解释字段(部分截图):
我(换了种问法):
Cursor抛出AAPL / NVDA 虚构晨会例(部分截图):
并附了一版简化run.json(含overnight_move、events、news、watch_today、hypothesis_results、flags、pipeline_trace)。
{"meta":{"run_id":"2025-06-25-preopen","timestamp":"2025-06-25T08:00:00-04:00","universe":{"holdings":["AAPL"],"watchlist":["NVDA"]}},"market_context":[{"summary":"美债收益率隔夜上行,科技股盘前偏承压","source":{"tool":"macro_feed","ref":"ust_10y_change","fetched_at":"..."}}],"symbols":[{"ticker":"AAPL","list_type":"holding","overnight_move":{"premarket_pct":-4.2,"index_future_pct":-0.8,"source":{"tool":"market_data","ref":"AAPL_premarket","fetched_at":"..."}},"events":[{"type":"regulatory","summary":"欧盟公布 App Store 反垄断罚款草案","source":{"tool":"news_api","ref":"article_123","fetched_at":"..."}}],"news":[{"headline":"EU to vote on Apple App Store fine next week","source":{"tool":"bloomberg_feed","ref":"bbg_456","fetched_at":"..."}}],"watch_today":[{"text":"盘前跌幅偏大,开盘看是否放量续跌","derived_from":["overnight_move"]},{"text":"欧盟罚款若落地,关注服务收入指引","derived_from":["events[0]","news[0]"]}],"hypothesis_results":[{"hypothesis":"盘前大跌应有负面事件或新闻解释","status":"verified","evidence":["events[0]","news[0]"]},{"hypothesis":"罚款金额应有单一可信来源","status":"failed","reason":"两家媒体报道金额不一致"}],"flags":["AMOUNT_DISCREPANCY"]},{"ticker":"NVDA","list_type":"watchlist","overnight_move":{"premarket_pct":-1.1,"source":{"tool":"market_data","ref":"NVDA_premarket","fetched_at":"..."}},"events":[],"news":[{"headline":"Analyst raises NVDA price target","source":{"tool":"news_api","ref":"article_789","fetched_at":"..."}}],"watch_today":[],"hypothesis_results":[{"hypothesis":"盘前大跌应有负面事件或新闻解释","status":"skipped","reason":"涨跌幅未超阈值"}],"flags":[]}],"pipeline_trace":[{"step":"fetch_market_data","status":"ok"},{"step":"fetch_news_events","status":"ok"},{"step":"run_hypothesis_checks","status":"ok"},{"step":"generate_watch_items","status":"ok"}]}这里我没有让ai抽象谈 schema,而是用一个具体的例子让字段说清楚。grill-me 允许你反复说「先举例」「先大白话」——逼 AI 把设计动机讲清楚。
第 5~6 题:假设验证放哪一层
我(对hypothesis_results字段提出质疑):
Cursor(认错并重构):
我:
Cursor 给出 MVP 结构:
第 7 题:问题从哪来 和conclusion字段 要不要
Cursor:
我:
Cursor:
我:
Cursor:
我(关键产品定位推翻):
Cursor(跟着改):
我(回答第7题):
第 8~9 题:数据源与输出
Cursor 推荐:
我:
Cursor提醒 yfinance 日频≠真盘前,字段要如实标premarket_available: false,别假扮盘前 %。
Cursor 第 9 题推荐:
我:
第 10~11 题:触发方式 · CLI · 技术栈
我:
Cursor追问:持仓和观察名单是扁平--symbols还是分开?
我:
Cursor 推荐技术栈:
我:
Cursor 分两阶段收束:
MVP:
fetch → validate → assemble → render,不接 LangGraph
后续:四节点替换 Analyst 等模块,JSON 契约尽量不动
第 12 题:什么叫能交差
Cursor 列 5 条验收:
我(最终收口):
Cursor 收束(部分截图):
最终的run.json 契约(稳定版,可微调)
{"meta":{"run_id":"...","timestamp":"...","question":"...","symbols":["AAPL","MSFT"]},"market_context":[{"summary":"宏观/板块 1–2 句","source":{"tool":"...","ref":"...","fetched_at":"..."}}],"hypothesis":{"question":"...","status":"verified | needs_review | failed","findings":["中性事实..."],"derived_from":["symbols.AAPL.events[0]","..."],"open_items":["待核实..."]},"symbols":[{"ticker":"AAPL","overnight_move":{"daily_pct":-4.2,"premarket_available":false,"source":{"tool":"yfinance","ref":"AAPL","fetched_at":"...","fallback":false}},"events":[{"type":"...","summary":"...","source":{"..."}}],"news":[{"headline":"...","source":{"..."}}],"watch_today":[{"text":"...","derived_from":["overnight_move","events[0]"]}],"flags":[]}],"pipeline_trace":[{"step":"fetch_market_data","status":"ok"}]}4. 这场 grilling 里,我主动推翻 AI 的几次
| 回合 | AI 倾向 | 我的决定 | 为什么 |
|---|---|---|---|
| 可审计 | B+C,合规以后再说 | 两层:来源 + 机器校验,砍人工指派 | MVP 不做协作工作流 |
| 字段 ④ | 日历排期 | 只要「今日盯什么」,pipeline 推导 | 不接 earnings calendar |
| ⑤⑥ | 推荐保留持仓上下文 | 先不做 | 减数据源和规则复杂度 |
| 假设验证 | 每股hypothesis_results[] | 报告级单个hypothesis | 一个问题一份答案 |
conclusion | 分析师式总括 | 删掉 | 系统只交材料,判断在人 |
| 问题来源 | 常驻 + 覆盖(D) | 每次 CLI 手传 | 审计简单、问题明确 |
| 标的输入 | holdings + watchlist 分开 | 扁平--symbols | 实现先简化 |
| 交差标准 | 5 条功能 checklist | demo + eval + 契约稳定 | 可迭代字段名,契约别漂 |
grill-me 不是听 AI 的推荐就完事——推荐答案是靶子,你的推翻也许才是设计文档里最有价值的部分。
5. 用了grill-me的感受
grill-me skill 跟 Cursor 的 Plan 不一样,它不会先甩一篇长计划,而是一道题一道题问,你确认了才往下走。过程有点烦,得一直想,但正好逼我把「要做啥」想清楚,而不是 AI 写完了我才去追细节。
当然,上文 JSON 是 grill-me 阶段定下的契约草稿,不是最终实现;落地时我还是按工程需要做了一些迭代(如 LangGraph、tools[]、双模板(无 --question → 盘前简报;有 → 投委会 memo),字段名同时做了一些微调。
相关链接
• https://github.com/mattpocock/skills
• https://www.skills.sh/mattpocock/skills/grill-me
