目录

提供的测量结果显示,定期执行的 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% |

使用最精简的调用#

对于只需成功获得固定回复的任务,最终测试的命令如下。

snippet.txt
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 格式输出,将普通输入、缓存创建和缓存读取三项相加。将这三项全部计入,即使部分内容来自缓存,也能测量实际处理的输入上下文量。

snippet.txt
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

目录