知识库/AI 与 Agent

本页由自动投喂流水线编译生成,尚未经人工复核——置信度以页面标注为准,引用前请自行核实。

Claude Code 确定性扩展:slash command 与 hooks

属性
概念AI 与 Agent属于高效协作置信· 1 源2026-07-17#claude-code#hooks#automation#workflow

Claude Code 确定性扩展:slash command 与 hooks

CLAUDE.md 里的规则是劝告性的——它是上下文,Claude 读了可以遵循也可能在长会话里淡忘。当你需要某个操作每次必然发生、不依赖模型的判断时,就要用确定性机制。课程点出了两条:

hooks:生命周期事件上挂 shell 命令(确定性)

hooks 让你在 Claude Code 的特定生命周期事件上注入 shell 命令,事件触发即执行。典型用途:改完文件自动跑测试、commit 前自动 lint、装依赖后自动跑安全扫描。用 /hooks 管理,配置落 settings.json / settings.local.json

配置结构(经 Anthropic 官方文档 code.claude.com/docs 核实——课程第三方整理的事件名与 schema 有错,勿照抄):

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "node ./tools/lint.mjs --quick", "timeout": 30 }
        ]
      }
    ]
  }
}
  • 事件是键名。常用的有 PreToolUse / PostToolUse(工具调用前后)、UserPromptSubmit(用户提交提示时)、Stop / SubagentStopSessionStartPreCompact完整事件列表以官方 hooks 文档为准——课程第三方整理写的 OnUserSubmitBeforeSubagentResponse错的、官方无此事件(详见 课程增量 的原课纠错栏)。
  • matcher 是字符串或正则(如 "Edit|Write" 匹配这两个工具),不是课程写的那种对象 schema。
  • 命令挂在 hooks: [{ type: "command", command: "..." }] 数组里。

hooks 与 CLAUDE.md 的本质区别就是确定性 vs 劝告性:要“总是执行”用 hook,要“建议 Claude 这样做”用 CLAUDE.md。这条区分本项目已在实践——lint 是硬门(可做成 PostToolUse hook 强制),而写作语言、风格约定放 CLAUDE.md 让 Claude 遵循。

slash command:把工作流封装成显式调用

.claude/commands/*.md 里每个文件即一条命令(文件名 = 命令名),$ARGUMENTS 等占位符捕获用户输入。它与 CLAUDE.md 的关键区别:CLAUDE.md 每次会话自动载入常驻,slash command 只在你显式 /命令 调用时才生效——所以适合封装“特定场景才用、不必全程占上下文”的工作流。

版本提示:Anthropic 已把 .claude/commands/ 归并进 skills 系统(.claude/skills/<name>/SKILL.md,支持 frontmatter、参数声明、附带文件),旧的 commands/ 目录仍有效。占位符除 $ARGUMENTS 外还有 $0/$1(按位)、命名参数、${CLAUDE_PROJECT_DIR} 等。具体以官方 skills 文档为准。本知识库的 wiki-ingest/query/lint 等操作集正是这种“命令封装工作流”的实例。

关联

  • Claude Code 的扩展机制一节相承(CLAUDE.md/skills/subagent/hooks 四件套)。
  • “确定性验证手段”的精神见 官方最佳实践——给 Claude 可运行的验证(测试/exit code/linter),hook 是把它自动化的一种形式。
  • 出处:课程增量lesson 6/8;hooks/命令细节经官方文档校正。

本页由自动投喂流水线编译生成、待人工复核;原始资料保留在私有工作区。

人负责策展与提问,AI 负责编译与记账· 源自 Karpathy 的 LLM Wiki 构想