shaomang/mtnode-aio/grill-me
Claude Code and agent skill by shaomang/mtnode-aio
- community
Checking that the SKILL.md file is still in the repository.
需求拷问:把任务映射成决策树,按轮问完整个「前沿」(前置已定的全部问题);每轮必须用 ask_user_question 工具跳出 MTNode 询问窗(一次带上整个前沿,禁止把问题当聊天正文罗列),每题选项把推荐项放第一位标「(推荐)」;环境事实自己查绝不问用户;直到前沿为空且用户在询问窗里确认达成共识才动手。共识若含审批 / 交付 / 驳回回跳 / 并行 / 子图,产出的是长周期任务图(DAG)JSON。Use when the user says 拷问我 / grill me / 先问清再动手 / 需求不明确, or a dev-node 开发 run turns on 先拷问需求.
Install
npx vskill@latest install shaomang/mtnode-aio/grill-meSKILL.md
拷问我(grill-me)
目标:在动手之前,用最少而准的提问把需求问到没有歧义。共识未经用户明确确认前:不写代码、不改画布、不出实施计划。
一、先把需求映射成决策树
- 每个「决策」是树上的一个节点,依赖它的决策挂在它下面。
- 严格区分两类:事实(能自己查到的,不是问题)与决策(只有用户能定的,才是问题)。
- 不要拿事实去烦用户,也不要把决策默默替用户拍板。
二、MTNode 的询问格式 = 询问窗(本技能的第一纪律)
提问必须调用 `ask_user_question` 工具——它会在 MTNode 界面上弹出询问窗(「🐋 模型等待你的回应」卡片),用户在卡片里点选项、填空,答案直接回到你手里。把问题写成回复正文的编号列表、让用户在输入框里敲答案,是错误做法(用户已明确反馈这是 bug),一律不允许。
一轮前沿 = 一次 ask_user_question 调用,把该轮全部问题放进 questions[]:
id:本轮内稳定短名(q1、q2…),答案按 id 回传。question:完整题面(一句话说清要决定什么、为什么需要用户定)。header:可选短标题(卡片上显示在题面前,如「确认」「取舍」「范围」)。options:给出候选,推荐的那一项放第一位,并在label末尾加「(推荐)」;description写一句话理由 / 代价(卡片会把这句显示在选项下方的第二行,所以只写一句,别塞长文)。multi_select:候选可并存时置true。- 一轮 3–7 题为宜,宁缺毋滥,能合并的合并;每题只问一件事。
调用后什么也不用多说:工具本身是阻塞的,答案回来再继续。不要为了「停下等用户」而提前结束回合,也不要在同一轮里既提问又开工。
三、按轮推进「前沿」
- 前沿 = 前置答案都已确定、现在就能问、不需要猜任何未听到的答案的那些决策。
- 一轮问完整个前沿:整轮只发一次询问窗,不要一题一题地弹。
- 禁止自问自答;禁止列完问题就接着开工。
- 某问题的答案依赖本轮另一个尚未确定的答案 → 它属于下一轮,不要现在问。
- 答案回来后据此重排决策树:已定的决策把前沿向外推,解锁原先被卡住的问题;下一轮只问新前沿,不重复已问过的问题、不重开已定的决策。
- 用户答得含糊(自定义答案太笼统、只选了「其他」)时,只就那一点再问一轮(询问窗可以只发一题),不要自行补全。
四、收尾确认
- 前沿为空:树的每个分支都走到过,没有任何东西被默默假设。
- 收尾这一轮仍然用询问窗,且按固定格式写那一张卡(询问窗会把
question切成两块渲染:
首行当标题行,空行之后的其余内容按 Markdown 渲染进「📋 总结」区):
question的第一行只放一句话题面,例如以上共识是否无误?—— 不要把总结塞在这一行里;- 空行之后才是整份共识总结,用 Markdown 写:小标题 + 要点列表,条目多或要对齐取舍时用表格;
- 选项只留两项:推荐项 = 明确同意开工(如
确认无误,开始实施(推荐)),另一个 =还要改,我补充
(措辞随交流语言)—— 得到「确认」这一项(或用户自定义的明确同意)才开始动手;
- 不要把共识拆成几张卡,也不要在正文里再列一遍问题编号。
- 用户点「稍后(终止本轮)」或「中断任务」= 本轮已被停掉,不要把沉默当成确认。
五、找事实是你的活,永远不是用户的
- 需要环境事实(读代码、查文件、确认工具与接口能力)时自己动手:用只读工具(read / grep / glob / 只读命令)或派子代理去查。
- 绝不向用户索要「你自己能查到的东西」。
- 不要为此阻塞:正在跑的探查是一个尚未落定的前置,只有依赖它的那些问题等它的结果;其余前沿照常现在就问。
- 探查回来后据此提问,或确认该分支已无决策、直接剪掉。
六、兜底:询问窗不可用时
当前会话的「Agent 工具许可」可能把「向用户提问」这一项关掉(ask_user_question 因此不存在,调用会失败)。只有这种时候才退回正文排版,并在开头说明「本会话询问窗不可用,改用正文提问」:
除此之外,正文里不要再出现「Q1 / Q2」式的提问清单。
七、拷问的另一条出口:长周期任务图(DAG)
拷问清楚之后,产物不一定是「一次跑完的画布」。如果第 1~6 步问出来的结论里有下面任何一条,就该产出一张长周期任务图(应用里的「长周期任务 · 状态机」,画布上方那条细线展开后的东西),而不是流水线:
- 中间有必须人来做的判断或交付:审批(通过 / 驳回)、把定稿 / 素材 / 参数交进来;
- 驳回后要退回前面某个环节重做(回跳默认不限次数;可选设上限,超出上限该环节转失败);
- 有并行分支要等齐(汇聚),或要逐项展开跑同一段子流程(数组摊开,各项互不可见);
- 一段流程要装成子图复用(可下钻编辑、层层套)。
四条都不沾,就别硬造状态机 —— 常规画布更简单。判据一句话:这张图需不需要「停下来等人、拿到人的结果再继续往下走」。需要就是长任务;不需要就是流水线。
产出契约
图的字段只以 renderer/app-longtask.js 的 ltNormCfg / ltNormGraph 为准(归一化会补齐缺省、丢掉非法值,所以多余字段无害、缺字段有默认)。写成:
节点:{ id, kind, x, y, title, cfg }。id 全图唯一、只用字母数字下划线中划线(回跳 backTo 与子图引用都靠它);x/y 给个从左到右的粗略布局即可(条带有自动排版)。kind 与各自的 cfg:
| kind | 语义 | 关键 cfg | |||||
|---|---|---|---|---|---|---|---|
start | 唯一入口(多个会同时开跑) | — | |||||
agent | 交给智能体做 | goal(必填)、inKeys[] 吃哪些状态键、outKeys[] 产出哪些键(写回只认这份名单)、model、preset、effort(`low | medium | high | xhigh | max)、canvasRead(bool,勾选才授权**只读**本画布 —— 这一轮只注册 mtnode_canvas_get,改图 / 应用类画布工具不注册)、retries、workspace、memoryless、onError("skip" = 这一环报错(重试用尽 / 缺输出键)时**不卡住**:直接放行往下走;缺省 = 停住等人)、onErrorNext`(onError 时跳到哪个节点 id,留空 = 走它自己的下游) | |
human | 停下来等人 | mode: approve(审批)或 deliver(内容交付);backTo(驳回回跳到哪个节点 id)、maxRound(回跳上限:留空跟随全局,0/缺省 = 不限,1-9 = 上限,超出转失败);deliver 还要给 items[] | |||||
join | 并行等齐 | mode: all(AND) / any(OR) | |||||
fork | 选路 | 语义全在出边的 cond 上;一条 cond 都不写就等于并行全开 | |||||
map | 逐项并行 | overKey(要展开的数组状态键,必填)、itemKey(默认 item)、maxItems(1-64)、outKeys[]、graph(内部子图) | |||||
sub | 子图 | outKeys[]、graph;回写键必须由子图里某个节点的 outKeys 产出,否则永远是空 | |||||
output | 落盘 | path、key(要写出的状态键) | |||||
end_ok / end_fail | 成功 / 失败终点 | — |
交付清单条目:{ id, kind: "file"|"text"|"choice"|"media", title, desc, required, options[], multi, byAgent }。required 缺省为真 —— 必填项全交齐才允许人工点「确认交付完成」。byAgent: true 表示这条由 Agent 声明「我产出了它」,人仍要验收。id 请用 ASCII(它同时是运行态状态键与清单对齐的键)。
交付清单是双向的:应用写 <画布工作目录>\mtnode-deliverables\<uid>\manifest.json,也会在重新进入该环节 / 点「继续」时把磁盘上的完成状态(done / value / paths / choice)读回来 —— 用户在应用外手改 / 丢文件是生效的。uid 由系统生成(lt<随机>-<环节短名>,短名可含中文),不要在图 JSON 里自己编。
边:{ id, from, to, label, cond }。cond 是一小段受限 JS 谓词,作用域里有 input.state(整份共享状态,读键写 input.state.<键>;也可以直接写 `state.<键>`,引擎两条都认)、input.node(本边起点那一环:{id,kind,title})与 input.runId。两条写法都行:return <真值>,或直接写一行表达式(如 state.pool_ok === false —— 引擎会按表达式求值,别写成没值可言的语句序列)。写错或超时会转成「需人工」而不是把任务崩掉。
报错不许把整条链卡死(用户口径):跑起来后某一环报错(Agent 重试用尽 / 缺输出键 / 条件谓词炸 / 子图里跑坏),用户在条带「卡住的环节」卡上点「无视报错并继续」即可当场放行(可指定跳到哪一环,也能勾「以后这一环报错都照此放行」写回图定义)—— 所以图要留兜底路径:关键环节后面最好有一条能继续往下走的分支(end_fail 或一条无条件出边),别把整张图收在一个必过节点上。
怎么交到用户手上
不要试图直接改画布 JSON 里的 `wf.longtask`(那是应用持有的字段,画布写工具不碰它)。 共识达成后,图的落地只有这一条正路 —— 把它建出来,不是把清单交给用户让他自己搭:
- 调用
mtnode_app(action:"create_longtask",带name与graph)把这张图落库到当前画布的
长周期任务列表:应用会归一 + 校验,有 err 就把 err 文本回给你 —— 照它改完重新调用,直到落库成功; 落库成功后用中文给一份「节点 → 干什么 → 吃哪些键 / 产出哪些键」+ 连线清单的摘要即可;
- 若本会话没有注册
mtnode_app(开发 / 细化绑定会话、与画布无关的会话等),或调用报错:
把完整图定义 JSON(同一份 kind:"mtnode-longtask-graph" 外壳)原样放进回复正文的 ```json 围栏里, 并说明「本会话落库入口不可用」—— 长任务新建窗的引导会话会由应用自动接手落库;
- 无论哪条路,都可以顺手把这份 JSON 写到当前工作目录留档(如
longtask-<任务名>.json),
但留档不是交付:交付 = 图已经落库(或图 JSON 已在回复里),绝不是一句「请你在条带上照着搭」。
- 图搭好后(或应用自动落库后)由用户点条带右端的 「▶ 启用并绑定」 才真正开始跑
(启用即拍图快照,之后改图不影响在跑的这次);交付类环节会自动在画布上生成交付节点 (该类型不能手动添加,也不必添加);任务切换 / + 新建 / 历史 run / 交付目录体检都在条带右端的 ⚙ 里。
本技能的产物只有两种:长周期任务图,或(四条判据都不沾时的)常规画布方案。 【禁止】用 <!--MTNODE-PLAN--> 计划块 / todo_write 任务清单来代替这张图 —— 那是普通会话的流程, 长任务入口不认它(宿主不会弹计划窗、也不会执行),用户看到的就是「建出来的不是状态机图,而是一份普通计划」。
交给用户前用同一份判据自检一遍,别把明显跑不动的图丢给用户:至少一个 start;除 start 外每个节点都有上游;agent 都有 goal;map 都有 overKey 且子图非空;fork 的出边至少一条带 cond;human.deliver 的清单非空。这些正是编辑器与启用时的校验口径。
MTNode 约束
- 全程用界面当前的交流语言提问(中文界面即中文);代码、路径、标识符保持原文。
- 在「开发节点」绑定会话里由「先拷问需求」开关注入时,本技能生效期间只读:不得修改任何文件、不得改画布、不得回写开发节点的 note / devStatus / devFiles;确认达成共识后才进入正常开发流程(那时再按两段式规范回写)。
- 提问要贴着项目真实代码:先查证(第五条),再问只有用户能定的取舍——不要把「代码里写着什么」当问题问。
- 一轮问满是硬要求:不要一次只问一题拖很多轮,用户的时间比你的问题数宝贵。
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingmtnode-agent-skills/mtnode/grill-me/SKILL.md
Popularity
- 7-day trend score
- 5
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/shaomang/mtnode-aio/grill-me)