canUseTool-Callback, um alles andere zur Laufzeit zu handhaben.
Diese Seite behandelt Berechtigungsmodi und Regeln. Um interaktive Genehmigungsabläufe zu erstellen, bei denen Benutzer Tool-Anfragen zur Laufzeit genehmigen oder ablehnen, siehe Genehmigungen und Benutzereingaben handhaben.
Wie Berechtigungen ausgewertet werden
Wenn Claude ein Tool anfordert, prüft das SDK die Berechtigungen in dieser Reihenfolge:1
Hooks
Führen Sie Hooks zuerst aus. Ein Hook kann den Aufruf direkt ablehnen oder ihn weitergeben. Ein Hook, der
allow zurückgibt, überspringt nicht die Deny- und Ask-Regeln unten; diese werden unabhängig vom Hook-Ergebnis ausgewertet.2
Deny-Regeln
Prüfen Sie
deny-Regeln (aus disallowed_tools und settings.json). Wenn eine Deny-Regel zutrifft, wird das Tool blockiert, auch im bypassPermissions-Modus. Bare-Name-Deny-Regeln wie Bash entfernen das Tool aus Claudes Kontext, bevor diese Auswertung beginnt, daher werden nur scoped-Regeln wie Bash(rm *) in diesem Schritt geprüft.3
Ask-Regeln
Prüfen Sie
ask-Regeln aus settings.json. Wenn eine Ask-Regel zutrifft, fällt der Aufruf zu Ihrem canUseTool-Callback zur Bestätigung durch, auch im bypassPermissions-Modus.Tools, die Benutzerinteraktion erfordern, verhalten sich auf die gleiche Weise: AskUserQuestion und MCP-Tools, deren Server _meta["anthropic/requiresUserInteraction"] setzt, fallen immer zum Callback durch, auch wenn eine Allow-Regel zutrifft. Im dontAsk-Modus werden beide Fälle stattdessen abgelehnt, da dieser Modus niemals eine Aufforderung anzeigt. Die MCP-Anmerkung erfordert Claude Code v2.1.199 oder später.claude.ai-Connector-Tools, die Ihre Organisation auf ask gesetzt hat, verlassen den Fluss auch in diesem Schritt. Jeder Aufruf fällt zum Callback durch, auch im bypassPermissions-Modus und auch wenn eine Allow-Regel zutrifft. Der Callback erhält den Grund Your organization requires approval for this tool. Im dontAsk-Modus wird der Aufruf stattdessen abgelehnt, da dieser Modus niemals eine Aufforderung anzeigt.4
Berechtigungsmodus
Wenden Sie den aktiven Berechtigungsmodus an.
bypassPermissions genehmigt alles, das diesen Schritt erreicht. acceptEdits genehmigt Dateivorgänge. plan leitet Datei-Edit- und Shell-Write-Tools zu Ihrem canUseTool-Callback weiter, unabhängig von Allow-Regeln, sodass Schreibvorgänge während der Planung nicht automatisch genehmigt werden können. Andere Modi fallen durch.5
Allow-Regeln
Prüfen Sie
allow-Regeln (aus allowed_tools und settings.json). Wenn eine Regel zutrifft, wird das Tool genehmigt.6
canUseTool-Callback
Wenn nicht durch eines der oben genannten Verfahren gelöst, rufen Sie Ihren
canUseTool-Callback für eine Entscheidung auf. Im dontAsk-Modus wird dieser Schritt übersprungen und das Tool wird abgelehnt.canUseTool-Callback übergeben, den diese Auswertungsreihenfolge niemals erreichen kann. Der Warnungscode ist CLAUDE_SDK_CAN_USE_TOOL_SHADOWED. Zwei Konfigurationen lösen ihn aus:
permissionMode: 'bypassPermissions', das jeden Aufruf, der den Berechtigungsmodus-Schritt erreicht, automatisch genehmigt- Jeder bare
allowedTools-Eintrag wie"Read", der dieses gesamte Tool automatisch genehmigt, bevor der Callback konsultiert wird
Bash(ls *) und der acceptEdits-Modus lösen ihn nicht aus, und Allow-Regeln aus Einstellungsdateien sind für die Prüfung nicht sichtbar.
Hören Sie mit process.on('warning', ...) zu und gleichen Sie den Code ab, um ihn zu protokollieren oder zu unterdrücken. Um jeden Tool-Aufruf unabhängig von Modus und Regeln zu steuern, verwenden Sie stattdessen einen PreToolUse-Hook.
Diese Seite konzentriert sich auf Allow- und Deny-Regeln sowie Berechtigungsmodi. Für die anderen Schritte:
- Hooks: Führen Sie benutzerdefinierten Code aus, um Tool-Anfragen zu genehmigen, abzulehnen oder zu ändern. Siehe Ausführung mit Hooks steuern.
- canUseTool-Callback: Fordern Sie Benutzer zur Laufzeit zur Genehmigung auf, wenn kein früherer Schritt den Aufruf löst. Siehe Genehmigungen und Benutzereingaben handhaben.
Allow- und Deny-Regeln
allowed_tools und disallowed_tools (TypeScript: allowedTools / disallowedTools) fügen Einträge zu den Allow- und Deny-Regellisten im obigen Auswertungsfluss hinzu. Allow-Regeln beeinflussen nur die Genehmigung: Ein Tool, das nicht in allowed_tools aufgelistet ist, ist immer noch für Claude verfügbar und fällt durch zum Berechtigungsmodus. Deny-Regeln verhalten sich unterschiedlich, je nachdem, ob sie ein Tool benennen oder ein Muster innerhalb eines Tools eingrenzen.
Allow-Regeln akzeptieren Tool-Name-Globs nur nach einem literalen
mcp__<server>__-Präfix. Das Server-Segment muss glob-frei sein, damit die Regel einen bestimmten Server benennt, den Sie konfiguriert haben: mcp__puppeteer__* entspricht jedem Tool vom puppeteer-Server, und mcp__github__get_* entspricht seinen get_-Tools. Ein unverankter Eintrag wie allowed_tools=["*"] oder allowed_tools=["mcp__*"] wird mit einer Startwarnmeldung ignoriert und genehmigt nichts automatisch.
Begrenzte Regeln für Read und Edit verwenden ein Pfadmuster. Edit(path)-Regeln regeln alle integrierten Tools, die Dateien schreiben, einschließlich Write und NotebookEdit; eine Write(path)-Regel wird nie von den Dateiberechtigungsprüfungen erfasst.
Verwenden Sie //path für einen absoluten Dateisystempfad: Eine Deny-Regel von Edit(//secrets/**) blockiert Schreibvorgänge überall unter /secrets auf der Festplatte. Mit einem einzelnen führenden Schrägstrich verankert Edit(/secrets/**) stattdessen an der Quelle der Regel. Für Regeln, die durch allowed_tools oder disallowed_tools übergeben werden, bedeutet das das Arbeitsverzeichnis der Sitzung, sodass die Regel /secrets auf der Festplatte nicht blockiert. Siehe Read- und Edit-Regeln für die vier Ankerformen und wie Regeln aus Einstellungsdateien aufgelöst werden.
Für einen gesperrten Agent kombinieren Sie allowedTools mit permissionMode: "dontAsk". Aufgelistete Tools werden genehmigt, abgesehen von den immer-Prompt-Tools in der obigen Warnung; alles andere wird direkt abgelehnt, anstatt zu fragen:
.claude/settings.json konfigurieren. Diese Regeln werden gelesen, wenn die project-Einstellungsquelle aktiviert ist, was sie für Standard-query()-Optionen ist. Wenn Sie setting_sources (TypeScript: settingSources) explizit setzen, fügen Sie "project" ein, damit sie angewendet werden. Siehe Berechtigungseinstellungen für die Regelsyntax.
Berechtigungsmodi
Berechtigungsmodi bieten globale Kontrolle über die Tool-Nutzung durch Claude. Sie können den Berechtigungsmodus beim Aufrufen vonquery() setzen oder ihn dynamisch während Streaming-Sitzungen ändern.
Verfügbare Modi
Das SDK unterstützt diese Berechtigungsmodi:Berechtigungsmodus setzen
Sie können den Berechtigungsmodus einmal beim Starten einer Abfrage setzen oder ihn dynamisch ändern, während die Sitzung aktiv ist.- Zur Abfragezeit
- Während des Streaming
Übergeben Sie
permission_mode (Python) oder permissionMode (TypeScript) beim Erstellen einer Abfrage. Dieser Modus gilt für die gesamte Sitzung, es sei denn, er wird dynamisch geändert.Modusdetails
Accept Edits-Modus (acceptEdits)
Genehmigt automatisch Dateivorgänge, damit Claude Code ohne Aufforderung bearbeiten kann. Andere Tools (wie Bash-Befehle, die keine Dateisystemvorgänge sind) erfordern weiterhin normale Berechtigungen.
Automatisch genehmigte Vorgänge:
- Dateibearbeitungen (Edit-, Write-Tools)
- Dateisystembefehle:
mkdir,touch,rm,rmdir,mv,cp,sed
additionalDirectories. Pfade außerhalb dieses Bereichs und Schreibvorgänge auf geschützte Pfade werden weiterhin angefordert.
Verwenden Sie, wenn: Sie Claudes Bearbeitungen vertrauen und schnellere Iteration wünschen, z. B. während der Prototypenerstellung oder beim Arbeiten in einem isolierten Verzeichnis.
Don’t Ask-Modus (dontAsk)
Konvertiert jede Berechtigungsaufforderung in eine Ablehnung. Tools, die von allowed_tools, settings.json-Allow-Regeln oder einem Hook vorab genehmigt sind, werden normal ausgeführt. Connector-Tools die Ihre Organisation auf ask gesetzt hat und Tools, die Benutzerinteraktion erfordern, werden abgelehnt, auch wenn eine Allow-Regel stimmt. Alles andere wird abgelehnt, ohne canUseTool aufzurufen.
Verwenden Sie, wenn: Sie eine feste, explizite Tool-Oberfläche für einen Headless-Agent wünschen und eine harte Ablehnung gegenüber stiller Abhängigkeit von fehlender canUseTool bevorzugen.
Bypass Permissions-Modus (bypassPermissions)
Genehmigt automatisch alle Tool-Nutzungen ohne Aufforderungen. Hooks werden weiterhin ausgeführt und können Vorgänge bei Bedarf blockieren.
Plan-Modus (plan)
Claude erkundet die Codebasis und erstellt einen Plan, ohne Ihre Quelldateien zu bearbeiten. Schreibgeschützte Tools werden wie im Standard-Modus ausgeführt. Dateibearbeitungen werden im Plan-Modus nie automatisch genehmigt, auch wenn eine Allow-Regel stimmt. Sie werden stattdessen durch Ihren canUseTool-Callback angefordert. Claude kann AskUserQuestion verwenden, um Anforderungen zu klären, bevor der Plan abgeschlossen wird. Siehe Genehmigungen und Benutzereingaben handhaben für die Behandlung dieser Aufforderungen.
Verwenden Sie, wenn: Sie möchten, dass Claude Änderungen vorschlägt, ohne sie auszuführen, z. B. während der Code-Überprüfung oder wenn Sie Änderungen genehmigen müssen, bevor sie vorgenommen werden.
Verwandte Ressourcen
Für die anderen Schritte im Berechtigungsauswertungsfluss:- Genehmigungen und Benutzereingaben handhaben: interaktive Genehmigungsaufforderungen und Klärungsfragen
- Hooks-Anleitung: Führen Sie benutzerdefinierten Code an Schlüsselpunkten im Agent-Lebenszyklus aus
- Berechtigungsregeln: deklarative Allow/Deny-Regeln in
settings.json