跳到正文
claudemods

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
显示位置
输入框上方、面板、弹出通知、状态栏

在 Claude Code 中安装:

/plugin install after --marketplace midudev/better-claude
全部安装方式 ↓

这个插件能做什么?

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. 1.在 Claude Code 中一行安装

    /plugin install after --marketplace midudev/better-claude

    粘贴到正在运行的会话中(v2.1.275+)。Claude Code 会先询问是否添加该插件市场。

  2. 2.从终端安装

    claude plugin marketplace add midudev/better-claude
    claude plugin install after@better-claude

    然后在所有已打开的会话中运行 /reload-plugins。

  3. 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 中。
完成提示 在 Claude Code 中运行精选

完成提示

Claude 较长的一轮结束时弹出「Done in 2m 14s」提示并播放短促提示音,还可选发送桌面通知。

  • 弹出通知
  • 执行命令
  • 修改界面
  • 播放声音

已在 v2.1.310 实测

工具调用计数器 在 Claude Code 中运行精选

工具调用计数器

统计 Claude 每轮和每个会话的工具调用次数,在加载指示器旁显示计数,并新增 /tally 查看明细。

  • 加载动画
  • 对话记录
  • 状态栏
  • 拦截工具调用
  • 修改界面
  • 添加命令/工具

已在 v2.1.310 实测

更多 计时、待办与站会、斜杠命令。