一个把顺路发现的问题记成卡片,另开会话去修;一个把选项画在聊天里,让你直接点。
spawn_task:Claude 干活时发现一件“该修、但不归这次管”的事,就在界面上放一张小卡片。你点一下,它变成一个新的独立会话去修。当前这一轮照常往下走。
show_widget:Claude 把一张图或一小段可以点的网页,直接画在回答旁边。你在里面点的选择,会像你自己打字一样发回聊天。
01先打两个比方
spawn_task贴在工单上的便利贴
修车师傅给你换轮胎,发现刹车片快磨完了。他不顺手去拆刹车——那会把今天的活越搞越大。他在工单上贴一张便利贴:“刹车片该换了,要的话另开一单。”开不开,你说了算。
show_widget摆在你面前的样板
装修师傅不用嘴给你描述三种瓷砖,而是把三块样板直接摆在桌上。你用手一指:“这块。”比来回打字说“第二种偏灰那个”快得多,也不会听岔。
02spawn_task:顺路看到的事,交给你决定
它管的是“范围”。这次的改动只做这次该做的事,其他值得修的事记下来,变成一张卡片。
spawn_task,写好一张卡片dismiss_task 把卡片撤掉。你已经点过或关掉的卡片,撤不回来。一张卡片有四样东西
| 字段 | 给谁看 | 要求 |
|---|---|---|
title | 你(卡片标题) | 60 个字符以内,动词开头,比如 “Fix stale README badge”。 |
tldr | 你(卡片正文) | 一两句大白话:为什么现在提、新会话会做什么。不放文件路径。 |
prompt | 新会话(你在界面上看不到) | 必须自己站得住:文件路径、背景全写进去。新会话看不到这次的聊天记录。 |
cwd | 系统 | 可选。问题在另一个仓库时,填那个项目的根目录。 |
这个例子是真的:给这个博客发文章时,自定义域名一直打不开,但它跟“发文章”这件事无关。正确的做法就是记一张卡片,而不是在发文章的改动里顺手去改 DNS。
什么时候不该用
- 只是觉得“代码有点丑”,说不出具体问题。
- 一行就能顺手改好的小事——直接改就行。
- 没把握的猜测。卡片要指向确定的问题。
它和另外两种“分活”有什么不同
| 谁启动 | 结果回到哪 | 适合 | |
|---|---|---|---|
| Agent 子代理 | Claude 自己 | 回到 Claude,这一轮里就用上 | 帮当前任务查资料、并行干活 |
| Workflow | Claude(你同意之后) | 回到 Claude | 按脚本编排一大批子代理 |
| spawn_task | 你点卡片 | 一个新的独立会话 | 跟当前任务无关、但值得修的事 |
一句话:前两种是“帮我把这件事做完”,spawn_task 是“这件事以后再说,先记下来交给你”。
03show_widget:把要比较的东西直接摆出来
它管的是“看”。有些东西用文字说半天,不如画出来让你看一眼、点一下。
read_meshow_widgetwidget_code(以 <svg 开头就按图画,否则按网页画)、title(下划线命名,也是下载时的文件名)、loading_messages(画出来之前显示的 1–4 句提示)。<html>、<body> 这些外壳;背景透明;颜色用 CSS 变量,所以深色、浅色模式都会跟着变。sendPrompt(text)read_widget_context 读控件现在的状态。真实例子:这个博客的图标就是这么选出来的
原来标签页上是 Astro 自带的图标。Claude 把一轮候选画成一个可以点的选择器。第一轮都不满意,于是点了“都不要,再出一轮”,还在输入框里补了一句要求。这两样被 sendPrompt 一起发回聊天,Claude 照着出了第二轮,最后选了 K。
再出一轮
自己写要求
K 是一个绿色的小写 f,旁边的 u 被画成一张笑脸——“fu”就是 FunFun 的 fu。现在你在浏览器标签上看到的就是它。
它和 Artifact 有什么不同
| show_widget | Artifact | |
|---|---|---|
| 在哪 | 聊天里,回答旁边 | claude.ai 上的一个独立网页,有自己的链接 |
| 寿命 | 跟着这段对话 | 一直在,可以更新,可以分享 |
| 适合 | 当场看一眼、当场选 | 要留下来、给别人看的成品 |
| 怎么回话 | sendPrompt 直接把选择发回聊天 | 靠评论,或者页面自己声明的能力 |
一句话:要你当场挑,用 show_widget;要留下来给人看,用 Artifact。
04放在一起看
共同点:两样都不替你做决定。一个把“要不要修”交给你,一个把“选哪个”交给你。Claude 只负责把选择摆清楚。