
🔱 Единственный независимый прокси-сервер учётных данных для AI-агентов: изоляция по принципу «принеси свой собственный сейф» и политики запросов с минимальными привилегиями. Ваши ключи остаются там, где вы их уже храните, и никогда не попадают в память агента. Совместим с 1Password, keychain, keepassxc и многими другими.
🔱 Единственный независимый прокси для учётных данных ИИ-агентов: изоляция «принеси своё хранилище» и политики запросов с минимальными привилегиями. Ваши ключи остаются там, где вы их уже храните, и никогда не попадают в память агента. Совместим с 1Password, keychain, keepassxc и многими другими.
Вы настраиваете Claude Code, OpenClaw или Hermes и теперь смотрите на файлы .env с вашими драгоценными ключами API в открытом виде. Вы читали статьи. Вы знаете, что происходит, когда агент подвергается инъекции через подсказки. Мы понимаем.
Aquaman решает эту проблему тремя уровнями защиты:
Aquaman поставляется в виде четырёх согласованных пакетов, использующих одно хранилище + один демон. Установите только то, что вам нужно:
Единый CLI aquaman предоставляет все четыре: команды верхнего уровня для хранилища и аудита, aquaman openclaw ... для интеграции с OpenClaw, aquaman coder ... для интеграции с агентом разработки (под капотом делегирует aquaman-coder), а также aquaman hermes ... для пакета Python Hermes.
aquaman help, aquaman doctor — ваши друзья.
npm install -g aquaman-proxy
aquaman setup # мастер бэкенда + сохранение ключей
aquaman daemon & # запуск прокси
aquaman credentials list # проверка
Прокси слушает на ~/.aquaman/proxy.sock (UDS, chmod 0o600). Направьте любой инструмент на http://aquaman.local/<service>/<path>, и прокси вставит заголовки аутентификации для этого сервиса из выбранного бэкенда хранилища.
openclaw plugins install aquaman-plugin # 1. установить плагин + прокси
openclaw aquaman setup # 2. бэкенд + ключи + настройка плагина
openclaw # 3. готово — прокси запускается автоматически
Устранение неполадок: openclaw aquaman doctor.
Используете npm напрямую? npm install -g aquaman-proxy && aquaman openclaw setup делает то же самое — устанавливает CLI прокси, сохраняет ваши ключи, устанавливает плагин в ~/.openclaw/extensions/aquaman-plugin/ и настраивает учётные данные (ссылками SecretRef на OpenClaw ≥ 2026.6.5, резервным auth-profiles.json на старых версиях).
Перехватчик HTTP в плагине перенаправляет только трафик для сервисов, указанных в его конфигурации services (по умолчанию Anthropic + OpenAI). Добавьте больше в конфигурации плагина в 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).
npm install -g aquaman-proxy aquaman-coder # 1. установить демон + адаптер
aquaman setup # 2. мастер хранилища
aquaman daemon & # 3. запуск прокси
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. объявить проект
aquaman coder setup claude-code # 5. настроить хуки Claude Code
aquaman doctor # 6. проверить — должно быть зелёным и для хранилища, и для coder
Убедитесь сами (30-секундное озарение): перезапустите Claude Code, откройте новую сессию внутри ~/code/my-app и попросите агента выполнить:
printenv | grep ANTHROPIC_API_KEY
Вы увидите в транскрипте:
ANTHROPIC_API_KEY=[REDACTED:injected-value]
⏺ ANTHROPIC_API_KEY установлен и доступен (внедрён через хранилище aquaman).
Дочерний процесс увидел настоящий ключ (ваши тесты, сборки, MCP-серверы, скрипты импорта — всё, что действительно нуждается в нём, работает). Агент — то, что решает, какой код запускать на вашей машине — никогда не видит значение, и, следовательно, его нет ни в истории разговора, ни в логах провайдера модели, ни у того, кто позже сделает скриншот вашего терминала.
Используйте это и в своём терминале. Тот же враппер работает и без агента. Просто перейдите в покрытый проект и добавьте префикс к команде:
cd ~/code/
aquaman-coder exec -- python app/scripts/import.py
Та же инъекция переменных окружения, то же редактирование в stdout/stderr. Вставляйте в цели Makefile, псевдонимы оболочки или CI-раннерах — везде, где иначе вы бы использовали файл .env.
Когда Claude Code выполняет инструмент Bash в ~/code/my-app, хук aquaman переписывает команду через updatedInput.command, оборачивая её под aquaman-coder exec. Этот враппер:
aquaman://service/key через брокер (POST /broker/resolve через UDS). Учётные данные материализуются для одной команды, а не на всё время жизни агента.Hermes — внешний (Python) хост без хука для транспорта, поэтому изоляция выполняется на стороне прокси: прокси предоставляет опциональный прослушиватель с контролем токена, и Hermes направляется на него через свои переменные окружения.
npm install -g aquaman-proxy # 1. установить демон
aquaman setup # 2. мастер хранилища
aquaman credentials add anthropic api_key sk-ant-... # 3. сохранить ключ провайдера
aquaman hermes setup # 4. включить loopback + записать ~/.hermes/.env
aquaman daemon & # 5. запустить прокси (UDS + loopback)
aquaman hermes doctor # 6. проверить — прослушиватель + env + хранилище + Hermes
aquaman hermes setup включает прослушиватель loopback, генерирует уникальный токен для каждой установки и записывает управляемый aquaman блок в ~/.hermes/.env (учитывая HERMES_HOME): родные ANTHROPIC_BASE_URL/OPENAI_BASE_URL плюс фиктивный api_key, равный токену. Hermes отправляет токен как ключ провайдера; прокси удаляет его, вставляет ваши реальные учётные данные из хранилища и пересылает запрос дальше. Сегодня только провайдеры LLM (Anthropic, OpenAI).
Опциональные «вкусности» внутри сессии — плагин Python добавляет команду /aquaman-status, инструмент aquaman_status и проверку работоспособности при старте сессии внутри Hermes (не содержит учётных данных):
pip install aquaman-hermes # или: uv tool install aquaman-hermes
aquaman-hermes install # помещает плагин в ~/.hermes/plugins/aquaman/
hermes plugins enable aquaman
Агент / OpenClaw / Агент разработки Aquaman Прокси
┌──────────────────────┐ ┌──────────────────────┐
│ │ │ │
│ ANTHROPIC_BASE_URL │═══ UDS / HTTP ════>│ Keychain / 1Pass / │
│ = aquaman.local │ │ Vault / Encrypted │
│ │<══════════════════ │ │
│ fetch() interceptor │═══ broker:resolve │ + Политика применена│
│ (канальные API) │ │ + Аутентификация: │
│ │ │ header / url-path │
│ Нет учётных данных. │ ~/.aquaman/ │ basic / oauth │
│ Нет открытых портов.│ proxy.sock │ │
│ Нечего украсть. │ (chmod 0o600) │ │
└──────────────────────┘ └──┬─────────┬─────────┘
│ │
│ ▼
│ ~/.aquaman/audit/
│ (хеш-цепочки)
▼
api.anthropic.com
api.telegram.org
slack.com/api …
403 и никогда не видят настоящих заголовков аутентификации.none) — только для хранения (прокси отклоняет трафик).POST /broker/resolve материализует учётные данные для каждого вызова инструмента, ограниченные одной переменной окружения команды, затем истекают.Агент видит только контрольное имя хоста (aquaman.local) или маркер-заполнитель (aquaman-proxy-managed). Он никогда не видит настоящий ключ, и ни один TCP-порт не открыт для зондирования другими процессами.
Подробная модель — особенности каждой интеграции (область перехвата HTTP, профили аутентификации, результаты сканера, примечание издателя ClawScan) — находится в packages/plugin/README.md и packages/coder/README.md.
Aquaman включает запускаемые тесты соответствия в test/compliance/, сопоставленные с:
test/compliance/atlas/)test/compliance/nist/)Также нарративы соответствия для CISA/Five-Eyes «Careful Adoption of Agentic AI Services» (апрель 2026), CSA MAESTRO и OWASP Top 10 for Agentic Applications. Тесты запускаются как часть npm test. См. docs/compliance/ для соответствий.
Области OAuth не могут отличить «создать черновик письма» от «отправить письмо». Оба — gmail.send. Политики запросов заполняют этот пробел.
# ~/.aquaman/config.yaml
policy:
anthropic:
defaultAction: allow
rules:
- method: "*"
path: "/v1/organizations/**"
action: deny # блокировать административный/биллинговый API
openai:
defaultAction: allow
rules:
- method: "*"
path: "/v1/organization/**"
action: deny
- method: DELETE
path: "/v1/**"
action: deny # никаких удалений
slack:
defaultAction: allow
rules:
- method: "*"
path: "/admin.*"
action: deny
gmail:
defaultAction: allow
rules:
- method: POST
path: "/v1/users/*/messages/send"
action: deny # черновики ок, отправка заблокирована
defaultAction* соответствует в пределах сегмента, ** — нулю или более сегментовaquaman setup применяет безопасные значения по умолчанию для сохранённых сервисов (anthropic, openai, slack, gmail).aquaman policy list / aquaman policy test <svc> <method> <path> для проверки / сухих прогонов.Принесите своё хранилище — у aquaman нет собственного хранилища. Выберите бэкенд, который вы уже используете; секреты остаются там, а прокси читает их на месте.
aquaman setup автоматически определяет разумное значение по умолчанию (macOS → keychain; Linux → keychain, если libsecret, или systemd-creds, если systemd ≥ 256, иначе encrypted-file).
encrypted-file — это крайнее средство для безголовых Linux/CI-сред без родного кольца ключей. Для лучшей безопасности на Linux установите libsecret-1-dev (кольцо ключей GNOME), используйте systemd-creds (привязка TPM2) или 1Password/Vault.
Бэкенды с затратами на каждый доступ — 1password (биометрический запрос при каждом чтении в режиме десктопного приложения), bitwarden (~1-2 с запуск CLI), vault (HTTP-ответ) — кэшируются в памяти демона на 15 минут по умолчанию, чтобы активная сессия агента разблокировала хранилище один раз за окно, а не один раз за запрос. Остальные бэкенды уже быстры или кэшируют внутри себя, поэтому кэширование для них по умолчанию отключено. Настройте с помощью credentials.cacheTtlSeconds в ~/.aquaman/config.yaml (или AQUAMAN_CACHE_TTL); 0 отключает.
Честный компромисс: биометрический запрос при каждом доступе — это проверка присутствия пользователя, и кэш убирает такую проверку на время TTL. Для автоматических агентов этот запрос никогда не будет отвечен — они были бы вынуждены abandon хранилище в пользу открытого текстового .env, что строго хуже. Кэш не перемещает границу изоляции: значения живут только в процессе прокси (где они уже проходят при каждом запросе), никогда не записываются на диск и немедленно сбрасываются при смене через aquaman credentials add. Запись всегда идёт в ваше хранилище. Протестировано на соответствие в test/compliance/cache-residency.test.ts. Для нулевых запросов с 1Password используйте сервисный аккаунт, ограниченный хранилищем aquaman — aquaman doctor укажет вам туда.
MIT — см. LICENSE.
| Пакет | Что делает | Когда устанавливать |
|---|
aquaman-proxy | Ядро: хранилище, демон, аудит, политики, CLI. То, что нужно всем. | Всегда. |
aquaman-plugin | Адаптер для шлюза OpenClaw. Запускает прокси при старте шлюза; перехватывает трафик каналов; 25 встроенных сервисов для 5 режимов аутентификации. | Если вы используете шлюз OpenClaw. Также доступен на https://clawhub.ai/plugins/aquaman-plugin |
aquaman-coder | Адаптер для ИИ-агентов разработки. Ссылки вида aquaman://service/key в рамках проекта разрешаются при каждом вызове инструмента Bash. | Если вы используете Claude Code (сегодня) — Codex / OpenCode / Cursor запланированы. |
aquaman-hermes | Плагин для агент-хоста Hermes (Python, на PyPI). Направляет Hermes на опциональный прослушиватель с токен-контролем через его родные ANTHROPIC_BASE_URL/OPENAI_BASE_URL; добавляет команду /aquaman-status, инструмент и проверку работоспособности в сессии. Изоляция на стороне прокси; плагин не содержит учётных данных. | Если вы используете агент-хост Hermes. pip install aquaman-hermes |
| Уровень | Что делает | Что предотвращает |
|---|
| Изоляция процессов | Учётные данные в отдельном процессе, подключение через Unix domain socket (chmod 0o600) | Скомпрометированный агент не может прочитать ключи — другое адресное пространство, нет TCP-порта для зондирования |
| Белый список сервисов | proxiedServices определяет, какие API агент может достигать | Агент не может обращаться к сервисам, которые вы не разрешили |
| Политики запросов | Правила для метода + пути для каждого сервиса, применяемые до вставки учётных данных | Агент может обращаться к Anthropic, но не к его административному API; может создавать черновики писем, но не отправлять их |
| Журнал аудита | SHA-256 хеш-цепочки для каждого использования учётных данных | Криминалистика после инцидента, обнаружение подделок, доказательства соответствия |
| Брокер для каждого вызова (coder) | aquaman-coder exec материализует учётные данные для одной команды за раз | Учётные данные не распространяются по окружению оболочки агента |
| Редактирование вывода (coder) | aquaman-coder exec пропускает stdout/stderr через редактор, который удаляет каждое значение, которое он только что вставил, — плюс общие шаблоны провайдеров как резервный вариант | Даже произвольные, не имеющие формы учётные данные никогда не попадают в транскрипт агента |
| Бэкенд | Для чего лучше всего подходит | Настройка |
|---|
keychain | Локальная разработка на macOS (по умолчанию) | Работает «из коробки» |
encrypted-file | Linux, WSL2, CI/CD | AES-256-GCM, защищён паролем |
keepassxc | Существующие пользователи KeePass | Установите AQUAMAN_KEEPASS_PASSWORD или используйте файл ключа |
1password | Совместное использование учётных данных в команде | brew install 1password-cli && op signin — для автоматических агентов используйте сервисный аккаунт (OP_SERVICE_ACCOUNT_TOKEN) |
vault | Корпоративное управление секретами | Установите VAULT_ADDR + VAULT_TOKEN |
systemd-creds | Linux с systemd ≥ 256 | Защищено TPM2, не требует прав root |
bitwarden | Пользователи Bitwarden | bw login && export BW_SESSION=$(bw unlock --raw) |