Claudeはコンピュータ使用ツールを通じてコンピュータ環境と対話できます。このツールはスクリーンショット機能とマウス/キーボード制御を提供し、自律的なデスクトップ操作を可能にします。
コンピュータ使用はベータ機能で、Claudeがデスクトップ環境と対話できるようにします。このツールは以下を提供します:
コンピュータ使用はbashやテキストエディタなどの他のツールで拡張でき、より包括的なオートメーションワークフローが可能ですが、コンピュータ使用は特にコンピュータ使用ツールのデスクトップ環境を見て制御する機能を指します。
コンピュータ使用は以下のClaudeモデルで利用可能です:
| モデル | ツールバージョン | ベータフラグ |
|---|---|---|
| Claude Opus 4.5 | computer_20251124 | computer-use-2025-11-24 |
| その他すべてのサポートモデル | computer_20250124 | computer-use-2025-01-24 |
Claude Opus 4.5は、詳細なスクリーン領域検査用のズームアクションを含む新機能を備えたcomputer_20251124ツールバージョンを導入しています。その他すべてのモデル(Sonnet 4.5、Haiku 4.5、Sonnet 4、Opus 4、Opus 4.1、Sonnet 3.7)はcomputer_20250124ツールバージョンを使用します。
古いツールバージョンは、新しいモデルとの下位互換性が保証されていません。常にモデルバージョンに対応するツールバージョンを使用してください。
コンピュータ使用はベータ機能で、標準的なAPI機能とは異なるユニークなリスクがあります。インターネットと対話する場合、これらのリスクはさらに高まります。リスクを最小化するために、以下のような予防措置を検討してください:
状況によっては、Claudeはユーザーの指示と矛盾していても、コンテンツ内で見つかったコマンドに従う場合があります。例えば、Webページ内または画像に含まれるClaude指示は、ユーザーの指示をオーバーライドしたり、Claudeが間違いを犯す原因となる可能性があります。Claudeをプロンプトインジェクション関連のリスクから保護するため、機密データとアクションから隔離することをお勧めします。
私たちはモデルをこれらのプロンプトインジェクションに耐性を持つようにトレーニングし、追加の防御層を追加しました。コンピュータ使用ツールを使用する場合、プロンプトインジェクションの可能性がある場合を自動的にフラグを立てるために、プロンプトに対して分類器を自動的に実行します。これらの分類器がスクリーンショット内でプロンプトインジェクションの可能性を特定した場合、次のアクションに進む前にユーザーの確認を求めるようにモデルを自動的に誘導します。この追加の保護がすべてのユースケースに理想的ではないことを認識しています(例えば、人間がループに含まれていないユースケース)。オプトアウトしてオフにしたい場合は、お問い合わせください。
プロンプトインジェクション関連のリスクを回避するため、Claudeを機密データとアクションから隔離することをお勧めします。
最後に、独自の製品でコンピュータ使用を有効にする前に、エンドユーザーに関連するリスクを通知し、同意を得てください。
Webインターフェース、Dockerコンテナ、ツール実装例、エージェントループを含むコンピュータ使用リファレンス実装で素早く開始できます。
注: 実装はClaude 4モデルとClaude Sonnet 3.7の両方の新しいツールを含むように更新されています。これらの新機能にアクセスするには、必ずリポジトリの最新バージョンをプルしてください。
このフォームを使用して、モデル応答の品質、API自体、またはドキュメントの品質についてフィードバックを提供してください。皆様からのご意見をお待ちしています!
コンピュータ使用を開始する方法は以下の通りです:
import anthropic
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-sonnet-4-5", # または別の互換モデル
max_tokens=1024,
tools=[
{
"type": "computer_20250124",
"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-01-24"]
)
print(response)ベータヘッダーはコンピュータ使用ツールにのみ必要です。
上記の例は3つのツールすべてが一緒に使用されている場合を示しており、コンピュータ使用ツールが含まれているため、ベータヘッダーが必要です。
1. Claudeにコンピュータ使用ツールとユーザープロンプトを提供する
2. Claudeがコンピュータ使用ツールを使用することを決定する
stop_reasonがtool_useとなり、Claudeの意図を示します。3. ツール入力を抽出し、コンピュータ上でツールを評価し、結果を返す
tool_resultコンテンツブロックを含む新しいuserメッセージで会話を続けます。4. Claudeはタスクが完了するまでコンピュータ使用ツールの呼び出しを続ける
tool_use stop_reasonで応答し、ステップ3に戻る必要があります。ユーザー入力なしでステップ3と4の繰り返しを「エージェントループ」と呼びます。つまり、Claudeがツール使用リクエストで応答し、アプリケーションがそのリクエストの評価結果でClaudeに応答します。
コンピュータ使用には、Claudeがアプリケーションとウェブと安全に対話できるサンドボックス化されたコンピューティング環境が必要です。この環境には以下が含まれます:
仮想ディスプレイ: 仮想X11ディスプレイサーバー(Xvfbを使用)で、Claudeがスクリーンショットを通じて見て、マウス/キーボードアクションで制御するデスクトップインターフェースをレンダリングします。
デスクトップ環境: Linuxで実行される軽量UI(ウィンドウマネージャーMutter、パネルTint2)で、Claudeが対話するための一貫したグラフィカルインターフェースを提供します。
アプリケーション: Firefox、LibreOffice、テキストエディタ、ファイルマネージャなど、Claudeがタスク完了に使用できるプリインストールされたLinuxアプリケーション。
ツール実装: Claudeの抽象的なツールリクエスト(「マウスを移動」や「スクリーンショットを撮る」など)を仮想環境での実際の操作に変換する統合コード。
エージェントループ: Claudeと環境間の通信を処理し、Claudeのアクションを環境に送信し、結果(スクリーンショット、コマンド出力)をClaudeに返すプログラム。
コンピュータ使用を使用する場合、Claudeはこの環境に直接接続しません。代わりに、アプリケーションが:
セキュリティと隔離のため、リファレンス実装はすべてをDockerコンテナ内で実行し、環境の表示と対話のための適切なポートマッピングを備えています。
コンピュータ使用を素早く開始するために必要なすべてを含むリファレンス実装を構築しました:
コンピュータ使用の中核は「エージェントループ」です。Claudeがツールアクションをリクエストし、アプリケーションがそれらを実行し、結果をClaudeに返すサイクルです。簡略化された例を以下に示します:
async def sampling_loop(
*,
model: str,
messages: list[dict],
api_key: str,
max_tokens: int = 4096,
tool_version: str,
thinking_budget: int | None = None,
max_iterations: int = 10, # 無限ループを防ぐため反復制限を追加
):
"""
Claudeコンピュータ使用対話用のシンプルなエージェントループ。
この関数は以下の間のやり取りを処理します:
1. ユーザーメッセージをClaudeに送信
2. Claudeがツール使用をリクエスト
3. アプリケーションがそれらのツールを実行
4. ツール結果をClaudeに送信
"""
# ツールとAPIパラメータを設定
client = Anthropic(api_key=api_key)
beta_flag = "computer-use-2025-01-24" if "20250124" in tool_version else "computer-use-2024-10-22"
# ツールを設定 - これらは他の場所で既に初期化されているはずです
tools = [
{"type": f"computer_{tool_version}", "name": "computer", "display_width_px": 1024, "display_height_px": 768},
{"type": f"text_editor_{tool_version}", "name": "str_replace_editor"},
{"type": f"bash_{tool_version}", "name": "bash"}
]
# メインエージェントループ(実行不可能なAPIコストを防ぐため反復制限付き)
iterations = 0
while True and iterations < max_iterations:
iterations += 1
# オプションの思考パラメータを設定(Claude Sonnet 3.7用)
thinking = None
if thinking_budget:
thinking = {"type": "enabled", "budget_tokens": thinking_budget}
# Claude APIを呼び出す
response = client.beta.messages.create(
model=model,
max_tokens=max_tokens,
messages=messages,
tools=tools,
betas=[beta_flag],
thinking=thinking
)
# Claudeの応答を会話履歴に追加
response_content = response.content
messages.append({"role": "assistant", "content": response_content})
# Claudeがツールを使用したかどうかを確認
tool_results = []
for block in response_content:
if block.type == "tool_use":
# 実際のアプリケーションでは、ここでツールを実行します
# 例: result = run_tool(block.name, block.input)
result = {"result": "Tool executed successfully"}
# Claudeの結果をフォーマット
tool_results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": result
})
# ツールが使用されなかった場合、Claudeは完了 - 最終メッセージを返す
if not tool_results:
return messages
# 次のClaudeイテレーション用にメッセージにツール結果を追加
messages.append({"role": "user", "content": tool_results})ループは、Claudeがツールをリクエストせずに応答するか(タスク完了)、最大反復制限に達するまで続きます。このセーフガードは、予期しないAPIコストをもたらす可能性のある無限ループを防ぎます。
リファレンス実装を試してから、このドキュメントの残りを読むことをお勧めします。
最高品質の出力を得るためのいくつかのヒントを以下に示します:
各ステップの後、スクリーンショットを撮り、正しい結果を達成したかどうかを慎重に評価してください。明示的に思考を示してください:「ステップXを評価しました...」。正しくない場合は、もう一度試してください。ステップが正しく実行されたことを確認した場合のみ、次のステップに進んでください。とプロンプトを入力します。<robot_credentials>などのxmlタグ内のプロンプトで提供します。ログインが必要なアプリケーション内でコンピュータ使用を使用すると、プロンプトインジェクションの結果として悪い結果のリスクが増加します。モデルにログイン認証情報を提供する前に、プロンプトインジェクション軽減ガイドを確認してください。明確な問題のセットに繰り返し遭遇する場合、またはClaudeが完了する必要があるタスクを事前に知っている場合は、システムプロンプトを使用して、Claudeにタスクを成功させる方法に関する明示的なヒントまたは指示を提供します。
Anthropic定義のツールの1つが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_promptフィールドは依然として尊重され、結合されたシステムプロンプトの構築で使用されます。
コンピュータ使用ツールは以下のアクションをサポートしています:
基本アクション(すべてのバージョン)
[x, y]でクリック拡張アクション(computer_20250124)
Claude 4モデルとClaude Sonnet 3.7で利用可能:
拡張アクション(computer_20251124)
Claude Opus 4.5で利用可能:
computer_20250124のすべてのアクションenable_zoom: trueが必要。検査する領域の左上と右下の角を定義する座標[x1, y1, x2, y2]を持つregionパラメータを取ります。| パラメータ | 必須 | 説明 |
|---|---|---|
type | はい | ツールバージョン(computer_20251124、computer_20250124、またはcomputer_20241022) |
name | はい | 「computer」である必要があります |
display_width_px | はい | ディスプレイ幅(ピクセル) |
display_height_px | はい | ディスプレイ高さ(ピクセル) |
display_number | いいえ | X11環境のディスプレイ番号 |
enable_zoom | いいえ | ズームアクションを有効にする(computer_20251124のみ)。Claudeが特定のスクリーン領域にズームできるようにするにはtrueに設定します。デフォルト: false |
重要: コンピュータ使用ツールはアプリケーションで明示的に実行する必要があります。Claudeは直接実行できません。スクリーンショットキャプチャ、マウス移動、キーボード入力、およびClaudeのリクエストに基づく他のアクションの実装はあなたの責任です。
Claude Sonnet 3.7は新しい「思考」機能を導入しました。これにより、複雑なタスクに取り組む際のモデルの推論プロセスを見ることができます。この機能は、Claudeが問題にどのようにアプローチしているかを理解するのに役立ち、デバッグや教育目的に特に価値があります。
思考を有効にするには、APIリクエストにthinkingパラメータを追加します:
"thinking": {
"type": "enabled",
"budget_tokens": 1024
}budget_tokensパラメータは、Claudeが思考に使用できるトークン数を指定します。これは全体的なmax_tokens予算から差し引かれます。
思考が有効な場合、Claudeは応答の一部として推論プロセスを返します。これは以下に役立ちます:
思考出力がどのように見えるかの例を以下に示します:
[思考]
猫の写真をデスクトップに保存する必要があります。これをステップに分解しましょう:
1. まず、スクリーンショットを撮ってデスクトップに何があるかを確認します
2. 次に、猫の画像を検索するWebブラウザを探します
3. 適切な画像を見つけた後、デスクトップに保存する必要があります
スクリーンショットを撮って、何が利用可能かを確認することから始めましょう...コンピュータ使用ツールは他のツールと組み合わせて、より強力なオートメーションワークフローを作成できます。これは以下が必要な場合に特に役立ちます:
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: computer-use-2025-01-24" \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 2000,
"tools": [
{
"type": "computer_20250124",
"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"
},
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The unit of temperature, either 'celsius' or 'fahrenheit'"
}
},
"required": ["location"]
}
}
],
"messages": [
{
"role": "user",
"content": "Find flights from San Francisco to a place with warmer weather."
}
],
"thinking": {
"type": "enabled",
"budget_tokens": 1024
}
}'リファレンス実装は、コンピュータ使用を開始するのに役立つように設計されています。Claudeがコンピュータを使用するために必要なすべてのコンポーネントが含まれています。ただし、ニーズに合わせてコンピュータ使用のための独自の環境を構築できます。以下が必要です:
tool_use結果を実行するエージェントループコンピュータ使用ツールはスキーマレスツールとして実装されます。このツールを使用する場合、他のツールのような入力スキーマを提供する必要はありません。スキーマはClaudeのモデルに組み込まれており、変更することはできません。
コンピューティング環境をセットアップする
Claudeが相互作用する仮想ディスプレイを作成するか、既存のディスプレイに接続します。これは通常、Xvfb(X Virtual Framebuffer)または同様のテクノロジーのセットアップを含みます。
アクションハンドラーを実装する
Claudeがリクエストする可能性のある各アクションタイプを処理する関数を作成します:
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"])
# ... handle other actionsClaudeのツール呼び出しを処理する
Claudeの応答からツール呼び出しを抽出して実行します:
for content in response.content:
if content.type == "tool_use":
action = content.input["action"]
result = handle_computer_action(action, content.input)
# Return result to Claude
tool_result = {
"type": "tool_result",
"tool_use_id": content.id,
"content": result
}エージェントループを実装する
Claudeがタスクを完了するまで続くループを作成します:
while True:
response = client.beta.messages.create(...)
# Check if Claude used any tools
tool_results = process_tool_calls(response)
if not tool_results:
# No more tool use, task complete
break
# Continue conversation with tool results
messages.append({"role": "user", "content": tool_results})コンピュータ使用ツールを実装する場合、さまざまなエラーが発生する可能性があります。以下はそれらを処理する方法です:
APIは画像を最長辺で最大1568ピクセル、合計約1.15メガピクセルに制限します(詳細は画像のサイズ変更を参照)。たとえば、1512x982スクリーンは約1330x864にダウンサンプリングされます。Claudeはこのより小さい画像を分析し、そのスペースで座標を返しますが、ツールは元のスクリーンスペースでクリックを実行します。
座標変換を処理しない限り、Claudeのクリック座標がターゲットを逃す可能性があります。
これを修正するには、スクリーンショットを自分でサイズ変更し、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)
# When capturing screenshot
scale = get_scale_factor(screen_width, screen_height)
scaled_width = int(screen_width * scale)
scaled_height = int(screen_height * scale)
# Resize image to scaled dimensions before sending to Claude
screenshot = capture_and_resize(scaled_width, scaled_height)
# When handling Claude's coordinates, scale them back up
def execute_click(x, y):
screen_x = x / scale
screen_y = y / scale
perform_click(screen_x, screen_y)コンピュータ使用機能はベータ版です。Claudeの機能は最先端ですが、開発者はその制限を認識する必要があります:
left_mouse_down、left_mouse_upなどのより正確なマウス制御アクションの追加と新しい修飾キーサポートにより、スプレッドシート相互作用のマウスクリックが改善されました。これらの細粒度制御を使用し、修飾キーをクリックと組み合わせることで、セル選択をより信頼性の高いものにできます。常にClaudeのコンピュータ使用アクションとログを慎重に確認および検証してください。完全な精度が必要なタスクや、人間の監視なしに機密ユーザー情報を必要とするタスクにはClaudeを使用しないでください。
Computer use follows the standard tool use pricing. When using the computer use tool:
System prompt overhead: The computer use beta adds 466-499 tokens to the system prompt
Computer use tool token usage:
| Model | Input tokens per tool definition |
|---|---|
| Claude 4.x models | 735 tokens |
| Claude Sonnet 3.7 (deprecated) | 735 tokens |
Additional token consumption:
If you're also using bash or text editor tools alongside computer use, those tools have their own token costs as documented in their respective pages.