Eine YAML-Datei beschreibt, was Agenten dürfen — und was nicht. Shell-Befehle, MCP-Aufrufe und Netzwerk-Calls durchlaufen kompilierte Interception-Layer. Single Go-Binary, agent-agnostisch.
# .ghola/policy.yaml version: 1 profiles: review: fs: { read: ['**'], write: [] } shell: { allow: ['git status', 'git log', 'rg *'] } net: { allow: [] } implement: fs: { read: ['**'], write: ['src/**'] } shell: { allow: ['npm *', 'pnpm *', 'git *'], deny: ['rm -rf *'] } net: { allow: ['registry.npmjs.org', 'api.github.com'] } mcp: { github: read, linear: ask } approvals: timeout: 60s default: deny
Jede Agent-Aktion läuft durch Shell-Interception, MCP-Proxy und Netzwerk-Proxy. Der Agent selbst weiß davon nichts — er sieht eine normale Shell und ein normales Netzwerk.
Läuft auf deinem Host. Beobachtet, loggt, prompted — bei minimalem Overhead. Für die meisten Aufgaben genug.
Ephemeren Docker-Container pro Session. Harte Isolation: eigener FS, eigenes Netzwerk, gemountete Repo-Snapshots.
Eine JSON-Logdatei pro Session. Allow, deny, ask — mit Zeitstempel, Begründung, Diff. Exportierbar für Compliance, durchsuchbar im Desktop.
Policy-as-Code
YAML-Policy mit Profilen, Glob-Patterns, Allow/Deny/Ask. Versioniert wie jede andere Config.
policy-sh
Kompilierter Shell-Wrapper prüft jedes argv, bevor exec passiert. Kein Patching nötig.
Network Proxy
HTTP/HTTPS Forward-Proxy mit Domain-Allowlist und optionalem TLS-MitM für Body-Inspection.
MCP Proxy
Mixed Transport (HTTP + stdio), per-Server-Routing, explizite Tool-Klassifikation read vs. write.
Hot-Reload
Policy ändern, speichern — laufende Sessions übernehmen in unter einer Sekunde.
Profile
review = read-only, implement = full access, audit = no-write. Pro Session wählbar.
Approval Queue
Interaktive Prompts mit konfigurierbarem Timeout. Default deny — keine versehentlichen Yeses.
Single Binary
Go-basiert, statisch gelinkt, keine Runtime-Dependencies. Drop in, brew install, fertig.
Host-Bridge
MCP-Endpoints für Desktop-Integration: Diffs, Status, Approvals. Optional, gut dokumentiert.
Installieren, initialisieren, wrappen. Dein bestehender Agent merkt von alldem nichts — er bekommt einfach eine sichere Umgebung.
# 1. install $ brew install ghola-labs/tap/ghola # 2. initialize a policy in your repo $ ghola init --profile review # 3. run your agent through it $ ghola run --profile implement -- claude ✓ policy loaded · 4 profiles ✓ proxy listening · :7842 ✓ shell wrap · /tmp/ghola/sh → launching claude-code…
Sandbox-CLI als Tarball oder Homebrew Formula.