Skip to content
FunCoding

Search

Search docs, Skills and MCP

会话与 Subagent Hooks

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

This page has not been translated into English yet. The original Chinese version is shown below.

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

会话与提示

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,当前没有输出字段。将它们作为观察事件,不应期待其返回权限决定生效。