
🔱 AI एजेंटों के लिए एकमात्र स्वतंत्र क्रेडेंशियल प्रॉक्सी: अपना स्वयं का वॉल्ट पृथक्करण और न्यूनतम विशेषाधिकार अनुरोध नीतियां। आपकी चाबियाँ वहीं रहती हैं जहाँ आप पहले से रखते हैं, एजेंट की मेमोरी में कभी नहीं। 1Password, keychain, keepassxc और कई अन्य के साथ संगत।
# 🔱 Aquaman
[](https://github.com/tech4242/aquaman/actions/workflows/ci.yml)
[](https://codecov.io/gh/tech4242/aquaman)
[](https://www.npmjs.com/package/aquaman-proxy)
[](https://www.npmjs.com/package/aquaman-proxy)
[](https://github.com/tech4242/aquaman#security-model)
[](https://www.typescriptlang.org/)
[](LICENSE)
🔱 AI एजेंट्स के लिए एकमात्र स्वतंत्र क्रेडेंशियल प्रॉक्सी: bring-your-own-vault आइसोलेशन और least-privilege अनुरोध नीतियाँ। आपकी keys वहीं रहती हैं जहाँ आप उन्हें पहले से रखते हैं, कभी भी एजेंट की मेमोरी में नहीं। 1Password, keychain, keepassxc और कई अन्य के साथ संगत।
आपने Claude Code, Codex, OpenClaw, Hermes, या Docker Sandboxes सेट अप किया, और अब आप `.env` फ़ाइलों को देख रहे हैं जिनमें आपकी कीमती API keys सादे टेक्स्ट में पड़ी हैं। आपने लेख पढ़े हैं। आप जानते हैं कि जब किसी एजेंट को prompt-injected किया जाता है तो क्या होता है। हम समझते हैं।
Aquaman इसे तीन सुरक्षा परतों से ठीक करता है:
1. **Process isolation**: API keys एक अलग प्रॉक्सी प्रोसेस में रहती हैं जो उन्हें egress पर inject करती है। एजेंट एक marker रखता है, कभी key नहीं, इसलिए एजेंट में RCE होने पर भी कोई इसे पढ़ नहीं सकता। Coding agents को केवल वही refs मिलते हैं जो आप declare करते हैं, एक बार में एक कमांड।
2. **Request policies**: Per-service नियम नियंत्रित करते हैं कि एजेंट *कौन से endpoints* कॉल कर सकता है। Admin APIs ब्लॉक करें, deletions रोकें, drafts की अनुमति दें लेकिन sends अस्वीकार करें। अस्वीकृत अनुरोधों को कभी वास्तविक क्रेडेंशियल नहीं मिलते।
3. **Tamper-evident audit**: प्रत्येक क्रेडेंशियल उपयोग SHA-256 hash chains के साथ लॉग किया जाता है। आप साबित कर सकते हैं कि क्या एक्सेस किया गया और बाद में छेड़छाड़ का पता लगा सकते हैं।
## अपना रास्ता चुनें
Aquaman चार समन्वित पैकेजों के रूप में आता है, जो एक vault + एक daemon साझा करते हैं। केवल वही इंस्टॉल करें जो आपको चाहिए:
| Package | यह क्या करता है | कब इंस्टॉल करें |
|---|---|---|
| **[`aquaman-proxy`](https://github.com/tech4242/aquaman/blob/main/packages/proxy)** | Core: vault, daemon, audit, policy, CLI. वह हिस्सा जो सभी को चाहिए। | हमेशा। |
| **[`aquaman-plugin`](https://github.com/tech4242/aquaman/blob/main/packages/plugin)** | OpenClaw Gateway adapter. Gateway startup पर प्रॉक्सी spawn करता है; model और Telegram ट्रैफ़िक को इसके माध्यम से route करता है; 5 auth modes में 25 builtin services. | यदि आप OpenClaw Gateway चलाते हैं। https://clawhub.ai/plugins/aquaman-plugin पर भी उपलब्ध। |
| **[`aquaman-coder`](https://github.com/tech4242/aquaman/blob/main/packages/coder)** | AI coding-agent adapter. Project-scoped `aquaman://service/key` references प्रति Bash tool call resolve होते हैं। | यदि आप Claude Code या Codex उपयोग करते हैं। |
| **[`aquaman-hermes`](https://github.com/tech4242/aquaman/blob/main/packages/hermes)** | Hermes agent-host plugin (Python, PyPI पर)। Hermes को उसके native `ANTHROPIC_BASE_URL`/`OPENAI_BASE_URL` के माध्यम से एक opt-in, token-gated loopback listener की ओर इंगित करता है; एक in-session `/aquaman-status` कमांड, tool, और health probe जोड़ता है। Isolation proxy-side है; plugin कोई क्रेडेंशियल नहीं रखता। | यदि आप Hermes agent host चलाते हैं। `pip install aquaman-hermes` |
| **Docker Sandboxes** | पैकेज नहीं: एक अलग रास्ता जिसे केवल `aquaman-proxy` चाहिए। Docker की अपनी प्रॉक्सी secrets inject करती है; `aquaman get` उन्हें आपके vault से allow-list और audit log के साथ प्रदान करता है। | यदि आप Docker Sandboxes में agents चलाते हैं। [Quick Start 5](#5-docker-sandboxes) देखें। |
एक ही `aquaman` CLI चारों को सामने लाता है: vault और audit के लिए top-level कमांड, OpenClaw integration के लिए `aquaman openclaw ...`, coding-agent integration के लिए `aquaman coder ...` (अंदर से `aquaman-coder` को delegate करता है) तथा Hermes Python पैकेज के लिए `aquaman hermes ...`।
## Quick Start
`aquaman help`, `aquaman doctor` आपके मित्र हैं।
### 1. केवल Vault (बस प्रॉक्सी + आपके secrets)
```bash
npm install -g aquaman-proxy
aquaman setup # backend wizard + store keys
aquaman daemon & # start the proxy
aquaman credentials list # verify
```
The proxy `~/.aquaman/proxy.sock` पर सुनता है (UDS, `chmod 0o600`)। किसी भी टूल को `http://aquaman.local/<service>/<path>` पर पॉइंट करें और प्रॉक्सी आपके चुने हुए vault बैकएंड से उस सेवा के लिए auth हेडर इंजेक्ट कर देता है।
### 2. OpenClaw Gateway
```bash
openclaw plugins install aquaman-plugin # 1. install plugin + proxy
openclaw aquaman setup # 2. backend + keys + plugin wire-up
openclaw # 3. done - proxy starts automatically
```
समस्या निवारण: `openclaw aquaman doctor`।
**सीधे npm का उपयोग कर रहे हैं?** `npm install -g aquaman-proxy && aquaman openclaw setup` यही काम करता है - प्रॉक्सी CLI इंस्टॉल करता है, आपकी कुंजियाँ संग्रहीत करता है, प्लगइन को `~/.openclaw/extensions/aquaman-plugin/` में इंस्टॉल करता है, और क्रेडेंशियल्स को वायर करता है (OpenClaw ≥ 2026.6.5 पर SecretRef refs, पुराने संस्करणों पर auth-profiles.json प्लेसहोल्डर)।
`aquaman openclaw setup` `models.providers.<svc>.baseUrl` और `channels.telegram.apiRoot` को प्रॉक्सी के लूपबैक लिसनर की ओर इंगित करता है, क्योंकि OpenClaw का मॉडल ट्रांसपोर्ट और उसके चैनल प्रत्येक अपना HTTP क्लाइंट बनाते हैं और fetch इंटरसेप्टर को बायपास करते हैं। Telegram के अलावा अन्य चैनल कोई एंडपॉइंट ओवरराइड उजागर नहीं करते, इसलिए उनके टोकन संग्रहीत और माइग्रेट किए जाते हैं लेकिन egress पर इंजेक्ट नहीं किए जाते (देखें [`packages/plugin/README.md`](https://github.com/tech4242/aquaman/blob/main/packages/plugin/README.md))। `openclaw.json` में प्लगइन कॉन्फ़िग के अंतर्गत चैनल जोड़ें; समर्थित चैनलों में Slack, Discord, Telegram, MS Teams, Matrix, LINE, Twitch, Twilio, BlueBubbles, Mattermost, Nostr, Tlon, Feishu, Google Chat, ElevenLabs, xAI, Cloudflare AI Gateway, Mistral, Hugging Face, और अन्य शामिल हैं (कुल 25)।
### 3. AI कोडिंग एजेंट (Claude Code, Codex)
```bash
npm install -g aquaman-proxy aquaman-coder # 1. install daemon + adapter
aquaman setup # 2. vault wizard
aquaman daemon & # 3. start the proxy
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. declare a project
aquaman coder setup claude-code # 5. wire Claude Code hooks
# (or: aquaman coder setup codex)
aquaman doctor # 6. verify - should show both vault + coder green
```
**इसे स्वयं देखें (30-सेकंड का अहा):** Claude Code (या Codex) को पुनः आरंभ करें, `~/code/my-app` के अंदर एक नया सत्र खोलें, और एजेंट से चलाने के लिए कहें:
```
printenv | grep ANTHROPIC_API_KEY
```
आप इसे ट्रांसक्रिप्ट में देखेंगे:
```
ANTHROPIC_API_KEY=[REDACTED:injected-value]
⏺ ANTHROPIC_API_KEY is set and available (injected via aquaman vault).
```
*चाइल्ड* प्रक्रिया ने असली key देखी (आपके tests, builds, MCP servers, import scripts - जो कुछ भी वास्तव में इसे चाहता है वह काम करता है)। *agent* - वह चीज़ जो तय करती है कि आपकी मशीन पर कौन सा code चलाना है - कभी भी value नहीं देखती, और इसलिए न तो conversation history देखती है, न ही model provider के logs, न ही कोई और जो बाद में आपके terminal का screenshot लेता है।
**इसे अपने खुद के terminal से भी उपयोग करें।** वही wrapper agent के बिना भी काम करता है। बस किसी covered project में `cd` करें और अपने command के आगे prefix लगाएं:
```bash
cd ~/code/
aquaman-coder exec -- python app/scripts/import.py
```
समान एनवी इंजेक्शन, stdout/stderr पर समान रिडैक्शन। इसे Makefile टारगेट्स, शेल अलाइज़ या CI रनर्स में डालें — जहाँ भी आप आमतौर पर एक `.env` फ़ाइल का उपयोग करते हों।
जब Claude Code या Codex `~/code/my-app` में एक शेल कमांड चलाता है, तो aquaman का हुक `updatedInput.command` के माध्यम से कमांड को `aquaman-coder exec` के तहत लपेटने के लिए फिर से लिख देता है। वह वापर (wrapper):
- ब्रोकर के माध्यम से प्रत्येक `aquaman://service/key` संदर्भ को हल करता है (`POST /broker/resolve` UDS के माध्यम से)। क्रेडेंशियल्स केवल एक कमांड के लिए मटीरियलाइज किए जाते हैं, न कि एजेंट की पूरी लाइफटाइम के लिए।
- stdout/stderr को एक रिडैक्टर से गुजारता है जो प्रत्येक हल किए गए मान के लिए एक वैल्यू-आधारित पैटर्न जोड़ता है: **इनजेक्ट किया गया कोई भी स्ट्रिंग रिडैक्ट हो जाएगा, आकार चाहे कुछ भी हो** (Atlassian टोकन, Notion सीक्रेट, इंटर्नल-API कीज़ - किसी को भी किसी ज्ञात प्रदाता फॉर्मेट से मिलने की आवश्यकता नहीं है)। सामान्य शेप-आधारित पैटर्न (sk-ant-, ghp_, sk_live_, AKIA…, JWTs, PEM ब्लॉक्स, ATATT3xF…) तब भी चलते हैं, क्योंकि वे डिफेंस-इन-डेप्थ के रूप में कार्य करते हैं उन सीक्रेट्स के लिए जो चिल्ड प्रोसेस द्वारा सर्फेस किए जाते हैं और जिन्हें हमने INजेक्ट नहीं किया था।
- कमांड समाप्त होने पर क्लीनअप कर देता है।
**Claude Code sandbox:** यह डिफ़ॉल्ट रूप से यूनिक्स सॉकेट्स को ब्लॉक करता है, इसलिए `aquaman coder setup claude-code` macOS पर प्रॉक्सी सॉकेट को allowlist में डालता है (`sandbox.network.allowUnixSockets`)। Linux और WSL2 उस सूची को नजरअंदाज करते हैं, जहाँ एकमात्र विकल्प `sandbox.network.allowAllUnixSockets: true` है, जो sandboxed कमांड्स के लिए हर यूनिक्स सॉकेट को खोल देता है।
**Codex:** सेटअप के बाद Codex के स्टार्टअप हुक रिव्यू में aquaman हुक्स को अनुमति दें (Codex नए हुक्स को तब तक स्किप करता है जब तक आप उन पर भरोसा नहीं करते)। इसका sandbox भी डिफ़ॉल्ट रूप से प्रॉक्सी सॉकेट को ब्लॉक करता है; `aquaman coder setup codex` उस `config.toml` परमिशन प्रोफ़ाइल को प्रिंट करता है जो इसे अनुमति देती है। Codex हुक्स शेल आउटपुट को फिर से नहीं लिख सकते, इसलिए रिडैक्शन `aquaman-coder exec` के अंदर होता है। विवरण [`packages/coder/README.md`](https://github.com/tech4242/aquaman/blob/main/packages/coder/README.md#codex) में देखें।
### 4. Hermes (एजेंट होस्ट)
Hermes एक बाहरी (Python) होस्ट है जिसमें इंजेक्ट करने के लिए कोई ट्रान्सपोर्ट हुक नहीं है, इसलिए आइसोलेशन प्रॉक्सी-साइड पर किया जाता है: प्रॉक्सी एक ऑप्ट-इन, टोकन-गेटेड लूपबैक लिस्टर को एक्सपोज़ करता है और Hermes अपने खुद के एनवी व्हेरिएबल्स के माध्यम से उसकी ओर पॉइंट किया जाता है।
```bash
npm install -g aquaman-proxy # 1. install daemon
aquaman setup # 2. vault wizard
aquaman credentials add anthropic api_key sk-ant-... # 3. store a provider key
aquaman hermes setup # 4. enable loopback + write ~/.hermes/.env
aquaman daemon & # 5. start the proxy (UDS + loopback)
aquaman hermes doctor # 6. verify - listener + env + vault + Hermes
```
`aquaman hermes setup` लूपबैक लिसनर को सक्षम करता है, प्रति-इंस्टॉल टोकन जनरेट करता है, और `~/.hermes/.env` में एक aquaman-प्रबंधित ब्लॉक लिखता है (`HERMES_HOME` का सम्मान करते हुए): नेटिव `ANTHROPIC_BASE_URL`/`OPENAI_BASE_URL` के साथ-साथ टोकन के बराबर एक प्लेसहोल्डर api_key। Hermes टोकन को अपनी प्रोवाइडर कुंजी के रूप में भेजता है; प्रॉक्सी इसे हटा देता है, आपके वास्तविक vault क्रेडेंशियल को इंजेक्ट करता है, और अपस्ट्रीम को अग्रेषित करता है। आज केवल LLM प्रोवाइडर (Anthropic, OpenAI)।
**वैकल्पिक इन-सेशन सुविधा** - Python प्लगइन एक `/aquaman-status` कमांड, एक `aquaman_status` टूल, और Hermes के अंदर एक सेशन-स्टार्ट हेल्थ प्रोब जोड़ता है (कोई क्रेडेंशियल नहीं रखता):
```bash
pip install aquaman-hermes # or: uv tool install aquaman-hermes
aquaman-hermes install # drops the plugin into ~/.hermes/plugins/aquaman/
hermes plugins enable aquaman
```
यह प्लगइन `aquaman` **सीक्रेट सोर्स** (Hermes ≥ 0.18.1) को भी रजिस्टर करता है, जो `GITHUB_TOKEN` जैसी प्रोजेक्ट सीक्रेट्स के लिए है। इन्हें Hermes के `config.yaml` में `secrets.aquaman.env` के तहत बांधें, और फिर `aquaman broker allow aquaman://github/token` का उपयोग करके प्रत्येक ref की घोषणा करें (v0.15.0 से यह आवश्यक है; `aquaman hermes doctor` उन सभी को सूचीबद्ध करता है जिन्हें आपने छोड़ दिया है)। ऊपर बताई गई LLM कुंजियों के विपरीत, ये मान वास्तव में Hermes के env में प्रवेश करते हैं। देखें [`packages/hermes/README.md`](https://github.com/tech4242/aquaman/blob/main/packages/hermes/README.md).
### 5. Docker Sandboxes
Docker Sandboxes पहले से ही क्रेडेंशियल्स को सैंडबॉक्स के बाहर रखता है: आपके कंप्यूटर पर एक प्रॉक्सी उन्हें अनुरोधों में इंजेक्ट करता है, और VM के अंदर एजेंट केवल एक प्लेसहोल्डर देखता है। डिफ़ॉल्ट रूप से ये मान आपके OS keychain से प्राप्त होते हैं। इसके बजाय उन्हें aquaman की ओर निर्देशित करें ताकि आपको aquaman द्वारा समर्थित प्रत्येक वॉल्ट, ref allow-list, और sbx द्वारा हर बार किसी सीक्रेट को पढ़ने पर एक टैम्पर-इविडेंट ऑडिट एंट्री प्राप्त हो।
```bash
npm install -g aquaman-proxy
aquaman setup # 1. vault wizard
aquaman daemon & # 2. start the proxy
aquaman credentials add github token # 3. store the secret (if not already there)
aquaman broker allow aquaman://github/token # 4. allow it to be handed out
sbx secret set github \
--command "$(command -v node) $(command -v aquaman) get aquaman://github/token" \
--refresh on-demand # 5. sbx reads it from aquaman
```
sbx उस कमांड को अपनी ही बैकग्राउंड सेवा से चलाता है, जिसके पास आपके शेल का `PATH` नहीं होता, इसलिए चरण 5 पूर्ण पथ संग्रहीत करता है। अपने सैंडबॉक्स द्वारा उपयोग की जाने वाली प्रत्येक सेवा के लिए चरण 4 और 5 दोहराएँ।
वही `aquaman get` कमांड कहीं भी काम करता है जहाँ कोई टूल ऐसी कमांड माँगता है जो कोई सीक्रेट प्रिंट करती है: Codex (`model_providers.<id>.auth.command`), Claude Code (`apiKeyHelper`), OpenClaw exec secret providers और Hermes command secret sources।
## यह कैसे काम करता है
```
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 │ │
│ No keys to read. │ (chmod 0o600) │ │
└──────────────────────┘ └──┬─────────┬─────────┘
│ │
│ ▼
│ ~/.aquaman/audit/
│ (hash-chained)
▼
api.anthropic.com
api.telegram.org
slack.com/api …
```
1. **Store**: क्रेडेंशियल्स उस वॉल्ट बैकएंड में रहते हैं जिसे आप पहले से चलाते हैं - कोई हाउस वॉल्ट नहीं (Keychain, 1Password, HashiCorp Vault, Bitwarden, Keeper, KeePassXC, systemd-creds, encrypted-file)।
2. **Policy**: प्रॉक्सी क्रेडेंशियल्स को छूने से *पहले* मेथड + पाथ नियमों की जाँच करता है। अस्वीकृत अनुरोधों को `403` मिलता है, कभी असली auth हेडर नहीं।
3. **Inject**: प्रॉक्सी क्रेडेंशियल खोजता है और फ़ॉरवर्ड करने से पहले auth हेडर जोड़ता है। 25 बिल्टइन सेवाएँ, 4 इंजेक्टिंग auth मोड (header, URL-path, HTTP Basic, OAuth); 5वाँ, `none`, केवल at-rest है (प्रॉक्सी ट्रैफ़िक अस्वीकार करता है)।
4. **Broker (coder, Hermes secret source, `aquaman get`)**: `POST /broker/resolve` प्रति टूल कॉल एक क्रेडेंशियल मटीरियलाइज़ करता है, जो एक ही कमांड के env तक सीमित होता है। इसे केवल `aquaman daemon` सर्व करता है, और केवल उन refs के लिए जिन्हें आपने घोषित किया है (`projects.yaml` या `aquaman broker allow`)। OpenClaw प्लगइन की प्रॉक्सी इसे कभी सर्व नहीं करती (v0.15.0+)।
5. **Audit**: हर क्रेडेंशियल उपयोग SHA-256 हैश चेन के साथ लॉग किया जाता है।
प्रॉक्सी पाथ पर एजेंट एक लोकल एंडपॉइंट और एक मार्कर देखता है: `aquaman-proxy-managed` प्लेसहोल्डर, या लूपबैक टोकन, जो केवल आपकी लोकल प्रॉक्सी के विरुद्ध काम करता है। कभी असली key नहीं। coder पाथ पर *चाइल्ड* कमांड को घोषित मान मिलते हैं और एजेंट redacted आउटपुट देखता है।
## Security Model
| Layer | What it does | What it stops |
|---|---|---|
| **Process isolation** | क्रेडेंशियल्स एक अलग प्रोसेस में, Unix socket (`chmod 0o600`) या token-gated loopback listener के ज़रिए पहुँचे जाते हैं | समझौता किया गया एजेंट proxied keys नहीं पढ़ सकता: अलग address space |
| **Broker scope** | केवल `aquaman daemon` मान बाँटता है, और केवल उन refs के लिए जिन्हें आपने घोषित किया है; OpenClaw-hosted proxies कभी नहीं करतीं (v0.15.0+) | एजेंट socket के ज़रिए मनमाने vault entries नहीं खींच सकता |
| **Service allowlisting** | `proxiedServices` नियंत्रित करता है कि एजेंट किन APIs तक पहुँच सकता है | एजेंट उन सेवाओं से बात नहीं कर सकता जिन्हें आपने अधिकृत नहीं किया |
| **Request policies** | प्रति सेवा मेथड + पाथ नियम, क्रेडेंशियल इंजेक्शन से पहले लागू | एजेंट Anthropic तक पहुँच सकता है पर उसकी admin API तक नहीं; ईमेल ड्राफ़्ट कर सकता है पर भेज नहीं सकता |
| **Audit trail** | हर क्रेडेंशियल उपयोग के SHA-256 hash-chained लॉग | घटना-पश्चात फ़ॉरेंसिक्स, छेड़छाड़ का पता लगाना, अनुपालन साक्ष्य |
| **Per-tool-call broker (coder)** | `aquaman-coder exec` एक बार में एक कमांड के लिए creds मटीरियलाइज़ करता है | क्रेडेंशियल्स एजेंट के shell environment में नहीं फैलते |
| **Output redaction (coder)** | `aquaman-coder exec` stdout/stderr को एक redactor से गुज़ारता है जो हर उस मान को verbatim scrub करता है जिसे उसने अभी इंजेक्ट किया - साथ ही fallback के रूप में generic provider patterns | मनमाने, बिना आकार वाले क्रेडेंशियल्स भी एजेंट transcript तक कभी नहीं पहुँचते |
### Transports and access control
| Path | Transport | Access control |
|---|---|---|
| Coding agents, कोई भी क्लाइंट जो socket dial कर सकता है | Unix socket `~/.aquaman/proxy.sock` | File permissions (`0600`): केवल आपके रूप में चलने वाली प्रोसेस |
| Hermes (v0.13.0+), OpenClaw model और Telegram ट्रैफ़िक (v0.15.0+) | Loopback TCP `127.0.0.1:<port>` | Per-install token, constant-time check, loopback bind |
Hermes और OpenClaw दोनों अपना HTTP client खुद बनाते हैं और socket dial नहीं कर सकते, इसलिए वे listener का उपयोग करते हैं। बाकी सब socket का उपयोग करता है।
टोकन लोकल प्रॉक्सी तक पहुँचने की एक capability है, क्रेडेंशियल नहीं। प्रति install जनरेट होता है, `~/.aquaman/config.yaml` (`0600`) में संग्रहीत, होस्ट द्वारा उसकी provider api key के रूप में भेजा जाता है। प्रॉक्सी इसे जाँचता है, हटाता है, आपकी असली key इंजेक्ट करता है। Telegram में कोई auth हेडर नहीं होता, इसलिए वहाँ टोकन `/bot<TOKEN>` पाथ सेगमेंट में सवार होता है।
Trade-off: कोई भी लोकल प्रोसेस loopback port तक पहुँच सकती है, अन्य उपयोगकर्ताओं सहित, जहाँ socket का `0600` उन्हें बाहर रखता है। वहाँ टोकन ही द्वार है, इसलिए listener तब तक बंद रहता है जब तक `aquaman hermes setup` या `aquaman openclaw setup` इसे चालू न करे।
### Channel credentials on OpenClaw 2026.7.33+
| Channel | Egress through the proxy |
|---|---|
| Telegram | हाँ, v0.15.0 से |
| बाकी सब | नहीं। केवल Vault storage और migration |
हर channel प्रति अनुरोध अपना HTTP client खुद बनाता है, इसलिए प्लगइन का `fetch` interceptor इन संस्करणों पर channel ट्रैफ़िक नहीं देखता। किसी channel को रूट करने के लिए होस्ट से endpoint override चाहिए, और Telegram ही एकमात्र है जिसके पास यह है: `aquaman openclaw setup` `channels.telegram.apiRoot` को प्रॉक्सी पर इंगित करता है और bot token को loopback token से बदल देता है।
बाकी के लिए, आपका टोकन vault में रहता है पर OpenClaw इसे सीधे उपयोग करता है, इसलिए प्रॉक्सी पाथ में नहीं है और वे कॉल ऑडिट नहीं होतीं। `aquaman openclaw doctor` बताता है कि आपके कॉन्फ़िगर किए गए channels में से कौन किस समूह में है। Model providers अप्रभावित हैं।
**What same-user isolation can't do.** Socket का `0o600` अन्य उपयोगकर्ताओं को बाहर रखता है, आपके रूप में चलने वाली अन्य प्रोसेस को नहीं। ऐसी प्रोसेस चलते समय प्रॉक्सी के ज़रिए अनुरोध भेज सकती है (request policy से सीमित, audit log में दर्ज) और आपके घोषित refs fetch कर सकती है, जिसका यही अर्थ है। यह उन keys को नहीं पढ़ सकती जो प्रॉक्सी इंजेक्ट करता है। कठोर सीमा के लिए, एजेंट को किसी भिन्न OS उपयोगकर्ता के रूप में या sandbox में चलाएँ।
विस्तृत मॉडल - प्रति-integration विवरण (HTTP interceptor scope, auth profiles, scanner findings, ClawScan publisher note) - [`packages/plugin/README.md`](https://github.com/tech4242/aquaman/blob/main/packages/plugin/README.md) और [`packages/coder/README.md`](https://github.com/tech4242/aquaman/blob/main/packages/coder/README.md) में है।
### Compliance posture
Aquaman `test/compliance/` के अंतर्गत रन करने योग्य conformance tests देता है, जो इनसे मैप हैं:
- **MITRE ATLAS** v5.4.0: techniques 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/`)
साथ ही CISA/Five-Eyes "Careful Adoption of Agentic AI Services" (April 2026), CSA MAESTRO, और OWASP Top 10 for Agentic Applications के लिए alignment narratives। टेस्ट `npm test` के हिस्से के रूप में चलते हैं। मैपिंग के लिए [`docs/compliance/`](https://github.com/tech4242/aquaman/blob/main/docs/compliance) देखें।
## Request Policies
OAuth scopes "draft an email" और "send an email" के बीच अंतर नहीं कर सकते। दोनों `gmail.send` हैं। Request policies उस अंतराल को भरती हैं।
```yaml
# ~/.aquaman/config.yaml
policy:
anthropic:
defaultAction: allow
rules:
- method: "*"
path: "/v1/organizations/**"
action: deny # block admin/billing API
openai:
defaultAction: allow
rules:
- method: "*"
path: "/v1/organization/**"
action: deny
- method: DELETE
path: "/v1/**"
action: deny # no deletions
slack:
defaultAction: allow
rules:
- method: "*"
path: "/api/admin.*"
action: deny # Slack Web API admin methods
gmail:
defaultAction: allow
rules:
- method: POST
path: "/gmail/v1/users/*/messages/send"
action: deny # drafts ok, sending blocked
```
- **Paths अपस्ट्रीम API का पूर्ण पथ हैं** सेवा उपसर्ग के बाद: Slack का Web API `/api/<method>` है, Gmail का `/gmail/v1/...` है। v0.15.0 से पहले के प्रीसेट `/admin.*` और `/v1/users/*/messages/send` का उपयोग करते थे, जो वास्तविक ट्रैफ़िक से कभी मेल नहीं खाते थे। `aquaman doctor` उन्हें फ़्लैग करता है यदि वे अभी भी आपके कॉन्फ़िग में हैं।
- **कोई नीति नहीं = सभी की अनुमति** (पश्च-संगत)
- **पहला मेल जीतता है**: नियम ऊपर से नीचे मूल्यांकित होते हैं, बिना मेल खाने वाले अनुरोध `defaultAction` पर गिर जाते हैं
- **प्रमाणीकरण से पहले अस्वीकृत**: अवरुद्ध अनुरोधों को कभी वास्तविक क्रेडेंशियल नहीं मिलते
- **पथ ग्लोब:** `*` एक सेगमेंट के भीतर मेल खाता है, `**` शून्य या अधिक सेगमेंट से मेल खाता है
- `aquaman setup` संग्रहीत सेवाओं (`anthropic`, `openai`, `slack`, `gmail`) के लिए सुरक्षित डिफ़ॉल्ट लागू करता है।
- `aquaman policy list` / `aquaman policy test <svc> <method> <path>` निरीक्षण / ड्राई-रन के लिए।
## क्रेडेंशियल बैकएंड
अपना खुद का वॉल्ट लाएं - aquaman का कोई हाउस स्टोर नहीं है। वह बैकएंड चुनें जिसे आप पहले से चलाते हैं; रहस्य वहीं रहते हैं, और प्रॉक्सी उन्हें यथास्थान पढ़ता है।
| बैकएंड | सर्वोत्तम किसके लिए | सेटअप |
|---|---|---|
| `keychain` | macOS पर स्थानीय डेवलपमेंट (डिफ़ॉल्ट) | बिना किसी सेटअप के काम करता है |
| `encrypted-file` | Linux, WSL2, CI/CD | AES-256-GCM, पासवर्ड-संरक्षित |
| `keepassxc` | मौजूदा KeePass उपयोगकर्ता | `npm i -g kdbxweb argon2` (v0.14.1 से वैकल्पिक पीयर्स), फिर `AQUAMAN_KEEPASS_PASSWORD` या एक की फ़ाइल सेट करें |
| `1password` | टीम क्रेडेंशियल साझाकरण | `brew install 1password-cli && op signin`. अनअटेंडेड एजेंट्स के लिए एक [सेवा खाता](https://developer.1password.com/docs/service-accounts/) (`OP_SERVICE_ACCOUNT_TOKEN`) उपयोग करें |
| `vault` | एंटरप्राइज़ रहस्य प्रबंधन | `VAULT_ADDR` + `VAULT_TOKEN` सेट करें |
| `systemd-creds` | systemd ≥ 256 वाला Linux | TPM2-समर्थित, रूट की आवश्यकता नहीं |
| `bitwarden` | Bitwarden उपयोगकर्ता | `bw login && export BW_SESSION=$(bw unlock --raw)` |
| `keeper` | Keeper पासवर्ड मैनेजर उपयोगकर्ता (v0.16.0+) | `pip install keepercommander`, एक बार `keeper shell` से लॉग इन करें और `this-device persistent-login on` चालू करें, aquaman के लिए एक फ़ोल्डर बनाएं, फिर `export AQUAMAN_KEEPER_FOLDER_UID=<folder UID>`. रिकॉर्ड का शीर्षक `aquaman::<service>::<key>` होता है |
`aquaman setup` एक उपयुक्त डिफ़ॉल्ट का स्वतः पता लगाता है (macOS → `keychain`; Linux → `keychain` यदि libsecret है, अन्यथा `systemd-creds` यदि systemd ≥ 256 है, अन्यथा `encrypted-file`)।
`encrypted-file` बिना नेटिव कीरिंग वाले हेडलेस Linux/CI वातावरणों के लिए अंतिम उपाय है। Linux पर बेहतर सुरक्षा के लिए, `libsecret-1-dev` (GNOME Keyring) इंस्टॉल करें, `systemd-creds` (TPM2 बाइंडिंग) का उपयोग करें, या 1Password/Vault का उपयोग करें।
### क्रेडेंशियल कैशिंग (v0.13.1+)
प्रति-पहुँच लागत वाले बैकएंड, जैसे `1password` (डेस्कटॉप-ऐप मोड में प्रति पठन एक बायोमेट्रिक प्रॉम्प्ट), `bitwarden` (~1-2 सेकंड CLI स्पॉन), `keeper` (एक Commander स्पॉन जो लॉग इन करता है और सिंक करता है) और `vault` (एक HTTP राउंड-ट्रिप), डिफ़ॉल्ट रूप से 15 मिनट के लिए **डेमन की मेमोरी में** कैश किए जाते हैं, ताकि एक व्यस्त एजेंट सत्र प्रति अनुरोध के बजाय प्रति विंडो एक बार वॉल्ट अनलॉक करे। अन्य बैकएंड पहले से ही तेज़ हैं या आंतरिक रूप से कैश करते हैं, इसलिए उनके लिए कैशिंग डिफ़ॉल्ट रूप से बंद है। `~/.aquaman/config.yaml` में `credentials.cacheTtlSeconds` (या `AQUAMAN_CACHE_TTL`) से ट्यून करें; `0` अक्षम करता है।
ईमानदार समझौता: प्रति-पहुँच बायोमेट्रिक प्रॉम्प्ट एक उपयोगकर्ता-उपस्थिति जाँच है, और कैश TTL विंडो के लिए प्रति-पहुँच उपस्थिति को हटा देता है। अनअटेंडेड एजेंट्स के लिए वह प्रॉम्प्ट कभी उत्तर नहीं पाता, इसलिए वॉल्ट को छोड़कर plaintext `.env` का उपयोग किया जाता है, जो स्पष्ट रूप से बदतर है। कैश आइसोलेशन सीमा को **नहीं** हटाता: मान केवल प्रॉक्सी प्रक्रिया में रहते हैं (जहाँ वे पहले से ही हर अनुरोध पर गुज़रते हैं), कभी डिस्क पर नहीं लिखे जाते, और जब आप `aquaman credentials add` के माध्यम से रोटेट करते हैं तो तुरंत अमान्य हो जाते हैं। लेखन हमेशा आपके वॉल्ट में जाता है। [`test/compliance/cache-residency.test.ts`](https://github.com/tech4242/aquaman/blob/main/test/compliance/cache-residency.test.ts) में अनुरूपता-परीक्षित। 1Password के साथ शून्य प्रॉम्प्ट के लिए, `aquaman` वॉल्ट तक सीमित एक सेवा खाता उपयोग करें; `aquaman doctor` आपको वहाँ इंगित करेगा।
## लाइसेंस
MIT - [LICENSE](https://github.com/tech4242/aquaman/blob/main/LICENSE) देखें।