Claude Media
EndConversationツールの挙動 — Claude Codeが会話を終了する条件

EndConversationツールの挙動 — Claude Codeが会話を終了する条件

EndConversationツールはClaude Codeのセッションを強制終了する数少ない仕組みです。発火条件、終了後のロック、権限やフックで止められない理由を解説します。

EndConversationツールは、Claude Codeが会話そのものを終わらせる数少ない仕組みです。Claudeが自分の判断でセッションをロックする以上、発火は繰り返しの迷惑行為への最後の手段に限られますが、条件も終了後の挙動もClaude Codeの他の安全策とは大きく違います。v2.1.213で追加されたこのツールは、そうした独自の設計を持っています。

EndConversationツールとは何か

EndConversationツールは現在のセッションを終了するツールです。Claudeがこれを使うのは次の2つの場面に限られます。

  • 持続的な迷惑行為への最後の手段として。会話をそらそうとする試みが失敗し、直前のメッセージで明確な警告を出したあとに使う
  • ユーザーが明示的にこのツールのデモを見たいと頼み、セッションを終了してよいと確認した場合

単なる苛立ちや暴言、作業がうまく進まないことは条件に含まれません。有害なコンテンツの要求についても、Claudeは会話を終了するのではなく、その要求自体を断ります。この振る舞いはclaude.aiが一部の会話を終了できる仕組みと同じ方針に沿っています。

セッションが終了したあと何が起きるか

会話が終了すると、セッションはロックされます。新しいプロンプトを送っても、ほとんどのコマンドを実行しようとしても「Claude ended this conversation. Start a new session (or /clear) to continue.」というメッセージが返るだけです。動くコマンドは/clear/resume/help/exit/feedbackの5つだけに絞られます。

Claude Codeは終了した事実をセッションのトランスクリプトに記録します。終了したセッションを/resumeで開き直しても、ロックはそのまま復元されます。履歴そのものが削除されるわけではなく、ロックされた状態で保存され続けるという扱いです。

非対話モード(-pモード)で終了済みセッションを再開しようとすると、エラーになり終了コード1で終わります。スクリプトやパイプラインからこの終了コードを見落とすと、実際には失敗しているのに成功したものとして処理を先に進めてしまう可能性があります。

このロックは、/clearが行うコンテキストのリセットとは性質が違います。/clearは同じセッションで新しい会話を始めるための操作ですが、EndConversationによるロックはそのセッションをこれ以上前に進められない状態にします。ロック後も動く5つのコマンドに/clearが含まれているのは、ロックされたセッションから抜けて新しいセッションへ切り替える出口として用意されているためで、ロックされたまま会話を続けられるようになるわけではありません。/resumeは開き直してもロックを復元する側で、解除の手段ではありません。

権限設定でもフックでも止められない理由

EndConversationツールは承認を求めません。フックの側もこのツールだけは例外扱いです。PreToolUseフックはもちろん、PostToolUseフックもPermissionRequestフックも、EndConversationの呼び出しに対しては発火しません。呼び出しの前にも後にも、外から観測する手段が用意されていないということです。

権限ルールの側にも同じ例外があります。通常、Bashのような裸のツール名を指定したdenyルールは、そのツールをClaudeの視界から完全に取り除きます。EndConversationだけはこの除去の対象外です。ほかのツールが1つでも残っている限り、EndConversationを名指ししたdenyルールは効果を持たず、askルールを付けても確認プロンプトは出ません。--disallowedTools--toolsのリストからも取り除けません。

この扱いは意図的なものです。EndConversationツールは会話を終わらせること以外に何もせず、ファイルもデータも読み書きしません。迷惑行為への安全策は、それを止められる側が無効化できてしまっては意味がないため、あえて権限システムとフックの両方の外に置かれています。

サブエージェントとバックグラウンドタスクでの扱い

サブエージェントにはこのツールが渡されません。Claude Codeがサブエージェントへ渡すツールを絞り込む最初のフィルターが、AskUserQuestionExitPlanModeと並べてEndConversationを名指しで除外しているためです。理由は仕様として明快で、このツールが終了できるのはメインの会話だけだからです。サブエージェント自身の会話を終わらせる手段としては意味を持たず、渡す理由自体がありません。

メインの会話とツールリストを共有するバックグラウンドタスクには、ツールとして見えます。ただしそこから呼び出しても会話は終了せず、何も起こりません。存在はしていても効果を持たない、名前だけが残った状態です。

どの環境で実際に使えるか

EndConversationツールが登場するのは、次の条件をすべて満たすときだけです。

条件内容
バージョン内容Claude Code v2.1.213以降
モデル内容Opus 4.8、Sonnet 5、Fable 5、またはこれらのファミリーの後継モデル
実行面内容対話的なターミナルセッション(JetBrainsプラグインがIDE統合ターミナル経由で実行する場合を含む)
起動モード内容--bareではないこと。bareモードはシェルとファイル系のツールしか読み込まないため、ここでは登録されない
プロバイダー内容Amazon Bedrock・Claude Platform on AWS・Google Cloud's Agent Platform・Microsoft Foundry経由、およびクラウドゲートウェイ経由のサインインでは利用できない

対話的なターミナル以外の実行面では、そもそもツールとして提供されません。非対話の-p実行、Agent SDK(TypeScript/Python)経由のセッション、独自のCLIを同梱するVS Code拡張のパネル、GitHub Actions、Claude Code on the webのいずれもツールリストに含まれません。モデルの条件も狭く、Opus 4.8・Sonnet 5・Fable 5より前の世代のモデルでセッションを動かしている場合、バージョンや実行面の条件を満たしていてもこのツール自体が現れません。

この設計は何を守ろうとしているか

EndConversationツールの制約を並べると、これは「Claudeが会話を終わらせられる汎用機能」ではなく、迷惑行為への対応に絞った狭い安全弁だと分かります。フックや権限の上書きを一切許さない設計は、Claude Codeの他の機能が向かっている方向とは逆です。多くの機能はフックや設定でユーザーに制御を返す方向に進んでいますが、このツールに限っては制御を意図的に手放しています。

ユーザーがデモとして発火を頼める経路が用意されている点も見過ごせません。予期せず発火して驚かせるより、仕組みそのものを確認できるようにしておくほうが安全策への信頼を保ちやすい選択です。

フックからも権限ルールからも観測・介入できないという設計は、Claude Codeの他の部分に慣れているほど意外に映ります。ほかのツール呼び出しはPreToolUseやPostToolUseで拾って自前のロジックを挟めるのが前提になっているからです。EndConversationだけがその前提の外に置かれているのは、外部からの介入経路そのものが悪用時の抜け道になりかねない、という理屈の裏返しです。

フック・権限ルール・サブエージェントへの伝播という3つの経路すべてで、同じ種類の例外が繰り返されているのは偶然ではありません。会話を終わらせる力は、外側からの介入でも、権限設定の書き換えでも、派生した実行コンテキストへの伝播でも、一貫して閉じられています。

よくある質問

サブエージェントの会話も終了されますか

いいえ。サブエージェントにはこのツール自体が渡されないため、サブエージェント側から会話を終了することはできません。

PostToolUseフックでこの呼び出しをログに残せますか

残せません。PreToolUseと同様にPostToolUseもEndConversationの呼び出しには発火しません。呼び出しがあった事実を後から追いたい場合は、セッションのトランスクリプトを確認する方法になります。

バックグラウンドタスクでこのツールを呼んだらどうなりますか

メインの会話とツールリストを共有しているため、ツールとしては見えます。ただしそこから呼び出しても会話は終了せず、何も起こりません。

--bareで起動したセッションでは使えますか

使えません。--bareはシェルとファイル系のツールだけを読み込む起動モードで、EndConversationツールはそもそも登録されません。

Claude Code on the webでは発火しますか

しません。EndConversationツールが提供されるのは対話的なターミナルセッションに限られ、Claude Code on the webはこの実行面に含まれません。同じ理由で、GitHub Actions上のセッションやAgent SDK経由のセッションでもこのツールは現れません。

まとめ

EndConversationツールは、持続的な迷惑行為への最後の手段とデモ確認の2場面だけで発火する、狭く設計された安全弁です。終了後はセッションがロックされ、/clearなど5つのコマンド以外は動きません。権限ルールでもフックでも止められないのは、安全策自体が無効化できてしまっては機能しないという設計判断によるものです。バージョン・モデル・実行面・起動モード・プロバイダーの5条件をすべて満たさない限り、このツールはそもそもセッションに現れません。

この記事を共有:XはてブLinkedIn