跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

会话与 Subagent Hooks

注入会话上下文、观察压缩、控制子任务启动,并为完成事件设置有限续跑。

不同生命周期事件的阻塞能力不同。会话初始化和压缩观察不能代替执行前权限事件。

会话与提示

sessionStart 在创建新 composer conversation 时触发,可返回 env 与 additional_context;env 会传给后续 hook 执行。它按 fire-and-forget 运行,调用方不等待或执行阻塞响应。即使 schema 接受 continue:false,也不能阻止会话创建。

sessionEnd 用于日志和清理,响应只记录而不用于后续决策。输入包括 reason、duration_ms、final_status 等。

需要阻止用户提示提交时使用 beforeSubmitPrompt:输入 prompt 和 attachments,返回 continue 布尔值及可选 user_message。

Subagent 生命周期

subagentStart 可检查 subagent_type、task、parent_conversation_id、subagent_model、is_parallel_worker 和可选 git_branch。返回 permission 为 allow 或 deny;ask 不受支持,会被当作 deny。

subagentStop 提供 status、summary、duration_ms、modified_files、loop_count 和独立的 agent_transcript_path。只有 status 为 completed 时才消费 followup_message。

完成后续跑

stop 在 Agent loop 结束时收到 completed、aborted 或 error 状态。非空 followup_message 会作为下一条用户消息自动提交。

{
  "version": 1,
  "hooks": {
    "stop": [
      { "command": ".cursor/hooks/check-completion.sh", "loop_limit": 3 }
    ]
  }
}

脚本应根据状态与完成证据决定是否返回 followup_message,目标已达成时不再返回。loop_count 从 0 起,Cursor hook 默认每脚本最多 5 次自动续跑;示例改为 3。null 表示无上限,兼容 Claude Code hooks 的默认值也是 null,迁移时应专门检查。

压缩与回复观察

preCompact 带 trigger、context_usage_percent、context_tokens、context_window_size、message_count 等字段,可返回 user_message,但不能阻止或修改压缩。

afterAgentResponse 提供完成消息的 text;afterAgentThought 提供完成思考块的 text 与可选 duration_ms,当前没有输出字段。将它们作为观察事件,不应期待其返回权限决定生效。