
aquaman v0.15.0
๐ฑ AI ์์ด์ ํธ๋ฅผ ์ํ ์ ์ผํ ๋ ๋ฆฝ ์๊ฒฉ ์ฆ๋ช ํ๋ก์: ์์ฒด ๋ณผํธ ๊ฒฉ๋ฆฌ(BYOV) ๋ฐ ์ต์ ๊ถํ ์์ฒญ ์ ์ฑ . ํค๋ ์ด๋ฏธ ๋ณด๊ด ์ค์ธ ๊ณณ์ ๊ทธ๋๋ก ๋จ์ ์์ผ๋ฉฐ, ์์ด์ ํธ ๋ฉ๋ชจ๋ฆฌ์ ์ ๋ ์ ์ฅ๋์ง ์์ต๋๋ค. 1Password, keychain, keepassxc ๋ฐ ๊ธฐํ ์ฌ๋ฌ ๋๊ตฌ์ ํธํ๋ฉ๋๋ค.
๐ฑ Aquaman
๐ฑ AI ์์ด์ ํธ๋ฅผ ์ํ ์ ์ผํ ๋ ๋ฆฝํ ์๊ฒฉ ์ฆ๋ช ํ๋ก์: bring-your-own-vault ๊ฒฉ๋ฆฌ ๋ฐ ์ต์ ๊ถํ ์์ฒญ ์ ์ฑ . ์ฌ๋ฌ๋ถ์ ํค๋ ์ด๋ฏธ ๋ณด๊ดํ๊ณ ์๋ ๊ณณ์ ๊ทธ๋๋ก ๋จ์ ์์ผ๋ฉฐ, ์์ด์ ํธ์ ๋ฉ๋ชจ๋ฆฌ์๋ ์ ๋ ๋ค์ด๊ฐ์ง ์์ต๋๋ค. 1Password, keychain, keepassxc ๋ฐ ๊ธฐํ ์ฌ๋ฌ ๋๊ตฌ์ ํธํ๋ฉ๋๋ค.
Claude Code, OpenClaw ๋๋ Hermes๋ฅผ ์ค์ ํ๋๋ฐ, ์ด์ ์์คํ API ํค๊ฐ ํ๋ฌธ์ผ๋ก ๋ค์ด ์๋ .env ํ์ผ์ ๋ฐ๋ผ๋ณด๊ณ ๊ณ์ค ๊ฒ๋๋ค. ๊ด๋ จ ๊ธ๋ค๋ ์ฝ์ด๋ณด์
จ์ ํ
๊ณ , ์์ด์ ํธ๊ฐ ํ๋กฌํํธ ์ธ์ ์
์ ๋นํ๋ฉด ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๋์ง๋ ์์ค ๊ฒ๋๋ค. ์ถฉ๋ถํ ์ดํดํฉ๋๋ค.
Aquaman์ ์ธ ๊ฐ์ง ๋ฐฉ์ด ๊ณ์ธต์ผ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค:
- ํ๋ก์ธ์ค ๊ฒฉ๋ฆฌ: API ํค๋ ์ก์ ์์ ์ ํค๋ฅผ ์ฃผ์ ํ๋ ๋ณ๋์ ํ๋ก์ ํ๋ก์ธ์ค์ ์กด์ฌํฉ๋๋ค. ์์ด์ ํธ๋ ํค๊ฐ ์๋ ๋ง์ปค๋ง ๋ณด์ ํ๋ฏ๋ก, ์์ด์ ํธ์์ RCE๊ฐ ๋ฐ์ํ๋๋ผ๋ ํค๋ฅผ ์ฝ์ ์ ์์ต๋๋ค. ์ฝ๋ฉ ์์ด์ ํธ๋ ์ฌ๋ฌ๋ถ์ด ์ ์ธํ ์ฐธ์กฐ๋ง, ํ ๋ฒ์ ํ๋์ ๋ช ๋ น์ฉ๋ง ๋ฐ์ต๋๋ค.
- ์์ฒญ ์ ์ฑ : ์๋น์ค๋ณ ๊ท์น์ด ์์ด์ ํธ๊ฐ ํธ์ถํ ์ ์๋ ์๋ํฌ์ธํธ๋ฅผ ์ ์ดํฉ๋๋ค. ๊ด๋ฆฌ์ API๋ฅผ ์ฐจ๋จํ๊ณ , ์ญ์ ๋ฅผ ๋ฐฉ์งํ๋ฉฐ, ์ด์ ์์ฑ์ ํ์ฉํ๋ ์ ์ก์ ๊ฑฐ๋ถํ ์ ์์ต๋๋ค. ๊ฑฐ๋ถ๋ ์์ฒญ์๋ ์ค์ ์๊ฒฉ ์ฆ๋ช ์ด ์ ๋ ์ ๋ฌ๋์ง ์์ต๋๋ค.
- ๋ณ์กฐ ๊ฐ์ง ๊ฐ์ฌ: ๋ชจ๋ ์๊ฒฉ ์ฆ๋ช ์ฌ์ฉ์ SHA-256 ํด์ ์ฒด์ธ์ผ๋ก ๊ธฐ๋ก๋ฉ๋๋ค. ๋ฌด์์ ์ ๊ทผํ๋์ง ์ฆ๋ช ํ๊ณ , ์ฌํ์ ๋ณ์กฐ๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค.
๊ฒฝ๋ก ์ ํ
Aquaman์ ํ๋์ vault์ ํ๋์ daemon์ ๊ณต์ ํ๋ ๋ค ๊ฐ์ ํ๋ ฅ ํจํค์ง๋ก ์ ๊ณต๋ฉ๋๋ค. ํ์ํ ๊ฒ๋ง ์ค์นํ์ธ์:
| ํจํค์ง | ๊ธฐ๋ฅ | ์ค์น ์์ |
|---|---|---|
aquaman-proxy | ํต์ฌ: vault, daemon, ๊ฐ์ฌ, ์ ์ฑ , CLI. ๋๊ตฌ๋ ํ์ํ ๋ถ๋ถ. | ํญ์. |
aquaman-plugin | OpenClaw Gateway ์ด๋ํฐ. Gateway ์์ ์ ํ๋ก์๋ฅผ ์คํํ๊ณ , ๋ชจ๋ธ ๋ฐ Telegram ํธ๋ํฝ์ ํ๋ก์๋ฅผ ํตํด ๋ผ์ฐํ ํ๋ฉฐ, 5๊ฐ์ง ์ธ์ฆ ๋ชจ๋์ ๊ฑธ์ณ 25๊ฐ์ ๋ด์ฅ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. | OpenClaw Gateway๋ฅผ ์ด์ํ๋ ๊ฒฝ์ฐ. https://clawhub.ai/plugins/aquaman-plugin ์์๋ ์ด์ฉ ๊ฐ๋ฅ |
aquaman-coder | AI ์ฝ๋ฉ ์์ด์ ํธ ์ด๋ํฐ. ํ๋ก์ ํธ ๋ฒ์์ 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 |
๋จ์ผ 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์๋ ์์ฒด ์ ์ฅ์๊ฐ ์์ต๋๋ค. ์ด๋ฏธ ์ด์ ์ค์ธ ๋ฐฑ์๋๋ฅผ ์ ํํ์ธ์. ๋น๋ฐ์ ๊ทธ๊ณณ์ ๋จ์ ์๊ณ , ํ๋ก์๋ ์ด๋ฅผ ์ ์๋ฆฌ์์ ์ฝ์ต๋๋ค.
| ๋ฐฑ์๋ | ์ต์ ์ฉ๋ | ์ค์ |
|---|---|---|
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. ๋ฌด์ธ ์์ด์ ํธ์ ๊ฒฝ์ฐ ์๋น์ค ๊ณ์ ์ฌ์ฉ (OP_SERVICE_ACCOUNT_TOKEN) |
vault | ์ํฐํ๋ผ์ด์ฆ ๋น๋ฐ ๊ด๋ฆฌ | VAULT_ADDR + VAULT_TOKEN ์ค์ |
systemd-creds | systemd โฅ 256์ด ์๋ Linux | TPM2 ๊ธฐ๋ฐ, root ๋ถํ์ |
bitwarden | Bitwarden ์ฌ์ฉ์ | 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 ์ฐธ์กฐ.