
aquaman v0.14.1
🔱 Der einzige unabhängige Credential-Proxy für KI-Agenten: Bring-Your-Own-Vault-Isolation & Least-Privilege-Anfragenrichtlinien. Ihre Schlüssel bleiben dort, wo Sie sie bereits aufbewahren, niemals im Speicher des Agenten. Kompatibel mit 1Password, keychain, keepassxc und vielen anderen.
🔱 Aquaman
🔱 Der einzige unabhängige Credential-Proxy für KI-Agenten: Bring-your-own-Vault-Isolation & Least-Privilege-Request-Policies. Ihre Schlüssel bleiben dort, wo Sie sie bereits aufbewahren, niemals im Speicher des Agenten. Kompatibel mit 1Password, Keychain, KeePassXC und vielen anderen.
Sie richten Claude Code, OpenClaw oder Hermes ein, und jetzt starren Sie auf .env-Dateien mit Ihren wertvollen API-Schlüsseln im Klartext. Sie haben die Artikel gelesen. Sie wissen, was passiert, wenn ein Agent prompt-injiziert wird. Wir verstehen das.
Aquaman behebt dies mit drei Verteidigungsschichten:
- Prozessisolation: API-Schlüssel leben in einem separaten Proxy-Prozess. Der Agent sieht sie nie. Selbst RCE im Agenten kann nicht auf die Anmeldeinformationen zugreifen. Sie befinden sich in einem anderen Adressraum.
- Request Policies: Dienste-spezifische Regeln kontrollieren, welche Endpunkte ein Agent aufrufen kann. Blockieren Sie Admin-APIs, verhindern Sie Löschungen, erlauben Sie Entwürfe, aber verbieten Sie das Senden. Abgelehnte Anfragen erhalten niemals echte Anmeldeinformationen.
- Manipulationssichere Prüfung: Jede Nutzung von Anmeldeinformationen wird mit SHA-256-Hash-Ketten protokolliert. Sie können nachweisen, worauf zugegriffen wurde, und nachträgliche Manipulationen erkennen.
Wählen Sie Ihren Pfad
Aquaman wird als vier koordinierte Pakete ausgeliefert, die einen Tresor + einen Daemon gemeinsam nutzen. Installieren Sie nur, was Sie brauchen:
| Paket | Was es tut | Wann installieren |
|---|---|---|
aquaman-proxy | Kern: Tresor, Daemon, Audit, Richtlinie, CLI. Das Teil, das jeder braucht. | Immer. |
aquaman-plugin | OpenClaw Gateway-Adapter. Startet den Proxy beim Gateway-Start; fängt Channel-Traffic ab; 25 integrierte Dienste mit 5 Auth-Modi. | Wenn Sie ein OpenClaw Gateway betreiben. Auch verfügbar unter https://clawhub.ai/plugins/aquaman-plugin |
aquaman-coder | KI-Coding-Agent-Adapter. Projektspezifische aquaman://service/key-Referenzen, die pro Bash-Tool-Aufruf aufgelöst werden. | Wenn Sie Claude Code (heute) verwenden – Codex / OpenCode / Cursor geplant. |
aquaman-hermes | Hermes-Agent-Host-Plugin (Python, auf PyPI). Weist Hermes an einen opt-in, token-gesicherten Loopback-Listener über dessen native ANTHROPIC_BASE_URL/OPENAI_BASE_URL; fügt einen /aquaman-status-Befehl, ein Tool und einen Health-Probe in der Sitzung hinzu. Isolation ist proxy-seitig; das Plugin hält keine Anmeldeinformationen. | Wenn Sie den Hermes-Agent-Host betreiben. pip install aquaman-hermes |
Eine einzelne aquaman-CLI bedient alle vier: Top-Level-Befehle für Tresor und Audit, aquaman openclaw ... für die OpenClaw-Integration, aquaman coder ... für die Coding-Agent-Integration (delegiert unter der Haube an aquaman-coder) sowie aquaman hermes ... für das Hermes-Python-Paket.
Schnellstart
aquaman help, aquaman doctor sind Ihre Freunde.
1. Nur Tresor (nur der Proxy + Ihre Geheimnisse)
npm install -g aquaman-proxy
aquaman setup # Backend-Assistent + Schlüssel speichern
aquaman daemon & # Proxy starten
aquaman credentials list # Überprüfen
Der Proxy lauscht auf ~/.aquaman/proxy.sock (UDS, chmod 0o600). Weisen Sie ein Tool auf http://aquaman.local/<service>/<path> und der Proxy fügt Auth-Header für diesen Dienst aus Ihrem gewählten Tresor-Backend ein.
2. OpenClaw Gateway
openclaw plugins install aquaman-plugin # 1. Plugin + Proxy installieren
openclaw aquaman setup # 2. Backend + Schlüssel + Plugin-Verdrahtung
openclaw # 3. Fertig – Proxy startet automatisch
Fehlerbehebung: openclaw aquaman doctor.
npm direkt verwenden? npm install -g aquaman-proxy && aquaman openclaw setup macht dasselbe – installiert die Proxy-CLI, speichert Ihre Schlüssel, installiert das Plugin in ~/.openclaw/extensions/aquaman-plugin/ und verdrahtet die Anmeldeinformationen (SecretRef-Referenzen auf OpenClaw ≥ 2026.6.5, der auth-profiles.json-Platzhalter auf älteren Versionen).
Der HTTP-Interceptor des Plugins leitet nur Traffic für Dienste in seiner services-Konfiguration um (Anthropic + OpenAI standardmäßig). Fügen Sie weitere unter der Plugin-Konfiguration in openclaw.json hinzu – unterstützte Kanäle sind Slack, Discord, Telegram, MS Teams, Matrix, LINE, Twitch, Twilio, BlueBubbles, Mattermost, Nostr, Tlon, Feishu, Google Chat, ElevenLabs, xAI, Cloudflare AI Gateway, Mistral, Hugging Face und mehr (insgesamt 25).
3. KI-Coding-Agenten (heute Claude Code)
npm install -g aquaman-proxy aquaman-coder # 1. Daemon + Adapter installieren
aquaman setup # 2. Tresor-Assistent
aquaman daemon & # 3. Proxy starten
aquaman coder project add my-app --path ~/code/my-app \
--env ANTHROPIC_API_KEY=aquaman://anthropic/api_key \
--env GITHUB_TOKEN=aquaman://github/token # 4. Projekt deklarieren
aquaman coder setup claude-code # 5. Claude Code-Hooks verdrahten
aquaman doctor # 6. Überprüfen – sollte sowohl Tresor als auch Coder grün zeigen
Sehen Sie selbst (der 30-Sekunden-Aha-Moment): Starten Sie Claude Code neu, öffnen Sie eine neue Sitzung in ~/code/my-app, und bitten Sie den Agenten, Folgendes auszuführen:
printenv | grep ANTHROPIC_API_KEY
Sie sehen dies im Transkript:
ANTHROPIC_API_KEY=[REDACTED:injected-value]
⏺ ANTHROPIC_API_KEY ist gesetzt und verfügbar (via aquaman vault injiziert).
Der Kind-Prozess sah den echten Schlüssel (Ihre Tests, Builds, MCP-Server, Import-Skripte – alles, was ihn wirklich braucht, funktioniert). Der Agent – das Ding, das entscheidet, welcher Code auf Ihrer Maschine ausgeführt wird – sieht den Wert nie, und damit auch nicht der Gesprächsverlauf, auch nicht die Logs des Modellanbieters, noch irgendjemand, der später einen Screenshot Ihres Terminals macht.
Verwenden Sie es auch von Ihrem eigenen Terminal aus. Derselbe Wrapper funktioniert ohne den Agenten. Wechseln Sie einfach in ein abgedecktes Projekt und stellen Sie Ihrem Befehl Folgendes voran:
cd ~/code/
aquaman-coder exec -- python app/scripts/import.py
Gleiche Umgebungsinjektion, gleiche Schwärzung auf stdout/stderr. Nutzen Sie es in Makefile-Zielen, Shell-Aliasen oder CI-Runnern – überall dort, wo Sie sonst zu einer .env-Datei greifen würden.
Wenn Claude Code ein Bash-Tool in ~/code/my-app ausführt, schreibt der aquaman-Hook den Befehl über updatedInput.command um und wickelt ihn unter aquaman-coder exec. Dieser Wrapper:
- Löst jede
aquaman://service/key-Referenz über den Broker auf (POST /broker/resolveüber UDS). Anmeldeinformationen werden für einen Befehl materialisiert, nicht für die Lebensdauer des Agenten. - Leitet stdout/stderr durch eine Schwärzungsfunktion, die für jeden aufgelösten Wert ein wertbasiertes Muster voranstellt: welcher String auch immer injiziert wurde, wird unabhängig von seiner Form geschwärzt (Atlassian-Tokens, Notion-Geheimnisse, interne API-Schlüssel – keiner muss einem bekannten Provider-Format entsprechen). Generische formbasierte Muster (sk-ant-, ghp_, sk_live_, AKIA…, JWTs, PEM-Blöcke, ATATT3xF…) laufen danach noch als Verteidigung in der Tiefe für Geheimnisse, die der Kind-Prozess preisgibt und die wir NICHT injiziert haben.
- Räumt auf, wenn der Befehl beendet ist.
4. Hermes (Agent-Host)
Hermes ist ein fremder (Python-)Host ohne Transport-Hook zum Injizieren, daher erfolgt die Isolation proxy-seitig: Der Proxy stellt einen opt-in, token-gesicherten Loopback-Listener bereit, und Hermes wird über seine eigenen Umgebungsvariablen darauf ausgerichtet.
npm install -g aquaman-proxy # 1. Daemon installieren
aquaman setup # 2. Tresor-Assistent
aquaman credentials add anthropic api_key sk-ant-... # 3. Providerschlüssel speichern
aquaman hermes setup # 4. Loopback aktivieren + ~/.hermes/.env schreiben
aquaman daemon & # 5. Proxy starten (UDS + Loopback)
aquaman hermes doctor # 6. Überprüfen – Listener + env + Tresor + Hermes
aquaman hermes setup aktiviert den Loopback-Listener, generiert ein installationsspezifisches Token und schreibt einen von aquaman verwalteten Block in ~/.hermes/.env (unter Berücksichtigung von HERMES_HOME): die nativen ANTHROPIC_BASE_URL/OPENAI_BASE_URL plus einen Platzhalter-api_key, der dem Token entspricht. Hermes sendet das Token als seinen Provider-Schlüssel; der Proxy entfernt es, injiziert Ihre echten Tresor-Anmeldeinformationen und leitet weiter. Nur LLM-Provider (Anthropic, OpenAI) heute.
Optionaler In-Session-Zucker – das Python-Plugin fügt einen /aquaman-status-Befehl, ein aquaman_status-Werkzeug und einen Health-Probe beim Sitzungsstart in Hermes hinzu (hält keine Anmeldeinformationen):
pip install aquaman-hermes # oder: uv tool install aquaman-hermes
aquaman-hermes install # legt das Plugin in ~/.hermes/plugins/aquaman/ ab
hermes plugins enable aquaman
So funktioniert es
Agent / OpenClaw / Coding Agent Aquaman Proxy
┌──────────────────────┐ ┌──────────────────────┐
│ │ │ │
│ ANTHROPIC_BASE_URL │═══ UDS / HTTP ════>│ Keychain / 1Pass / │
│ = aquaman.local │ │ Vault / Encrypted │
│ │<══════════════════ │ │
│ fetch() interceptor │═══ broker:resolve │ + Policy enforced │
│ (channel APIs) │ │ + Auth injected: │
│ │ │ header / url-path │
│ No credentials. │ ~/.aquaman/ │ basic / oauth │
│ No open ports. │ proxy.sock │ │
│ Nothing to steal. │ (chmod 0o600) │ │
└──────────────────────┘ └──┬─────────┬─────────┘
│ │
│ ▼
│ ~/.aquaman/audit/
│ (hash-chained)
▼
api.anthropic.com
api.telegram.org
slack.com/api …
- Speichern: Anmeldeinformationen leben im Tresor-Backend, das Sie bereits betreiben – kein eigener Tresor (Keychain, 1Password, HashiCorp Vault, Bitwarden, KeePassXC, systemd-creds, encrypted-file).
- Richtlinie: Der Proxy prüft Methoden- + Pfad-Regeln, bevor er Anmeldeinformationen anfasst. Abgelehnte Anfragen erhalten einen
403, niemals echte Auth-Header. - Einspritzen: Der Proxy sucht die Anmeldeinformationen und fügt den Auth-Header hinzu, bevor er weiterleitet. 25 integrierte Dienste, 4 injizierende Auth-Modi (Header, URL-Pfad, HTTP Basic, OAuth); ein 5.,
none, ist nur im Ruhezustand (der Proxy lehnt Traffic ab). - Broker (Coder-Pfad):
POST /broker/resolvematerialisiert eine Anmeldeinformation pro Tool-Aufruf, begrenzt auf die Umgebung eines einzelnen Befehls, und läuft dann ab. - Prüfung: Jede Nutzung von Anmeldeinformationen wird mit SHA-256-Hash-Ketten protokolliert.
Der Agent sieht nur einen Sentinel-Hostnamen (aquaman.local) oder einen Platzhalter-Marker (aquaman-proxy-managed). Er sieht nie einen echten Schlüssel, und es ist kein TCP-Port für andere Prozesse geöffnet, um ihn zu untersuchen.
Sicherheitsmodell
| Schicht | Was sie tut | Was sie stoppt |
|---|---|---|
| Prozessisolation | Anmeldeinformationen in einem separaten Prozess, verbunden über Unix Domain Socket (chmod 0o600) | Kompromittierter Agent kann Schlüssel nicht lesen – anderer Adressraum, kein TCP-Port zum Sondieren |
| Dienst-Allowlisting | proxiedServices kontrolliert, welche APIs der Agent erreichen kann | Agent kann keine Dienste ansprechen, die Sie nicht autorisiert haben |
| Request Policies | Methoden- + Pfad-Regeln pro Dienst, vor der Credential-Injektion durchgesetzt | Agent kann Anthropic erreichen, aber nicht dessen Admin-API; kann E-Mails entwerfen, aber nicht senden |
| Prüfpfad | SHA-256-Hash-verkettete Logs jeder Nutzung von Anmeldeinformationen | Forensik nach Vorfällen, Manipulationserkennung, Compliance-Nachweise |
| Pro-Tool-Aufruf-Broker (Coder) | aquaman-coder exec materialisiert Anmeldeinformationen für jeweils einen Befehl | Anmeldeinformationen verteilen sich nicht über die Shell-Umgebung des Agenten |
| Ausgabeschwärzung (Coder) | aquaman-coder exec leitet stdout/stderr durch eine Schwärzungsfunktion, die jeden gerade injizierten Wert wörtlich bereinigt – plus generische Provider-Muster als Fallback | Selbst beliebig geformte Anmeldeinformationen gelangen nie in das Agententranskript |
Detailliertes Modell – integrationsspezifische Details (HTTP-Interceptor-Bereich, Auth-Profile, Scanner-Ergebnisse, ClawScan-Herausgeberhinweis) – finden Sie in packages/plugin/README.md und packages/coder/README.md.
Compliance-Position
Aquaman enthält ausführbare Konformitätstests unter test/compliance/, die zugeordnet sind:
- MITRE ATLAS v5.4.0: Techniken AML.T0055, T0012, T0062, T0090, T0098 (
test/compliance/atlas/) - NIST SP 800-53 Rev 5: IA-5, AC-3, AC-6, AU-2/9/10, SC-12/28, SI-10 (
test/compliance/nist/)
Plus Ausrichtungsberichte für CISA/Five-Eyes „Careful Adoption of Agentic AI Services“ (April 2026), CSA MAESTRO und OWASP Top 10 für Agentic Applications. Die Tests laufen als Teil von npm test. Siehe docs/compliance/ für die Zuordnungen.
Request Policies
OAuth-Bereiche können nicht zwischen „E-Mail entwerfen“ und „E-Mail senden“ unterscheiden. Beides ist gmail.send. Request Policies schließen diese Lücke.
# ~/.aquaman/config.yaml
policy:
anthropic:
defaultAction: allow
rules:
- method: "*"
path: "/v1/organizations/**"
action: deny # Admin-/Abrechnungs-API blockieren
openai:
defaultAction: allow
rules:
- method: "*"
path: "/v1/organization/**"
action: deny
- method: DELETE
path: "/v1/**"
action: deny # Keine Löschungen
slack:
defaultAction: allow
rules:
- method: "*"
path: "/admin.*"
action: deny
gmail:
defaultAction: allow
rules:
- method: POST
path: "/v1/users/*/messages/send"
action: deny # Entwürfe ok, Senden blockiert
- Keine Richtlinie = alles erlauben (abwärtskompatibel)
- Erster Treffer gewinnt: Regeln werden von oben nach unten ausgewertet, nicht übereinstimmende Anfragen fallen auf
defaultActionzurück - Abgelehnt vor Authentifizierung: blockierte Anfragen erhalten niemals echte Anmeldeinformationen
- Pfad-Globs:
*passt innerhalb eines Segments,**passt auf null oder mehr Segmente aquaman setupwendet sichere Standardeinstellungen für gespeicherte Dienste an (anthropic,openai,slack,gmail).aquaman policy list/aquaman policy test <svc> <method> <path>für Inspektion / Trockenläufe.
Anmeldeinformations-Backends
Bringen Sie Ihren eigenen Tresor mit – Aquaman hat keinen eigenen Speicher. Wählen Sie das Backend, das Sie bereits betreiben; Geheimnisse bleiben dort, und der Proxy liest sie an Ort und Stelle.
| Backend | Am besten geeignet für | Einrichtung |
|---|---|---|
keychain | Lokale Entwicklung unter macOS (Standard) | Funktioniert sofort |
encrypted-file | Linux, WSL2, CI/CD | AES-256-GCM, passwortgeschützt |
keepassxc | Bestehende KeePass-Benutzer | Setzen Sie AQUAMAN_KEEPASS_PASSWORD oder Schlüsseldatei |
1password | Team-Credential-Sharing | brew install 1password-cli && op signin – für unbeaufsichtigte Agenten verwenden Sie ein Servicekonto (OP_SERVICE_ACCOUNT_TOKEN) |
vault | Unternehmens-Secrets-Management | Setzen Sie VAULT_ADDR + VAULT_TOKEN |
systemd-creds | Linux mit systemd ≥ 256 | TPM2-gestützt, kein Root erforderlich |
bitwarden | Bitwarden-Benutzer | bw login && export BW_SESSION=$(bw unlock --raw) |
aquaman setup erkennt automatisch eine sinnvolle Standardeinstellung (macOS → keychain; Linux → keychain falls libsecret, sonst systemd-creds falls systemd ≥ 256, sonst encrypted-file).
encrypted-file ist eine letzte Möglichkeit für headless-Linux/CI-Umgebungen ohne native Keyring. Für bessere Sicherheit unter Linux installieren Sie libsecret-1-dev (GNOME Keyring), verwenden Sie systemd-creds (TPM2-Bindung) oder 1Password/Vault.
Credential-Caching (v0.13.1+)
Backends mit Kosten pro Zugriff – 1password (biometrische Abfrage pro Lesevorgang im Desktop-App-Modus), bitwarden (~1-2 s CLI-Spawn), vault (HTTP-Roundtrip) – werden standardmäßig 15 Minuten lang im Arbeitsspeicher des Daemons zwischengespeichert, sodass eine aktive Agentensitzung den Tresor nur einmal pro Fenster statt einmal pro Anfrage entsperrt. Die anderen Backends sind bereits schnell oder cachen intern, daher ist das Caching für sie standardmäßig deaktiviert. Passen Sie es mit credentials.cacheTtlSeconds in ~/.aquaman/config.yaml an (oder AQUAMAN_CACHE_TTL); 0 deaktiviert es.
Der ehrliche Kompromiss: Eine biometrische Abfrage pro Zugriff ist eine Benutzeranwesenheitsprüfung, und der Cache entfernt die Anwesenheitsprüfung pro Zugriff für das TTL-Fenster. Für unbeaufsichtigte Agenten wird diese Abfrage nie beantwortet – der Tresor wird zugunsten einer Klartext-.env aufgegeben, was streng genommen schlechter ist. Der Cache verschiebt nicht die Isolationsgrenze: Werte leben nur im Proxy-Prozess (wo sie ohnehin bei jeder Anfrage durchlaufen), werden nie auf die Festplatte geschrieben und sofort ungültig, wenn Sie sie über aquaman credentials add rotieren. Schreibvorgänge gehen immer in Ihren Tresor. Konformität getestet in test/compliance/cache-residency.test.ts. Für null Abfragen mit 1Password verwenden Sie ein Servicekonto, das auf den aquaman-Tresor beschränkt ist – aquaman doctor wird Sie dorthin führen.
Lizenz
MIT – siehe LICENSE.