目次
提示された測定結果では、定期実行の 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/null1日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形式で出力し、通常の入力、キャッシュ作成、キャッシュ読み取りを合計してください。3つすべてを含めることで、一部がキャッシュから取得される場合も、処理された入力コンテキストの量を測定できます。
claude -p "ok" --output-format json < /dev/null |
jq '.usage |
.input_tokens +
.cache_creation_input_tokens +
.cache_read_input_tokens'まず基準のコマンドを実行し、その後、各最適化を1つずつ追加してください。定期実行ジョブと同じ作業ディレクトリと認証環境を使います。提示された測定では、無人実行に近づけるため、ほぼ空の環境と空の一時ディレクトリを使用しました。
次のステップ#
既存の定期実行コマンドと、最小限のフラグを指定したコマンドで、それぞれ一度測定し、両方の合計値をClaude Codeのバージョンとともに記録してください。
出典: https://zenn.dev/yosiki/articles/claude-p-cron-token-diet
目次
