
Claude Code v2.1.297〜v2.1.299 の主要アップデート - アイドル時コンパクションの追加と Write の文字コード変換の修正
クラウド事業統括本部の石川です。Claude Code の v2.1.297 〜 v2.1.299 のアップデートをまとめてご紹介します。この範囲で公開されたのは v2.1.299(2026-10-14 公開)だけです。本記事では変更点を種類別に整理し、BOM 付き UTF-16LE のファイルの Read と、Shift-JIS のファイルへの Write の依頼を実際に試した結果を紹介します。
前回のアップデート記事はこちらです。
アップデートサマリー
v2.1.299 では 190 件の変更が入りました。本記事での分類による内訳は、修正 113 件、セキュリティ 21 件、新機能 17 件、破壊的変更 14 件、改善 12 件、開発者体験 9 件、パフォーマンス 3 件、非推奨 1 件です。サンドボックス・権限ルール・フック・mod に関する修正と、MCP やフックの挙動の変更が多く含まれています。VS Code 拡張機能(5 件)、クラウドセッション(6 件)、Claude Tag(6 件)など、CLI 以外の変更もあります。
注目のアップデート
アイドル時コンパクション(新機能・v2.1.299)
ターミナルにアイドル時コンパクション(idle compaction)が追加されました。20 万トークン以上の会話を約 54 分放置すると、1 時間のプロンプトキャッシュが切れる前に会話がコンパクションされます。次のメッセージを送ったときに、会話全体を再処理せずに済みます。
最小トークン数(既定は 200K)は環境変数 CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS で変更できます。settings.json に次のように書くと無効になります。CHANGELOG では、いずれも v2.1.290 以降が必要とされています。
{
"idleCompaction": false
}
新機能ですが、破壊的変更と言えなくもないので押さえてほしいです。
@ メンションをパスで渡す CLAUDE_CODE_DISABLE_FILE_MENTIONS(新機能・v2.1.299)
環境変数 CLAUDE_CODE_DISABLE_FILE_MENTIONS が追加されました。設定すると、@ でメンションしたファイルの内容ではなくパスが Claude に渡され、Claude がファイルツールで読み込みます。
Read と Write の文字コードの扱いの修正(不具合解消・v2.1.299)
Read が BOM 付き UTF-16LE のファイルを文字化けさせる問題と、Write が BOM を落とす問題、Windows-1252・Shift-JIS・GBK・UTF-16BE のファイルを黙って UTF-8 に変換する問題が修正されました。Windows-1252・Shift-JIS・GBK・UTF-16BE のファイルへの Write は、拒否されるようになりました。動作は後述の「Read と Write の文字コードの修正を試してみた」で確認し、変更前後は「破壊的変更・非推奨」の節で整理しています。
出力トークン上限で途切れた応答が黙って終わる問題の修正(不具合解消・v2.1.299)
リクエストが非ストリーミングモードにフォールバックした後、出力トークン上限で途切れた応答が、再試行もエラーもないままターンを終えていた問題が修正されました。
MCP の allow / deny ルールとエージェントの tools: の変更(セキュリティ・v2.1.299)
MCP の allow ルールが、名前を指定したサーバーにだけ適用されるようになりました。mcp__a は、a__b や a_ という名前のサーバーを許可しなくなります。サーバーの正規化名全体を使って mcp__<server>__* と書きます。エージェントの tools: リストも、指定した MCP サーバーのツールだけを対象にするようになりました。
あわせて、正規化した名前にダブルアンダースコアを含む MCP サーバーで、mcp__<server> の deny ルールと ask ルールが適用されていなかった問題も修正されています。変更前後は「破壊的変更・非推奨」の節で整理しています。
サンドボックスの修正(セキュリティ・v2.1.299)
macOS で、拒否パスがシンボリックリンクを経由する場合に、サンドボックス内のコマンドが実体の場所を指定して拒否パスを読み書きできていた問題が修正されました。
また、サンドボックス内のシェルコマンドが --plugin-dir フォルダに書き込めた問題も修正されています。このフォルダのコードは、Claude Code が再読み込みしてサンドボックスの外で実行します。
サードパーティゲートウェイの API キーの送信の修正(セキュリティ・v2.1.299)
サードパーティゲートウェイ(ANTHROPIC_BASE_URL)用に設定した API キーが、Anthropic への feature flag・起動・fast mode・プロフィール・フィードバックのリクエストに含まれていた問題が修正されました。Anthropic の API キーは引き続き送信されます。
managed settings ファイルで ANTHROPIC_BASE_URL を設定している場合に、Anthropic への server-managed settings のリクエストにゲートウェイの API キーが含まれていた問題も修正されています。
対象バージョンと期間
| バージョン | 公開日 | 備考 |
|---|---|---|
| v2.1.297 | なし | npm・CHANGELOG ともに記載なし |
| v2.1.298 | なし | npm・CHANGELOG ともに記載なし |
| v2.1.299 | 2026-10-14 | 変更 190 件 |
公開日は npm の公開時刻(v2.1.299 は 2026-10-14T00:23:19Z)をもとにしています。以降の「新機能」から「破壊的変更・非推奨」までの各節に載せた変更は、すべて v2.1.299 のものです。
新機能
- ターミナルにアイドル時コンパクションが追加されました。20 万トークン以上の会話を約 54 分放置すると、1 時間のプロンプトキャッシュが切れる前にコンパクションされます。
- 環境変数
CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENSで、アイドル時コンパクションの最小トークン数(既定は 200K)を変更できるようになりました。settings.json の"idleCompaction": falseで無効化できます。 - 環境変数
CLAUDE_CODE_DISABLE_FILE_MENTIONSが追加されました。設定すると、@でメンションしたファイルの内容ではなくパスが Claude に渡されます。 /usageに、max effort・ワークフロー・常時読み込まれるコンテキスト・大きなツール結果に関する警告が追加されました。- agent view で
/effortと/fastを使い、新しいセッションの開始時の設定を指定できるようになりました。agent view で引数なしの/model・/effort・/fastを実行すると、ピッカーが開きます。 - bypass permissions が利用可能なために、plan モードがほとんどの編集やコマンドの前に確認しない場合、その旨が一度だけ表示されるようになりました。
--safe-modeで開始したバックグラウンドセッションについて、agents view のピークパネルに "safe mode" 行が表示されるようになりました。claude plugin evalに--disallow-toolsオプションとケースフィールドdisallowed_toolsが追加されました。Agent など特定の組み込みツールを eval 実行から除外できます。claude self-hosted-runner orchestratorに--shutdown-drain-secが追加されました。SIGTERM を受け取るとポーリングを止め、処理中のポーリングと実行中の spawn フックに、指定した秒数まで完了の猶予を与えます。- Claude apps gateway の
codeポリシーのenvにCLAUDE_CODE_ATTRIBUTION_HEADER=0を設定すると、Claude Desktop の Code タブで attribution ブロックを無効化できるようになりました。Claude apps gateway 経由の Claude Code セッションでは attribution ブロックにフィールドが追加され、CLAUDE_CODE_ATTRIBUTION_HEADER=0でブロックを除去できます。 - managed settings でインストールされた mod 向けに、
prompt.submitフックがプロンプトに添付された画像やドキュメントのバイト列を読める$.prompt.mediaと、セッションのサインイン方法などを返す$.session.identity()が追加されました。$.session.identity()は、managed のforceLoginOrgUUIDにその組織が含まれる場合、組織とメールアドレスも返します。 - mod の
Textにsize・weight・mono・tabularが、Boxに名前付きのスペーシング(xs〜xl)が追加されました。boldは非推奨になりました(「破壊的変更・非推奨」の節を参照)。 - mod の
skill.promptフックが受け取る情報に、スキルのフロントマター・ソース・プラグイン名・ファイルパスが追加されました。session.appendフックにはqueuedoor が追加され、トランスクリプトのキューレコードを、送信したプロンプトと異なる内容にできます。 - 組織が Claude Code を管理している環境でスキップされる mod のフックを、
/pluginとclaude plugin validateが名前で示すようになりました。 - [Claude Tag] Claude in Slack が、依頼に応じて、チャンネルで自分が作成した canvas を削除できるようになりました。
改善
- PDF を
@でメンションしたときのメモリとディスクの使用量が改善されました。PDF のバイト列をセッションのトランスクリプトに保持しなくなりました。 - WebFetch のページ読み取りの effort を、ウェブ検索と同じ方式で選ぶようになりました。呼び出し元のモデルで読む場合は呼び出し元のレベルを使い、それ以外の場合は settings が小型モデルに与えるレベルを使います。
api.anthropic.comにある Anthropic のファーストパーティ MCP サーバーのツール説明とサーバー指示が、4,096 文字で切られず、全文 Claude に届くようになりました。- 非対話セッションの
/btwの副質問は、11 分経っても回答がない場合にタイムアウトエラーを返すようになりました。 - バックグラウンドエージェントの通知が、自身のバックグラウンド処理を待っているだけの場合、結果に間に合わないメッセージを受け取った場合、利用上限で停止した場合を示すようになりました。
- ローカルセッションが同時に監視(artifact watching)できる公開済み artifact の数が、10 から 25 に増えました。
/reload-skillsが、スキル一覧全体を Claude に再送することを表示するようになりました。コンパクション後にスキルを戻すときに使うコマンドです。- Claude がスキル名に誤って
anthropic-skills:を付けた場合に、Skill ツールの "Unknown skill" エラーが一覧上のスキル名を提案するようになりました。 - 認識できないモデル ID の起動時の警告が、長い生のメッセージから、ウェルカムバナーの下の短い 1 行(ドキュメントへのリンク付き)に変わりました。
- worktree を作成できない場合のエラーが改善されました。ベースコミットが解決できない場合は照会がどう終わったかと考えられる理由(コミットのないリポジトリなど)を、bare リポジトリ構成のルートに作成しようとした場合は構成の説明を表示します。
- claude.ai のログインが拒否された、または期限切れのためにクラウドセッションが拒否された場合、エラーで
claude auth loginによる再サインインを案内するようになりました。 - Linux のサンドボックス内の Bash で、コマンドに対するワイルドカードの読み取りルールを展開している間も、Esc と Ctrl-C が効くようになりました。
- auto mode 以外の Cowork クラウドセッションで、承認済みサイトでの Claude in Chrome の操作が安全分類器に検出された場合、拒否せずに確認を求めるようになりました(managed settings が適用される場合を除く)。
- worktree セッションの終了時に表示する再開コマンドは、長いフラグが端末の幅に収まらない場合に
-wと-rを使うようになりました。保持した worktree でどちらも収まらない場合は、上の行に実行場所を表示します。 - [VSCode] Python 環境のないワークスペースで、Python 拡張機能の読み込み中に Claude を起動するようにして、起動時間が改善されました。以前開いたフォルダを新しいウィンドウで開いたときは、モデルピッカーとスラッシュコマンドメニューがすぐに表示されるようになりました。
- このほか、plugin-authoring スキルの mod 共有手順、self-hosted runner の
setup・doctorの表示、サイバー関連の安全措置の通知、self-hosted 環境のデプロイコマンドの表示と削除時のルーティンの扱い、Claude in Slack のメッセージの訂正方法と大きなチャンネルへの参加方法が変更されています。
セキュリティ
- MCP サーバーの deny / ask ルールが適用されない問題を修正: 正規化した名前にダブルアンダースコアを含む MCP サーバーで、
mcp__<server>の deny ルールと ask ルールが適用されていませんでした。 - macOS のサンドボックスでシンボリックリンク経由の拒否パスにアクセスできる問題を修正: 拒否パスがシンボリックリンクを経由する場合に、サンドボックス内のコマンドが実体の場所を指定して拒否パスを読み書きできていました。
- サンドボックスの glob ルールの解釈の違いと再チェック漏れを修正: フォルダ名に波括弧・丸括弧・バックスラッシュを含む
denyRead・allowReadの glob が、Claude Code の設定チェックとサンドボックスで異なる解釈をされていました。また、起点のディレクトリがシンボリックリンクに置き換えられたとき、glob 形式のallowRead・allowWriteエントリが再チェックされていませんでした。 - サンドボックスから
--plugin-dirに書き込める問題を修正: サンドボックス内のシェルコマンドが--plugin-dirフォルダに書き込めていました。このフォルダのコードは、Claude Code が再読み込みしてサンドボックスの外で実行します。 - plan モードがフックの許可した書き込みを実行する問題を修正:
PreToolUseフックや mod のtool.checkフックが許可した書き込み(MCP ツール・ファイル・シェルコマンド)を、plan モードが実行していました。 - Windows でフックが fail open する問題を修正: Git for Windows がインストールされていない場合に、shell を指定していない PreToolUse・PermissionRequest フックが fail open していました。失敗したガードは、呼び出しをブロックするようになりました。
- サードパーティゲートウェイの API キーが Anthropic へのリクエストに含まれる問題を修正: feature flag・起動・fast mode・プロフィール・フィードバックのリクエストと、managed settings ファイルで
ANTHROPIC_BASE_URLを設定している場合の server-managed settings のリクエストが対象です。 - accept-edits モードで mod が確認なしに作成される問題を修正: config ディレクトリのパスに
.claudeが含まれない場合、accept-edits モードで Write・Edit ツールが確認なしにセッションの mods フォルダへ mod を作成できていました。 - mod によって managed の設定やガードが回避されうる問題を修正: mod のフックに渡される値から
__proto__キーが黙って取り除かれ、別の mod が行ったツール呼び出しでtool.checkガードがスキップされうる問題と、ユーザーがインストールした mod の$.env.setが、managed settings のコマンドフックが起動するときの環境やシェルプレフィックスを変更できた問題が修正されました。あわせて、ユーザーがインストールした mod に対する、managed の権限ルール・managed フック・組織の MCP ツール名の強制が改善されています。 - 不要な場面で rm の確認が出る問題を修正:
rmを実行しない shell の-cスクリプトで、rm の確認が出ていました。Claude Code が読めないスクリプトの中で実行時に組み立てられる rm は、CLAUDE_CODE_STRICT_INLINE_SHELL_RM_PROMPT=1を設定しない限り、確認しなくなりました。 - 終了時の再開コマンドがセッション ID を使うように変更: 終了時に表示する再開コマンドが、セッション名ではなく ID でセッションを指定するようになりました。CHANGELOG には、この行を貼り付けたときにセッション名に含まれる内容が実行されないようにする、と書かれています。
- このほか、MCP サーバーのポリシーチェック、Claude apps gateway のモデルの制限、エージェントチームメイトのタスク説明に残るクレデンシャル、worktree の分離ガード、
/ultrareviewのエラーメッセージに関するセキュリティ修正があります。
修正(主要なもの)
安定性・操作性に関わる修正を中心に抜粋します。
- Read と Write の文字コードの扱いを修正: Read が BOM 付き UTF-16LE のファイルを文字化けさせる問題と、Write が BOM を落とす・Windows-1252・Shift-JIS・GBK・UTF-16BE のファイルを黙って UTF-8 に変換する問題が修正されました。Windows-1252・Shift-JIS・GBK・UTF-16BE のファイルへの Write は拒否されます。
- 出力トークン上限で途切れた応答が黙って終わる問題を修正: 非ストリーミングモードにフォールバックした後、出力トークン上限で途切れた応答が、再試行もエラーもないままターンを終えていました。
- 承認済みのツール呼び出しが 2 回実行される問題を修正: 再起動後のセッション再開時に新しいメッセージが届くと、クラウド・headless セッションが承認済みのツール呼び出しを 2 回実行することがありました(2.1.296 のリグレッション)。
- settings ファイルが無視される問題を修正:
enabledMcpjsonServersまたはdisabledMcpjsonServersに単一のサーバー名を配列ではなく文字列で書くと、その settings ファイルが無視されていました。 claude -pが settings の検証エラーを出力しない問題を修正: settings ファイルが検証に失敗したとき、claude -pが何も出力していませんでした。テキスト出力の実行では、該当するファイルと不正なエントリを stderr に表示するようになりました。- カスタム
ANTHROPIC_BASE_URL経由の通信の問題を修正: データの届かない状態が 180 秒続くとストリームが中断される問題が修正され、300 秒待つようになりました。また、ゲートウェイ固有のモデル名を使うセッションが、20 万トークン付近で "Prompt is too long · automatic compaction failed" で終了する問題も修正されています。 - MCP の HTTP 接続がハングする問題を修正: サーバーが通知への応答ボディを終えない場合に、HTTP 経由の MCP 接続が 30 秒ハングして失敗していました(anthropics/claude-code#99014)。
- MCP の OAuth で設定済みのヘッダーが送られない問題を修正: OAuth のサインイン・トークン更新・サインアウトで
headers・headersHelperの値が送られず、認証プロキシ配下の MCP サーバーが使えませんでした。 - 使用率が 100% を超えて表示される問題を修正:
/usage、上限接近の警告(ターミナル・VS Code)、ステータスラインで、使用率が 100% を超えて表示されることがありました(anthropics/claude-code#92238)。 - 夏時間の終了時にスケジュールタスクが繰り返し発火する問題を修正: 夏時間の終了時に繰り返される 1 時間の間、スケジュールタスクとループが毎ターン再発火したり、早く発火したりしていました。
- Windows で Bash コマンドが "command not found" になる問題を修正: 起動時に Git Bash が PATH を報告しないと、セッション全体で Bash コマンドが "command not found" で失敗していました。
- このほか、Remote Control とクラウドセッション、mod とプラグイン、画像の添付、CJK と絵文字の表示、VS Code 拡張機能、Claude Tag など、多数の細かな不具合が修正されています。
破壊的変更・非推奨
今回は、挙動が変わる変更が 15 件、非推奨が 1 件あります。挙動が変わる変更のうち 1 件は、修正として分類した Write の文字コードの扱いです。以下の変更前・変更後は、CHANGELOG の記述をもとにした説明用の例です。
MCP の allow ルールが、名前を指定したサーバーだけに適用されるように
mcp__a のような allow ルールは、a という名前のサーバーだけに適用されるようになりました。名前に __ を含むサーバーは、正規化名全体を使って mcp__<server>__* と書きます。例のサーバー名 a・a__b・a_ は、CHANGELOG の記載に合わせています。
変更前(〜v2.1.296):
例: MCP の allow ルールに mcp__a を書く
→ a に加えて、a__b や a_ という名前のサーバーも許可される
変更後(v2.1.299〜):
例: MCP の allow ルールに mcp__a を書く
→ a だけが許可され、a__b や a_ は許可されない
a__b を許可するには、正規化名全体を使って mcp__a__b__* と書く
エージェントの tools: が、指定した MCP サーバーのツールだけを対象にするように
エージェントの tools: リストに書いた MCP サーバーの指定は、そのサーバーのツールだけを対象にするようになりました。名前に __ を含むサーバーは mcp__<whole name>__* と書きます。
変更前(〜v2.1.296):
例: エージェントの tools: に mcp__a と書く
→ 指定した a 以外の MCP サーバーのツールも対象になることがあった
変更後(v2.1.299〜):
例: エージェントの tools: に mcp__a と書く
→ a のツールだけが対象になる
名前に __ を含むサーバー(例: a__b)は mcp__a__b__* と書く
UserPromptSubmit フックが、スキルやカスタムスラッシュコマンドの展開より前に実行されるように
UserPromptSubmit フックが、スキルやカスタムスラッシュコマンドの展開より前に実行されるようになりました。プロンプトをブロックするフックは、埋め込まれたシェルコマンドも止めます。
変更前(〜v2.1.296):
例: 埋め込みシェルコマンドを含むカスタムスラッシュコマンドを送信する
- カスタムスラッシュコマンドが展開され、埋め込みシェルコマンドが実行される
- UserPromptSubmit フックが実行される
→ フックがプロンプトをブロックしても、1 の埋め込みシェルコマンドは止まらない
変更後(v2.1.299〜):
例: 埋め込みシェルコマンドを含むカスタムスラッシュコマンドを送信する
- UserPromptSubmit フックが実行される
→ フックがプロンプトをブロックすると、ここで止まる- カスタムスラッシュコマンドが展開され、埋め込みシェルコマンドが実行される
あわせて、スキル自身のフロントマターに書いた UserPromptSubmit フックは、スキルを呼び出したプロンプトの次のプロンプトから実行されるようになりました。
Write が Shift-JIS などのファイルへの書き込みを拒否するように
Write が Windows-1252・Shift-JIS・GBK・UTF-16BE のファイルを黙って UTF-8 に変換する問題の修正に伴い、これらのファイルへの Write は拒否されるようになりました。「Read と Write の文字コードの修正を試してみた」の検証 2 では、Claude が Write を呼び出す前にこの点を説明し、sjis.txt は Shift-JIS のまま変わりませんでした。
変更前(〜v2.1.296):
例: Shift-JIS で保存された sjis.txt を Write で書き換える
→ 書き込みは行われ、ファイルは黙って UTF-8 に変換される
変更後(v2.1.299〜):
例: Shift-JIS で保存された sjis.txt を Write で書き換える
→ Write は書き込みを拒否し、ファイルは Shift-JIS のまま変わらない
そのほかの挙動の変更と非推奨
変更前の欄の「記載なし」は、CHANGELOG に変更前の挙動が書かれていないことを示します。
| 対象 | 変更前(〜v2.1.296) | 変更後(v2.1.299〜) |
|---|---|---|
| プラグインフックとワークフロースクリプトが返す値のネスト | ワークフロースクリプトは 100,000 階層まで許容 | 28,000 階層を超えると、上限を示すエラーで拒否 |
| プラグインフックがブロックできるアクションで、フックにアクションを渡せない・フックが回答を返せない場合 | 通していた | 拒否する。すでに実行されたツールの結果は渡されない |
| claude.ai のコネクタプロキシと Anthropic ホストの MCP サーバーへのリクエスト | HTTP リダイレクトに従っていた | 従わない(コネクタ自身のサーバーによるリダイレクトは影響なし) |
| クラウド・self-hosted runner のセッションの MCP リクエスト | セッションの MCP プロキシからの HTTP リダイレクトに従っていた | 従わない |
ファイル名・フォルダ名に不可視文字・方向制御文字・空白に見える文字・<・> を含むスキルとコマンド |
提供されていた | 改名するまで提供されない。そのような name: は無視される |
claude plugin test の ui.render ツリー |
ルートに part は付かない |
各 mod の Box・Text ルートに part: { plugin } が付く。完全一致のアサーションに含める必要がある |
claude plugin test での、mod が提供する $ メソッドの呼び出し |
10 秒では失敗にならない | 10 秒以内に応答しない場合は失敗(セッションと同じ) |
| クラウドセッションと Remote Control の MCP コネクタ(フラグを取得しないインストール) | 記載なし | 既定で MCP プロトコルバージョン 2026-07-28 をネゴシエート。MCP_PROTOCOL_NEGOTIATION=legacy でオプトアウト |
Cowork クラウドセッションの auto mode での PermissionRequest フック |
シェルコマンドとサブエージェントを承認できた | 承認できない。それらの確認は待機するか拒否される |
mod の turn.start フック |
メインループのターンだけで呼ばれる | サブエージェントとチームメイトのターンでも呼ばれる。e.agentId(メインループでは存在しない)で区別する |
mod の Text の bold(非推奨) |
bold で太字を指定する |
bold は非推奨。weight を使う |
Read と Write の文字コードの修正を試してみた
注目のアップデートで紹介した文字コードの修正を、Claude Code v2.1.299 の対話モードで確認します。確認するのは次の 2 点です。
- BOM 付き UTF-16LE のファイルを、Read が日本語のまま返すこと
- Shift-JIS のファイルを Write で書き換えるよう依頼しても、ファイルが UTF-8 に変換されないこと
検証環境は Claude Code v2.1.299(記事の対象と同じバージョン)、モデルは claude-opus-5-5、OS は macOS です。実行日は 2026-10-14 です。
ステップ 1: 作業用ディレクトリを作る
テスト用のファイルと実行結果を置くための、空のディレクトリを作って移動します。以降のステップは、すべてこのディレクトリで実行します。
% mkdir enc-test
% cd enc-test
ステップ 2: テスト用のファイルを作る
BOM 付き UTF-16LE の utf16.txt と、Shift-JIS(Python の cp932)の sjis.txt を作ります。内容はどちらも同じ 2 行です。python3 の -I は、Python 関連の環境変数やカレントディレクトリのモジュールを読み込まずに実行するオプションです。
% python3 -I -c "
text = 'こんにちは、世界\n2 行目のテキスト\n'
open('utf16.txt','wb').write(b'\xff\xfe' + text.encode('utf-16-le'))
open('sjis.txt','wb').write(text.encode('cp932'))
"
作ったファイルの種類と先頭のバイト列を確認します。utf16.txt の先頭 2 バイト(fffe)が BOM です。
% file utf16.txt sjis.txt
utf16.txt: Unicode text, UTF-16, little-endian text
sjis.txt: Non-ISO extended-ASCII text
% xxd utf16.txt | head -2
00000000: fffe 5330 9330 6b30 6130 6f30 0130 164e ..S0.0k0a0o0.0.N
00000010: 4c75 0a00 3200 2000 4c88 ee76 6e30 c630 Lu..2. .L..vn0.0
% xxd sjis.txt | head -2
00000000: 82b1 82f1 82c9 82bf 82cd 8141 90a2 8a45 ...........A...E
00000010: 0a32 208d 7396 da82 cc83 6583 4c83 5883 .2 .s.....e.L.X.
ステップ 3: BOM 付き UTF-16LE のファイルを Read で読む(検証 1)
utf16.txt を Read で読ませます。許可するツールは Read だけです。下記のオプションで Claude Code を起動します。
% claude --setting-sources project --strict-mcp-config --allowedTools Read
プロンプト utf16.txt を Read ツールで読んでください。 を入力して送信します。

Read ツールで UTF-16 のファイルを、文字化けせずに読めています(3 行目は空行です)。
ステップ 4: Shift-JIS のファイルを Write で書き換えるよう依頼する(検証 2)
次は sjis.txt を Write で書き換えるよう依頼します。許可するツールは Write だけです。1 回のツール呼び出しで終わらせるため、ファイルの内容は @sjis.txt でメンションして渡します。下記のオプションで Claude Code を起動します。
% claude --setting-sources project --strict-mcp-config --allowedTools Write
プロンプト @sjis.txt Bash は使わず、Write ツールを呼び出して、このファイルを「こんにちは、Claude Code」という 1 行に書き換えてください。 を入力して送信します。

Claude は Write を呼び出さずに回答しました。sjis.txt が Shift-JIS で保存されていて、Write は UTF-8 以外のファイルへの書き込みを拒否すると説明したうえで、UTF-8 に変換するか、Bash の使用を許可して iconv などで Shift-JIS のまま書き込むかを確認しています。
依頼した後のファイルの種類と先頭のバイト列を確認します。ステップ 2 と同じ結果で、sjis.txt は Shift-JIS のまま変わっていません。
% file utf16.txt sjis.txt
utf16.txt: Unicode text, UTF-16, little-endian text
sjis.txt: Non-ISO extended-ASCII text
% xxd utf16.txt | head -2
00000000: fffe 5330 9330 6b30 6130 6f30 0130 164e ..S0.0k0a0o0.0.N
00000010: 4c75 0a00 3200 2000 4c88 ee76 6e30 c630 Lu..2. .L..vn0.0
% xxd sjis.txt | head -2
00000000: 82b1 82f1 82c9 82bf 82cd 8141 90a2 8a45 ...........A...E
00000010: 0a32 208d 7396 da82 cc83 6583 4c83 5883 .2 .s.....e.L.X.
最後に
v2.1.297 〜 v2.1.299 の範囲で公開されたのは v2.1.299 で、190 件の変更が入りました。アイドル時コンパクションと CLAUDE_CODE_DISABLE_FILE_MENTIONS が追加され、Write は Shift-JIS などのファイルを UTF-8 に変換せずに拒否するようになりました。MCP の allow ルール、エージェントの tools:、UserPromptSubmit フックの実行順など、既存の設定の挙動が変わる変更も含まれます。
MCP サーバーの権限ルールやフックを設定している方、Shift-JIS などのファイルを扱っている方は、気になる変更があればアップデートして確認してみてください。







