🐵

Claude Codeで常にコンテクスト残量を表示する方法

に公開
4

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のインストールによって適宜スクリプト内の環境変数を修正してください。

  1. npm i -g @anthropic-ai/claude-codeでインストールしたClaude Codeが前提
  2. /opt/homebrew/lib/node_modules/@anthropic-ai/claude-codeに移動
  3. 本記事のスクリプトを実行すれば完了。

コンテクストマネジメント

不便な点の一つとして、コンテキストの使用状況が一定の閾値を超えないと表示されないこと。

現状は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 というファイルを作成してください。

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

sumiksumik

Scriptありがとうございます!
私のclaude codeのバージョンは 1.0.62 ですが、tokensRemainingの変数を定義している部分がうまくsedで拾えておらず、エラーになってしまいました。
以下のように変更したので共有にさせて頂きます。0.92倍しているのはYm関数と同じロジックと合わせているようですが、これもclaude code生成なのでちょっと本当にこれでいいのかは自信なく・・・

# 2. 残トークン数を計算する処理を追加
echo "  - Adding token calculation"
sed -i '' '/let G = wZ1();/a\
  let maxTokens = G ? cqB() * 0.92 : cqB();\
  let tokensRemaining = maxTokens - A;' "$CLI_FILE"
Shun KimuraShun Kimura

エックスでも引用ポストをしましたが、それなりに閲覧がありそうなのでこちらにもコメントします。
一般に、プロプライエタリ・ソフトウェアとして配布されたソフトウェアのバイナリを改変する行為はリバースエンジニアリングとみなされて利用規約違反になる可能性が非常に高いです。
Anthropicの利用規約も確認しましたが、リバースエンジニアリング禁止条項の記載もありました。
https://anthropic.com/legal/commercial-terms

Use Restrictions. Customer may not and must not attempt to (a) access the Services to build a competing product or service, including to train competing AI models or resell the Services except as expressly approved by Anthropic; (b) reverse engineer or duplicate the Services;

記事投稿についても第三者のリバースエンジニアリングを支援する活動として本項に違反する可能性が高く、もし規約を確認されていない・許諾をとっていないようであれば危険だと思い念の為お知らせしました。

利用規約に反していないという確証がない限り記事の公開は問題がありそうなので、一度ご確認頂ければと思います。