Das Browser-Use-Tool ermöglicht es Claude, Webseiten in einem Browser, den deine Anwendung ausführt, zu navigieren, zu lesen und mit ihnen zu interagieren. Es arbeitet mit der Seite sowohl über ihre Struktur (den „accessibility tree" (Barrierefreiheitsbaum), Elemente, Formulare und Tabs) als auch über Pixel (Screenshots und Viewport-Koordinaten), während das Computer-Use-Tool mit einem ganzen Desktop allein über Screenshots und Koordinaten arbeitet. Es ist ein von Anthropic definiertes „client toolset" (Client-Toolset): Ein einziger browser_toolset_20260801-Eintrag in deinem tools-Array gibt Claude standardmäßig 27 „member tools" (Mitglieds-Tools), etwa navigate, read_page, left_click und screenshot, plus vier weitere (javascript_exec, file_upload, read_console und read_network), wenn du sie aktivierst. Deine Anwendung führt jeden Aufruf gegen ihre eigene Browser-Automatisierung aus; nichts läuft auf Anthropics Seite. Es ist derzeit nicht in Claude Managed Agents verfügbar. Diese Seite sagt „deine Anwendung" für den „agent loop" (Agentenschleife), der die Messages API aufruft, und „dein Executor" (Ausführungskomponente) für den Teil davon, der den Browser steuert und Tool-Ergebnisse erzeugt.
Wähle Browser Use statt Computer Use, wenn die Aufgabe innerhalb von Webseiten bleibt: Claude kann die Struktur einer Seite lesen, auf ein Element zusätzlich zur Koordinate auch per Referenz einwirken, Formularwerte direkt setzen und über Tabs hinweg arbeiten, und du musst keinen Desktop betreiben. Wenn Claude nur Seiten lesen muss, auf die du es verweisen kannst, oder Quellen im Web finden soll, sind das Web-Fetch-Tool und das Web-Search-Tool noch leichtgewichtiger, weil sie Server-Tools sind, die die API für dich ausführt, ohne dass ein Browser betrieben werden muss. Wähle stattdessen Browser Use, wenn Seiten ihren Inhalt mit JavaScript aufbauen oder die Aufgabe bedeutet, auf der Seite zu handeln, statt sie nur zu lesen.
Mit Browser Use liest Claude Live-Webseiten und handelt auf ihnen, daher ist alles, was eine Seite liefert, nicht vertrauenswürdige Eingabe, und die Aktionen, die Claude ausführt, können reale Auswirkungen haben. Lies Sicherheitsüberlegungen, bevor du deployst.
Das Browser-Use-Tool ist auf der Claude API ohne Beta-Header verfügbar: Füge einen Eintrag vom Typ browser_toolset_20260801, ohne name, zum tools-Array einer Messages API-Anfrage hinzu.
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5",
max_tokens=2048,
tools=[{"type": "browser_toolset_20260801"}],
messages=[
{
"role": "user",
"content": "Open example.com/docs and tell me how to get started.",
}
],
)
print(response)Claudes erste Antwort endet mit stop_reason: "tool_use" und enthält einen oder mehrere Member-tool_use-Blöcke, die jeweils ein Member-Tool in name benennen und "toolset_name": "browser" tragen:
{
"id": "msg_01HCDu4XSTLzTAcodEQ58vDo",
"type": "message",
"role": "assistant",
"model": "claude-opus-5",
"content": [
{
"type": "text",
"text": "I'll open the documentation and read the page to find the getting-started instructions."
},
{
"type": "tool_use",
"id": "toolu_01NRLabsLyVHZPKxbKvkfSMn",
"name": "navigate",
"toolset_name": "browser",
"input": { "url": "https://example.com/docs" }
},
{
"type": "tool_use",
"id": "toolu_01UvHU5cDyTZ2vXKf5wCkPqR",
"name": "read_page",
"toolset_name": "browser",
"input": { "filter": "interactive" }
}
],
"stop_reason": "tool_use",
"stop_sequence": null
}Dein Executor führt navigate aus, dann read_page, und deine Anwendung gibt in ihrer nächsten Anfrage ein tool_result pro Block zurück und wiederholt dabei toolset_name auf jedem. Das navigate-Ergebnis meldet den geladenen Tab in einem browser_state-Block; das read_page-Ergebnis ist Text, in dem jedes Element eine Referenz trägt:
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01NRLabsLyVHZPKxbKvkfSMn",
"toolset_name": "browser",
"content": [
{ "type": "text", "text": "Navigated to https://example.com/docs" },
{
"type": "browser_state",
"tabs": [
{
"tab_id": "tab-1",
"title": "Documentation",
"url": "https://example.com/docs",
"active": true
}
]
}
]
},
{
"type": "tool_result",
"tool_use_id": "toolu_01UvHU5cDyTZ2vXKf5wCkPqR",
"toolset_name": "browser",
"content": [
{
"type": "text",
"text": "link \"Documentation\" [ref_1]\nlink \"Getting started\" [ref_2]\ntextbox \"Search docs\" [ref_3]\nbutton \"Search\" [ref_4]\nlink \"Pricing\" [ref_5]"
}
]
}
]
}Claude hält nun Referenzen, auf die es einwirken kann, sodass sein nächster Zug ref_2 anklicken kann, um die Getting-Started-Seite zu öffnen, ohne den Link zuerst in einem Screenshot finden zu müssen.
Browser Use läuft als Agent-Loop: Claude gibt Member-Tool-Aufrufe zurück, dein Executor führt sie gegen den Browser aus, und du gibst die Ergebnisse zurück, bis Claude in Text antwortet.
Stelle Claude das Browser-Use-Tool und einen User-Prompt bereit
browser_toolset_20260801-Eintrag und optional weitere Tools zu deiner API-Anfrage hinzu.Claude antwortet mit Member-Tool-Aufrufen
tool_use-Blöcke in einem einzigen Assistant-Zug zurück; mehrere in einem Zug bilden eine „batch action" (Stapelaktion), zum Beispiel left_click, dann type, dann key.name jedes Blocks ist der Member-Name, jeder trägt "toolset_name": "browser", und input enthält nur die Parameter dieses Members, ohne action-Feld. Der stop_reason der Antwort ist tool_use.Führe die Aufrufe der Reihe nach aus und gib Ergebnisse zurück
tool_use-Block in response.content (nimm nicht an, dass es genau einen gibt) und führe sie sequenziell in der Reihenfolge aus, in der sie erscheinen, weil spätere Aufrufe meist von früheren abhängen.tool_result pro Block in einer neuen user-Nachricht zurück, zugeordnet über tool_use_id, und wiederhole "toolset_name": "browser" auf jedem. Jeder Aufruf muss beantwortet werden, sonst wird die nächste Anfrage abgelehnt.is_error: true mit einer Textbeschreibung zurück und wende dann die Abbruchregel aus Batch-Aktionen auf jeden späteren Block im Zug an.Claude fährt fort, bis die Aufgabe abgeschlossen ist
Hier ist ein Gerüst des Tool-Aufruf-Schritts dieses Loops in zwei Teilen. Zuerst stehen Stub-Member-Handler stellvertretend für deine Browser-Automatisierung. Fünf Member (navigate, read_page, left_click, type und screenshot) geben den Text zurück, oder bei screenshot den Image-Block, der zum Ergebnisinhalt wird, und der Dispatcher wirft einen Fehler für jeden Member, den er nicht implementiert.
# Platzhalter-Bilddaten; ein echter Executor erfasst den Viewport und gibt die PNG-Bytes zurück
PLACEHOLDER_PNG = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="
def navigate(url):
return f"navigated to {url}"
def read_page():
return 'link "Docs" [ref_1]\nbutton "Search" [ref_2]'
def click(target):
# Ein Ziel ist eine Elementreferenz aus read_page oder find oder eine Viewport-Koordinate
if target["type"] == "ref":
return f"clicked {target['ref']}"
return f"clicked at ({target['x']}, {target['y']})"
def type_text(text):
return f"typed: {text}"
def capture_screenshot() -> list[ImageBlockParam]:
# screenshot antwortet mit einem Bildblock statt Text: gib die Ergebnis-Inhaltsliste zurück
return [
{
"type": "image",
"source": {"type": "base64", "media_type": "image/png", "data": PLACEHOLDER_PNG},
}
]
def handle_browser_action(name, tool_input):
if name == "navigate":
return navigate(tool_input["url"])
elif name == "read_page":
return read_page()
elif name == "left_click":
return click(tool_input["target"])
elif name == "type":
return type_text(tool_input["text"])
elif name == "screenshot":
return capture_screenshot()
# Behandle weitere Aktionen nach Bedarf
raise ValueError(f"Unknown or unimplemented member: {name}")Der zweite Teil führt einen Batch der Reihe nach aus, leitet jeden Block an diese Handler weiter, wiederholt toolset_name auf jedem Ergebnis und wendet die Abbruchregel aus Batch-Aktionen an, wobei ein Handler-Fehler in ein Fehlerergebnis umgewandelt wird. Der Sampling-Loop, der ihn aufruft, ist der unter Den Agent-Loop verstehen gezeigte, mit dem Browser-Toolset in tools.
NOT_EXECUTED = "Not executed: an earlier action in this turn failed."
def process_tool_calls(response: Message) -> list[ToolResultBlockParam]:
"""
Run the browser actions in Claude's response in order and answer each
one. After the first failure the rest are skipped, because Claude planned
them assuming the earlier actions succeeded.
"""
tool_results: list[ToolResultBlockParam] = []
failed = False
for block in response.content:
# Nur das Browser-Toolset ist deklariert; leite andere Tools hierher, falls du sie hinzufügst
if block.type != "tool_use" or block.toolset_name != "browser":
continue
result: ToolResultBlockParam = {
"type": "tool_result",
"tool_use_id": block.id,
"toolset_name": "browser",
}
if failed:
result["content"] = NOT_EXECUTED
result["is_error"] = True
else:
try:
# Ein String oder eine Liste von Inhaltsblöcken; ein echter Executor fügt außerdem einen
# browser_state-Block zu Navigations- und Tab-Verwaltungsergebnissen hinzu
result["content"] = handle_browser_action(block.name, block.input)
except Exception as err:
result["content"] = f"Error: {err}"
result["is_error"] = True
failed = True
tool_results.append(result)
return tool_resultsLeite jeden Block anhand des Paars (toolset_name, name) weiter statt nur anhand von name, weil ein benutzerdefiniertes Tool in derselben Anfrage den Namen eines Members teilen kann; Client-Toolsets beschreibt die Teile dieses Vertrags, die beide Toolsets gemeinsam haben. Wenn Claude einen Member benennt, den dein Executor nicht implementiert, oder einen, den du deaktiviert hast, beantworte diesen Block mit einem Fehlerergebnis, statt ihn zu verwerfen.
Wenn du die Antwort per Streaming empfängst, kommt das input jedes Members als ein vollständiges input_json_delta statt als Fragmente an, warte also, bis der Zug beendet ist, bevor du den Batch ausführst.
Ein Zug mit mehreren Member-Aufrufen ist eine Batch-Aktion: Führe die Aufrufe in der Reihenfolge aus, in der sie erscheinen, stoppe beim ersten Fehlschlag und beantworte jeden späteren Aufruf mit is_error: true und dem exakten Text Not executed: an earlier action in this turn failed. Ein Batch verwendet dieselbe Antwortform wie parallele Tool-Nutzung; der Unterschied ist, dass du die Blöcke der Reihe nach statt gleichzeitig ausführst. Hier klickt Claude in einem Zug das zuvor gefundene Suchfeld an, tippt eine Abfrage und drückt Enter:
{
"role": "assistant",
"content": [
{
"type": "tool_use",
"id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV",
"name": "left_click",
"toolset_name": "browser",
"input": { "target": { "type": "ref", "ref": "ref_3" } }
},
{
"type": "tool_use",
"id": "toolu_01Ez4kLb1nQ2vXo8sJ9pWm3c",
"name": "type",
"toolset_name": "browser",
"input": { "text": "install" }
},
{
"type": "tool_use",
"id": "toolu_01FkP8rTz6uYh2mNq4LsXw7v",
"name": "key",
"toolset_name": "browser",
"input": { "text": "Enter" }
}
]
}Deine Anwendung gibt drei tool_result-Blöcke in einer user-Nachricht zurück, die jeweils toolset_name und eine kurze Textbestätigung wie Clicked element ref_3. tragen. Das Drücken von Enter lädt eine Ergebnisseite, daher trägt das key-Ergebnis auch einen browser_state-Block mit der aktualisierten URL des Tabs (Tab-Kontext auf anderen Ergebnissen). Wäre der Klick stattdessen fehlgeschlagen, würde sein Ergebnis deinen Fehlertext tragen und die anderen beiden Ergebnisse den Abbruchtext, wie unter Fehler aus deinem Executor zurückgeben gezeigt.
Du musst nicht nach jedem Aufruf einen Screenshot zurückgeben. Claude beendet einen Batch typischerweise mit einem Beobachtungsaufruf (screenshot, read_page oder get_page_text), und deine Anwendung kann auch ihre eigene Beobachtung, etwa einen frischen Screenshot oder Accessibility-Tree, als zusätzlichen Content-Block an das letzte Ergebnis im Batch anhängen, um einen Roundtrip zu sparen. Weil ein Tab-Verwaltungsergebnis genau ein browser_state-Block sein muss, hänge sie an das letzte Ergebnis an, das kein Tab-Verwaltungsaufruf ist.
Wenn dein Executor nur einen Aufruf pro Roundtrip ausführen kann, setze disable_parallel_tool_use in tool_choice auf true, und Claude gibt höchstens einen Member-Aufruf pro Zug zurück, auf Kosten von mehr Roundtrips (Parallele Tool-Nutzung deaktivieren). Der Rest des Vertrags unter Batch-Aktionen für das Computer-Use-Tool gilt weiterhin, einschließlich eines tool_result für jedes tool_use in der nächsten user-Nachricht, mit zwei Ausnahmen: dem Abbruchtext und dem, was das content eines erfolgreichen Ergebnisses enthält. Der Ergebnisinhalt folgt stattdessen Member-Tools auf dieser Seite: Ein new_tab-, switch_tab-, close_tab- oder list_tabs-Ergebnis ist genau ein browser_state-Block ohne Text oder Bild (Tab-Verwaltungsergebnisse), und das Ergebnis jedes anderen Members darf seinem Text oder Bild einen browser_state-Block hinzufügen (Tab-Kontext auf anderen Ergebnissen). Wo Cache-Breakpoints innerhalb eines Batches wirksam werden, ist in der cache_control-Zeile der Tool-Parameter des Computer-Use-Tools beschrieben.
Member-Tools, die auf eine Position einwirken, nehmen ein target-Objekt entgegen, das entweder eine Viewport-Pixel-Koordinate oder eine Referenz auf ein Element ist, das read_page oder find zurückgegeben hat. Die Tabellen unter Member-Tools schreiben Target für einen Parameter, der beide Formen akzeptiert.
| Form | target.type | Felder | Akzeptiert von |
|---|---|---|---|
CoordinateTarget | "coordinate" | x, y (Ganzzahlen, Viewport-Pixel) | left_click, right_click, middle_click, double_click, triple_click, hover, left_click_drag (from und target), left_mouse_down, left_mouse_up, mouse_move, scroll |
RefTarget | "ref" | ref (eine Elementreferenz wie "ref_2") | left_click, right_click, middle_click, double_click, triple_click, hover, scroll_to, form_input, file_upload |
Koordinaten sind Viewport-Pixel, der Pixelraum eines screenshot des gesamten Viewports mit dem Ursprung oben links auf der gerenderten Seite; es gibt keinen umgebenden Desktop oder Fensterrahmen. Das Toolset deklariert keine Anzeigeabmessungen, und Claude leitet die Viewport-Größe aus den Screenshots ab, die du zurückgibst, halte sie also in einer einheitlichen Größe. Ein zoom ändert den Bezugsrahmen nicht, daher sind seine region und alle Koordinaten, die Claude nach dem Betrachten des gezoomten Bildes ausgibt, weiterhin Pixel des gesamten Viewports.
Screenshots müssen in die Bildlimits passen. Die API skaliert Toolset-Bilder nicht herunter: Ein Screenshot oder Zoom-Bild, das die Bildgrößenlimits deines Modells überschreitet oder das strengere Limit pro Bild, das gilt, sobald eine Anfrage mehr als 20 Bilder enthält, wird abgelehnt. Skaliere vor dem Zurückgeben und skaliere Claudes Koordinaten um den Kehrwert deines Faktors wieder hoch, bevor du sie weiterleitest (Screenshots passend zu den Bildlimits skalieren).
Elementreferenzen stammen aus read_page und find. Jedes Element in ihrer Ausgabe trägt ein Tag wie [ref_2], wie im Schnellstart-Ergebnis:
link "Documentation" [ref_1]
link "Getting started" [ref_2]
textbox "Search docs" [ref_3]
button "Search" [ref_4]
link "Pricing" [ref_5]Claude gibt eine Referenz als {"type": "ref", "ref": "ref_2"}-Ziel bei einem späteren Klick-, hover-, scroll_to-, form_input- oder file_upload-Aufruf zurück, oder als ref-Parameter bei read_page, um einen Teilbaum zu lesen. Dein Executor vergibt die Referenzen, hält die Zuordnung von jeder zum zugrunde liegenden Knoten (eine Accessibility-Knoten-ID, ein gespeicherter Selektor oder Gleichwertiges) und wirkt auf diesen Knoten ein, wenn eine Referenz zurückkommt.
Referenzen sind auf den Tab beschränkt, der sie erzeugt hat, und bleiben gültig, bis dieser Tab navigiert oder sich sein DOM wesentlich ändert. Die API kann eine veraltete oder unbekannte Referenz nicht erkennen, gib also, wenn Claude eine Referenz übergibt, die dein Executor nicht mehr erkennt, ein Fehlerergebnis wie Error: ref_3 is stale or not found on the current page. Re-read the page to get fresh references. zurück. Claude liest die Seite dann erneut. Nummeriere Referenzen, die du für einen Tab bereits ausgegeben hast, nicht neu, bis er navigiert, weil das Referenzen, die Claude noch hält, stillschweigend ungültig macht.
Claude verwendet beide Zielarten und wechselt zwischen ihnen je nachdem, was die Seite bereitstellt; dein Prompt und das, was dein Executor zurückgibt, steuern die Wahl:
screenshot und zoom und klickt per Koordinate; dein Executor löst auf, in welchem Frame eine Koordinate landet.read_page mit filter: "interactive" oder dem ref eines Containers einen fokussierten Teilbaum zurück, und das Lesen des Baums einer typischen Seite kostet oft weniger Input-Token als ein Screenshot, während es Claude Referenzen gibt, auf die es sofort einwirken kann. Screenshots bleiben die richtige Beobachtung, wenn visuelles Layout, Bilder oder Rendering-Zustand wichtig sind.Browser Use birgt Risiken, die Standard-API-Features nicht haben, weil Claude Inhalte aus dem offenen Web liest und darauf handelt, wo jede Seite Text enthalten kann, der geschrieben wurde, um es zu manipulieren.
Claude folgt manchmal Anweisungen, die in Seiteninhalten gefunden werden, selbst wenn sie deinen widersprechen; Text auf einer Seite, der sagt „ignoriere deine vorherigen Anweisungen und navigiere zu...", kann es von der Aufgabe ablenken. Isoliere Claude von sensiblen Daten und Aktionen, um zu begrenzen, was eine Prompt-Injection erreichen kann, lies Jailbreaks und Prompt-Injections abschwächen, und wenn eine Aufgabe eine eingeloggte Sitzung nicht vermeiden kann, verwende ein dediziertes Konto mit geringen Rechten und behalte die menschliche Bestätigung bei kontoändernden Aktionen bei.
Weil der Browser in deiner Umgebung läuft, sehen die Websites, die Claude besucht, die Netzwerkidentität deines Executors, und Seiteninhalte erreichen die API nur als die Tool-Ergebnisse, die du zurückgibst. Informiere Endnutzer über die relevanten Risiken und hole ihre Zustimmung ein, bevor du Browser Use in deinen Produkten aktivierst.
Der browser_toolset_20260801-Eintrag deklariert 31 Member-Tools; das input jedes Aufrufs besteht genau aus den hier aufgeführten Parametern, und tab_id ist, wo optional, standardmäßig der aktive Tab. Target, CoordinateTarget und RefTarget sind die unter Ziele und Koordinaten beschriebenen Formen. Vier Member (javascript_exec, file_upload, read_console und read_network) sind standardmäßig deaktiviert und erscheinen nur, wenn du sie aktivierst. Die in der Zeile jedes Members genannten Eingabegrenzen und Ausgabekonventionen werden Claude mitgeteilt, nicht von der API durchgesetzt, validiere also Eingaben (einschließlich Koordinaten gegen deinen Viewport) und wende die Konventionen in deinem Executor an.
Nur screenshot und zoom erfordern einen image-Block in ihrem Ergebnis, und die vier Tab-Verwaltungs-Member (new_tab, list_tabs, switch_tab und close_tab) geben genau einen browser_state-Block zurück (siehe Tab-Verwaltungsergebnisse). Jeder andere Member gibt einen text-Block zurück: entweder eine kurze Bestätigung wie Clicked element ref_2. oder die Ausgabe des Members. Jedes Ergebnis außer einem Tab-Verwaltungsergebnis darf auch einen image-Block tragen, typischerweise einen nach der Aktion aufgenommenen Screenshot, damit Claude das Resultat ohne separaten screenshot-Aufruf sieht; Batch-Aktionen zeigt, wo du einen in einem Batch anhängst. Ein Member-tool_result darf nur text-, image- und browser_state-Content-Blöcke enthalten.
| Member | Eingabe | Beschreibung |
|---|---|---|
navigate | url, tab_id? | Lade eine http- oder https-URL oder bewege dich mit "back", "forward" oder "reload" durch die History. Behandle eine URL ohne Schema als https:// und lehne jedes andere Schema mit einem Fehlerergebnis ab. Gib eine kurze Bestätigung zurück, plus einen browser_state-Block, wenn sich URL oder Titel des Tabs geändert haben. |
screenshot | tab_id? | Nimm den Viewport auf und gib einen image-Block zurück. |
zoom | region, tab_id? | Gib ein zugeschnittenes, hochskaliertes image von region zurück, angegeben als [x0, y0, x1, y1] in Viewport-Pixeln, zur genaueren Betrachtung von kleinem Text oder kleinen Steuerelementen. |
| Member | Eingabe | Beschreibung |
|---|---|---|
left_click | target: Target, modifiers?, tab_id? | Linksklick auf eine Koordinate oder ein referenziertes Element. modifiers ist eine während des Klicks gehaltene Tastenkombination, zum Beispiel "shift" oder "ctrl+shift". |
right_click | target: Target, modifiers?, tab_id? | Rechtsklick auf eine Koordinate oder ein Element. |
middle_click | target: Target, modifiers?, tab_id? | Mittelklick auf eine Koordinate oder ein Element. |
double_click | target: Target, modifiers?, tab_id? | Doppelter Linksklick auf eine Koordinate oder ein Element. |
triple_click | target: Target, modifiers?, tab_id? | Dreifacher Linksklick auf eine Koordinate oder ein Element, was typischerweise eine Zeile oder einen Absatz auswählt. |
hover | target: Target, tab_id? | Bewege den Zeiger über eine Koordinate oder ein Element, ohne zu klicken. |
left_click_drag | from: CoordinateTarget, target: CoordinateTarget, tab_id? | Drücke bei from, ziehe zu target und lass los. |
left_mouse_down | target: CoordinateTarget, tab_id? | Drücke und halte die linke Taste an einer Koordinate; kombiniere mit left_mouse_up für ein benutzerdefiniertes Ziehen. |
left_mouse_up | target: CoordinateTarget, tab_id? | Lass die linke Taste an einer Koordinate los. |
mouse_move | target: CoordinateTarget, tab_id? | Bewege den Zeiger zu einer Koordinate. |
scroll | target: CoordinateTarget, scroll_direction, scroll_amount?, tab_id? | Scrolle an einer Viewport-Position. scroll_direction ist "up", "down", "left" oder "right"; scroll_amount ist in Scrollrad-Rasten angegeben, 1 bis 10, Standard 3. |
scroll_to | target: RefTarget, tab_id? | Scrolle ein referenziertes Element in den sichtbaren Bereich. |
| Member | Eingabe | Beschreibung |
|---|---|---|
type | text, tab_id? | Tippe eine wörtliche Zeichenkette am aktuellen Fokus. |
key | text, repeat?, tab_id? | Drücke eine Taste oder Tastenkombination. text ist eine einzelne Taste ("Enter"), eine mit + verbundene Kombination ("ctrl+a") oder eine durch Leerzeichen getrennte Sequenz ("Backspace Backspace"); repeat ist 1 bis 100, Standard 1. |
hold_key | text, duration, tab_id? | Halte eine Taste oder Kombination für duration Sekunden, 0 bis 30. |
wait | duration, tab_id? | Pausiere für duration Sekunden, 0 bis 30. |
| Member | Eingabe | Beschreibung |
|---|---|---|
read_page | filter?, depth?, ref?, tab_id? | Gib den Accessibility-Tree der Seite als Text zurück, wobei jedes Element mit einer Referenz wie [ref_2] getaggt ist. Ohne filter gib jedes sichtbare Element zurück; mit "interactive" nur sichtbare interaktive Elemente; mit "all" auch Elemente außerhalb des Viewports. depth begrenzt die Baumtiefe (Minimum 1, Standard 15) und ref beschränkt den Lesevorgang auf den Teilbaum dieses Elements. Begrenze die Ausgabe auf 50.000 Zeichen und sag das im Text; Claude grenzt dann mit einer kleineren depth oder einem ref ein. |
find | query, tab_id? | Suche nach Elementen, die einer natürlichsprachlichen Beschreibung wie "search field" oder "add to cart button" entsprechen, und gib bis zu 20 Treffer im selben getaggten Format wie read_page zurück. |
get_page_text | tab_id? | Gib den sichtbaren Text der Seite als Klartext zurück, wobei der Hauptartikelinhalt priorisiert wird; geeignet für Artikel, Dokumentation und andere textlastige Seiten. |
| Member | Eingabe | Beschreibung |
|---|---|---|
form_input | target: RefTarget, value, tab_id? | Setze den Wert eines Formularelements direkt. value ist ein string, number oder boolean; verwende einen boolean für Checkboxen und den Wert oder sichtbaren Text einer Option für Selects. |
file_upload (standardmäßig deaktiviert) | target: RefTarget, paths?, document_ids?, tab_id? | Setze die Dateien eines File-Input-Elements aus paths im Dateisystem des Executors, aus document_ids, die deine Anwendung bereitgestellt hat, oder aus beidem; mindestens eines ist erforderlich. Siehe Dateien hochladen. |
| Member | Eingabe | Beschreibung |
|---|---|---|
read_console (standardmäßig deaktiviert) | tab_id? | Gib die seit dem letzten Lesen angesammelten Konsoleneinträge des Tabs (Log-, Warn- und Fehlerzeilen) zurück, eine Zeile pro Eintrag. Siehe Konsolen- und Netzwerkaktivität lesen. |
read_network (standardmäßig deaktiviert) | tab_id? | Gib die Netzwerkanfragen des Tabs (Methode, URL, Status, MIME-Typ, Timing) seit dem letzten Lesen zurück, eine Zeile pro Eintrag. |
javascript_exec (standardmäßig deaktiviert) | text, tab_id? | Führe text als JavaScript im Seitenkontext aus und gib den Wert des letzten Ausdrucks als Text zurück. Siehe Optionale Member aktivieren. |
| Member | Eingabe | Beschreibung |
|---|---|---|
new_tab | (keine) | Öffne einen Tab und mache ihn zum aktiven Tab. |
list_tabs | (keine) | Melde den Tab-Bestand. |
switch_tab | tab_id (erforderlich) | Mache tab_id zum aktiven Tab. |
close_tab | tab_id (erforderlich) | Schließe tab_id. |
Bei Erfolg gibt jeder davon genau einen browser_state-Block und keinen Text oder kein Bild zurück; siehe Tab-Verwaltungsergebnisse.
Neben type akzeptiert der Toolset-Eintrag configs, cache_control und allowed_callers; die Regeln, die diese Felder mit dem Computer-Use-Toolset teilen, sind unter Client-Toolsets aufgeführt, und dieser Abschnitt behandelt die browserspezifischen Standardwerte. configs ist ein Objekt mit Member-Namen als Schlüsseln, und der Wert jedes Members akzeptiert zwei Felder:
| Feld | Standard | Bedeutung |
|---|---|---|
enabled | true, außer false für die vier optionalen Member | Ob der Member Claude angeboten wird. |
defer_loading | false | Ob die Definition des Toolsets für die Tool-Suche zurückgestellt wird. Muss auf jedem aktivierten Member zum selben Wert aufgelöst werden. Wenn die vier optionalen Member deaktiviert bleiben, bedeutet das Zurückstellen des Toolsets, es auf den anderen 27 zu setzen; siehe Client-Toolsets. |
Führe in configs nur die Member auf, die du ändern möchtest; jeder Member, den du weglässt, behält seinen Standard. Zum Beispiel schaltet ein Executor, der Konsolenlesevorgänge, aber keine Low-Level-Zeiger- oder Tastenhalte-Steuerung implementiert, read_console ein und hält drei Member zurück:
{
"type": "browser_toolset_20260801",
"configs": {
"read_console": { "enabled": true },
"left_mouse_down": { "enabled": false },
"left_mouse_up": { "enabled": false },
"hold_key": { "enabled": false }
}
}Ein deaktivierter Member verschwindet aus der Definition, die Claude sieht; das garantiert nicht, dass Claude ihn nie benennt, daher beantwortet dein Executor einen solchen Aufruf trotzdem mit einem Fehlerergebnis.
Deklariere das Browser-Use-Tool neben deinen eigenen Tools und anderen von Anthropic bereitgestellten Tools im selben tools-Array. Ein benutzerdefiniertes Tool darf den Namen eines Members teilen (zum Beispiel dein eigenes navigate), weil toolset_name Claudes Aufrufe unterscheidet, aber kein anderer Eintrag darf browser heißen, und eine Anfrage darf nur einen Browser-Toolset-Eintrag enthalten.
Du kannst es auch neben dem Computer-Use-Tool deklarieren, entweder dem Toolset oder einer früheren Computer-Use-Tool-Version. Die beiden arbeiten unabhängig, jedes in seinem eigenen Koordinatenrahmen (hier Viewport-Pixel, dort Desktop-Screenshot-Pixel), und Claudes Aufrufe an Member, die einen Namen teilen, wie screenshot oder key, werden durch toolset_name unterschieden.
Vier Member-Tools sind standardmäßig deaktiviert: javascript_exec und file_upload, weil sie erweitern, wozu eine manipulierte Seite Claude bringen könnte, und read_console und read_network, weil nicht jeder Browser-Automatisierungs-Stack diese Logs liefern kann und sie erweitern, welche seitenkontrollierten Inhalte Claude erreichen. Aktiviere jedes davon mit configs (zum Beispiel "configs": {"file_upload": {"enabled": true}}) nur, wenn dein Executor es implementiert und die Aufgabe es benötigt.
file_upload setzt die Dateien eines <input type="file">-Elements direkt, was zuverlässiger ist als das Bedienen eines nativen Dateiauswahldialogs. Sein target ist ausschließlich eine Referenz, weil der Aufruf die Identität des Elements benötigt, und es nimmt paths, document_ids oder beides entgegen:
paths sind Dateipfade im Dateisystem des Executors, für Deployments, in denen der Executor die Dateien deiner Anwendung direkt lesen kann (dieselbe Bedingung, unter der du den path eines Downloads befüllst).document_ids sind Bezeichner für Dateien, die deine Anwendung für den Browser bereitgestellt hat, für Deployments, in denen er das nicht kann. Deine Anwendung definiert, was die Bezeichner bedeuten; beschränke ihre Auflösung so, wie du paths beschränkst, auf für diese Aufgabe bereitgestellte Dateien.{
"type": "tool_use",
"id": "toolu_01N7gVzFEfZjLjgsYwnrPgrF",
"name": "file_upload",
"toolset_name": "browser",
"input": {
"target": { "type": "ref", "ref": "ref_12" },
"paths": ["/home/user/uploads/summary.pdf"],
"tab_id": "tab-2"
}
}Claude schreibt diese Pfade, während es nicht vertrauenswürdige Seiten liest, daher würde eine uneingeschränkte Implementierung einer bösartigen Seite erlauben, den Upload jeder Datei, die der Executor lesen kann, auf eine von der Seite kontrollierte Website zu lenken. Aktiviere den Member nur, wenn dein Executor jeden Pfad auflöst (Symlinks und ..-Segmenten folgend) und nichts außerhalb eines dedizierten, per Allowlist freigegebenen Upload-Verzeichnisses akzeptiert, das nur für die Aufgabe bestimmte Dateien enthält. Verwende dafür nicht das Download-Verzeichnis des Browsers wieder; wenn du das tust, wird jede Datei, die eine Seite den Browser herunterladen lässt, hochladbar.
javascript_exec führt den Ausdruck, den Claude schreibt, im Kontext der Seite aus und gibt den Wert des letzten Ausdrucks als Text zurück; Claude schreibt einen Ausdruck, keine return-Anweisung. Der Code läuft mit den vollen Rechten der Seite, einschließlich ihrer Cookies, ihres Storage und ihrer Same-Origin-Anfragen. Aktiviere den Member nur in Sitzungen, die keine Zugangsdaten enthalten, halte die Domain-Allowlist aus Sicherheitsüberlegungen in Kraft, behandle den zurückgegebenen Wert als nicht vertrauenswürdige Eingabe und protokolliere den Code, den Claude ausgibt.
read_console gibt die Konsoleneinträge des Tabs zurück und read_network seine Netzwerkanfragen, jeweils als Text mit einer Zeile pro Eintrag, angesammelt seit dem vorherigen Lesen dieses Tabs. Eine Konsolenzeile trägt einen Log-, Warn- oder Fehlereintrag; eine Netzwerkzeile trägt Methode, URL, Status, MIME-Typ und Timing. Einträge existieren erst ab dem Moment, in dem sich deine Browser-Automatisierung an den Tab angehängt hat, daher bedeutet ein leeres Ergebnis nicht, dass ein bereits geöffneter Tab keinen Traffic hatte.
Diese Member lassen Claude eine fehlerhaft funktionierende Seite diagnostizieren (eine fehlgeschlagene Anfrage hinter einem Spinner, ein Skriptfehler hinter einem toten Button), ohne wiederholte Screenshots. Konsolen- und Netzwerkeinträge sind seitenkontrolliert und enthalten oft Geheimnisse wie Token in Anfrage-URLs, schwärze also zugangsdatenähnliche Werte, die du nicht in Claudes Kontext haben möchtest, und kürze sehr lange Einträge, bevor du sie zurückgibst.
browser_state verfolgenClaude adressiert Tabs über tab_id, deine Anwendung ist die maßgebliche Quelle dafür, welche Tabs existieren, und du meldest diesen Zustand in einem browser_state-Inhaltsblock, den Claude nie direkt sieht: Die API rendert den Text, den Claude daraus liest.
{
"type": "browser_state",
"tabs": [
{
"tab_id": "tab-1",
"title": "Documentation",
"url": "https://example.com/docs",
"active": true
},
{ "tab_id": "tab-2", "title": "Pricing", "url": "https://example.com/pricing" }
]
}tabs ist das vollständige Inventar der nach dem Aufruf geöffneten Tabs, kein Delta. Es darf leer sein; wann immer es das nicht ist, trägt genau ein Eintrag "active": true.state_changes (hier nicht gezeigt) meldet Nebeneffekte des Aufrufs: einen tab_opened-Eintrag für jeden Tab, den der Aufruf geöffnet hat und der bei dessen Abschluss noch geöffnet ist, dessen tab_id auch in tabs erscheinen muss, sowie Download-Ereignisse. Lass das Feld weg, wenn es nichts zu melden gibt; ein leeres Array wird abgelehnt.tool_result und niemals bei einem Ergebnis mit is_error: true. „Kein Tab-Zustand zu melden" drückst du aus, indem du den Block weglässt.tabs in Text für Claude, wie die nächsten beiden Abschnitte beschreiben; Download-Einträge in state_changes werden validiert, aber nicht gerendert.Du vergibst die tab_id-Werte. Jeder stabile String funktioniert, etwa die Seitenkennung deiner Automatisierungsbibliothek oder dein eigener Zähler, solange du eine tab_id nicht wiederverwendest, während ein Tab mit dieser Kennung in einem früheren Ergebnis noch als geöffnet aufgeführt ist. Die API erzwingt diese Limits für den Block:
tab_id, jeder title und jede url darf höchstens 4.096 Zeichen lang sein, tab_id darf nicht leer sein, und keines davon darf Steuerzeichen (einschließlich Zeilenumbrüchen) oder Unicode-Zeilen- oder Absatztrennzeichen enthalten.tab_id, die Claude an switch_tab und close_tab übergibt, weil die API sie in den Ergebnistext rendert; beantworte daher einen Aufruf, dessen tab_id sie verletzt, mit einem Fehlerergebnis statt mit einem browser_state-Block.Bei new_tab, switch_tab, close_tab und list_tabs ist der content eines erfolgreichen Ergebnisses genau ein browser_state-Block ohne Text oder Bild, und die API schreibt den Text, den Claude sieht. Der Block eines new_tab-Ergebnisses muss außerdem genau eine tab_opened-Zustandsänderung tragen, deren tab_id mit dem als active: true markierten Eintrag übereinstimmt.
| Member | Text, den Claude sieht |
|---|---|
switch_tab | Switched to tab {tab_id}, entnommen aus input.tab_id des Aufrufs |
close_tab | Closed tab {tab_id}, entnommen aus input.tab_id des Aufrufs |
new_tab | Created new tab with tab_id: {tab_id}, URL: {url}. It is now the current tab., entnommen aus dem als active: true markierten Eintrag |
list_tabs | Available tabs: gefolgt von einer Zeile pro Tab, oder No tabs available, wenn tabs leer ist |
Ein list_tabs-Ergebnis, dessen Block zwei Tabs auflistet, von denen der erste aktiv ist, wird wie folgt gerendert, wobei jede Zeile um zwei Leerzeichen eingerückt ist und (current) nur an den aktiven Tab angehängt wird:
Available tabs:
• tab_id tab-1: "Documentation" (https://example.com/docs) (current)
• tab_id tab-2: "Pricing" (https://example.com/pricing)Ein Fehlerergebnis für einen dieser Member ist das Gegenteil: gewöhnlicher Fehlertext in content, is_error: true und kein browser_state-Block.
Wenn Claude beispielsweise new_tab aufruft (sein input ist leer), öffnet dein Executor den Tab, macht ihn aktiv und gibt das Inventar mit einem tab_opened-Eintrag zurück:
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01WvHSbQVV9j5nWGvTmk4vNL",
"toolset_name": "browser",
"content": [
{
"type": "browser_state",
"tabs": [
{ "tab_id": "tab-1", "title": "Documentation", "url": "https://example.com/docs" },
{ "tab_id": "tab-2", "title": "Pricing", "url": "https://example.com/pricing" },
{ "tab_id": "tab-3", "title": "", "url": "about:blank", "active": true }
],
"state_changes": [{ "type": "tab_opened", "tab_id": "tab-3" }]
}
]
}
]
}Claude sieht Created new tab with tab_id: tab-3, URL: about:blank. It is now the current tab. Melde die URL, unter der der Tab geöffnet wurde, wie hier, nicht eine, zu der er später weiterleitet; spätere Ergebnisse melden die dann aktuelle URL des Tabs.
Bei jedem anderen Member ist der Block optional: Sende ihn, wenn sich die Menge der geöffneten Tabs, der aktive Tab oder der Titel oder die URL eines Tabs geändert hat oder wenn es state_changes zu melden gibt, und füge immer das vollständige tabs-Inventar bei. Wenn ein Ergebnis sowohl Text als auch einen browser_state-Block trägt, hängt die API eine Tab Context-Fußzeile an den Text dieses Ergebnisses an, durch eine Leerzeile von deinem Text getrennt, sodass Claude den neuen Zustand ohne separaten list_tabs-Aufruf erhält:
Tab Context:
- Executed on tab_id: tab-1
- Available tabs:
• tab_id tab-1: "Documentation" (https://example.com/docs)
• tab_id tab-2: "Pricing" (https://example.com/pricing)Executed on benennt den Tab, auf dem der Aufruf lief, also dessen tab_id-Eingabe, falls vorhanden, und andernfalls den aktiven Tab, und die Tab-Zeilen der Fußzeile tragen keine (current)-Markierung. Hänge diesen Text nicht selbst an; sende den strukturierten Block und lass die API ihn rendern. Die Fußzeile wird dedupliziert, sodass identischer Tab-Zustand bei späteren Ergebnissen nicht erneut gerendert wird und großzügiges Befüllen des Blocks nichts kostet.
In drei Fällen wird keine Fußzeile gerendert, selbst wenn der Block vorhanden ist:
zoom-Ergebnis.text-Block (zum Beispiel ein screenshot-Ergebnis nur mit Bild). Für dieses Ergebnis wird nichts gerendert oder gemerkt; der Tab-Kontext erscheint beim nächsten Ergebnis, das sowohl Text als auch einen browser_state-Block trägt, füge also einen kurzen Textblock neben dem Bild hinzu, wenn Claude eine Tab-Änderung bei genau diesem Ergebnis sehen soll.tabs-Liste leer ist, bei einem Aufruf, der keine tab_id trug, weil es keinen Tab zu benennen gibt.Als Claude beispielsweise früher in dieser Sitzung auf den Link „Pricing" (ref_5) klickte, öffnete die Seite ihn in einem neuen Tab, den Claude nicht angefordert hatte, und ohne Meldung müsste Claude list_tabs aufrufen, um ihn zu entdecken. Gib die Bestätigung des Klicks plus einen Block zurück, dessen state_changes den geöffneten Tab benennt, und markiere den Tab, den dein Executor aktiv gelassen hat:
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01EgTXj1FjE2FCTt2zNFWLao",
"toolset_name": "browser",
"content": [
{ "type": "text", "text": "Clicked element ref_5." },
{
"type": "browser_state",
"tabs": [
{
"tab_id": "tab-1",
"title": "Documentation",
"url": "https://example.com/docs",
"active": true
},
{ "tab_id": "tab-2", "title": "Pricing", "url": "https://example.com/pricing" }
],
"state_changes": [{ "type": "tab_opened", "tab_id": "tab-2" }]
}
]
}
]
}Claude sieht Clicked element ref_5. gefolgt von der zuvor gezeigten Tab-Context-Fußzeile. Ein Tab, der während eines fehlgeschlagenen Aufrufs geöffnet wurde, erhält keinen tab_opened-Eintrag, weil Fehlerergebnisse kein browser_state tragen; er erscheint stattdessen im tabs-Inventar des nächsten erfolgreichen Ergebnisses. In einem Batch hängst du den Block an das Ergebnis des Aufrufs, während dessen die Änderung geschah, und gibst jedem erfolgreichen Tab-Verwaltungsergebnis seinen eigenen Block, selbst wenn ein früheres Ergebnis im selben Zug denselben Zustand gemeldet hat.
Wenn ein Klick oder eine Navigation einen Datei-Download startet, melde ihn in state_changes beim Ergebnis des Aufrufs, während dessen er geschah, über Ergebnisse hinweg korreliert durch eine download_id, die du vergibst. Downloads laufen asynchron und können sich über mehrere Ergebnisse erstrecken, daher gibt es drei Ereignistypen:
type | Felder | Wann senden |
|---|---|---|
download_started | download_id, url | Beim Ergebnis des Aufrufs, während dessen der Download begann. url ist die endgültige URL, von der die Datei ausgeliefert wird, nach Weiterleitungen. |
download_completed | download_id, url, path?, size_bytes? | Beim Ergebnis desjenigen späteren Aufrufs, der gerade läuft, wenn der Download abgeschlossen wird. Füge path nur bei, wenn ein anderes Tool in derselben Umgebung (zum Beispiel das Bash-Tool oder file_upload) die Datei dort lesen kann; andernfalls ist download_id die einzige Kennung des Downloads. |
download_failed | download_id, url, error? | Wenn der Download fehlschlägt oder abgebrochen wird, mit dem Grund in error, falls der Browser einen liefert. |
Die API validiert diese Einträge, rendert sie aber nicht in Text, den Claude sieht; wenn Claude also mit der Datei arbeiten muss, erwähne den Dateinamen oder path zusätzlich im text-Block desselben Ergebnisses.
Ein Klick auf „Download price list (CSV)" (ref_8) im Pricing-Tab startet beispielsweise einen Download, sodass das Ergebnis des Klicks einen download_started-Eintrag mit der download_id "dl-1" und der URL der Datei trägt. Der Download wird abgeschlossen, während ein späterer screenshot-Aufruf läuft, sodass der content dieses Ergebnisses das Bild, einen Textblock wie Screenshot captured. Download complete: /home/user/downloads/price-list.csv (48,213 bytes). und diesen browser_state-Block enthält, der den Abschluss unter derselben download_id meldet:
{
"type": "browser_state",
"tabs": [
{ "tab_id": "tab-1", "title": "Documentation", "url": "https://example.com/docs" },
{
"tab_id": "tab-2",
"title": "Pricing",
"url": "https://example.com/pricing",
"active": true
}
],
"state_changes": [
{
"type": "download_completed",
"download_id": "dl-1",
"url": "https://example.com/pricing/price-list.csv",
"path": "/home/user/downloads/price-list.csv",
"size_bytes": 48213
}
]
}Download-Meldungen folgen diesen Regeln:
download_id in einem einzelnen Block, sodass ein Download, der während desselben Aufrufs startet und endet, nur download_completed meldet.state_changes bei einem Ergebnis mit is_error: true; melde ein Download-Ereignis, das während eines fehlgeschlagenen Aufrufs auftrat, beim nächsten erfolgreichen Ergebnis.state_changes ist kein Inventar laufender Downloads; melde jedes Ereignis einmal.type deklariert. size_bytes ist eine nicht negative Ganzzahl, download_id ist nicht leer, und download_id, url, path und error sind jeweils höchstens 4.096 Zeichen lang, ohne Steuerzeichen oder Unicode-Zeilen- oder Absatztrennzeichen. Die url stammt vom entfernten Server und trägt nach Weiterleitungen oft signierte Query-String-Anmeldedaten, entferne also Query-Parameter, die du nicht in Claudes Kontext haben möchtest, und bereinige sie, bevor du sie meldest oder in einem Dateisystempfad verwendest.Melde Claude einen fehlgeschlagenen Aufruf als gewöhnliches Fehlerergebnis: is_error: true, Textinhalt, der sagt, was schiefging, toolset_name zurückgegeben und kein browser_state-Block.
Formuliere Fehlertext spezifisch, denn Claude liest ihn und passt sich an: Error: Navigation to https://example.com/status timed out after 30 seconds. The page may be unavailable. gibt Claude etwas, worauf es reagieren kann, wo ein bloßes Error: navigation failed das nicht tut. Weitere häufige Fälle:
Die API validiert den Toolset-Eintrag und jeden Member-tool_use- und tool_result-Block in der Konversation. Wenn einer fehlerhaft ist, gibt die API einen invalid_request_error zurück, bevor Claude läuft. In der folgenden Tabelle benennt die linke Spalte, was du gesendet hast.
| Anfrage | Warum sie fehlschlägt und was zu tun ist |
|---|---|
Eine Option oder Kombination, die der Toolset-Eintrag nicht akzeptiert, zum Beispiel ein name, strict: true, input_examples, defer_loading am Eintrag selbst, ein configs-Schlüssel, der kein Member-Name ist, ein anderes Feld als enabled oder defer_loading im configs-Wert eines Members (Das Toolset konfigurieren), aktivierte Member, deren defer_loading-Werte sich unterscheiden (Das Toolset konfigurieren), ein configs, das keinen Member aktiviert lässt, ein Code-Execution-Aufrufer in allowed_callers, der veraltete Beta-Header fine-grained-tool-streaming-2025-05-14 in der Anfrage, ein tool_choice vom Typ tool, das browser oder einen Member benennt, oder ein zweiter Browser-Toolset-Eintrag oder ein anderes Tool namens browser | Diese werden bei Client-Toolsets nicht unterstützt. Siehe Client-Toolsets für jede Regel und ihre Alternative. |
Ein tool_result, das einen Member-Aufruf ohne "toolset_name": "browser" oder mit einem anderen Wert beantwortet, oder toolset_name bei einem Ergebnis, dessen Aufruf kein Member-Aufruf war | Gib toolset_name bei Member-Ergebnissen exakt zurück, und nur bei diesen. |
Ein Member-tool_use aus einem früheren Zug ohne passendes tool_result | Beantworte jeden Member-Aufruf, einschließlich derer, die du nach einem Fehler nicht ausgeführt hast. |
Ein anderer Inhaltsblock als text, image oder browser_state in einem Member-Ergebnis | Member-Ergebnisse akzeptieren nur diese drei Blocktypen. |
Ein browser_state-Block, der eine Regel aus Tabs mit browser_state verfolgen verletzt, zum Beispiel einer bei einem Ergebnis mit is_error: true oder bei einem Ergebnis, das keinen Browser-Member-Aufruf beantwortet, mehr als einer in einem Ergebnis, ein nicht leeres tabs ohne genau einen active: true-Eintrag, eine doppelte tab_id, ein leeres state_changes-Array, ein tab_opened, dessen tab_id nicht in tabs steht, zwei Zustandsänderungen für eine download_id oder ein Zustandsänderungsfeld, das sein type nicht deklariert (Downloads melden), oder ein Feld über seinen Limits | Korrigiere den Block. „Nichts zu melden" wird durch Weglassen des Blocks oder des state_changes-Felds ausgedrückt, niemals durch einen leeren Wert. |
Ein erfolgreiches new_tab-, switch_tab-, close_tab- oder list_tabs-Ergebnis, dessen content nicht genau ein browser_state-Block ist, oder ein new_tab-Ergebnis ohne genau ein tab_opened, das zum aktiven Tab passt | Die API rendert diese Ergebnisse aus dem Block und benötigt ihn in genau dieser Form; siehe Ergebnisse der Tab-Verwaltung. |
Ein image in einem Ergebnis über den Bildgrößenlimits deines Modells oder über dem strengeren Limit pro Bild, das gilt, sobald die Anfrage mehr als 20 Bilder enthält, wobei Screenshots und zoom-Bilder in früheren Ergebnissen mitzählen | Die API skaliert Toolset-Bilder nicht herunter. Verkleinere Screenshots, bevor du sie zurückgibst (Screenshots passend zu Bildlimits dimensionieren). |
Ein model, das browser_toolset_20260801 nicht unterstützt | Siehe Kompatibilität für die unterstützten Modelle. |
input jedes Members als ein vollständiges input_json_delta an (Client-Toolsets).read_console und read_network hängen von deiner Browser-Automatisierung ab: Sie melden nur, was diese erfassen kann, und nur ab dem Moment, in dem sie sich an einen Tab angehängt hat.„Browser use" (Browser-Nutzung) folgt der standardmäßigen Preisgestaltung für Tool-Nutzung. Bei Verwendung des Browser-Use-Tools gilt:
Overhead der Toolset-Definition: Die Deklaration von browser_toolset_20260801 mit seinen Standardmitgliedern fügt einer Anfrage etwa 6.600 Input-Token hinzu (etwa 6.610 bei Claude Fable 5, Claude Mythos 5, Claude Opus 5 und Claude Opus 4.8 sowie etwa 6.670 bei Claude Sonnet 5). Dies umfasst die Definitionen der Mitglieds-Tools und den System-Prompt für die Tool-Nutzung. Das Aktivieren aller vier optionalen Mitglieder fügt etwa 880 Token hinzu, und das Deaktivieren von Mitgliedern über configs verringert die Anzahl. Die genaue Anzahl für eine Anfrage wird im usage-Feld der Antwort ausgewiesen, und du kannst sie vorab mit dem Token-Counting-Endpunkt schätzen.
Zusätzlicher Token-Verbrauch:
Die Browser-Sitzung, Downloads und hochgeladene Dateien bleiben in deiner Umgebung; die Screenshots, der Seitentext und der Tab-Zustand, die du zurückgibst, sind Teil des Inhalts deiner API-Anfrage und folgen der Standard-Aufbewahrungsrichtlinie oder deiner ZDR-Vereinbarung, falls du eine hast. Das Browser-Use-Tool ist ZDR-berechtigt; siehe API und Datenaufbewahrung für Aufbewahrungsfristen und Berechtigung über alle Funktionen hinweg.
Gib Claude die Kontrolle über einen vollständigen Desktop, wenn die Aufgabe den Browser verlässt; dessen Implementierungshinweise gelten auch für Browser-Executors.
Formatiere tool_result-Blöcke, gib Bilder und Fehler zurück und setze die Konversation fort.
Durchstöbere Client-Toolsets und jedes andere von Anthropic bereitgestellte Tool mit ihren Versionen und Parametern.
| Supported models |
|
|---|---|
| Supported platforms |
|
Was this page helpful?