Claude Codeで常にコンテクスト残量を表示する方法
Claude Code、便利なんだがユーザー目線では色々と改善点がある。
Vibe Coderであるならば、そのくらいは解決していくのが2025年の教養というものだろう。
npmでグローバルにインストールしたClaude Codeのソースコードを書き換える方法を共有します。
TLDR
M4 macbook pro Sequoia 15.2、Claude Code 1.0.62で動作を確認した。
WindowsやLinux、npm以外でのClaude Codeのインストールによって適宜スクリプト内の環境変数を修正してください。
-
npm i -g @anthropic-ai/claude-code
でインストールしたClaude Codeが前提 -
/opt/homebrew/lib/node_modules/@anthropic-ai/claude-code
に移動 - 本記事のスクリプトを実行すれば完了。
コンテクストマネジメント
不便な点の一つとして、コンテキストの使用状況が一定の閾値を超えないと表示されないこと。
現状は20%以下になった場合に表示されるが、明らかに欠陥仕様だ。
コンテクスト量が20万のClaudeモデルではタスクを一定量こなすと上限が来てしまう。
以下のコマンドでコンテクスト量を戻せるけど、開発中に持っていた情報がある程度失われてしまう。
- /compact
- 現状の情報を要約・維持しつつクリア
- /clear
- 0からスタート
なぜこの変更が必要?
コンテクストが80%残っている状態と40%残っているかで、明らかにパフォーマンスが変わる、人間と同じだ。
大きめのタスクを渡せるかも決まるのでユーザーは常にコンテクスト残量がどのくらいかを把握できる必要がある。
「今、どれくらいコンテクスト使ってるんだ…?」
「このタスクをここで依頼したら、auto-compactが途中で走るか?」
情報が一つ見えないだけで常にこれがマインドシェアを圧迫するわけです、人間の脳のコンテクストを圧迫してきます。エネルギーの無駄です。
というわけで今回は、Claude Codeのコンテキスト表示を常に表示させるカスタマイズを簡単に共有します。
こんな感じになります↓
Context tokens remaining: 125,000 (68%)
これで、コンテクストの使用状況を正確に把握しながら、安心して開発を進められるようになります。
手順
改造は cli.js
というファイルを直接編集することで行います。
macOSでHomebrewを使っている場合、ファイルは以下の場所にあります。
/opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js
わからない場合はwhich claude
などでインストールされているディレクトリを確認してください。
1. 事前準備
重要: 変更の前に、必ずバックアップを作成してください。
cd /opt/homebrew/lib/node_modules/@anthropic-ai/claude-code
cp cli.js cli.js.backup
2. コードの整形
cli.js
はminify(圧縮)されていて、このままでは人間が読むのはほぼ不可能です。
このままだとClaudeもアップデートに失敗しやすいので、prettier
を使って、読みやすいように整形します。
npx prettier --write cli.js
npx を使うと、prettier
がインストールされていなくても、一時的にダウンロードして実行してくれます。便利!
3. スクリプトで一発変更!
これから sed
コマンドを使って cli.js
を書き換えていきますが、毎回手で打つのは大変なので、シェルスクリプトにまとめました。
以下の内容で apply-claude-context-mod.sh
というファイルを作成してください。
#!/bin/bash
# Claude Code コンテキスト表示修正スクリプト
CLAUDE_DIR="/opt/homebrew/lib/node_modules/@anthropic-ai/claude-code"
CLI_FILE="$CLAUDE_DIR/cli.js"
BACKUP_FILE="$CLAUDE_DIR/cli.js.backup.$(date +%Y%m%d_%H%M%S)"
# cli.js が存在するか確認
if [ ! -f "$CLI_FILE" ]; then
echo "エラー: cli.js が見つかりません: $CLI_FILE"
exit 1
fi
# タイムスタンプ付きバックアップを作成
echo "バックアップを作成中: $BACKUP_FILE"
cp "$CLI_FILE" "$BACKUP_FILE"
# 初期状態は通常ファイルがminifyされているため、常に整形する
echo "cli.js を整形中 (少し時間がかかる場合があります)..."
cd "$CLAUDE_DIR"
npx prettier --write cli.js
echo "整形完了、ファイルの準備を待っています..."
sleep 3
# 修正が既に適用されているか確認
echo "修正が既に適用されているか確認中..."
if grep -q "// if (!Q || Z) return null;" "$CLI_FILE" && \
grep -q "tokensRemaining = hqB - A" "$CLI_FILE" && \
grep -q "Context tokens remaining:" "$CLI_FILE"; then
echo "修正は既に適用されています!何もする必要はありません。"
exit 0
fi
# 修正を適用
echo "コンテキスト表示の修正を適用中..."
# 1. 表示を隠す条件をコメントアウト
echo " - 表示条件をコメントアウト中..."
sed -i '' 's/if (!Q || Z) return null;/\/\/ if (!Q || Z) return null;/' "$CLI_FILE"
# 2. トークン計算を追加 (hqB = 200000 を使用)
echo " - トークン計算を追加中..."
sed -i '' '/let G = wZ1();/a\
let tokensRemaining = hqB - A;' "$CLI_FILE"
# 3. 自動コンパクトモードの表示テキストを更新
echo " - 自動コンパクト表示テキストを更新中..."
sed -i '' 's/"Context left until auto-compact: "/"Context tokens remaining: "/' "$CLI_FILE"
# 4. パーセンテージ表示をトークン数とパーセンテージに置き換え
echo " - パーセンテージ付きトークン数を追加中..."
sed -i '' '/Context tokens remaining: /,/}/ s/B,/tokensRemaining.toLocaleString(), " (", B, "%)",/' "$CLI_FILE"
# 5. 低コンテキスト表示を更新
echo " - 低コンテキスト表示を更新中..."
sed -i '' '/Context low (/,/}/ s/B,/tokensRemaining.toLocaleString(), " tokens remaining, ", B,/' "$CLI_FILE"
sed -i '' 's/"% remaining) · Run/"%) · Run/' "$CLI_FILE"
# 修正を検証
echo "修正を検証中..."
VERIFY_FAIL=0
if ! grep -q "// if (!Q || Z) return null;" "$CLI_FILE"; then
echo " ✗ 表示条件がコメントアウトされていません"
VERIFY_FAIL=1
else
echo " ✓ 表示条件がコメントアウトされました"
fi
if ! grep -q "tokensRemaining = hqB - A" "$CLI_FILE"; then
echo " ✗ トークン計算が追加されていません"
VERIFY_FAIL=1
else
echo " ✓ トークン計算が追加されました"
fi
if ! grep -q "Context tokens remaining:" "$CLI_FILE"; then
echo " ✗ 表示テキストが更新されていません"
VERIFY_FAIL=1
else
echo " ✓ 表示テキストが更新されました"
fi
if [ $VERIFY_FAIL -eq 1 ]; then
echo ""
echo "エラー: 一部の修正が失敗しました"
else
echo ""
echo "すべての修正が正常に検証されました!"
fi
# 修正をテスト
echo ""
echo "Claudeをテスト中..."
if claude --version > /dev/null 2>&1; then
if [ $VERIFY_FAIL -eq 0 ]; then
echo "✓ 成功!すべての修正が適用され、Claudeは正常に動作しています"
echo ""
echo "コンテキスト表示は次のように表示されます:"
echo " - 自動コンパクトON時: 'Context tokens remaining: 125,000 (68%)'"
echo " - 自動コンパクトOFF時: 'Context low (40,000 tokens remaining, 20%) · Run /compact...'"
else
echo "⚠ Claudeは動作していますが、一部の修正が適用されていない可能性があります"
echo "このバージョンでは手動での修正調整が必要かもしれません"
fi
else
echo "✗ エラー: 修正後、Claudeの実行に失敗しました"
echo "バックアップから復元中..."
cp "$BACKUP_FILE" "$CLI_FILE"
echo "バックアップが復元されました。Claudeは再び動作するはずです。"
exit 1
fi
作成したスクリプトに実行権限を与えます。
chmod +x apply-claude-context-mod.sh
4. いざ、アップデート!
準備ができたら、スクリプトを実行します。
./apply-claude-context-mod.sh
これでアップデートは完了です!
自分が作業したときにClaude Codeにメモをとらせたものですが、上記のスクリプトが動かなくてもこの記事の本文をコピーしてprettifyしたcli.jsと共にClaude Codeに頼めばやってくれるはずです。
動作確認
Claude Codeを再起動してみてください。
プロンプトの下に、常にコンテクスト残量が表示されるようになっているはずです。!
Auto-compact有効時:
Context tokens remaining: 125,000 (68%)
-
125,000
: Opusの最大コンテクスト(200,000)に対する絶対的な残りトークン数 -
68%
: auto-compactが発動するまでの残り猶予
Auto-compact無効時:
Context low (40,000 tokens remaining, 20%) · Run /compact to compact & continue
-
40,000
: 絶対的な残りトークン数 -
20%
: 全体に対する残り割合
パーセンテージの計算方法がauto-compactの設定によって自動で切り替わるのがミソです。
これで、自分の設定に合わせた最適な情報が一目でわかるようになりました。
もし動かなくなったら
もしClaude Codeが起動しなくなったり、表示がおかしくなったりした場合は、慌てずにバックアップから復元してください。
cp cli.js.backup cli.js
または、npm i -g @anthropic-ai/claude-code
を実行すればもとに戻ります。
Claude Codeがアップデートされたら
この改造は cli.js
を直接編集しているため、Claude Codeがアップデートされると、変更が上書きされてしまいます。
アップデート後は、お手数ですが再度 apply-claude-context-mod.sh
を実行してください。
Claude Codeはかなり頻繁に仕様を大きく変えるので、将来的に同じ手順では変えられない可能性があることに留意してください。
まとめ
今回は、Claude Codeのコンテキスト表示を常に表示させ、さらに詳細な情報(トークン数とパーセンテージ)を表示する改造をご紹介しました。
これでコンテクスト管理が格段に楽になり、より快適なClaude Codeライフが送れるはずです。
ぜひ試してみてください!
Discussion
Scriptありがとうございます!
私のclaude codeのバージョンは 1.0.62 ですが、tokensRemainingの変数を定義している部分がうまくsedで拾えておらず、エラーになってしまいました。
以下のように変更したので共有にさせて頂きます。0.92倍しているのはYm関数と同じロジックと合わせているようですが、これもclaude code生成なのでちょっと本当にこれでいいのかは自信なく・・・
スクリプト修正しました🙏
エックスでも引用ポストをしましたが、それなりに閲覧がありそうなのでこちらにもコメントします。
一般に、プロプライエタリ・ソフトウェアとして配布されたソフトウェアのバイナリを改変する行為はリバースエンジニアリングとみなされて利用規約違反になる可能性が非常に高いです。
Anthropicの利用規約も確認しましたが、リバースエンジニアリング禁止条項の記載もありました。
記事投稿についても第三者のリバースエンジニアリングを支援する活動として本項に違反する可能性が高く、もし規約を確認されていない・許諾をとっていないようであれば危険だと思い念の為お知らせしました。
利用規約に反していないという確証がない限り記事の公開は問題がありそうなので、一度ご確認頂ければと思います。
同じように不便に感じていたので参考になりました!
ありがとうございます!
また、以下の記事でこの記事を紹介させていただきました。