Files
claudeplus/hooks/session-end-log/README.md
Zhang Jiahao 23c7037b57 Add session-end-log hook with per-session token tally
既有 Stop 钩子 token-stats-hook 记的是跨会话累计快照, 无法区分"这次会话
用了多少"; session-end-log 在 SessionEnd 时按 session_id 解析本次 transcript
做单会话统计, 产出一行可回溯的索引写入 ~/.claude/log.md, 方便事后盘点
哪场会话烧了哪些 token。Python 写零依赖, Ubuntu 自带 python3 免构建。
2026-04-21 00:58:00 +08:00

1.3 KiB
Raw Blame History

session-end-log

Claude Code SessionEnd hook每次会话结束时在 ~/.claude/log.md 追加一行元数据 + token 用量。

用 Python 编写零依赖Ubuntu 自带 python3)。

输出格式

- 2026-04-21T00:55:30 | session=353cbdc1 | cwd=/home/charles | reason=clear | tokens=total:592.7k in:39 out:3.7k cache_r:558.2k cache_w:30.7k

字段:

  • reasonclear / logout / resume / prompt_input_exit 之一
  • sessionsession_id 前 8 位
  • tokens:读取该会话的 transcript~/.claude/projects/<slug>/<sid>.jsonl)按 type=assistant 的 usage 累加transcript 读不到时降级为 tokens=unavailable,不阻塞会话退出

安装

mkdir -p ~/.claude/hooks
cp hooks/session-end-log/session-end-log.py ~/.claude/hooks/
chmod +x ~/.claude/hooks/session-end-log.py

然后在 ~/.claude/settings.jsonhooks 下加入(与现有 Stop 等共存):

{
  "hooks": {
    "SessionEnd": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/session-end-log.py 2>/dev/null || true"
          }
        ]
      }
    ]
  }
}

测试

echo '{"cwd":"/home/charles","reason":"test","session_id":"<real-session-id>"}' \
    | python3 ~/.claude/hooks/session-end-log.py
tail -1 ~/.claude/log.md