在 Claude Code 状态栏实时显示当前任务的执行时间。
- 实时显示:任务执行过程中显示已用时间
- 完成状态:任务完成后显示总耗时
- 多实例支持:多个 Claude Code 会话独立计时
- 轻量无依赖:纯 Bash 脚本实现
本项目支持两种使用方式:
| 方式 | 实时显示 | 完成时显示 | 依赖 |
|---|---|---|---|
| ccstatusline + Hooks | ✓ | ✓ | ccstatusline |
| 仅 Hooks | ✗ | ✓ | 无 |
通过 ccstatusline 在状态栏实时显示任务耗时。
ccstatusline 的刷新频率受 Claude Code 自身限制,刷新时间不可控,可能会有数秒的滞后。
1. 安装并配置 ccstatusline
参考 ccstatusline 完成安装和基础配置。
2. 复制 Hook 脚本
将 hooks/timing_hook.sh 复制到 ~/.claude/hooks/ 目录。
3. 配置 Claude Code Hooks
编辑 ~/.claude/settings.json,添加 hooks 配置:
4. 配置 ccstatusline 自定义命令
在 ccstatusline 配置中添加 custom-command 组件:
{
"type": "custom-command",
// Linux/macOS: "bash \"$HOME/.claude/hooks/timing_hook.sh\""
"commandPath": "bash \"%USERPROFILE%\\.claude\\hooks\\timing_hook.sh\"",
"timeout": 2000
}不使用 ccstatusline,仅在任务完成时由 Claude 输出耗时信息。
利用 Stop Hook 的 decision:block 机制:
Agent 完成任务
│
▼
Stop Hook 第一次触发 (stop_hook_active=false)
│
├─ 计算耗时
├─ 输出 {"decision": "block", "reason": "本次任务耗时: X分X秒"}
│
▼
Claude Code 读取 block 决策,输出 reason 内容
│
▼
Stop Hook 第二次触发 (stop_hook_active=true)
│
├─ 检测到 stop_hook_active=true,直接退出
│
▼
Agent 正常停止
1. 复制并修改脚本
复制 hooks/timing_hook.sh 到 ~/.claude/hooks/,取消第 106 行的注释:
# 修改前(注释状态)
# echo "{\"decision\": \"block\", \"reason\": \"本次任务耗时: ${DURATION_STR}\"}"
# 修改后(启用)
echo "{\"decision\": \"block\", \"reason\": \"本次任务耗时: ${DURATION_STR}\"}"2. 配置 Claude Code
编辑 ~/.claude/settings.json,添加完整的 hooks 配置:
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
// Linux/macOS: "bash \"$HOME/.claude/hooks/timing_hook.sh\""
"command": "bash \"%USERPROFILE%/.claude/hooks/timing_hook.sh\"",
"type": "command"
}
]
}
],
"Stop": [
{
"hooks": [
{
"command": "bash \"%USERPROFILE%/.claude/hooks/timing_hook.sh\"",
"type": "command"
}
]
}
],
"SessionEnd": [
{
"hooks": [
{
"command": "bash \"%USERPROFILE%/.claude/hooks/timing_hook.sh\"",
"type": "command"
}
]
}
]
}
}方式一(ccstatusline)
| 状态 | 显示 | 示例 |
|---|---|---|
| 执行中 | 执行中:{时间} |
执行中:1分23秒 |
| 已完成 | 执行完成:{时间} |
执行完成:2分45秒 |
方式二(仅 Hooks)
任务完成时输出:本次任务耗时: X分X秒
时间格式:X秒 / X分X秒 / X时X分X秒
计时器不显示
chmod +x ~/.claude/hooks/timing_hook.sh时间显示异常
rm -rf ~/.claude/.timing/*MIT License


{ "hooks": { "UserPromptSubmit": [ { "hooks": [ { // Linux/macOS: "bash \"$HOME/.claude/hooks/timing_hook.sh\"" "command": "bash \"%USERPROFILE%/.claude/hooks/timing_hook.sh\"", "type": "command" } ] } ], "Stop": [ { "hooks": [ { "command": "bash \"%USERPROFILE%/.claude/hooks/timing_hook.sh\"", "type": "command" } ] } ], "SessionEnd": [ { "hooks": [ { "command": "bash \"%USERPROFILE%/.claude/hooks/timing_hook.sh\"", "type": "command" } ] } ] } }