使用哑ping方式定时重置Claude Code

AI 摘要: 本文分析了ClaudeCode的5小时重置窗口Token机制及其潜在优化方案,包括容量管理、使用策略和高峰时段节流措施。介绍了ClaudeCode的双叠加计数器机制及套餐容量变化,强调在高峰时段和长任务中合理控制Token消耗的重要性。提出通过规划模型调用、优化上下文、监控工具以及调研多账号切换和扩容方案,以最大化利用每个窗口的Token容量,提升工作效率。未来还将探索使用不同模型和订阅策略,进一步增强容量和性能。整体旨在帮助用户合理安排资源,提升ClaudeCode应用的效果与成本控制。

1. 问题背景

ClaudeCode 有 5Hour 重置窗口 Token 机制,希望可以结合自己的作息时间合理的最大化利用每个阶段 Token 容量

2. 一些 CC 的知识补充

2.1. Claude Code 实际运行着两个叠加计数器:

  1. 5 小时滚动窗口(从你发送第一条消息开始计时,追踪随后 300 分钟内所有进出 token 消耗后自动重置);
  2. 以及周度上限(每 7 天重启一次的算力小时预算,相当于战略储备)

2.2. Token 消耗的来源

  1. Input: 输入长度
  2. Cache: 累积上下文(对话越长,即便发"继续"也要重读大量历史)
  3. Tool: 工具调用
  4. Output: 输出长度
  5. Model: 模型能力(Sonnet/Opus)

2.3. 高峰时段额外节流

工作日早 5–11 AM(太平洋时间) 5 小时限额会被额外压缩,社区实测乘数约 1.3–1.5×。换算成北京时间就是 晚 8 点 ~次日凌晨 2 点 是消耗最贵的时段。

2.4. 一些 Token 优化措施

  1. 主动控制窗口起点 -> 稍后我们要做的
  2. 按需调用模型,Plan-then-Execute 节省 Opus 用量。/model opusplan 命令用 Opus 做规划、Sonnet 执行,切换模型不清空对话,Sonnet 依然能看到 Opus 生成的全部计划。这可以把 Opus 的消耗降到最低,因为 Opus 只用在最值钱的规划阶段。
  3. 适当控制 Context 膨胀,每个任务给一个清晰目标,完成后开新任务,避免在同一 Context 里无限堆砌需求
  4. /usage 实时监控
  5. 避开欧美高峰时间,周五下午是欧美开发者的高峰叠加时段,亚太开发者的周末部署、欧洲团队的冲刺收尾和美国最高效时段三流叠加,容量最紧张。

2.5. 双订阅账号切换(调研中)

  1. CLAUDE_CONFIG_DIR账号动态隔离,通过 symlink 复用 projects、skill 等,方便两个账号能访问同一份对话历史
  2. claude-swap 一键切换

3. 在 Linux 服务上配置 CC 哑 Ping 定时触发脚本

原理:5 小时窗口在你发送第一条消息时开始计时,在 5 小时后过期后你发送下一条消息时重置。所以"哑 ping"就是在你希望新窗口开始的时刻,发一条极低消耗的消息来定锚起点。

3.1. 配置 HTTP 网络代理(如果需要)

vim ~/.bashrc

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 新增一个命令,proxy可以改为你自己的
proxy_command () {
	if [ "$#" -gt 0 ]
	then
		if [ "$1" = "start" ]
		then
            PROXY="xx"
			export http_proxy="$PROXY"
			export https_proxy="$PROXY"
			printf "start proxy, http_proxy=%s, https_proxy=%s 🚀...\n" $http_proxy $https_proxy
			echo "curl -I google.com 🚀..."
			curl -I google.com
		elif [ "$1" = "stop" ]
		then
			unset http_proxy https_proxy
			printf "stop proxy, clean environment: http_proxy=%s, https_proxy=%s 🚫\n" $http_proxy $https_proxy
		fi
	else
		print "Usage $0 {start|stop} ⚠️...."
	fi
}

## ipinfo测试
proxy_command start
ipinfo

inpinfo 工具: https://github.com/lupguo/ipinfo

ipinfo 安装: curl -fsSL https://raw.githubusercontent.com/lupguo/ipinfo/main/install.sh | bash

3.2. 在 Rock Linux 上安装 Claude Code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 更新系统
sudo dnf update -y

# 启动代理
proxy_comand start

# 安装 Claude Code(官方推荐方式)
curl -fsSL https://claude.ai/install.sh | bash

# 验证安装
claude --version

# OAuth 登陆(重要,这一步需要手动登陆)

3.3. 创建 shell 脚本(使用 Haiku 模型哑 Ping)

vim ~/claude-ping/cc-dummy-ping.sh

  1. cron 目录初始化: mkdir -p ~/claude-ping/logs && touch ./claude-ping/logs/claude-ping-cron.log
  2. ping sh 脚本初始化: touch ~/claude-ping/cc-dummy-ping.sh && chmod +x ~/claude-ping/cc-dummy-ping.sh
  3. 编辑 cron 脚本: vim ~/claude-ping/cc-dummy-ping.sh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash

# Claude Code 哑 Ping 脚本 - 支持订阅模式 + 详细时间戳日志
# 使用 Haiku 模型发送简单指令,触发 5H 使用窗口

export PATH="$PATH:/usr/local/bin"

# 日志目录(推荐使用绝对路径)
LOG_DIR="$HOME/claude-ping/logs"
LOG_FILE="$LOG_DIR/cc-ping.log"
mkdir -p "$LOG_DIR" 2>/dev/null
if [ ! -d "$LOG_DIR" ]; then
    echo "❌ 无法创建日志目录: $LOG_DIR" >&2
    exit 1
fi

# 确保日志文件存在并可写
touch "$LOG_FILE" 2>/dev/null
if [ ! -f "$LOG_FILE" ] || [ ! -w "$LOG_FILE" ]; then
    echo "❌ 无法创建或写入日志文件: $LOG_FILE" >&2
    exit 1
fi

# 设置代理
PROXY="http://127.0.0.1:8118"
export HTTP_PROXY="$PROXY"
export HTTPS_PROXY="$PROXY"
export NO_PROXY="localhost,127.0.0.1"

# 日志函数(带时间戳)
log() {
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] $1" | tee -a "$LOG_FILE"
}

# ==================== 执行开始 ====================
echo "=== Claude Dummy Ping 开始 $(date '+%Y-%m-%d %H:%M:%S') ===" | tee -a "$LOG_FILE"
log "日志目录: $LOG_DIR"
log "日志文件: $LOG_FILE"

# 测试代理(可选)
log "当前 IP 信息检查..."
ipinfo >> "$LOG_FILE" 2>&1 || echo "[$(date '+%Y-%m-%d %H:%M:%S')] ipinfo 命令执行失败或未安装" >> "$LOG_FILE"

log "开始执行哑 Ping,使用 Haiku 模型"

# 执行哑 Ping
claude --model haiku -p "ping" --output-format text >> "$LOG_FILE" 2>&1

RESULT=$?
if [ $RESULT -eq 0 ]; then
    log "✅ Dummy Ping 执行成功"
else
    log "❌ Dummy Ping 执行失败,退出码: $RESULT"
fi

log "哑 Ping 流程结束"

echo "=== Claude Dummy Ping 结束 $(date '+%Y-%m-%d %H:%M:%S') ===" | tee -a "$LOG_FILE"
echo "" >> "$LOG_FILE"   # 空行分隔每次执行记录

权限修改

1
2
3
4
5
# 手动测试脚本
sh ~/claude-ping/cc-dummy-ping.sh

# 添加运行权限
chmod +x ~/claude-ping/cc-dummy-ping.sh

3.4. 配置 Cron 定时任务(每天早上 6:30)

1
2
3
4
5
6

# 编辑当前用户的 crontab(推荐 root 或专用用户)
crontab -e

# Claude Code 每天 6:30 哑 Ping,触发 5H 窗口
30 6 * * * /bin/bash -c 'cd ~ && ./claude-ping/cc-dummy-ping.sh >> ./claude-ping/logs/claude-ping-cron.log 2>&1'

日志查看测试结果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
=== Claude Dummy Ping 开始 2026-06-23 16:36:41 ===
[2026-06-23 16:36:41] 日志目录: /home/Terry/claude-ping/logs
[2026-06-23 16:36:41] 日志文件: /home/Terry/claude-ping/logs/cc-ping.log
[2026-06-23 16:36:41] 当前 IP 信息检查...
{
  "ip": "...",
  ...
  "source": "ipinfo.io"
}
[2026-06-23 16:36:41] 开始执行哑 Ping,使用 Haiku 模型
Pong! Ready to help. What can I do for you?
[2026-06-23 16:36:45] ✅ Dummy Ping 执行成功
[2026-06-23 16:36:45] 哑 Ping 流程结束
=== Claude Dummy Ping 结束 2026-06-23 16:36:45 ===

4. 小结

通过 Cron 定时提前重置窗口,最关键还是 CC 默认的 Pro 容量不够。关于容量的问题,我自己也想到了一些解决办法:

  1. 规划使用 Opus 模型,执行使用 Sonnet 模块,优化 Token 的使用
  2. 适当的新开会话,避免历史上下文占用过多 Context
  3. 扩容,升级 Max,20 倍容量,100 刀/月,还是有一些小贵
  4. 订阅两个 20 刀/月的账号,通过 swap 方式接力
  5. 改用 GLM-5.2 模型替换,让 ClaudeCode 通过 Fibrost LLM Gateway 走 GLM 5.2 模型

后面这部分也会做一些文档沉淀分享出来!