Claudeは、スクリーンショット機能とマウス/キーボード制御を提供し、自律的なデスクトップ操作を可能にするコンピュータ使用ツールを通じて、コンピュータ環境と対話できます。
コンピュータ使用は、Claudeがデスクトップ環境と対話できるようにするベータ機能です。このツールは以下を提供します。
コンピュータ使用は、より包括的な自動化ワークフローのためにbashやテキストエディタなどの他のツールで拡張できますが、コンピュータ使用とは具体的には、デスクトップ環境を見て制御するコンピュータ使用ツールの機能を指します。
モデルのサポートについては、ツールリファレンスを参照してください。
コンピュータ使用は、標準的なAPI機能とは異なる固有のリスクを伴うベータ機能です。これらのリスクは、インターネットと対話する際に高まります。
状況によっては、Claudeはコンテンツ内に見つかったコマンドに従うことがあり、それがあなたの指示と矛盾する場合でも従うことがあります。たとえば、ウェブページ上の指示や画像に含まれる指示が、あなたの指示を上書きしたり、Claudeにミスを引き起こしたりする可能性があります。プロンプトインジェクションに関連するリスクを回避するために、Claudeを機密データやアクションから隔離する予防措置を講じてください。
Anthropicは、これらのプロンプトインジェクションに抵抗するようにモデルを訓練し、追加の防御層を追加しました。コンピュータ使用ツールを使用すると、プロンプトに対して分類器が自動的に実行され、プロンプトインジェクションの可能性のあるインスタンスにフラグが立てられます。これらの分類器がスクリーンショット内で潜在的なプロンプトインジェクションを特定すると、次のアクションに進む前にユーザーの確認を求めるようにモデルを自動的に誘導します。この追加の保護は、すべてのユースケース(たとえば、人間が介在しないユースケース)に理想的とは限らないため、オプトアウトして無効にしたい場合は、サポートにお問い合わせください。
分類器による防御層が設置されていても、これらの予防措置は引き続き重要です。
自社製品でコンピュータ使用を有効にする前に、エンドユーザーに関連するリスクを通知し、同意を得てください。
ウェブインターフェース、Dockerコンテナ、ツール実装例、エージェントループを含むコンピュータ使用リファレンス実装から始めましょう。
コンピュータ使用を始める方法は次のとおりです。
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-5", # or another compatible model
max_tokens=1024,
tools=[
{
"type": "computer_20251124",
"name": "computer",
"display_width_px": 1024,
"display_height_px": 768,
"display_number": 1,
},
{"type": "text_editor_20250728", "name": "str_replace_based_edit_tool"},
{"type": "bash_20250124", "name": "bash"},
],
messages=[{"role": "user", "content": "Save a picture of a cat to my desktop."}],
betas=["computer-use-2025-11-24"],
)
print(response)Claudeにコンピュータ使用ツールとユーザープロンプトを提供する
Claudeがコンピュータ使用ツールを選択する
stop_reasonはtool_useとなり、ツール使用リクエストを示します。ツール入力を抽出し、コンピュータ上でツールを評価し、結果を返す
tool_resultコンテンツブロックを含む新しいuserメッセージで会話を続けます。Claudeはタスクが完了するまでコンピュータ使用ツールを呼び出し続ける
tool_useのstop_reasonで応答し、ステップ3に戻る必要があります。ユーザー入力なしでステップ3と4を繰り返すことを「エージェントループ」と呼びます(つまり、Claudeがツール使用リクエストで応答し、アプリケーションがそのリクエストを評価した結果をClaudeに返すことです)。
コンピュータ使用には、Claudeがアプリケーションやウェブと安全に対話できるサンドボックス化されたコンピューティング環境が必要です。この環境には以下が含まれます。
仮想ディスプレイ: Claudeがスクリーンショットを通じて見て、マウス/キーボードアクションで制御するデスクトップインターフェースをレンダリングする仮想X11ディスプレイサーバー(Xvfbを使用)。
デスクトップ環境: Linux上で動作するウィンドウマネージャー(Mutter)とパネル(Tint2)を備えた軽量UIで、Claudeが対話するための一貫したグラフィカルインターフェースを提供します。
アプリケーション: Firefox、LibreOffice、テキストエディタ、ファイルマネージャーなど、Claudeがタスクを完了するために使用できるプリインストールされたLinuxアプリケーション。
ツール実装: Claudeの抽象的なツールリクエスト(「マウスを移動」や「スクリーンショットを撮る」など)を仮想環境での実際の操作に変換する統合コード。
エージェントループ: Claudeと環境間の通信を処理し、Claudeのアクションを環境に送信し、結果(スクリーンショット、コマンド出力)をClaudeに返すプログラム。
コンピュータ使用を利用する際、Claudeはこの環境に直接接続しません。代わりに、アプリケーションが以下を行います。
セキュリティと分離のために、リファレンス実装はこれらすべてを、環境の表示と対話のための適切なポートマッピングを備えたDockerコンテナ内で実行します。
コンピュータ使用を始めるために必要なすべてを含むリファレンス実装が利用可能です。
コンピュータ使用の中核は「エージェントループ」です。これは、Claudeがツールアクションをリクエストし、アプリケーションがそれらを実行し、結果をClaudeに返すサイクルです。このループは、クイックスタートで作成したクライアント、クイックスタートのtools配列のような形式のツールリスト、およびClaudeのツール呼び出しを処理するで定義されたツール呼び出し処理ヘルパーを使用します。以下は簡略化された例です。
def sampling_loop(model, messages, max_iterations=10):
"""
Run the computer-use agent loop until Claude stops requesting tools
or the iteration limit is reached.
"""
for _ in range(max_iterations):
response = client.beta.messages.create(
model=model,
max_tokens=4096,
messages=messages,
tools=TOOLS,
betas=["computer-use-2025-11-24"],
)
# Claudeの応答を会話履歴に追加
messages.append({"role": "assistant", "content": response.content})
# Claudeが要求したツールを実行し、結果を収集
tool_results = process_tool_calls(response)
if not tool_results:
return messages # No more tool use; task complete
# 次のイテレーションのためにツール結果をClaudeに返送
messages.append({"role": "user", "content": tool_results})
return messagesループは、Claudeがツールをリクエストせずに応答する(タスク完了)か、最大反復回数に達するまで続きます。この安全策により、予期しないAPIコストにつながる可能性のある無限ループを防ぎます。
このドキュメントの残りを読む前に、リファレンス実装を試してみてください。
最高品質の出力を得るためのヒントをいくつか紹介します。
After each step, take a screenshot and carefully evaluate if you have achieved the right outcome. Explicitly show your thinking: "I have evaluated step X..." If not correct, try again. Only when you confirm a step was executed correctly should you move on to the next one.とClaudeにプロンプトを与えることができます。<robot_credentials>などのXMLタグ内にユーザー名とパスワードをプロンプトで提供してください。ログインが必要なアプリケーション内でコンピュータ使用を利用すると、プロンプトインジェクションによる悪い結果のリスクが高まります。モデルにログイン認証情報を提供する前に、ジェイルブレイクとプロンプトインジェクションの軽減を確認してください。content配列を構築する際は、指示テキストをスクリーンショット画像の前に配置してください。画像が処理される前にターゲットの説明を提供することで、クリックの精度が向上します。enable_zoom: trueを設定してcomputer_20251124を使用する場合、Claudeは、サイドバーのファイル名、タブタイトル、ステータスバーのテキスト、行番号、ボタンラベルなど、スクリーンショットのデフォルト解像度では判読できない小さなテキストや特定のUI要素について尋ねられたときに、その領域にズームインします。期待どおりにClaudeがズームしない場合は、画面全体ではなく特定の領域や要素について尋ねてください。AnthropicスキーマツールのいずれかがClaude APIを通じてリクエストされると、コンピュータ使用固有のシステムプロンプトが生成されます。これはツール使用システムプロンプトに似ていますが、次のように始まります。
You have access to a set of functions you can use to answer the user's question. This includes access to a sandboxed computing environment. You do NOT currently have the ability to inspect files or interact with external resources, except by invoking the below functions.
通常のツール使用と同様に、ユーザーが提供したsystemパラメータは引き続き尊重され、結合されたシステムプロンプトの構築に使用されます。
コンピュータ使用ツールは以下のアクションをサポートしています。
基本アクション(すべてのバージョン)
[x, y]でクリック拡張アクション(computer_20250124以降)
computer_20250124およびcomputer_20251124で利用可能:
拡張アクション(computer_20251124)
Claude Opus 5、Claude Sonnet 5、Claude Opus 4.8、Claude Opus 4.7、Claude Opus 4.6、Claude Sonnet 4.6、Claude Opus 4.5で利用可能:
computer_20250124のすべてのアクションenable_zoom: trueが必要です。検査する領域の左上と右下の角を定義する座標[x1, y1, x2, y2]を持つregionパラメータを受け取ります。| パラメータ | 必須 | 説明 |
|---|---|---|
type | はい | ツールバージョン(computer_20251124またはcomputer_20250124) |
name | はい | 「computer」である必要があります |
display_width_px | はい | ディスプレイの幅(ピクセル単位) |
display_height_px | はい | ディスプレイの高さ(ピクセル単位) |
display_number | いいえ | X11環境のディスプレイ番号 |
enable_zoom | いいえ | ズームアクションを有効にする(computer_20251124のみ)。Claudeが特定の画面領域にズームインできるようにするにはtrueに設定します。デフォルト:false |
コンピュータ使用と思考を組み合わせる方法については、思考を参照してください。
コンピュータ使用と並行して他のツールを追加するには、同じtools配列に含めます。クイックスタートセクションでは、bashツールとテキストエディタツールを使用したこのパターンを示しています。独自のカスタムツール定義も同じ方法で追加できます。
リファレンス実装は、コンピュータ使用を始めるのに役立つことを目的としています。Claudeにコンピュータを使用させるために必要なすべてのコンポーネントが含まれています。ただし、ニーズに合わせて独自のコンピュータ使用環境を構築することもできます。以下が必要です。
tool_useの結果を実行するエージェントループコンピュータ使用ツールはスキーマレスツールとして実装されています。このツールを使用する場合、他のツールのように入力スキーマを提供する必要はありません。スキーマはClaudeのモデルに組み込まれており、変更できません。
コンピューティング環境をセットアップする
Claudeが対話する仮想ディスプレイを作成するか、既存のディスプレイに接続します。これには通常、Xvfb(X Virtual Framebuffer)または同様の技術のセットアップが含まれます。
アクションハンドラーを実装する
Claudeがリクエストする可能性のある各アクションタイプを処理する関数を作成します。
def capture_screenshot():
return "<screenshot data>"
def click_at(x, y):
return f"clicked at ({x}, {y})"
def type_text(text):
return f"typed: {text}"
def handle_computer_action(action_type, params):
if action_type == "screenshot":
return capture_screenshot()
elif action_type == "left_click":
x, y = params["coordinate"]
return click_at(x, y)
elif action_type == "type":
return type_text(params["text"])
# 必要に応じて他のアクションを処理
return f"unhandled action: {action_type}"Claudeのツール呼び出しを処理する
Claudeのレスポンスからツール呼び出しを抽出して実行します。
def process_tool_calls(response):
tool_results = []
for block in response.content:
if block.type == "tool_use":
action = block.input["action"]
result = handle_computer_action(action, block.input)
tool_results.append(
{
"type": "tool_result",
"tool_use_id": block.id,
"content": result,
}
)
return tool_resultsエージェントループを実装する
Claudeがタスクを完了するまで続くループを作成します。
def sampling_loop(model, messages, max_iterations=10):
"""
Run the computer-use agent loop until Claude stops requesting tools
or the iteration limit is reached.
"""
for _ in range(max_iterations):
response = client.beta.messages.create(
model=model,
max_tokens=4096,
messages=messages,
tools=TOOLS,
betas=["computer-use-2025-11-24"],
)
# Claudeの応答を会話履歴に追加
messages.append({"role": "assistant", "content": response.content})
# Claudeが要求したツールを実行し、結果を収集
tool_results = process_tool_calls(response)
if not tool_results:
return messages # No more tool use; task complete
# 次のイテレーションのためにツール結果をClaudeに返送
messages.append({"role": "user", "content": tool_results})
return messagesコンピュータ使用ツールを実装する際、さまざまなエラーが発生する可能性があります。以下はそれらの処理方法です。
コンピュータツールに送信されるスクリーンショットは、Claudeの画像サイズ制限内に収まる必要があります(画像サイズ制限を参照)。APIはClaudeが見る前にサイズ超過の画像を縮小し、Claudeは自分が見た画像に対する座標を返すため、サーバー側の縮小に依存すると、それらの座標を画面にマッピングし直すために必要なスケール係数がわからなくなります。APIの別のリクエスト制限(たとえば、一辺が8,000ピクセルを超える)を超える画像のみが、縮小されるのではなく検証エラーで拒否されます。
画面が制限よりも大きい場合は、送信前にスクリーンショットのサイズを変更し、display_width_px/display_height_pxをサイズ変更後の寸法に設定し、Claudeが返した座標を元の画面空間にスケールし直します。
import math
def get_scale_factor(width, height):
"""Calculate scale factor to meet API constraints."""
long_edge = max(width, height)
total_pixels = width * height
long_edge_scale = 1568 / long_edge
total_pixels_scale = math.sqrt(1_150_000 / total_pixels)
return min(1.0, long_edge_scale, total_pixels_scale)
# スクリーンショットを取得する際
scale = get_scale_factor(screen_width, screen_height)
scaled_width = int(screen_width * scale)
scaled_height = int(screen_height * scale)
# Claudeに送信する前に、画像をスケーリングされた寸法にリサイズします
screenshot = capture_and_resize(scaled_width, scaled_height)
# Claudeの座標を処理する際は、元のサイズにスケールアップして戻します
def execute_click(x, y):
screen_x = x / scale
screen_y = y / scale
perform_click(screen_x, screen_y)クリックがターゲットを外す場合、原因は通常以下のいずれかです。
| 症状 | 考えられる原因 | 対処法 |
|---|---|---|
| クリックが一貫して一方向にずれる | display_width_px/display_height_pxが実際に送信された画像の寸法と一致していない | ディスプレイの寸法が送信するスクリーンショットと正確に一致していることを確認する |
| クリックが正しい領域に着地するがターゲットを外す | ターゲットが非常に小さい、4K以上のソースを縮小する際に詳細が失われた、またはアスペクト比が歪んだ | enable_zoom: trueを設定する。低いDPIでキャプチャするか、関連する領域にトリミングする。サイズ変更時にアスペクト比を維持する |
| Claudeが完全に間違った要素をクリックする | 曖昧な指示、または近くに視覚的に類似した要素がある | 位置を指定したプロンプトを使用する(「右下の青いSubmitボタン」)。操作をより小さなステップに分割する |
| 精度が一貫して低い | 解像度が低すぎる | ベースラインとして1280x720を試す |
コンピュータ使用はベータ版です。以下の制限事項に留意してください。
レイテンシ: 現在の人間とAIの対話におけるコンピュータ使用の「latency」(レイテンシ)は、通常の人間主導のコンピュータアクションと比較して遅すぎる可能性があります。信頼できる環境で、速度が重要でないユースケース(たとえば、バックグラウンドでの情報収集、自動ソフトウェアテスト)に焦点を当ててください。
コンピュータビジョンの精度と信頼性: Claudeは、アクションを生成する際に特定の座標を出力するときにミスをしたり、幻覚を起こしたりする可能性があります。拡張思考は、モデルの推論を理解し、潜在的な問題を特定するのに役立ちます。
ツール選択の精度と信頼性: Claudeは、アクションを生成する際にツールを選択するときにミスをしたり、幻覚を起こしたり、問題を解決するために予期しないアクションを取ったりする可能性があります。さらに、ニッチなアプリケーションや複数のアプリケーションと同時に対話する場合、信頼性が低下する可能性があります。複雑なタスクをリクエストする際は、モデルに慎重にプロンプトを与えてください。
スクロールの信頼性: スクロールアクションは方向制御(上、下、左、右)と指定された量をサポートしています。スクロールが効果を発揮しないアプリケーションでは、Page Downなどのキーボードの代替手段が役立ちます。
スプレッドシート操作: きめ細かいマウス制御アクション(left_mouse_down、left_mouse_up)と修飾キーの組み合わせを使用して、個々のセルを選択します。複雑なスプレッドシート操作には、複数回の試行が必要な場合があります。
ソーシャルおよびコミュニケーションプラットフォームでのアカウント作成とコンテンツ生成: Claudeはウェブサイトを訪問しますが、ソーシャルメディアのウェブサイトやプラットフォーム全体でアカウントを作成したり、コンテンツを生成して共有したり、その他の方法で人間のなりすましを行ったりするClaudeの能力は制限されています。この機能は将来更新される可能性があります。
脆弱性: ジェイルブレイクやプロンプトインジェクションなどの脆弱性は、ベータ版のコンピュータ使用APIを含むフロンティアAIシステム全体で存続する可能性があります。状況によっては、Claudeはコンテンツ内に見つかったコマンドに従うことがあり、それがあなたの指示と矛盾する場合でも従うことがあります。たとえば、ウェブページ上の指示や画像に含まれる指示が、あなたの指示を上書きしたり、Claudeにミスを引き起こしたりする可能性があります。以下を検討してください。
不適切または違法な行為: Anthropicの利用規約に基づき、法律または利用規定に違反するためにコンピュータ使用を利用してはなりません。
Claudeのコンピュータ使用アクションとログを常に慎重に確認および検証してください。人間の監視なしに、完璧な精度や機密ユーザー情報を必要とするタスクにClaudeを使用しないでください。
コンピュータ使用はクライアント側のツールです。セッションに関わるすべてのスクリーンショット、マウスアクション、キーボード入力、およびファイルは、Anthropicではなく、あなたの環境でキャプチャおよび保存されます。Anthropicは、API呼び出しの一部としてスクリーンショット画像とアクションリクエストをリアルタイムで処理します。これらのAPIリクエストの保持は、APIとデータ保持によって管理されます。
アプリケーションがコンピュータ使用データの保存場所と方法を制御するため、コンピュータ使用はZDR対象です。すべての機能にわたるZDR対象については、APIとデータ保持を参照してください。
コンピュータ使用は標準のツール使用の価格に従います。コンピュータ使用ツールを使用する場合:
システムプロンプトのオーバーヘッド: コンピュータ使用ベータは、システムプロンプトに466〜499トークンを追加します
コンピュータ使用ツールのトークン使用量:
| モデル | ツール定義あたりの入力トークン |
|---|---|
| Claude 4.x モデル | 735トークン |
追加のトークン消費:
症状から修正方法への診断表で、最も一般的なツール使用エラーを修正します。
完全なDockerベースの実装から始めましょう
Claudeを外部ツールやAPIに接続します。ツールがどこで実行されるか、Claudeがいつそれらを呼び出すか、どのツールがタスクに適しているかを確認してください。
解像度、思考の労力、コンテキスト管理に関するベンチマーク済みの推奨事項
| Supported models |
|
|---|---|
| Supported platforms |
|
Was this page helpful?