After:不会干扰当前任务的 Claude Code 提示词队列
Claude Code 的提示词队列:/after 会在当前这一轮结束后运行你的下一个任务,不会干扰正在进行的工作。
权限
- 调用模型(消耗你的额度)可以自行向 Claude 发送请求,这些请求计入你套餐的用量($.model.* / $.agent.spawn)。
- 读取你的提示词可以看到你输入的内容和对话记录(prompt.* / session.append / session.messages)。
- 修改界面在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
- 添加命令/工具注册新的斜杠命令或工具,供你或 Claude 调用($.command.register / $.tool.register)。
- 存储数据在插件的私有存储中跨会话保存数据($.store.*)。
- 实测版本
- v2.1.303
- 最近实测
- 需要
- Claude Code ≥ 2.1.287
- 显示位置
- 输入框上方、面板、弹出通知、状态栏
这个插件能做什么?
After 是一款社区插件,作者是 Miguel Ángel Durán(midudev),它的作用是为 Claude Code 提供提示词队列。/after <task> 会添加一个任务,在 Claude 完成手头的工作后运行;如果 Claude 此刻空闲,任务会立即开始。/before <task> 会把任务放到队首,让它成为下一个运行的任务。关键在于,排队的任务不会干扰当前这一轮:轮到它们之前,Claude 看不到它们。
每条命令都会在对话记录中用一张带边框的卡片作答,显示发生了什么变化:新增、移动、编辑或移除了任务。只要队列里有内容,输入框上方就会有一行横条,显示现在正在运行什么、接下来是什么。单独输入 /after 会打开一个面板,可以用键盘选择、编辑、重排和删除任务。你也可以直接用自然语言输入,例如 /after remove the tests one 或 /after tests, write a README explaining them;当文字可能指向已排队的内容时,由 Haiku 判断你的意思。
其他命令有:/after rm 2、mv 3 1、edit 2 <text>、pause、resume、undo、clear、list 和 help。作者的 README 要求使用支持 mod 的 Claude Code 版本,即 2.1.289 或更高。
演示
录屏中,我们在小型演示项目里启动加载了该插件的 Claude Code,让 Claude 读取 README.md,用一句话说明这个项目是什么。Claude 还在工作时,录屏输入了 /after read src/login.js and say what it does in one sentence。随后出现一张标题为 After 的卡片,写着 Queued #1,任务带有 ← new 标记,输入框上方的横条也显示了这个任务。第一个回答结束后,插件把排队的任务作为一条消息提交(“Prompt from the after plugin”),横条变为 ▶ read src/login.js and say what… nothing else queued,Claude 开始处理它。录屏到此结束。
安装
使用安装区块中的任意一种方式;它们都直接从作者自己的插件市场安装。如果是装进一个已经打开的会话,请先运行 /reload-plugins。然后在 Claude 工作时试试 /after <task>。
$ install after
需要 Claude Code ≥ 2.1.287
从作者自己的 marketplace 安装: midudev/better-claude
1.在 Claude Code 中一行安装
/plugin install after --marketplace midudev/better-claude粘贴到正在运行的会话中(v2.1.275+)。Claude Code 会先询问是否添加该插件市场。
2.从终端安装
claude plugin marketplace add midudev/better-claude claude plugin install after@better-claude然后在所有已打开的会话中运行 /reload-plugins。
3.免安装试用
git clone https://github.com/midudev/better-claude claude --plugin-dir ./better-claude/plugins/after仅在当前会话中加载该插件,不会写入你的设置。
工作原理
整个插件是一个 hooks 模块,即 hooks/register.tsx,下面是 src/ 中的纯 JavaScript。/after 和 /before 被注册为即时命令,所以在一轮进行中也能运行。队列保存在 $.state 中供横条和面板读取,并按会话保存在 $.store 中。一轮结束时,下一个任务会交给 Claude:
on('turn.complete', async ($, e, next) => {
const result = await next(e)
if (e.agentId === undefined) await finishTurn($, e.reason === 'answer')
return result
})
// ...
reason = (await $.prompt.submit({ text: item.text, asUser: true })).drop只有主代理的已完成回答才会推进队列;Esc、拒绝回复或 API 错误会让队列停下,直到下一次正常结束。为了不让任务进入 Claude 的上下文,命令只回复一个简短的引用,例如 #lq2x9k-3,CommandOutput 上的 ui.render 钩子在其位置绘制卡片,session.append 钩子则清空对话记录中该命令的参数,演示里的 /after 一行就是这样。自然语言文字只有在可能指向队列时才会发给 $.model.complete,模型没有回答时则由本地启发式规则接手。
自定义
/config 列出三个选项,也可以在 settings.json 的 pluginConfigs.after.options 下设置:
smart(默认开启):让小模型判断命令的含义。关闭后只使用本地匹配。model(默认haiku):这些请求使用的别名或完整模型 ID。display(默认band):band在输入框上方,status在输入框下方显示一行,或none。
权限与安全
在运行任何东西之前,我们读过了插件加载的每一个文件:plugin.json、hooks/hooks.json、hooks/register.tsx、整个 src/(不使用 Node API 的纯 JavaScript,也没有引用插件之外的文件)、类型声明和测试。插件中没有 package.json、安装脚本、打包或压缩过的代码,也没有二进制文件。仓库带有 MIT 的 LICENSE 文件。
修改界面对应横条、面板、卡片和一条提示通知 “After · all queued tasks done”。添加命令对应 /after 和 /before。保存数据对应队列和卡片,保存在插件自己的 $.store 中,分别在 7 天和 30 天后清理。
需要了解的发现:
- 它会替你提交提示词。 一轮结束时,
$.prompt.submit会把每个排队的任务作为你自己的消息发送出去。Claude 随后仍受你的常规权限设置约束,但排队的任务是无人值守地运行的,所以请用/after list或横条检查队列。 - 它会把队列文字发给模型。 自然语言命令会通过 Claude Code 自己的客户端(
$.model.complete,超时 25 秒),把命令和已排队任务的文字发给 Haiku。使用的是你已经在用的账号,没有额外的主机或密钥;可以用smart关闭。 - 它会改写对话记录。
session.append钩子会把/after和/before的参数从模型能读到的内容中去掉。它不会拦截或修改工具调用和你的提示词;validate把它列为没有.catch的拦截型钩子,代码与 README 一致。 - 它不会自行使用网络、运行 shell 命令、读取环境变量,或写入自己存储之外的位置。
scripts/eval-haiku.js会启动claude -p,但那是开发者脚本,插件从不加载它。 - 它会检查
~/.claude/commands中是否有旧的after.md和before.md文件,只记录一条消息请你删除,不会去动它们。
claude plugin validate 没有报告任何错误或警告,作者的 20 个测试在 Claude Code 2.1.303 上全部通过。
- 调用模型(消耗你的额度)
- 可以自行向 Claude 发送请求,这些请求计入你套餐的用量($.model.* / $.agent.spawn)。
- 读取你的提示词
- 可以看到你输入的内容和对话记录(prompt.* / session.append / session.messages)。
- 修改界面
- 在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
- 添加命令/工具
- 注册新的斜杠命令或工具,供你或 Claude 调用($.command.register / $.tool.register)。
- 存储数据
- 在插件的私有存储中跨会话保存数据($.store.*)。
兼容性与故障排除
已在 macOS 上使用 Claude Code 2.1.303 检查(validate、测试和演示)。如果它没有正常工作:
- 找不到
/after:确认插件已在/plugin中加载,安装后运行/reload-plugins。 ~/.claude/commands中名为after.md或before.md的文件(After 0.1 遗留)会遮住这个 mod,请删除。- 什么都没运行:队列可能处于暂停状态,运行
/after resume。Esc 或出错之后,它会等到某一轮正常结束。 - 面板需要你所用的界面支持输入;没有的话,请直接使用命令。
- 想在 Claude 空闲时先建好队列再开始,运行
/after pause,添加任务,再运行/after resume。
常见问题
- 在 Claude 工作时直接输入,和使用 /after 有什么区别?
- 在一轮对话进行中输入的文字会被注入这一轮,可能改变 Claude 正在做的事。用 /after 排队的任务在当前这一轮结束之前不会进入 Claude 的上下文,之后才会作为你自己的消息送达。
- After 会调用模型吗?
- 只有在使用自然语言命令时才会,例如 “/after remove the tests one”,而且只有当文字可能指向已排队的任务时。它通过 Claude Code 自己的客户端询问 Haiku,因此不需要 API 密钥。把 smart 选项设为关闭,就只使用本地匹配。
- 按 Esc 会怎样?
- Esc 照常中断正在运行的任务,队列会等到之后某一轮正常结束时再继续。你也可以用 /after pause 自己暂停,用 /after resume 让它继续。
- 重启或 /clear 之后队列还在吗?
- 在。队列按会话保存在插件自己的存储中,恢复的会话会找到它,且不会有任务被标记为正在运行;/clear 会把队列保留给新的对话。
- 怎样隐藏输入框上方的横条?
- 把 display 选项设为 status,会在输入框下方显示一行;设为 none,则只通过 /after 查看队列。选项在 /config 中。

