์—…๋ฐ์ดํŠธ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
New releaseSep 22, 2026

aquaman v0.15.0

๐Ÿ”ฑ AI ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ ์œ ์ผํ•œ ๋…๋ฆฝ ์ž๊ฒฉ ์ฆ๋ช… ํ”„๋ก์‹œ: ์ž์ฒด ๋ณผํŠธ ๊ฒฉ๋ฆฌ(BYOV) ๋ฐ ์ตœ์†Œ ๊ถŒํ•œ ์š”์ฒญ ์ •์ฑ…. ํ‚ค๋Š” ์ด๋ฏธ ๋ณด๊ด€ ์ค‘์ธ ๊ณณ์— ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ์œผ๋ฉฐ, ์—์ด์ „ํŠธ ๋ฉ”๋ชจ๋ฆฌ์— ์ ˆ๋Œ€ ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 1Password, keychain, keepassxc ๋ฐ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ๋„๊ตฌ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

๊ณต์œ 

๐Ÿ”ฑ Aquaman

CI codecov npm version npm downloads Security: process isolation TypeScript License: MIT

๐Ÿ”ฑ AI ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ ์œ ์ผํ•œ ๋…๋ฆฝํ˜• ์ž๊ฒฉ ์ฆ๋ช… ํ”„๋ก์‹œ: bring-your-own-vault ๊ฒฉ๋ฆฌ ๋ฐ ์ตœ์†Œ ๊ถŒํ•œ ์š”์ฒญ ์ •์ฑ…. ์—ฌ๋Ÿฌ๋ถ„์˜ ํ‚ค๋Š” ์ด๋ฏธ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋Š” ๊ณณ์— ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ์œผ๋ฉฐ, ์—์ด์ „ํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ์ ˆ๋Œ€ ๋“ค์–ด๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 1Password, keychain, keepassxc ๋ฐ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ๋„๊ตฌ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

Claude Code, OpenClaw ๋˜๋Š” Hermes๋ฅผ ์„ค์ •ํ–ˆ๋Š”๋ฐ, ์ด์ œ ์†Œ์ค‘ํ•œ API ํ‚ค๊ฐ€ ํ‰๋ฌธ์œผ๋กœ ๋“ค์–ด ์žˆ๋Š” .env ํŒŒ์ผ์„ ๋ฐ”๋ผ๋ณด๊ณ  ๊ณ„์‹ค ๊ฒ๋‹ˆ๋‹ค. ๊ด€๋ จ ๊ธ€๋“ค๋„ ์ฝ์–ด๋ณด์…จ์„ ํ…Œ๊ณ , ์—์ด์ „ํŠธ๊ฐ€ ํ”„๋กฌํ”„ํŠธ ์ธ์ ์…˜์„ ๋‹นํ•˜๋ฉด ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๋Š”์ง€๋„ ์•„์‹ค ๊ฒ๋‹ˆ๋‹ค. ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

Aquaman์€ ์„ธ ๊ฐ€์ง€ ๋ฐฉ์–ด ๊ณ„์ธต์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค:

  1. ํ”„๋กœ์„ธ์Šค ๊ฒฉ๋ฆฌ: API ํ‚ค๋Š” ์†ก์‹  ์‹œ์ ์— ํ‚ค๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๋ณ„๋„์˜ ํ”„๋ก์‹œ ํ”„๋กœ์„ธ์Šค์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ๋Š” ํ‚ค๊ฐ€ ์•„๋‹Œ ๋งˆ์ปค๋งŒ ๋ณด์œ ํ•˜๋ฏ€๋กœ, ์—์ด์ „ํŠธ์—์„œ RCE๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ํ‚ค๋ฅผ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์„ ์–ธํ•œ ์ฐธ์กฐ๋งŒ, ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ช…๋ น์”ฉ๋งŒ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  2. ์š”์ฒญ ์ •์ฑ…: ์„œ๋น„์Šค๋ณ„ ๊ทœ์น™์ด ์—์ด์ „ํŠธ๊ฐ€ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž API๋ฅผ ์ฐจ๋‹จํ•˜๊ณ , ์‚ญ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ฉฐ, ์ดˆ์•ˆ ์ž‘์„ฑ์€ ํ—ˆ์šฉํ•˜๋˜ ์ „์†ก์€ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๋ถ€๋œ ์š”์ฒญ์—๋Š” ์‹ค์ œ ์ž๊ฒฉ ์ฆ๋ช…์ด ์ ˆ๋Œ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  3. ๋ณ€์กฐ ๊ฐ์ง€ ๊ฐ์‚ฌ: ๋ชจ๋“  ์ž๊ฒฉ ์ฆ๋ช… ์‚ฌ์šฉ์€ SHA-256 ํ•ด์‹œ ์ฒด์ธ์œผ๋กœ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ๋ฌด์—‡์— ์ ‘๊ทผํ–ˆ๋Š”์ง€ ์ฆ๋ช…ํ•˜๊ณ , ์‚ฌํ›„์— ๋ณ€์กฐ๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝ๋กœ ์„ ํƒ

Aquaman์€ ํ•˜๋‚˜์˜ vault์™€ ํ•˜๋‚˜์˜ daemon์„ ๊ณต์œ ํ•˜๋Š” ๋„ค ๊ฐœ์˜ ํ˜‘๋ ฅ ํŒจํ‚ค์ง€๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ์„ค์น˜ํ•˜์„ธ์š”:

ํŒจํ‚ค์ง€๊ธฐ๋Šฅ์„ค์น˜ ์‹œ์ 
aquaman-proxyํ•ต์‹ฌ: vault, daemon, ๊ฐ์‚ฌ, ์ •์ฑ…, CLI. ๋ˆ„๊ตฌ๋‚˜ ํ•„์š”ํ•œ ๋ถ€๋ถ„.ํ•ญ์ƒ.
aquaman-pluginOpenClaw Gateway ์–ด๋Œ‘ํ„ฐ. Gateway ์‹œ์ž‘ ์‹œ ํ”„๋ก์‹œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๋ชจ๋ธ ๋ฐ Telegram ํŠธ๋ž˜ํ”ฝ์„ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ๋ผ์šฐํŒ…ํ•˜๋ฉฐ, 5๊ฐ€์ง€ ์ธ์ฆ ๋ชจ๋“œ์— ๊ฑธ์ณ 25๊ฐœ์˜ ๋‚ด์žฅ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.OpenClaw Gateway๋ฅผ ์šด์˜ํ•˜๋Š” ๊ฒฝ์šฐ. https://clawhub.ai/plugins/aquaman-plugin ์—์„œ๋„ ์ด์šฉ ๊ฐ€๋Šฅ
aquaman-coderAI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ์–ด๋Œ‘ํ„ฐ. ํ”„๋กœ์ ํŠธ ๋ฒ”์œ„์˜ aquaman://service/key ์ฐธ์กฐ๋ฅผ Bash ๋„๊ตฌ ํ˜ธ์ถœ๋งˆ๋‹ค ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค.Claude Code๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ(ํ˜„์žฌ) - Codex / OpenCode / Cursor ๊ณ„ํš ์ค‘.
aquaman-hermesHermes ์—์ด์ „ํŠธ ํ˜ธ์ŠคํŠธ ํ”Œ๋Ÿฌ๊ทธ์ธ(Python, PyPI). Hermes์˜ ๋„ค์ดํ‹ฐ๋ธŒ ANTHROPIC_BASE_URL/OPENAI_BASE_URL์„ ํ†ตํ•ด ์˜ตํŠธ์ธ, ํ† ํฐ ๊ฒŒ์ดํŠธ ๋ฐฉ์‹์˜ ๋ฃจํ”„๋ฐฑ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•˜๋ฉฐ, ์„ธ์…˜ ๋‚ด /aquaman-status ๋ช…๋ น, ๋„๊ตฌ, ์ƒํƒœ ํ”„๋กœ๋ธŒ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฉ๋ฆฌ๋Š” ํ”„๋ก์‹œ ์ธก์—์„œ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ž๊ฒฉ ์ฆ๋ช…์„ ๋ณด์œ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.Hermes ์—์ด์ „ํŠธ ํ˜ธ์ŠคํŠธ๋ฅผ ์šด์˜ํ•˜๋Š” ๊ฒฝ์šฐ. pip install aquaman-hermes

๋‹จ์ผ aquaman CLI๊ฐ€ ๋„ค ๊ฐ€์ง€ ๋ชจ๋‘๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค: vault์™€ ๊ฐ์‚ฌ๋ฅผ ์œ„ํ•œ ์ตœ์ƒ์œ„ ๋ช…๋ น, OpenClaw ํ†ตํ•ฉ์„ ์œ„ํ•œ aquaman openclaw ..., ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ํ†ตํ•ฉ์„ ์œ„ํ•œ aquaman coder ...(๋‚ด๋ถ€์ ์œผ๋กœ aquaman-coder์— ์œ„์ž„), ๊ทธ๋ฆฌ๊ณ  Hermes Python ํŒจํ‚ค์ง€๋ฅผ ์œ„ํ•œ aquaman hermes ....

๋น ๋ฅธ ์‹œ์ž‘

aquaman help, aquaman doctor๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์˜ ์นœ๊ตฌ์ž…๋‹ˆ๋‹ค.

1. Vault๋งŒ ์‚ฌ์šฉ (ํ”„๋ก์‹œ + ์—ฌ๋Ÿฌ๋ถ„์˜ ์‹œํฌ๋ฆฟ๋งŒ)```bash

npm install -g aquaman-proxy aquaman setup # backend wizard + store keys aquaman daemon & # start the proxy aquaman credentials list # verify

ํ”„๋ก์‹œ๋Š” `~/.aquaman/proxy.sock` (UDS, `chmod 0o600`)์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๋„๊ตฌ๋“  `http://aquaman.local/<service>/<path>`๋กœ ์ง€์ •ํ•˜๋ฉด ํ”„๋ก์‹œ๊ฐ€ ์„ ํƒํ•œ vault ๋ฐฑ์—”๋“œ์—์„œ ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์ธ์ฆ ํ—ค๋”๋ฅผ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.

### 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 ์ฐธ์กฐ, ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” auth-profiles.json ํ”Œ๋ ˆ์ด์Šคํ™€๋”).

aquaman openclaw setup์€ models.providers.<svc>.baseUrl๊ณผ channels.telegram.apiRoot๋ฅผ ํ”„๋ก์‹œ์˜ ๋ฃจํ”„๋ฐฑ ๋ฆฌ์Šค๋„ˆ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. OpenClaw์˜ ๋ชจ๋ธ ์ „์†ก๊ณผ ๊ฐ ์ฑ„๋„์ด ์ž์ฒด HTTP ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ fetch ์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ์šฐํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Telegram ์ด์™ธ์˜ ์ฑ„๋„์€ ์—”๋“œํฌ์ธํŠธ ์žฌ์ •์˜๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ํ•ด๋‹น ํ† ํฐ์€ ์ €์žฅ๋˜๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋˜์ง€๋งŒ ์ด๊ทธ๋ ˆ์Šค ์‹œ์ ์— ์ฃผ์ž…๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (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)```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 aquaman doctor # 6. verify - should show both vault + coder green

**์ง์ ‘ ํ™•์ธํ•ด ๋ณด์„ธ์š” (30์ดˆ๋ฉด ์•„ํ•˜!):** Claude Code๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๊ณ , `~/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).

*์ž์‹* ํ”„๋กœ์„ธ์Šค๋Š” ์‹ค์ œ ํ‚ค๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค(ํ…Œ์ŠคํŠธ, ๋นŒ๋“œ, MCP ์„œ๋ฒ„, import ์Šคํฌ๋ฆฝํŠธ ๋“ฑ ์‹ค์ œ๋กœ ํ‚ค๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค). *์—์ด์ „ํŠธ* - ์ฆ‰, ์—ฌ๋Ÿฌ๋ถ„์˜ ๋จธ์‹ ์—์„œ ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ทธ ์กด์žฌ - ๋Š” ๊ทธ ๊ฐ’์„ ๊ฒฐ์ฝ” ๋ณด์ง€ ๋ชปํ•˜๋ฉฐ, ๋”ฐ๋ผ์„œ ๋Œ€ํ™” ๊ธฐ๋ก๋„, ๋ชจ๋ธ ์ œ๊ณต์ž์˜ ๋กœ๊ทธ๋„, ๋‚˜์ค‘์— ์—ฌ๋Ÿฌ๋ถ„์˜ ํ„ฐ๋ฏธ๋„์„ ์Šคํฌ๋ฆฐ์ƒท ์ฐ๋Š” ๋ˆ„๊ตฌ๋„ ๋ณด์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

**์—ฌ๋Ÿฌ๋ถ„์˜ ํ„ฐ๋ฏธ๋„์—์„œ๋„ ์‚ฌ์šฉํ•˜์„ธ์š”.** ๋™์ผํ•œ ๋ž˜ํผ๋Š” ์—์ด์ „ํŠธ ์—†์ด๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฒ„๋œ ํ”„๋กœ์ ํŠธ๋กœ `cd`ํ•œ ๋‹ค์Œ ๋ช…๋ น ์•ž์— ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์ด๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค:```bash
cd ~/code/
aquaman-coder exec -- python app/scripts/import.py

stdout/stderr์— ๋Œ€ํ•œ ๋™์ผํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ฃผ์ž…, ๋™์ผํ•œ ๋ฆฌ๋‹คํฌ์…˜. Makefile ํƒ€๊นƒ, ์…ธ ๋ณ„์นญ, CI ๋Ÿฌ๋„ˆ ๋“ฑ ํ‰์†Œ๋ผ๋ฉด .env ํŒŒ์ผ์„ ์ฐพ์•˜์„ ๊ณณ ์–ด๋””์—๋“  ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Claude Code๊ฐ€ ~/code/my-app์—์„œ Bash ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, aquaman์˜ ํ›…์ด updatedInput.command๋ฅผ ํ†ตํ•ด ๋ช…๋ น์„ ์žฌ์ž‘์„ฑํ•˜์—ฌ aquaman-coder exec ์•„๋ž˜๋กœ ๊ฐ์Œ‰๋‹ˆ๋‹ค. ์ด ๋ž˜ํผ๋Š”:

  • ๋ธŒ๋กœ์ปค(UDS๋ฅผ ํ†ตํ•œ POST /broker/resolve)๋ฅผ ํ†ตํ•ด ๊ฐ aquaman://service/key ์ฐธ์กฐ๋ฅผ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค. ์ž๊ฒฉ ์ฆ๋ช…์€ ์—์ด์ „ํŠธ์˜ ์ˆ˜๋ช…์ด ์•„๋‹ˆ๋ผ ๋‹จ์ผ ๋ช…๋ น์„ ์œ„ํ•ด ๊ตฌ์ฒดํ™”๋ฉ๋‹ˆ๋‹ค.
  • stdout/stderr๋ฅผ ๋ฆฌ๋‹คํฌํ„ฐ๋ฅผ ํ†ตํ•ด ํŒŒ์ดํ”„ํ•˜๋ฉฐ, ํ•ด์„๋œ ๊ฐ ๊ฐ’์— ๋Œ€ํ•ด ๊ฐ’ ๊ธฐ๋ฐ˜ ํŒจํ„ด์„ ์•ž์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค: ์ฃผ์ž…๋œ ๋ฌธ์ž์—ด์€ ํ˜•ํƒœ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋ฆฌ๋‹คํฌ๋ฉ๋‹ˆ๋‹ค (Atlassian ํ† ํฐ, Notion ์‹œํฌ๋ฆฟ, ๋‚ด๋ถ€ API ํ‚ค ๋“ฑ์€ ์•Œ๋ ค์ง„ ์ œ๊ณต์ž ํ˜•์‹๊ณผ ์ผ์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค). ์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ ๊ธฐ๋ฐ˜ ํŒจํ„ด(sk-ant-, ghp_, sk_live_, AKIAโ€ฆ, JWT, PEM ๋ธ”๋ก, ATATT3xFโ€ฆ)์€ ์šฐ๋ฆฌ๊ฐ€ ์ฃผ์ž…ํ•˜์ง€ ์•Š์€, ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋…ธ์ถœํ•˜๋Š” ์‹œํฌ๋ฆฟ์— ๋Œ€ํ•œ ์‹ฌ์ธต ๋ฐฉ์–ด๋กœ์„œ ์ดํ›„์—๋„ ๊ณ„์† ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ๋ช…๋ น์ด ์ข…๋ฃŒ๋˜๋ฉด ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Claude Code ์ƒŒ๋“œ๋ฐ•์Šค: ๊ธฐ๋ณธ์ ์œผ๋กœ Unix ์†Œ์ผ“์„ ์ฐจ๋‹จํ•˜๋ฏ€๋กœ, aquaman coder setup claude-code๋Š” macOS์—์„œ ํ”„๋ก์‹œ ์†Œ์ผ“์„ ํ—ˆ์šฉ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค(sandbox.network.allowUnixSockets). Linux์™€ WSL2๋Š” ํ•ด๋‹น ๋ชฉ๋ก์„ ๋ฌด์‹œํ•˜๋ฉฐ, ์œ ์ผํ•œ ์˜ต์…˜์€ sandbox.network.allowAllUnixSockets: true๋กœ, ์ด๋Š” ์ƒŒ๋“œ๋ฐ•์Šค๋œ ๋ช…๋ น์— ๋ชจ๋“  Unix ์†Œ์ผ“์„ ์—ฝ๋‹ˆ๋‹ค.

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`(`HERMES_HOME` ์กด์ค‘)์— aquaman์ด ๊ด€๋ฆฌํ•˜๋Š” ๋ธ”๋ก์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค: ๋„ค์ดํ‹ฐ๋ธŒ `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

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋˜ํ•œ GITHUB_TOKEN๊ณผ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ ์‹œํฌ๋ฆฟ์„ ์œ„ํ•œ aquaman ์‹œํฌ๋ฆฟ ์†Œ์Šค(Hermes โ‰ฅ 0.18.1)๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. Hermes์˜ config.yaml์—์„œ secrets.aquaman.env ์•„๋ž˜์— ์ด๋“ค์„ ๋ฐ”์ธ๋”ฉํ•œ ๋‹ค์Œ, ๊ฐ ref๋ฅผ aquaman broker allow aquaman://github/token์œผ๋กœ ์„ ์–ธํ•˜์„ธ์š”(v0.15.0๋ถ€ํ„ฐ ํ•„์ˆ˜์ด๋ฉฐ, aquaman hermes doctor๊ฐ€ ๋ˆ„๋ฝ๋œ ํ•ญ๋ชฉ์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค). ์œ„์˜ LLM ํ‚ค์™€ ๋‹ฌ๋ฆฌ, ์ด ๊ฐ’๋“ค์€ Hermes์˜ env์— ์‹ค์ œ๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. packages/hermes/README.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ž‘๋™ ๋ฐฉ์‹```

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**: ์ž๊ฒฉ ์ฆ๋ช…์€ ์ด๋ฏธ ์šด์˜ ์ค‘์ธ vault ๋ฐฑ์—”๋“œ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค - ๋ณ„๋„์˜ ์ž์ฒด vault๋Š” ์—†์Šต๋‹ˆ๋‹ค (Keychain, 1Password, HashiCorp Vault, Bitwarden, KeePassXC, systemd-creds, encrypted-file).
2. **Policy**: ํ”„๋ก์‹œ๋Š” ์ž๊ฒฉ ์ฆ๋ช…์„ ๊ฑด๋“œ๋ฆฌ๊ธฐ *์ „์—* ๋ฉ”์„œ๋“œ + ๊ฒฝ๋กœ ๊ทœ์น™์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๋ถ€๋œ ์š”์ฒญ์€ `403`์„ ๋ฐ›์œผ๋ฉฐ, ์‹ค์ œ ์ธ์ฆ ํ—ค๋”๋Š” ์ ˆ๋Œ€ ๋ฐ›์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
3. **Inject**: ํ”„๋ก์‹œ๋Š” ์ž๊ฒฉ ์ฆ๋ช…์„ ์กฐํšŒํ•˜๊ณ  ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ์ธ์ฆ ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. 25๊ฐœ์˜ ๋‚ด์žฅ ์„œ๋น„์Šค, 4๊ฐœ์˜ ์ฃผ์ž… ์ธ์ฆ ๋ชจ๋“œ (header, URL-path, HTTP Basic, OAuth); 5๋ฒˆ์งธ์ธ `none`์€ ์ €์žฅ ์ „์šฉ์ž…๋‹ˆ๋‹ค (ํ”„๋ก์‹œ๊ฐ€ ํŠธ๋ž˜ํ”ฝ์„ ๊ฑฐ๋ถ€).
4. **Broker (coder + Hermes secret source)**: `POST /broker/resolve`๋Š” ๋„๊ตฌ ํ˜ธ์ถœ๋งˆ๋‹ค ์ž๊ฒฉ ์ฆ๋ช…์„ ๊ตฌ์ฒดํ™”ํ•˜๋ฉฐ, ๋‹จ์ผ ๋ช…๋ น์˜ ํ™˜๊ฒฝ์œผ๋กœ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์˜ค์ง `aquaman daemon`๋งŒ ์ด๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์„ ์–ธํ•œ ref(`projects.yaml` ๋˜๋Š” `aquaman broker allow`)์— ๋Œ€ํ•ด์„œ๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. OpenClaw ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ํ”„๋ก์‹œ๋Š” ์ด๋ฅผ ์ ˆ๋Œ€ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (v0.15.0+).
5. **Audit**: ๋ชจ๋“  ์ž๊ฒฉ ์ฆ๋ช… ์‚ฌ์šฉ์€ SHA-256 ํ•ด์‹œ ์ฒด์ธ์œผ๋กœ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ๊ฒฝ๋กœ์—์„œ ์—์ด์ „ํŠธ๋Š” ๋กœ์ปฌ ์—”๋“œํฌ์ธํŠธ์™€ ๋งˆ์ปค๋ฅผ ๋ด…๋‹ˆ๋‹ค: `aquaman-proxy-managed` ํ”Œ๋ ˆ์ด์Šคํ™€๋”, ๋˜๋Š” ๋กœ์ปฌ ํ”„๋ก์‹œ์— ๋Œ€ํ•ด์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” loopback ํ† ํฐ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ํ‚ค๋Š” ์ ˆ๋Œ€ ๋ณด์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. coder ๊ฒฝ๋กœ์—์„œ๋Š” *์ž์‹* ๋ช…๋ น์ด ์„ ์–ธ๋œ ๊ฐ’์„ ๋ฐ›๊ณ  ์—์ด์ „ํŠธ๋Š” ๋ฆฌ๋Œ์…˜๋œ ์ถœ๋ ฅ์„ ๋ด…๋‹ˆ๋‹ค.

## Security Model

| Layer | What it does | What it stops |
|---|---|---|
| **Process isolation** | Credentials in a separate process, reached over a Unix socket (`chmod 0o600`) or a token-gated loopback listener | Compromised agent can't read proxied keys: different address space |
| **Broker scope** | Only `aquaman daemon` hands out values, and only for refs you declared; OpenClaw-hosted proxies never do (v0.15.0+) | An agent can't pull arbitrary vault entries through the socket |
| **Service allowlisting** | `proxiedServices` controls which APIs the agent can reach | Agent can't talk to services you didn't authorize |
| **Request policies** | Method + path rules per service, enforced before credential injection | Agent can reach Anthropic but not its admin API; can draft emails but not send them |
| **Audit trail** | SHA-256 hash-chained logs of every credential use | Post-incident forensics, tamper detection, compliance evidence |
| **Per-tool-call broker (coder)** | `aquaman-coder exec` materializes creds for one command at a time | Credentials don't sprawl across the agent's shell environment |
| **Output redaction (coder)** | `aquaman-coder exec` pipes stdout/stderr through a redactor that scrubs each value it just injected verbatim - plus generic provider patterns as a fallback | Even arbitrary, shape-less credentials never reach the agent transcript |

### Transports and access control

| Path | Transport | Access control |
|---|---|---|
| Coding agents, any client that can dial a socket | Unix socket `~/.aquaman/proxy.sock` | File permissions (`0600`): only processes running as you |
| Hermes (v0.13.0+), OpenClaw model and Telegram traffic (v0.15.0+) | Loopback TCP `127.0.0.1:<port>` | Per-install token, constant-time check, loopback bind |

Hermes์™€ OpenClaw๋Š” ๊ฐ์ž ์ž์ฒด HTTP ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ฉฐ ์†Œ์ผ“์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์™ธ ๋ชจ๋“  ๊ฒƒ์€ ์†Œ์ผ“์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ† ํฐ์€ ๋กœ์ปฌ ํ”„๋ก์‹œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ capability์ด๋ฉฐ, ์ž๊ฒฉ ์ฆ๋ช…์ด ์•„๋‹™๋‹ˆ๋‹ค. ์„ค์น˜๋งˆ๋‹ค ์ƒ์„ฑ๋˜์–ด `~/.aquaman/config.yaml`(`0600`)์— ์ €์žฅ๋˜๋ฉฐ, ํ˜ธ์ŠคํŠธ๊ฐ€ ์ž์‹ ์˜ provider api key๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๋Š” ์ด๋ฅผ ํ™•์ธํ•˜๊ณ , ์ œ๊ฑฐํ•˜๊ณ , ์‹ค์ œ ํ‚ค๋ฅผ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. Telegram์—๋Š” ์ธ์ฆ ํ—ค๋”๊ฐ€ ์—†์œผ๋ฏ€๋กœ, ์—ฌ๊ธฐ์„œ๋Š” ํ† ํฐ์ด `/bot<TOKEN>` ๊ฒฝ๋กœ ์„ธ๊ทธ๋จผํŠธ์— ์‹ค๋ ค ๊ฐ‘๋‹ˆ๋‹ค.

ํŠธ๋ ˆ์ด๋“œ์˜คํ”„: ๋ชจ๋“  ๋กœ์ปฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ loopback ํฌํŠธ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ์†Œ์ผ“์˜ `0600`์€ ์ด๋“ค์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ํ† ํฐ์ด ๊ด€๋ฌธ์ด๋ฏ€๋กœ, `aquaman hermes setup` ๋˜๋Š” `aquaman openclaw setup`์ด ์ผœ๊ธฐ ์ „๊นŒ์ง€ ๋ฆฌ์Šค๋„ˆ๋Š” ๊บผ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

### Channel credentials on OpenClaw 2026.7.33+

| Channel | Egress through the proxy |
|---|---|
| Telegram | Yes, since v0.15.0 |
| Everything else | No. Vault storage and migration only |

๊ฐ ์ฑ„๋„์€ ์š”์ฒญ๋งˆ๋‹ค ์ž์ฒด HTTP ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ฏ€๋กœ, ์ด ๋ฒ„์ „๋“ค์—์„œ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ `fetch` ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ๋” ์ด์ƒ ์ฑ„๋„ ํŠธ๋ž˜ํ”ฝ์„ ๋ณด์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ฑ„๋„์„ ๋ผ์šฐํŒ…ํ•˜๋ ค๋ฉด ํ˜ธ์ŠคํŠธ์˜ ์—”๋“œํฌ์ธํŠธ ์˜ค๋ฒ„๋ผ์ด๋“œ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์ด๋ฅผ ๊ฐ–์ถ˜ ๊ฒƒ์€ Telegram๋ฟ์ž…๋‹ˆ๋‹ค: `aquaman openclaw setup`์ด `channels.telegram.apiRoot`๋ฅผ ํ”„๋ก์‹œ๋กœ ์ง€์ •ํ•˜๊ณ  ๋ด‡ ํ† ํฐ์„ loopback ํ† ํฐ์œผ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€์˜ ๊ฒฝ์šฐ, ํ† ํฐ์€ vault์— ๋‚จ์•„ ์žˆ์ง€๋งŒ OpenClaw๊ฐ€ ์ด๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํ”„๋ก์‹œ๊ฐ€ ๊ฒฝ๋กœ์— ์—†๊ณ  ํ•ด๋‹น ํ˜ธ์ถœ์€ ๊ฐ์‚ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. `aquaman openclaw doctor`๋Š” ๊ตฌ์„ฑ๋œ ์ฑ„๋„ ์ค‘ ์–ด๋А ๊ฒƒ์ด ์–ด๋А ๊ทธ๋ฃน์— ์†ํ•˜๋Š”์ง€ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ ์ œ๊ณต์ž๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

**What same-user isolation can't do.** ์†Œ์ผ“์˜ `0o600`์€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋ฅผ ์ฐจ๋‹จํ•  ๋ฟ, ๋‹น์‹ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ์ฐจ๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰ ์ค‘์— ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ณ  (์š”์ฒญ ์ •์ฑ…์— ์˜ํ•ด ์ œํ•œ๋˜๋ฉฐ ๊ฐ์‚ฌ ๋กœ๊ทธ์— ๊ธฐ๋ก๋จ), ์„ ์–ธํ•œ ref๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์„ ์–ธ์˜ ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๊ฐ€ ์ฃผ์ž…ํ•˜๋Š” ํ‚ค๋Š” ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋” ๊ฐ•ํ•œ ๊ฒฝ๊ณ„๋ฅผ ์›ํ•œ๋‹ค๋ฉด, ์—์ด์ „ํŠธ๋ฅผ ๋‹ค๋ฅธ OS ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

์ƒ์„ธ ๋ชจ๋ธ - ํ†ตํ•ฉ๋ณ„ ์„ธ๋ถ€ ์‚ฌํ•ญ (HTTP ์ธํ„ฐ์…‰ํ„ฐ ๋ฒ”์œ„, ์ธ์ฆ ํ”„๋กœํ•„, ์Šค์บ๋„ˆ ๊ฒฐ๊ณผ, ClawScan ๊ฒŒ์‹œ์ž ๋…ธํŠธ) - ์€ [`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/` ์•„๋ž˜์— ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ ํ•ฉ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋‹ค์Œ์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค:

- **MITRE ATLAS** v5.4.0: ๊ธฐ๋ฒ• 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" (2026๋…„ 4์›”), CSA MAESTRO, ๊ทธ๋ฆฌ๊ณ  OWASP Top 10 for Agentic Applications์— ๋Œ€ํ•œ ์ •๋ ฌ ์„œ์ˆ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋Š” `npm test`์˜ ์ผ๋ถ€๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋งคํ•‘์€ [`docs/compliance/`](https://github.com/tech4242/aquaman/blob/main/docs/compliance)๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.


## Request Policies

OAuth ์Šค์ฝ”ํ”„๋Š” "์ด๋ฉ”์ผ ์ดˆ์•ˆ ์ž‘์„ฑ"๊ณผ "์ด๋ฉ”์ผ ์ „์†ก"์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค `gmail.send`์ž…๋‹ˆ๋‹ค. ์š”์ฒญ ์ •์ฑ…์ด ๊ทธ ๊ฐ„๊ทน์„ ๋ฉ”์›๋‹ˆ๋‹ค.```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
  • ๊ฒฝ๋กœ๋Š” ์„œ๋น„์Šค ์ ‘๋‘์‚ฌ ๋’ค์˜ ์—…์ŠคํŠธ๋ฆผ API ์ „์ฒด ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค: Slack์˜ Web API๋Š” /api/<method>, Gmail์€ /gmail/v1/...์ž…๋‹ˆ๋‹ค. v0.15.0 ์ด์ „์˜ ํ”„๋ฆฌ์…‹์€ /admin.*์™€ /v1/users/*/messages/send๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์ด๋Š” ์‹ค์ œ ํŠธ๋ž˜ํ”ฝ๊ณผ ๊ฒฐ์ฝ” ์ผ์น˜ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. aquaman doctor๋Š” ์ด๋Ÿฌํ•œ ๊ฒฝ๋กœ๊ฐ€ ์•„์ง ์„ค์ •์— ๋‚จ์•„ ์žˆ์œผ๋ฉด ์ด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์ •์ฑ… ์—†์Œ = ๋ชจ๋‘ ํ—ˆ์šฉ (ํ•˜์œ„ ํ˜ธํ™˜)
  • ์ฒซ ๋ฒˆ์งธ ์ผ์น˜๊ฐ€ ์šฐ์„ : ๊ทœ์น™์€ ์œ„์—์„œ ์•„๋ž˜๋กœ ํ‰๊ฐ€๋˜๋ฉฐ, ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์š”์ฒญ์€ defaultAction์œผ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค
  • ์ธ์ฆ ์ „์— ๊ฑฐ๋ถ€: ์ฐจ๋‹จ๋œ ์š”์ฒญ์€ ์‹ค์ œ ์ž๊ฒฉ ์ฆ๋ช…์„ ์ ˆ๋Œ€ ๋ฐ›์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค
  • ๊ฒฝ๋กœ ๊ธ€๋กญ: *๋Š” ์„ธ๊ทธ๋จผํŠธ ๋‚ด์—์„œ ์ผ์น˜ํ•˜๊ณ , **๋Š” 0๊ฐœ ์ด์ƒ์˜ ์„ธ๊ทธ๋จผํŠธ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค
  • aquaman setup์€ ์ €์žฅ๋œ ์„œ๋น„์Šค(anthropic, openai, slack, gmail)์— ์•ˆ์ „ํ•œ ๊ธฐ๋ณธ๊ฐ’์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • aquaman policy list / aquaman policy test <svc> <method> <path>๋กœ ๊ฒ€์‚ฌ / ๋“œ๋ผ์ด๋Ÿฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ž๊ฒฉ ์ฆ๋ช… ๋ฐฑ์—”๋“œ

์ž์ฒด ๋ณผํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค์„ธ์š” - aquaman์—๋Š” ์ž์ฒด ์ €์žฅ์†Œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ์šด์˜ ์ค‘์ธ ๋ฐฑ์—”๋“œ๋ฅผ ์„ ํƒํ•˜์„ธ์š”. ๋น„๋ฐ€์€ ๊ทธ๊ณณ์— ๋‚จ์•„ ์žˆ๊ณ , ํ”„๋ก์‹œ๋Š” ์ด๋ฅผ ์ œ์ž๋ฆฌ์—์„œ ์ฝ์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—”๋“œ์ตœ์  ์šฉ๋„์„ค์ •
keychainmacOS ๋กœ์ปฌ ๊ฐœ๋ฐœ (๊ธฐ๋ณธ๊ฐ’)๋ณ„๋„ ์„ค์ • ์—†์ด ์ž‘๋™
encrypted-fileLinux, WSL2, CI/CDAES-256-GCM, ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณดํ˜ธ
keepassxc๊ธฐ์กด KeePass ์‚ฌ์šฉ์žnpm i -g kdbxweb argon2 (v0.14.1๋ถ€ํ„ฐ ์„ ํƒ์  ํ”ผ์–ด), ๊ทธ๋Ÿฐ ๋‹ค์Œ AQUAMAN_KEEPASS_PASSWORD ๋˜๋Š” ํ‚ค ํŒŒ์ผ ์„ค์ •
1passwordํŒ€ ์ž๊ฒฉ ์ฆ๋ช… ๊ณต์œ brew install 1password-cli && op signin. ๋ฌด์ธ ์—์ด์ „ํŠธ์˜ ๊ฒฝ์šฐ ์„œ๋น„์Šค ๊ณ„์ • ์‚ฌ์šฉ (OP_SERVICE_ACCOUNT_TOKEN)
vault์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋น„๋ฐ€ ๊ด€๋ฆฌVAULT_ADDR + VAULT_TOKEN ์„ค์ •
systemd-credssystemd โ‰ฅ 256์ด ์žˆ๋Š” LinuxTPM2 ๊ธฐ๋ฐ˜, root ๋ถˆํ•„์š”
bitwardenBitwarden ์‚ฌ์šฉ์žbw login && export BW_SESSION=$(bw unlock --raw)

aquaman setup์€ ์ ์ ˆํ•œ ๊ธฐ๋ณธ๊ฐ’์„ ์ž๋™ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค (macOS โ†’ keychain; Linux โ†’ libsecret์ด ์žˆ์œผ๋ฉด keychain, systemd โ‰ฅ 256์ด๋ฉด systemd-creds, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 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 ์Šคํฐ), vault (HTTP ์™•๋ณต)์™€ ๊ฐ™์ด ์ ‘๊ทผ๋‹น ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๋Š” ๋ฐฑ์—”๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ๋ชฌ์˜ ๋ฉ”๋ชจ๋ฆฌ์— 15๋ถ„ ๋™์•ˆ ์บ์‹œ๋˜๋ฏ€๋กœ, ๋ฐ”์œ ์—์ด์ „ํŠธ ์„ธ์…˜์€ ์š”์ฒญ๋งˆ๋‹ค๊ฐ€ ์•„๋‹ˆ๋ผ ์ฐฝ๋‹น ํ•œ ๋ฒˆ๋งŒ ๋ณผํŠธ๋ฅผ ์ž ๊ธˆ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ๋Š” ์ด๋ฏธ ๋น ๋ฅด๊ฑฐ๋‚˜ ๋‚ด๋ถ€์ ์œผ๋กœ ์บ์‹œํ•˜๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ์บ์‹ฑ์ด ๊บผ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ~/.aquaman/config.yaml์˜ credentials.cacheTtlSeconds (๋˜๋Š” AQUAMAN_CACHE_TTL)๋กœ ์กฐ์ •ํ•˜์„ธ์š”. 0์€ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์†”์งํ•œ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„: ์ ‘๊ทผ๋‹น ์ƒ์ฒด ์ธ์ฆ ํ”„๋กฌํ”„ํŠธ๋Š” ์‚ฌ์šฉ์ž ์กด์žฌ ํ™•์ธ์ด๋ฉฐ, ์บ์‹œ๋Š” TTL ์ฐฝ ๋™์•ˆ ์ ‘๊ทผ๋‹น ์กด์žฌ ํ™•์ธ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์ธ ์—์ด์ „ํŠธ์˜ ๊ฒฝ์šฐ ๊ทธ ํ”„๋กฌํ”„ํŠธ๋Š” ๊ฒฐ์ฝ” ์‘๋‹ต๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ณผํŠธ๋Š” ํ‰๋ฌธ .env๋กœ ๋ฒ„๋ ค์ง€๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋Š” ํ™•์‹คํžˆ ๋” ๋‚˜์ฉ๋‹ˆ๋‹ค. ์บ์‹œ๋Š” ๊ฒฉ๋ฆฌ ๊ฒฝ๊ณ„๋ฅผ ์ด๋™์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค: ๊ฐ’์€ ํ”„๋ก์‹œ ํ”„๋กœ์„ธ์Šค์—๋งŒ ์กด์žฌํ•˜๊ณ  (๋ชจ๋“  ์š”์ฒญ์—์„œ ์ด๋ฏธ ๊ฑฐ์ณ๊ฐ€๋Š” ๊ณณ), ๋””์Šคํฌ์— ์ ˆ๋Œ€ ๊ธฐ๋ก๋˜์ง€ ์•Š์œผ๋ฉฐ, aquaman credentials add๋กœ ๊ต์ฒดํ•˜๋ฉด ์ฆ‰์‹œ ๋ฌดํšจํ™”๋ฉ๋‹ˆ๋‹ค. ์“ฐ๊ธฐ๋Š” ํ•ญ์ƒ ๋ณผํŠธ๋กœ ๊ฐ‘๋‹ˆ๋‹ค. test/compliance/cache-residency.test.ts์—์„œ ์ ํ•ฉ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณค์Šต๋‹ˆ๋‹ค. 1Password์—์„œ ํ”„๋กฌํ”„ํŠธ ์—†์ด ์‚ฌ์šฉํ•˜๋ ค๋ฉด aquaman ๋ณผํŠธ๋กœ ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋œ ์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์„ธ์š”. aquaman doctor๊ฐ€ ๊ทธ๊ณณ์„ ์•ˆ๋‚ดํ•ด ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ผ์ด์„ ์Šค

MIT - LICENSE ์ฐธ์กฐ.

์นดํ…Œ๊ณ ๋ฆฌ