Skip to content

Claude Code 的 hooks 与 statusLine:把上下文接入可编排命令链路 ​

在 Claude Code 里,hooks 和 statusLine 的底层模型可以用一句话概括:

它们都是“把上下文送进一条命令”,再消费命令输出。

效果配图

先建立正确心智模型 ​

你可以把它们理解成两个不同触发时机的命令入口:

  • statusLine:偏状态展示
  • hooks:偏事件触发

两者共享同一种数据输入方式:Claude Code 将上下文以 JSON 形式写入 stdin,脚本读取后处理,再通过 stdout 输出结果。

配置示例 ​

statusLine ​

json
"statusLine": {
  "type": "command",
  "command": "uv run /home/forty-wsl/dev49/ai-all/claudecode/claudeSettings/statusLine.py"
}

hooks ​

json
"hooks": {
  "Stop": [
    {
      "hooks": [
        {
          "type": "command",
          "command": "echo 0 | uv run /home/forty-wsl/dev49/ai-all/claudecode/claudeSettings/tg_json_pretty_send.py"
        }
      ]
    }
  ],
  "Notification": [
    {
      "matcher": "permission_prompt",
      "hooks": [
        {
          "type": "command",
          "command": "uv run /home/forty-wsl/dev49/ai-all/claudecode/claudeSettings/tg_json_pretty_send.py"
        }
      ]
    },
    {
      "matcher": "idle_prompt",
      "hooks": [
        {
          "type": "command",
          "command": "uv run /home/forty-wsl/dev49/ai-all/claudecode/claudeSettings/tg_json_pretty_send.py"
        }
      ]
    }
  ]
}

最小可用脚本示例 ​

下面这段 Python 足够解释完整数据流:

python
import sys
import json


def print_summary(payload):
    current_directory = payload["workspace"]["current_dir"]
    model_id = payload["model"]["id"]
    input_tokens = payload["context_window"]["total_input_tokens"]
    output_tokens = payload["context_window"]["total_output_tokens"]
    total_tokens = input_tokens + output_tokens

    print(f"项目目录:{current_directory} | 模型:{model_id}")
    print(f"输入:{input_tokens} | 输出:{output_tokens} | 总数:{total_tokens}")


def main():
    payload = json.load(sys.stdin)
    print_summary(payload)


if __name__ == "__main__":
    main()

这段逻辑只做三件事:

  1. 从 stdin 读取 JSON
  2. 解析关键信息
  3. 把结果输出到 stdout

链路拆解 ​

完整流程可以拆成 5 步:

  1. Claude Code 生成当前会话上下文
  2. 上下文序列化为 JSON
  3. JSON 通过 stdin 传给配置命令
  4. 外部脚本读取并生成输出
  5. 输出进入 statusLine 或外部通知通道

把这条链路理解透后,你会发现:hooks 与 statusLine 不是零散功能,而是统一的可编排入口。

实际价值 ​

当你把它当成“命令编排层”而不是“UI 小功能”,扩展方向会更清晰:

  • 在状态栏显示目录、模型、Token
  • 在事件触发时推送通知
  • 继续串联日志、Git、告警机器人等外部能力

结论 ​

hooks 与 statusLine 的关键不是配置项本身,而是输入输出协议:stdin 接收上下文,stdout 产出结果。

只要脚本可控,这条链路就可以按你的工程需求持续扩展。

Nine and AI — Licensed under the MIT License