---
title: "Studio mit einem Browser-Agenten steuern"
description: "Registriere die Review-Aktionen von Verbatra Studio als WebMCP-Tools, damit ein KI-Agent im Browser deinen offenen, angemeldeten Dashboard-Tab bedienen kann."
type: "how-to"
---
# Studio mit einem Browser-Agenten steuern

Registriere die Review-Aktionen von Verbatra Studio als WebMCP-Tools, damit ein KI-Agent im Browser deinen offenen, angemeldeten Dashboard-Tab bedienen kann.

Damit lässt du einen KI-Agenten im Browser, etwa Gemini oder Claude in Chrome, im offenen Studio-Tab Drift prüfen, die Review-Warteschlange abarbeiten und Einträge korrigieren. Für die Projekteinrichtung oder den Fernzugriff ist das nicht gedacht.

Du brauchst:

- ein laufendes Studio über deinem Projekt ([In Studio prüfen](https://verbatra.kreitz-webdev.de/de/docs/review-in-studio.md#starte-studio));
- Chrome 149 oder neuer mit aktiviertem `chrome://flags/#enable-webmcp-testing` oder einen Browser mit nativer WebMCP-Unterstützung, in einem normalen Fenster statt headless.

<Callout title="Experimentell">
WebMCP ist eine neue Browser-Fähigkeit hinter einem Flag, und ihre Schnittstelle kann sich noch ändern.
</Callout>

## Die Tools einschalten [#die-tools-einschalten]

```bash
verbatra studio --expose-agent-tools
```

`VERBATRA_STUDIO_AGENT_TOOLS=1` bewirkt dasselbe; wie Flag und Variable aufgelöst werden, steht unter [Ausgaben und Agent-Tools](https://verbatra.kreitz-webdev.de/de/docs/cli/studio.md#ausgaben-und-agent-tools). Öffne die ausgegebene URL im WebMCP-Browser, und der Agent in diesem Tab findet die Tools. In einem Browser ohne WebMCP registriert Studio nichts, und das Dashboard bleibt unverändert.

Damit der Agent deinen Provider aufrufen darf, startest du Studio zusätzlich mit `--allow-spend`.

Der Agent liest jeden Wert ungeschwärzt, so wie die Seite ihn zeigt, weil ein Agent im Tab die Seite ohnehin lesen kann. Ausnahmen sind die Glossar-Tools und `verbatra_history_keyRevisions`: Ihre Werte durchlaufen eine Geheimnis-Schwärzung, ein Wert in der Form eines API-Schlüssels kommt daher als Platzhalter zurück. Willst du Werte vor einem Agenten verbergen, nutze stattdessen den MCP-Server mit [`--redact-values`](https://verbatra.kreitz-webdev.de/de/docs/cli/mcp.md#redacted-values); für ein NDA-Projekt siehe [Studio und MCP](https://verbatra.kreitz-webdev.de/de/docs/data-handling.md#studio-und-mcp).

## Wissen, was der Agent aufrufen kann [#wissen-was-der-agent-aufrufen-kann]

Jedes Tool ist eine Studio-Aktion mit dem Präfix `verbatra_`. Lese-Tools sind als nur lesend markiert, Schreib-Tools ändern nur deine lokalen Dateien, und kostenpflichtige Tools werden nur mit `--allow-spend` registriert.

### Lese-Tools [#lese-tools]

| Tool | Was es tut |
| --- | --- |
| `verbatra_project_snapshot` | die geladene Konfiguration, die Fähigkeiten und unter `capabilities.limits` die Rate-Limits für `retranslate`, `reviewDecision` und die beiden Methoden zum Ersetzen von Werten |
| `verbatra_status_check` | Abdeckung pro Locale |
| `verbatra_status_diff` | fehlende, geänderte und verwaiste Keys pro Locale |
| `verbatra_glossary_get` | das aufgelöste Glossar, mit geschwärzten Secrets |
| `verbatra_lock_state` | den Zustand der Lock-Datei pro Locale |
| `verbatra_history_list` | die letzten Commits an den Locale-Dateien, mit dem Namen des Autors ([nie die E-Mail](https://verbatra.kreitz-webdev.de/de/docs/data-handling.md#studio-und-mcp)) |
| `verbatra_history_keyRevisions` | die Commits eines Keys in einer Locale, mit Wort-Diffs, Schlüssel geschwärzt <AvailableFrom version="0.7.0" pkg="@verbatra/studio" /> |
| `verbatra_key_integrity` | Platzhalter-, Markup- und ICU-Prüfung für einen Key, in den Locales, in denen sich seine Quelle geändert hat |
| `verbatra_review_queue` | jeden maschinell geschriebenen Wert, den noch niemand freigegeben hat, aus den committeten Dateien <AvailableFrom version="0.6.0" pkg="@verbatra/studio" /> |
| `verbatra_key_value` | Quelle und Ziel eines Keys, samt Angabe, wer das Ziel geschrieben hat |
| `verbatra_key_context` | Beschreibung, Glossarbegriffe und `maxLength` eines Keys sowie die Prüfung eines optionalen `draft` <AvailableFrom version="0.6.0" pkg="@verbatra/studio" /> |
| `verbatra_locale_values` | Key-Werte pro Ziel-Locale, standardmäßig 200 pro Seite, eingegrenzt mit `locales`, `keys` oder `query` |
| `verbatra_locale_integrity` | jede Übersetzung, die die Integritätsprüfungen nicht besteht <AvailableFrom version="0.6.0" pkg="@verbatra/studio" /> |
| `verbatra_translation_estimate` | was ein Translate-Pending-Aufruf senden und kosten würde, ohne einen Provider aufzurufen |
| `verbatra_usage_summary` | Token-Verbrauch und Budget des letzten Laufs |
| `verbatra_usage_history` | aufgezeichnete Läufe, neueste zuerst, mit Tokens, Kosten und Abdeckung, nur als Zahlen <AvailableFrom version="0.7.0" pkg="@verbatra/studio" /> |

### Schreib-Tools [#schreib-tools]

| Tool | Was es tut |
| --- | --- |
| `verbatra_glossary_write` | einen Begriff eines dateibasierten Glossars ändern <AvailableFrom version="0.4.0" pkg="@verbatra/studio" /> |
| `verbatra_review_approve` | die Freigabe eines Werts durch eine benannte Person festhalten <AvailableFrom version="0.6.0" pkg="@verbatra/studio" /> |
| `verbatra_review_reject` | die Ablehnung durch eine benannte Person festhalten und den Wert entfernen |
| `verbatra_translation_editEntry` | einen Wert durch das Integritäts-Gate schreiben |

### Kostenpflichtige Tools [#kostenpflichtige-tools]

| Tool | Was es tut |
| --- | --- |
| `verbatra_translation_retranslateEntry` | einen Key in einer Locale neu übersetzen |
| `verbatra_translation_translatePending` | alles Ausstehende übersetzen, optional nur für bestimmte `locales` und unter einer `maxTokens`-Obergrenze <AvailableFrom version="0.6.0" pkg="@verbatra/studio" /> |

`verbatra_key_integrity` liefert nur die Locales, in denen sich die Quelle des Keys geändert hat; eine leere Liste heißt also, dass nichts zu prüfen war. Seine Zeilen sind flacher als die von [`key.integrity`](https://verbatra.kreitz-webdev.de/de/docs/cli/mcp.md#inputs-und-ergebnisse) im MCP-Server. Nur der MCP-Server hat `project.doctor` und `report.provenance`. `verbatra_locale_values` blättert wie sein `locale.values`, mit denselben `limit` und `cursor` ([Weitere Eingaben und Ergebnisse](https://verbatra.kreitz-webdev.de/de/docs/cli/mcp.md#weitere-eingaben-und-ergebnisse)).

## Die Regeln der Tools kennen [#die-regeln-der-tools-kennen]

Jeder Aufruf läuft über den eigenen, angemeldeten Loopback-RPC des Dashboards, mit derselben Eingabeprüfung und demselben [Integritäts-Gate](https://verbatra.kreitz-webdev.de/de/docs/translation-safety.md): Ein Wert, der eine Prüfung nicht besteht, wird abgelehnt, nicht geschrieben.

### Regeln je Aufruf [#regeln-je-aufruf]

<AvailableFrom version="0.6.0" pkg="@verbatra/studio" />

- **Herkunft**: Eine Änderung durch den Agenten wird mit der Herkunft `agent` festgehalten und bleibt in der Review-Warteschlange; eine Änderung im Dashboard ist `human`. Die Lese-Tools melden, wer welchen Wert geschrieben hat ([Die Lock-Datei](https://verbatra.kreitz-webdev.de/de/docs/the-lock-file.md#herkunft-wer-welchen-wert-geschrieben-hat)).
- **Menschliche Arbeit**: Neu übersetzen verweigert den Wert einer Person mit `KEY_PROTECTED` (außer bei `humanEdits: "overwrite"`) und einen gepinnten Key mit `KEY_PINNED`, Bearbeiten verweigert einen gepinnten Key ([Menschliche Übersetzungen behalten](https://verbatra.kreitz-webdev.de/de/docs/protecting-human-translations.md)).
- **Review-Entscheidungen**: Freigeben und Ablehnen geben nur deine Entscheidung weiter. Beide brauchen `reviewer`, den Namen der Person, und `expectedValue`, den geprüften Text; ein geänderter Wert wird mit `REVIEW_VALUE_CHANGED` abgelehnt.
- **Keine Sammel-Tools**: **Approve selected**, **Reject selected**, **Retranslate selected**, **Approve all in** und **Search and replace** bleiben Menschen vorbehalten.
- **Erst schätzen**: Eine unbekannte Locale wird mit `UNKNOWN_LOCALE` abgelehnt, bevor etwas ausgegeben wird, und es gilt das niedrigere `maxTokens` von Aufruf und Konfiguration ([Kosten vor einem Lauf schätzen](https://verbatra.kreitz-webdev.de/de/docs/estimating-cost.md)).
- **Rate-Limits**: pro gleitender Minute 20 Neuübersetzungen, 20 Bearbeitungen, 20 Glossar-Schreibvorgänge, 60 Review-Entscheidungen und 5 Translate-Pending-Aufrufe, einer zur Zeit.

## Einen fehlgeschlagenen Aufruf lesen [#einen-fehlgeschlagenen-aufruf-lesen]

Jedes Tool liefert den Umschlag des Dashboards, ein Fehler sieht also so aus: `{ "ok": false, "error": { "code": ..., "message": ... } }`. Neben den Codes des SDK ergänzt die RPC-Schicht:

| Code | Bedeutung |
| --- | --- |
| `REQUEST_INVALID` | Anfrage oder Antwort war kein lesbarer Umschlag |
| `METHOD_UNKNOWN` | die Methode gibt es in dieser Studio-Version nicht |
| `SPEND_DISABLED` | eine kostenpflichtige Methode, während Ausgaben aus sind: Studio läuft ohne `--allow-spend`, oder der Provider ist `none`; die Meldung nennt den Grund |
| `PARAMS_INVALID` | ein Parameter hat die Prüfung nicht bestanden; `issues` nennt jedes Feld |
| `METHOD_RATE_LIMITED` | über dem Rate-Limit; `retryAfterSeconds` sagt, wann der Aufruf passt |
| `BATCH_TOO_LARGE` | ein Batch übersteigt ein ganzes Rate-Limit-Fenster; sende weniger Einträge |
| `ALREADY_IN_PROGRESS` | ein zweiter Aufruf für einen Eintrag, der noch läuft (HTTP 409) |
| `SESSION_EXPIRED` | Studio wurde mit neuem Token neu gestartet; öffne die URL, die es ausgegeben hat |
| `INTERNAL` | ein Handler ist mit einem unerwarteten Fehler gescheitert (HTTP 500); die Meldung ist generisch |

## Eingeschränkte Tools beheben [#eingeschränkte-tools-beheben]

Lehnt der Browser eine Registrierung ab, zeigt jede Ansicht eine Warnung wie:

> Agent tools degraded: 2 of the agent tool registrations failed with SecurityError. The dashboard itself is unaffected. The browser console lists every failing tool.

Die Konsole enthält eine Zeile, die jeden Fehler nennt:

```text output
Verbatra agent tools: 2 of 20 tool registrations failed. verbatra_status_diff (SecurityError: ...); verbatra_key_value (SecurityError: ...)
```

Lies dort zuerst den Fehlernamen und lade dann den Tab neu, damit die Registrierung erneut läuft. Ein fehlendes Flag oder ein Browser ohne WebMCP zeigt diesen Hinweis nie; dann wird stillschweigend nichts registriert. Eine Sitzung ohne `--allow-spend` versucht zwei Registrierungen weniger, und das ist kein Fehler.

## Das Ausgabenrisiko abwägen [#das-ausgabenrisiko-abwägen]

Die Tools öffnen nichts Neues im Netz: Studio bindet weiterhin nur an `127.0.0.1`, jede Anfrage trägt das Sitzungs-Token, und Tools, die Projekttext liefern, markieren ihn als nicht vertrauenswürdig, damit der Agent ihn als Daten behandelt.

<Callout type="warn">
Mit `--allow-spend` und `--expose-agent-tools` zusammen kann ein Agent ohne Bestätigung pro Aufruf bei deinem Provider Geld ausgeben, bis zu den Rate-Limits. Studio kann den Aufruf eines Agenten nicht von deinem Klick unterscheiden und fügt deshalb keinen Bestätigungsdialog hinzu. Für reines Lesen und Bearbeiten lässt du `--allow-spend` weg.
</Callout>

## Siehe auch [#siehe-auch]

- [In Studio prüfen](https://verbatra.kreitz-webdev.de/de/docs/review-in-studio.md): derselbe Ablauf von Hand.
- [`verbatra studio`](https://verbatra.kreitz-webdev.de/de/docs/cli/studio.md): jedes Flag und der Startvertrag.
- [Einen MCP-Client verbinden](https://verbatra.kreitz-webdev.de/de/docs/connect-an-mcp-client.md#das-verbatra-plugin): Das Plugin bringt den Skill `verbatra-studio-agent-tools` mit, Studio startest du aber selbst.
