目录
提供的测量结果显示,定期执行的 claude -p "ok" 调用消耗了 39,968 个输入令牌。通过添加 --safe-mode、禁用工具并替换系统提示词,可将其降至 737 个,减少 98%。
要点#
- 即使提示词只有 2 个字符,也可能因配置、钩子、工具定义和默认系统提示词而加载数万个令牌。
- 使用
--safe-mode和--tools ""后,测得的输入用量减少了 93%;再替换系统提示词后,减少了 98%。 --settings '{}'不会覆盖任何配置,因此没有效果。- 这些结果来自通过固定回复检查认证的测试。执行实际工作的任务需要根据用途选择工具和指令。
什么消耗了 40,000 个令牌?#
这个任务通过 macOS 的 LaunchAgent 定期调用 claude -p "ok",检查认证是否仍然有效。回复内容并不重要。即便如此,每次回复仍以个人 SessionStart 钩子生成的消息开头,告知已加载 Obsidian 笔记。
这条简短的提示词继承了交互式环境。在 Claude 回答之前,个人指令、钩子内容、技能、插件和 MCP 配置就已加入上下文。此外,还会加入内置工具定义和默认系统提示词。
测量结果显示了哪些部分可以削减。这是特定配置环境下的结果,并非所有环境都会产生相同的令牌数。
| 调用方式 | 输入令牌数 | 减少比例 | |---|---:|---:| | 常规 claude -p "ok" | 39,968 | — | | 添加 --settings '{}' | 39,968 | 0% | | 在基准命令中添加 --safe-mode | 16,798 | 58% | | 再添加 --tools "" | 2,931 | 93% | | 再替换系统提示词 | 737 | 98% |
使用最精简的调用#
对于只需成功获得固定回复的任务,最终测试的命令如下。
claude -p "ok" \
--model haiku \
--safe-mode \
--tools "" \
--system-prompt "Reply with exactly: OK" \
--effort low \
--no-session-persistence \
< /dev/null按每天调用 4 次计算,测得的输入总量相当于:基准命令每周约 112 万个令牌,精简后的命令每周 20,636 个令牌。这表示输入量,并非费用估算。缓存令牌和订阅用量需要另行解读。
最后添加的选项用于控制输出和处理无人值守运行。在这次测试中,--effort low 将思考令牌从 102 个降至零,输出令牌仅剩 4 个。将标准输入重定向为 /dev/null 后,可以避免 3 秒的等待,以及合并标准错误和标准输出时可能混入结果的警告。
各个标志会移除什么#
--safe-mode 会跳过个人或项目上下文,包括 CLAUDE.md、钩子、技能、插件、MCP 服务器、自定义命令、智能体和自动记忆等。根据文档,认证、模型选择、内置工具和权限会保留。在这个环境中,输入令牌减少了约 23,000 个。
--tools "" 会禁用内置工具,进一步减少约 13,900 个令牌。对于需要访问文件的任务,请显式选择所需工具,例如 --tools "Read"。此标志不会禁用 MCP 工具。在测试命令中,MCP 是通过安全模式排除的。
--system-prompt 会替换默认系统提示词,此次又减少了约 2,200 个令牌。同时,它也会移除默认的工具使用指南和安全指令。请仅在用途严格受限的调用中进行此类替换,例如返回固定的“OK”。读取文件或作出判断的任务需要适当的指令。
检查认证和版本#
--settings '{}' 并不会重置配置。它只覆盖指定的键,因此空对象会让现有配置保持不变。这就是测得的令牌数仍为 39,968 的原因。
--bare 另有认证限制。测试所用 CLI 的帮助信息指定使用 ANTHROPIC_API_KEY 或 apiKeyHelper,不支持 OAuth 和钥匙串认证。即使传入 CLAUDE_CODE_OAUTH_TOKEN 也会失败。单独设置 CLAUDE_CONFIG_DIR 时,也需要在对应目录中另行认证。
安全模式被描述为故障排查功能。在自动化中使用之前,请查看已安装版本的帮助信息,并在调度器的实际环境中验证命令。调用成功表明向所选模型发送的请求正常,但并不保证所有交互式功能都可用。
在自己的环境中测量输入量#
以 JSON 格式输出,将普通输入、缓存创建和缓存读取三项相加。将这三项全部计入,即使部分内容来自缓存,也能测量实际处理的输入上下文量。
claude -p "ok" --output-format json < /dev/null |
jq '.usage |
.input_tokens +
.cache_creation_input_tokens +
.cache_read_input_tokens'先运行基准命令,再逐一添加各项优化。使用与定时任务相同的工作目录和认证环境。在提供的测量中,为尽量接近无人值守运行,使用了几乎为空的环境和空的临时目录。
下一步#
分别对现有定时执行命令和使用最精简标志的命令测量一次,将两者的总量与 Claude Code 版本一起记录下来。
来源: https://zenn.dev/yosiki/articles/claude-p-cron-token-diet
目录
