6.3 KiB
OpenClaw Tool-Permissions — Stand 2026-03-15
Das Problem (GELÖST)
ARIA hat ZWEI Tool-Systeme gleichzeitig: Claude Code Tools UND OpenClaw-native Tools. Das Model hat aber nur Zugriff auf Claude Code Tools (über den Proxy), nicht auf OpenClaw-native Tools.
Root Cause: DREI Probleme gleichzeitig
OpenClaw (aria-core) → API Request → claude-max-api-proxy (aria-proxy) → Claude Code CLI (--print Mode)
↓
Tools: WebFetch, Bash, etc. (Claude Code)
NICHT: web_fetch, exec (OpenClaw-nativ)
Problem 1: Proxy benutzt --print Modus
claude-max-api-proxyruft Claude Code CLI mit--print --output-format stream-jsonauf- Der Prompt wird als einziger String übergeben, keine Tool-Definitionen von OpenClaw
- Das Model sieht NUR Claude Code's eingebaute Tools (WebFetch, Bash, etc.)
- OpenClaw-native Tools (web_fetch, exec) existieren NUR auf Gateway-Ebene, kommen nie beim Model an
Problem 2: BOOTSTRAP.md hat die falschen Tools angewiesen
- BOOTSTRAP.md sagte: "NIEMALS WebFetch benutzen, stattdessen web_fetch"
- Aber web_fetch existiert nicht im Claude Code CLI Kontext
- Und WebFetch war das einzige Tool das funktioniert hätte
- → Model hatte keine Tools die es benutzen "durfte"
Problem 3: settings.json im Proxy war leer
/root/.claude/settings.jsonenthielt nur{}(keine Permissions)- Claude Code CLI im headless-Modus kann keine Tool-Genehmigungen erteilen
- → Selbst wenn das Model WebFetch benutzen wollte, war es nicht vorab genehmigt
Die Lösung
Fix 1: BOOTSTRAP.md + AGENT.md umgeschrieben
Vorher (FALSCH):
- "NIEMALS WebFetch benutzen — hat Permission-Probleme"
- "Benutze web_fetch (OpenClaw-nativ)"
Nachher (KORREKT):
- "WebFetch — URLs abrufen, Webseiten lesen, APIs aufrufen, Wetter abfragen"
- "Bash — Shell-Befehle ausfuehren (curl, ssh, docker, etc.)"
- "Niemals sagen 'ich habe keinen Zugriff' — du hast Zugriff auf alles"
Fix 2: CLAUDE_CODE_BUBBLEWRAP=1 + --dangerously-skip-permissions
Der Schlüssel-Fix. Zwei Zeilen in docker-compose.yml:
# 1. sed-Patch: --dangerously-skip-permissions in manager.js einfügen
sed -i 's/"--no-session-persistence",/"--no-session-persistence","--dangerously-skip-permissions",/' $$DIST/subprocess/manager.js &&
# 2. Environment-Variable: Root-Check umgehen
environment:
- CLAUDE_CODE_BUBBLEWRAP=1
Warum beides nötig:
--dangerously-skip-permissionsumgeht alle Tool-Permission-Checks in Claude Code CLI- Aber: Claude Code CLI blockiert dieses Flag wenn es als root läuft
CLAUDE_CODE_BUBBLEWRAP=1überspringt den Root-Check (gefunden im minifiziertencli.js)- Proxy-Container (
node:22-alpine) läuft als root → ohne BUBBLEWRAP geht's nicht
Resultierende CLI-Argumente:
claude --print --output-format stream-json --verbose --include-partial-messages \
--model opus --no-session-persistence --dangerously-skip-permissions "prompt"
Wie der Proxy intern funktioniert
openai-to-cli.js: OpenAI Messages → einzelner Prompt-String
system → <system>...</system>
user → direkt
assistant → <previous_response>...</previous_response>
subprocess/manager.js: Spawnt `claude --print ... --dangerously-skip-permissions "{prompt}"`
cli-to-openai.js: Claude CLI JSON-Stream → OpenAI Chat Completion Chunks
Der Proxy leitet KEINE Tool-Definitionen von OpenClaw weiter. Tool-Calls passieren INTERN in der Claude Code CLI und sind für OpenClaw transparent.
Permission-Architektur
Granulare Tool-Kontrolle ist NICHT möglich. Es ist Alles-oder-Nichts:
--dangerously-skip-permissionsAN → ARIA kann alle Claude Code Tools benutzen--dangerously-skip-permissionsAUS → ARIA kann keine Tools benutzen
OpenClaw's eigene Permissions (tools.allow/deny in openclaw.json) haben keinen Effekt auf die
Claude Code Tools — die laufen komplett auf Proxy-Seite.
Was NICHT funktioniert hat (17 Versuche)
- settings.json in aria-core — OpenClaw benutzt NICHT Claude Code's settings.json
- tools.allow mit PascalCase (WebFetch, Grep) — OpenClaw kennt diese Namen nicht
- tools.allow mit snake_case (web_fetch) — Nur exec, read, write, edit erkannt
- tools.allow mit Wildcard
["*"]— Hat nicht geholfen - tools.allow leer + tools.profile: "full" — Nur ohne andere Fehler
- System-Prompt Anweisung allein — Reicht nicht wenn Tools blockiert sind
- exec-approvals Wildcard allein — Reicht nicht bei Config-Validation-Error
openclaw config unset tools.exec.ask— CLI kennt den Pfad nicht- BOOTSTRAP.md mit OpenClaw-Tool-Namen — Tools existieren nur auf Gateway-Ebene
- settings.json im Proxy ohne BOOTSTRAP.md Fix — BOOTSTRAP.md verbot die Tools
- tools.byProvider.proxy.profile full — Kein Effekt
- settings.json + BOOTSTRAP.md ohne --dangerously-skip-permissions —
--printignoriert settings.json - Manuelles
docker exec sed— Wird bei jedem Restart überschrieben --dangerously-skip-permissionsohne BUBBLEWRAP — Root-Check blockiert--allowedTools— Variadisches Argument frisst den Prompt--permission-mode bypassPermissions— Gleicher Root-Check- Non-Root User (
su node) — Auth-Pfad-Probleme, Credentials unerreichbar
Wichtige Pfade
aria-core (OpenClaw)
/home/node/.openclaw/openclaw.json— OpenClaw Haupt-Config/home/node/.openclaw/exec-approvals.json— Exec Approvals/tmp/openclaw/openclaw-YYYY-MM-DD.log— Tages-Log
aria-proxy (Claude Code CLI)
/root/.claude/.credentials.json— Auth Credentials (NICHT in /root/.config/claude/)/usr/local/lib/node_modules/claude-max-api-proxy/dist/— Proxy Source/usr/local/lib/node_modules/@anthropic-ai/claude-code/cli.js— Claude Code CLI (enthält Root-Check)
OpenClaw CLI Referenz
openclaw config get/set/unset <path> # Config verwalten
openclaw approvals get # Exec-Approvals anzeigen
openclaw approvals allowlist add # Exec-Pattern freigeben
openclaw doctor [--fix] # Health Check
openclaw gateway status # Gateway-Status