> ํ๊ตญ์ด translation of [README](../../../README.md), auto-generated from the English source. English is canonical; open a PR against `README.md` for content changes. # ๐ฆ ClawMetry [](https://clickpy.clickhouse.com/dashboard/clawmetry) [](https://clickpy.clickhouse.com/dashboard/clawmetry) [](https://pypi.org/project/clawmetry/) [](https://github.com/vivekchand/clawmetry/stargazers) [](https://opensource.org/licenses/MIT) **๋น์ ์ ์์ด์ ํธ๊ฐ ์๊ฐํ๋ ๊ฒ์ ์ง์ผ๋ณด์ธ์.** **14๊ฐ์ AI ์์ด์ ํธ ๋ฐํ์**์ ์ํ ์ค์๊ฐ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ ๋๊ตฌ์ ๋๋ค: [OpenClaw](https://github.com/openclaw/openclaw), [NVIDIA NemoClaw](https://github.com/NVIDIA/NemoClaw), Claude Code, OpenAI Codex ์ธ 10๊ฐ. ์ ์ฒด ์์ด์ ํธ ํ๋ฆฟ์ ์ํ ํ๋์ ๋์๋ณด๋. > ๐ **๋ค๋ฅธ ์ธ์ด๋ก ์ฝ๊ธฐ:** [English](README.md) ยท [็ฎไฝไธญๆ](docs/i18n/zh-CN/README.md) ยท [ๆฅๆฌ่ช](docs/i18n/ja/README.md) ยท [ํ๊ตญ์ด](docs/i18n/ko/README.md) ยท [Espaรฑol](docs/i18n/es/README.md) ยท [Portuguรชs (BR)](docs/i18n/pt-BR/README.md) ยท [Franรงais](docs/i18n/fr/README.md) ยท [Deutsch](docs/i18n/de/README.md) ยท [เคนเคฟเคจเฅเคฆเฅ](docs/i18n/hi/README.md) ยท [ุงูุนุฑุจูุฉ](docs/i18n/ar/README.md) ยท [ะ ัััะบะธะน](docs/i18n/ru/README.md) ยท [๋ ๋ณด๊ธฐ โ](docs/i18n/) ๋ช ๋ น์ด ํ ์ค. ์ค์ ํ์ ์์. ๋ชจ๋ ๊ฒ์ ์๋์ผ๋ก ๊ฐ์งํฉ๋๋ค. ```bash pip install clawmetry && clawmetry ``` **http://localhost:8900** ์์ ์ด๋ฆฌ๋ฉฐ, ๊ทธ๊ฑธ๋ก ๋์ ๋๋ค.  ## 14๊ฐ ์์ด์ ํธ ๋ฐํ์๊ณผ ํธํ๋ฉ๋๋ค ClawMetry๋ OpenClaw๋ฅผ ์ํ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ ๋๊ตฌ๋ก ์์ํ๊ณ , ์ด์ ๋ **์ ์ฒด ์์ด์ ํธ ํ๋ฆฟ**์ ํ๋์ ๋์๋ณด๋์์ ์ธก์ ํ๋ฉฐ ๊ธฐ๊ธฐ์ ์๋ ๊ฐ ๋ฐํ์์ ์๋์ผ๋ก ๊ฐ์งํฉ๋๋ค: ๐ฆ **OpenClaw** ยท ๐ฉ **NVIDIA NemoClaw** ยท โ **Claude Code** ยท โฌก **OpenAI Codex** ยท **Cursor** ยท ๐ชฟ **Goose** ยท โก **Hermes** ยท **opencode** ยท โ **Qwen Code** ยท **Aider** ยท **NanoClaw** ยท **PicoClaw** ยท **Pi** ยท **Deep Agents** ยท ๐ **n8n** OpenClaw์ NemoClaw๋ ์คํ์์ค ์ฑ์์ ๋ฌด๋ฃ์ด๋ฉฐ, ๋ค๋ฅธ ๋ฐํ์๋ค์ ClawMetry Cloud ๋๋ ์ ํ ํธ์คํ Pro ๋ผ์ด์ ์ค๋ก ํ์ฑํ๋ฉ๋๋ค. ํค๋์์ ๋ฐํ์์ ์ ํํ๋ฉด ๋น์ฉ, ํ ํฐ, ๋๊ตฌ, ํธ๋ ์ด์ค๋ฅผ ํฌํจํ ๋ชจ๋ ํญ์ด ํด๋น ๋ฐํ์ ๊ธฐ์ค์ผ๋ก ๋ค์ ๋ฒ์๊ฐ ์ง์ ๋ฉ๋๋ค. ์ ํํ ๋ฌด๋ฃ/์ ๋ฃ ๊ตฌ๋ถ, ํฐ์ด ๋งคํธ๋ฆญ์ค, `/api/entitlement` ํ์, `clawmetry license` CLI์ ๋ํด์๋ **[docs/ENTITLEMENTS.md](docs/ENTITLEMENTS.md)** ๋ฅผ ์ฐธ๊ณ ํ์ธ์. ## ์ ๊ณต ๊ธฐ๋ฅ - **Flow** โ ์ฑ๋, ๋ธ๋ ์ธ, ๋๊ตฌ๋ฅผ ์ค๊ฐ๋ ๋ฉ์์ง ํ๋ฆ์ ๋ณด์ฌ์ฃผ๋ ์ค์๊ฐ ์ ๋๋ฉ์ด์ ๋ค์ด์ด๊ทธ๋จ - **Overview** โ ํฌ์ค ์ฒดํฌ, ํ๋ ํํธ๋งต, ์ธ์ ์, ๋ชจ๋ธ ์ ๋ณด - **Usage** โ ์ผ๊ฐ/์ฃผ๊ฐ/์๊ฐ ๋ถ์์ด ํฌํจ๋ ํ ํฐ ๋ฐ ๋น์ฉ ์ถ์ - **Sessions** โ ๋ชจ๋ธ, ํ ํฐ, ๋ง์ง๋ง ํ๋์ด ํ์๋๋ ํ์ฑ ์์ด์ ํธ ์ธ์ - **Crons** โ ์ํ, ๋ค์ ์คํ ์๊ฐ, ์คํ ์๊ฐ์ด ํ์๋๋ ์์ฝ ์์ - **Logs** โ ์์์ผ๋ก ๊ตฌ๋ถ๋ ์ค์๊ฐ ๋ก๊ทธ ์คํธ๋ฆฌ๋ฐ - **Memory** โ SOUL.md, MEMORY.md, AGENTS.md, ์ผ์ผ ๋ ธํธ ํ์ - **Transcripts** โ ์ธ์ ๊ธฐ๋ก์ ์ฝ๊ธฐ ์ํ ์ฑํ ๋ฒ๋ธ UI - **Alerts** โ ์์ฐ ํ๋, ์ค๋ฅ์จ ํธ๋ฆฌ๊ฑฐ, ์์ด์ ํธ ์คํ๋ผ์ธ ๊ฐ์ง; Slack, Discord, PagerDuty, Telegram, Email๋ก ์ ๋ฌ - **Approvals** โ ํ๊ดด์ ์ธ ์ญ์ , ๊ฐ์ ํธ์, DB ๋ณ๊ฒฝ, sudo, ํจํค์ง ์ค์น, ๋คํธ์ํฌ ํธ์ถ์ ์ํด๋ฆญ ์น์ธ ๋ค์์ ์ฐจ๋จ ## ์คํฌ๋ฆฐ์ท ### ๐ง Brain โ ์ค์๊ฐ ์์ด์ ํธ ์ด๋ฒคํธ ์คํธ๋ฆผ  ### ๐ Overview โ ํ ํฐ ์ฌ์ฉ๋ ๋ฐ ์ธ์ ์์ฝ  ### โก Flow โ ์ค์๊ฐ ๋๊ตฌ ํธ์ถ ํผ๋  ### ๐ฐ Tokens โ ๋ชจ๋ธ ๋ฐ ์ธ์ ๋ณ ๋น์ฉ ๋ถ์  ### ๐งฌ Memory โ ์ํฌ์คํ์ด์ค ํ์ผ ํ์๊ธฐ  ### ๐ Security โ ๋ณด์ ํ์ธ ๋ฐ ๊ฐ์ฌ ๋ก๊ทธ  ### ๐จ Alerts โ ์์ฐ ํ๋, ์ค๋ฅ์จ ํธ๋ฆฌ๊ฑฐ, Slack / Discord / PagerDuty / Email๋ก์ ์นํ  ### โ Approvals โ ์ํํ ๋๊ตฌ ํธ์ถ์ ์๋ ์น์ธ ๋ค์์ ์ฐจ๋จ; ์ ์ฑ ๊ธฐ๋ฐ ๋ณดํธ ๊ท์น  **Claude Code๋ฅผ ์ํ ์คํ ์ ์ฐจ๋จ** โ ๋ช ๋ น์ด ํ๋๋ก ์ผ์นํ๋ ๋๊ตฌ ํธ์ถ์ ์คํ *์ ์* ์ผ์ ์ ์ง์ํค๊ณ ์ฌ์ฉ์์ ๊ฒฐ์ ์ ๊ธฐ๋ค๋ฆฌ๋ PreToolUse ํ ์ ์ค์นํฉ๋๋ค ([ํด๋ผ์ฐ๋ ํธ์ ์๋ฆผ](https://app.clawmetry.com/push)์ด ํ์ฑํ๋์ด ์๋ค๋ฉด ํด๋ํฐ์์ ํญ ํ ๋ฒ์ผ๋ก): ```bash clawmetry hooks install # writes ~/.claude/settings.json (idempotent) clawmetry hooks status # what's wired + how many policies are active clawmetry hooks uninstall # removes only ClawMetry's entries ``` ๊ฑฐ๋ถ๋ ํด๋น ๋๊ตฌ ํธ์ถ ํ๋๋ง ์ฐจ๋จํฉ๋๋ค. ์์ด์ ํธ๋ ์ธ์ ์ ์ ์งํ ์ฑ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๋ํ ์ ์์ต๋๋ค. ํด๋ํฐ์์ ์น์ธํ๋ฉด Claude Code ์์ฒด์ ๊ถํ ํ๋กฌํํธ๋ฅผ ๊ฑด๋๋๋๋ค(์ด๋ฏธ ๋ต๋ณํ๊ธฐ ๋๋ฌธ์ ๋๋ค). ์ผ์นํ์ง ์๋ ๋๊ตฌ๋ ์ฝ 40ms์ ๋น์ฉ์ด ๋ค๋ฉฐ Claude Code์ ์ผ๋ฐ์ ์ธ ๊ถํ ํ๋ฆ์ผ๋ก ๋์ด๊ฐ๋๋ค. Claude Code ์์ฒด๊ฐ ์ฌ์ฉ์๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ ๋๋ ํด๋ํฐ ํธ์ ์๋ฆผ์ ๋ฐ์ต๋๋ค(`permission_prompt` / `idle_prompt` ์๋ฆผ). ## ์ค์น **ํ ์ค ์ค์น(๊ถ์ฅ):** ```bash curl -sSL https://raw.githubusercontent.com/vivekchand/clawmetry/main/install.sh | bash ``` **pip:** ```bash pip install clawmetry clawmetry ``` **์์ค์์ ๋น๋:** ```bash git clone https://github.com/vivekchand/clawmetry.git cd clawmetry && pip install flask && python3 dashboard.py ``` ## v2 ํ๋ก ํธ์๋ ๊ฐ๋ฐ v2 React ์ฑ์ `frontend/`์ ์์ผ๋ฉฐ, Flask ์๋ฒ๊ฐ v2 ํ์ฑํ ์ํ๋ก ์์๋๋ฉด `/v2`์์ ์ ๊ณต๋ฉ๋๋ค. ๊ฐ๋ฐ ์ค์๋ ํฐ๋ฏธ๋ ๋ ๊ฐ๋ฅผ ์ฌ์ฉํ์ธ์: ```bash # Terminal 1: Flask API/server on :8900 CLAWMETRY_V2=1 python3 dashboard.py ``` ```bash # Terminal 2: Vite dev server on :5173 cd frontend nvm use npm ci npm run dev ``` `http://localhost:5173/v2/` ๋ฅผ ์ฌ์ธ์. Vite๊ฐ `/api` ์์ฒญ์ `http://localhost:8900` ์ผ๋ก ํ๋ก์ํ๋ฏ๋ก, React ์ฑ์ ๋ณ๋์ CORS ์ค์ ์์ด ๋ก์ปฌ Flask ์๋ฒ์ ํต์ ํ ์ ์์ต๋๋ค. Python ํจํค์ง์ ํจ๊ป ๋ฐฐํฌ๋๋ ๋ฒ๋ค์ ๋น๋ํ๋ ค๋ฉด: ```bash cd frontend npm run build ``` ํ๋ก๋์ ๋ฒ๋ค์ `clawmetry/static/v2/dist/` ์ ๊ธฐ๋ก๋ฉ๋๋ค. ## ๋ฐํ์ / ์์ด์ ํธ ํธํ์ฑ ClawMetry๋ OpenClaw๋ฟ๋ง ์๋๋ผ ๋ค์ํ AI ์์ด์ ํธ ๋ฐํ์์ ๊ด์ฐฐํฉ๋๋ค. OpenClaw๊ฐ ์๋ ๊ฐ ๋ฐํ์์ ์์ฒด ๋ค์ดํฐ๋ธ ์ธ์ ํ์์ ClawMetry์ ํตํฉ ํ์์ผ๋ก ๋ณํํ๋ ์ ์ฉ ๋ฆฌ๋ ์ด๋ํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ชฌ์ ์ด๋ฅผ ๋ฐํ์ ํ๊ทธ์ ํจ๊ป ๋์ผํ DuckDB ์ ์ฅ์ + ํด๋ผ์ฐ๋ ์ค๋ ์ท์ผ๋ก ์์งํ๋ฉฐ, ๋ ์ด์์ ๋ฐํ์์ด ์กด์ฌํ ๋ Session replay ํญ์ **๋ฐํ์ ์ ํ๊ธฐ**๊ฐ ํ์๋ฉ๋๋ค. ์ ์ฒด ๋งคํธ๋ฆญ์ค์ ๋ฐํ์ ์ถ๊ฐ ๊ฐ์ด๋๋ [`docs/compatibility.md`](docs/compatibility.md)๋ฅผ, OpenClaw ํจ๋ฐ๋ฆฌ ๊ฐ์๋ [`docs/RUNTIME_FAMILY.md`](docs/RUNTIME_FAMILY.md)๋ฅผ ์ฐธ๊ณ ํ์ธ์. | ๋ฐํ์ / ์์ด์ ํธ | ์ํ | ์ฐธ๊ณ | |---|---|---| | **OpenClaw** | ๋ค์ดํฐ๋ธ | ๋ ํผ๋ฐ์ค ๋ฐํ์, ์๋ ๊ฐ์ง | | **PicoClaw** | ๋ฒ ํ ์ด๋ํฐ | ํ๋ซ `providers.Message` JSONL (`~/.picoclaw/workspace/sessions`). ํธ๋์คํฌ๋ฆฝํธ, ๋ชจ๋ธ, ๋๊ตฌ ํธ์ถ. | | **NanoClaw** | ๋ฒ ํ ์ด๋ํฐ | ์ธ์ ๋ณ SQLite (`data/v2-sessions`). ํธ๋์คํฌ๋ฆฝํธ + ๋ฉ์์ง ์. | | **Hermes** | ๋ฒ ํ ์ด๋ํฐ | SQLite `~/.hermes/state.db`. ํธ๋์คํฌ๋ฆฝํธ, ๋ชจ๋ธ, ํ ํฐ/๋น์ฉ. | | **Claude Code** | ๋ฒ ํ ์ด๋ํฐ | JSONL `~/.claude/projects/.../.jsonl`. ํธ๋์คํฌ๋ฆฝํธ, ๋ชจ๋ธ, ๋๊ตฌ ํธ์ถ + ์ฌ๊ณ ๊ณผ์ , ํ ํฐ ์ฌ์ฉ๋. | | **Codex** | ๋ฒ ํ ์ด๋ํฐ | Rollout JSONL `~/.codex/sessions/...`. ํธ๋์คํฌ๋ฆฝํธ, ๋ชจ๋ธ, ๋๊ตฌ ํธ์ถ, ํ ํฐ ์ฌ์ฉ๋. | | **Cursor** | ๋ฒ ํ ์ด๋ํฐ | SQLite `state.vscdb`. ์ฑํ /์ปดํฌ์ ํธ๋์คํฌ๋ฆฝํธ, ๋ชจ๋ธ. | | **Aider** | ๋ฒ ํ ์ด๋ํฐ | ํ๋ก์ ํธ๋ณ `.aider.chat.history.md`. ํธ๋์คํฌ๋ฆฝํธ, ๋ชจ๋ธ, ํ ํฐ ์. | | **Goose** | ๋ฒ ํ ์ด๋ํฐ | SQLite `~/.local/share/goose`. ํธ๋์คํฌ๋ฆฝํธ, ๋ชจ๋ธ, ๋๊ตฌ ํธ์ถ, ํ ํฐ ์ดํฉ. | | **opencode** | ๋ฒ ํ ์ด๋ํฐ | SQLite `~/.local/share/opencode`. ํธ๋์คํฌ๋ฆฝํธ, ๋ชจ๋ธ, ๋๊ตฌ ํธ์ถ, ํ ํฐ + ๋น์ฉ. | | **Qwen Code** | ๋ฒ ํ ์ด๋ํฐ | JSONL `~/.qwen/projects/.../chats`. ํธ๋์คํฌ๋ฆฝํธ, ๋ชจ๋ธ, ๋๊ตฌ ํธ์ถ, ํ ํฐ ์ฌ์ฉ๋. | | **Pi** | ๋ฒ ํ ์ด๋ํฐ | JSONL `~/.pi/agent/sessions`. ํธ๋์คํฌ๋ฆฝํธ, ๋ชจ๋ธ, ๋๊ตฌ ํธ์ถ, ํ ํฐ + ๋น์ฉ. | | **Deep Agents** | ๋ฒ ํ ์ด๋ํฐ | SQLite `~/.deepagents/.state/sessions.db`. ํธ๋์คํฌ๋ฆฝํธ, ๋ชจ๋ธ, ๋๊ตฌ ํธ์ถ, ํ ํฐ + ๋น์ฉ. | | **n8n** | ๋ฒ ํ ์ด๋ํฐ | SQLite `~/.n8n/database.sqlite`. ์ํฌํ๋ก ์คํ, ๋ ธ๋ ์คํ, AI Agent ํ๋กฌํํธ, n8n์ด ๊ธฐ๋กํ๋ ๊ฒฝ์ฐ ๋ชจ๋ธ + ํ ํฐ. | "๋ฒ ํ ์ด๋ํฐ"๋ ClawMetry๊ฐ ์ค์ ๊ธฐ๊ธฐ์ ์ค์น๋ ์ค์ ์จ๋์คํฌ ํ์์ ๋ํด ๊ตฌ์ถ ๋ฐ ๊ฒ์ฆ๋ ํด๋น ๋ฐํ์์ฉ ๋ฆฌ๋๋ฅผ ์ ๊ณตํ๋ค๋ ์๋ฏธ์ ๋๋ค(`tests/fixtures/runtimes//` ์ฐธ๊ณ ). ์ด๋ํฐ๋ ์ฝ๊ธฐ ์ ์ฉ์ด๋ฉฐ, ๊ฐ ๋ฐํ์์ด ์ค์ ๋ก ๋์คํฌ์ ์ ์ฅํ๋ ๋ด์ฉ์ ๋ํด ์ ์งํฉ๋๋ค(์: PicoClaw/NanoClaw/Cursor๋ ํ ํฐ ๋น์ฉ์ ๋์คํฌ์ ๊ธฐ๋กํ์ง ์์ต๋๋ค). ํ ๋ ธ๋์์ ์ฌ๋ฌ ๋ฐํ์์ด ์คํ๋๋ฉด, ๋ฐํ์ ์ ํ๊ธฐ๊ฐ ํ๋๋ก ์ธ์ ๋ทฐ๋ฅผ ํ์ ํ์ฌ ๊น๋ํ ์ฌ์ธต ๋ถ์์ด ๊ฐ๋ฅํฉ๋๋ค. ## ์ด๋ค SDK ์์ด์ ํธ๋ ์ถ์ ํ๊ธฐ โ ์์๋ฃจํ ๋น์ฉ ๊ท์ ์์ ๋ฐํ์๋ค์ ๋ชจ๋ ์ธ์ ์ ๋์คํฌ์ ๊ธฐ๋กํฉ๋๋ค. ์ฌ๋ฌ๋ถ์ด OpenAI Agents SDK, LangChain, Vercel AI SDK, LlamaIndex, E2B, ๋๋ ์์ `httpx` ๋ฃจํ๋ก ๊ตฌ์ถํ **ํ๋ก๋์ ์์ด์ ํธ**๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ClawMetry์ ์ ๋ก ์ค์ ์ธํฐ์ ํฐ๋ `httpx`/`requests`๋ฅผ ๋ชฝํค ํจ์นญํ์ฌ ๊ทธ LLM ํธ์ถ(๋น์ฉ, ํ ํฐ, ์ง์ฐ ์๊ฐ, ์ค๋ฅ)์ ์ฌ์ ํ ์บก์ฒํฉ๋๋ค: ```python import clawmetry.track # activate the interceptor clawmetry.track.set_source("support-agent") # name this product # ...your agent runs as normal; every LLM call is now tracked + attributed. ``` `set_source()`(๋๋ `CLAWMETRY_SOURCE=support-agent` ํ๊ฒฝ ๋ณ์)๋ ๊ฐ ํธ์ถ์ **์ด๋ฆ์ด ์ง์ ๋ ์์ค**๋ฅผ ํ๊ทธํ๋ฏ๋ก, ์คํํ๋ ๋ชจ๋ ์ ํ์ด ๋์๋ณด๋์ Overview์ ์๋ **๐ ์์๋ฃจํ ์์ค** ์นด๋์ ์์ฒด ๋ ๋ฆฝ์ ์ธ ๋น์ฉ ๊ท์ ๋ผ์ธ์ผ๋ก ํ์๋ฉ๋๋ค. ์์ด์ ํธ๋ณ ํธ์ถ ์, ์ ๊ณต์, ์ง์ฐ ์๊ฐ, ์ค๋ฅ์จ์ ๋ณผ ์ ์์ต๋๋ค. ์์ค๋ฅผ ์ค์ ํ์ง ์์๋์? ํธ์ถ์ ์ฌ์ ํ ์ถ์ ๋๋ฉฐ, ์นด๋๋ง ์จ๊ฒจ์ง ์ํ๋ก ์ ์ง๋ฉ๋๋ค. ```bash CLAWMETRY_SOURCE=billing-agent python my_agent.py ``` ์ด๋ ๋ฐํ์ ์ด๋ํฐ๊ฐ ๊ณต๊ธํ๋ ๊ฒ๊ณผ ๋์ผํ ๋ฐ์ดํฐ ๋ ์ด์ด(DuckDB โ ํด๋ผ์ฐ๋ ์ค๋ ์ท)์ด๋ฏ๋ก, ์์๋ฃจํ ์์ค๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ข ๋จ ๊ฐ ์ํธํ๋์ด ํด๋ผ์ฐ๋ ๋์๋ณด๋๋ก ๋๊ธฐํ๋ฉ๋๋ค. ## OpenTelemetry โ ๋ฒค๋ ์ค๋ฆฝ์ , ํธ๋ ์ด์ค๋ฅผ ์ด๋๋ก๋ ์ ์ก ClawMetry๋ **GenAI ์๋งจํฑ ์ปจ๋ฒค์ **์ ์ฌ์ฉํ์ฌ ์๋ฐฉํฅ์ผ๋ก **OpenTelemetry**๋ฅผ ์ง์ํ๋ฏ๋ก, ์์ด์ ํธ ํธ๋ ์ด์ค๊ฐ ํ๋์ ๋๊ตฌ์ ์ข ์๋์ง ์์ต๋๋ค. ๋ชจ๋ ์ธ์ (LLM ํธ์ถ, ๋๊ตฌ, ์๋ธ ์์ด์ ํธ, ํ ํฐ, ๋น์ฉ)์ OTLP/HTTP GenAI ์คํฌ์ผ๋ก **๋ด๋ณด๋ด๊ธฐ**ํ์ฌ ์์์ ์ปฌ๋ ํฐ(Datadog, Grafana, Honeycomb, ๋๋ ์์ฒด OTel Collector)๋ก ์ ์กํ ์ ์์ต๋๋ค: ```bash clawmetry --otel-export http://localhost:4318/v1/traces # equivalently: CLAWMETRY_OTEL_EXPORT_ENDPOINT=http://localhost:4318/v1/traces clawmetry ``` ์ธ์ฆ ํค๋์ ํด๋ง ๊ฐ๊ฒฉ์ ์ ํ์ ํ๊ฒฝ ๋ณ์์ ๋๋ค: ```bash CLAWMETRY_OTEL_EXPORT_HEADERS='{"X-API-Key":"โฆ"}' # extra HTTP headers CLAWMETRY_OTEL_EXPORT_INTERVAL=60 # seconds (default 60) ``` **์์ง** โ ๋ด์ฅ๋ OTLP ์์ ๊ธฐ๋ `/v1/traces` ๋ฐ `/v1/metrics`์์ ๋ค๋ฅธ ์ด๋ค ๊ฒ์ผ๋ก๋ถํฐ๋ ํธ๋ ์ด์ค์ ๋ฉํธ๋ฆญ์ ๋ฐ์๋ค์ ๋๋ค(ํ๋กํ ๋ฒํ ์์ง์ ์ํด์๋ `pip install clawmetry[otel]`). ์ ๋ก ์ค์ , ๋ก์ปฌ ์ฐ์ ์ธ ClawMetry ๋์๋ณด๋์ ํ์ด ์ด๋ฏธ ์ฌ์ฉ ์ค์ธ ๋ฐฑ์๋์ ๋ฐ์ดํฐ๋ฅผ **๋์์** ๊ฐ์ง ์ ์์ต๋๋ค. ์ข ์๋ ์๊ณ , ์ค์นํ ๋ ๋ฒ์งธ ์์ด์ ํธ๋ ์์ต๋๋ค. ## ์ค์ ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ ๋ณ๋์ ์ค์ ์ด ํ์ํ์ง ์์ต๋๋ค. ClawMetry๋ ์ํฌ์คํ์ด์ค, ๋ก๊ทธ, ์ธ์ , cron์ ์๋์ผ๋ก ๊ฐ์งํฉ๋๋ค. ์ปค์คํฐ๋ง์ด์ง์ด ํ์ํ๋ค๋ฉด: ```bash clawmetry --port 9000 # Custom port (default: 8900) clawmetry --host 127.0.0.1 # Bind to localhost only clawmetry --workspace ~/mybot # Custom workspace path clawmetry --name "Alice" # Your name in Flow visualization ``` ๋ชจ๋ ์ต์ : `clawmetry --help` ## ์ง์ํ๋ ์ฑ๋ ClawMetry๋ ์ค์ ํ ๋ชจ๋ OpenClaw ์ฑ๋์ ์ค์๊ฐ ํ๋์ ๋ณด์ฌ์ค๋๋ค. `openclaw.json`์ ์ค์ ๋ก ์ค์ ๋ ์ฑ๋๋ง Flow ๋ค์ด์ด๊ทธ๋จ์ ํ์๋๋ฉฐ, ์ค์ ๋์ง ์์ ์ฑ๋์ ์๋์ผ๋ก ์จ๊ฒจ์ง๋๋ค. Flow์์ ์ฑ๋ ๋ ธ๋๋ฅผ ํด๋ฆญํ๋ฉด ๋ค์ด์ค๊ณ ๋๊ฐ๋ ๋ฉ์์ง ์๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ค์๊ฐ ์ฑํ ๋ฒ๋ธ ๋ทฐ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. | ์ฑ๋ | ์ํ | ์ค์๊ฐ ํ์ | ์ฐธ๊ณ | |---------|--------|------------|-------| | ๐ฑ **Telegram** | โ ์์ ์ง์ | โ | ๋ฉ์์ง, ํต๊ณ, 10์ด๋ง๋ค ๊ฐฑ์ | | ๐ฌ **iMessage** | โ ์์ ์ง์ | โ | `~/Library/Messages/chat.db`๋ฅผ ์ง์ ์ฝ์ | | ๐ **WhatsApp** | โ ์์ ์ง์ | โ | WhatsApp Web(Baileys)์ ํตํด | | ๐ต **Signal** | โ ์์ ์ง์ | โ | signal-cli๋ฅผ ํตํด | | ๐ฃ **Discord** | โ ์์ ์ง์ | โ | ๊ธธ๋ + ์ฑ๋ ๊ฐ์ง | | ๐ช **Slack** | โ ์์ ์ง์ | โ | ์ํฌ์คํ์ด์ค + ์ฑ๋ ๊ฐ์ง | | ๐ **Webchat** | โ ์์ ์ง์ | โ | ๋ด์ฅ ์น UI ์ธ์ | | ๐ก **IRC** | โ ์์ ์ง์ | โ | ํฐ๋ฏธ๋ ์คํ์ผ ๋ฒ๋ธ UI | | ๐ **BlueBubbles** | โ ์์ ์ง์ | โ | BlueBubbles REST API๋ฅผ ํตํ iMessage | | ๐ต **Google Chat** | โ ์์ ์ง์ | โ | Chat API ์นํ ์ ํตํด | | ๐ฃ **MS Teams** | โ ์์ ์ง์ | โ | Teams ๋ด ํ๋ฌ๊ทธ์ธ์ ํตํด | | ๐ท **Mattermost** | โ ์์ ์ง์ | โ | ์ ํ ํธ์คํ ํ ์ฑํ | | ๐ฉ **Matrix** | โ ์์ ์ง์ | โ | ํ์ค์ํ, E2EE ์ง์ | | ๐ข **LINE** | โ ์์ ์ง์ | โ | LINE Messaging API | | โก **Nostr** | โ ์์ ์ง์ | โ | ํ์ค์ํ NIP-04 DM | | ๐ฃ **Twitch** | โ ์์ ์ง์ | โ | IRC ์ฐ๊ฒฐ์ ํตํ ์ฑํ | | ๐ท **Feishu/Lark** | โ ์์ ์ง์ | โ | WebSocket ์ด๋ฒคํธ ๊ตฌ๋ | | ๐ต **Zalo** | โ ์์ ์ง์ | โ | Zalo Bot API | > **์๋ ๊ฐ์ง:** ClawMetry๋ `~/.openclaw/openclaw.json`์ ์ฝ๊ณ ์ค์ ๋ก ์ค์ ํ ์ฑ๋๋ง ๋ ๋๋งํฉ๋๋ค. ๋ณ๋์ ์๋ ์ค์ ์ ํ์ํ์ง ์์ต๋๋ค. ## Docker ๋ฐฐํฌ ClawMetry๋ฅผ ์ปจํ ์ด๋์์ ์คํํ๊ณ ์ถ์ผ์ ๊ฐ์? ๋ฌธ์ ์์ต๋๋ค! ๐ณ **Docker๋ก ๋น ๋ฅด๊ฒ ์์ํ๊ธฐ:** ```bash # Build the image docker build -t clawmetry . # Run with default settings docker run -p 8900:8900 clawmetry # Or mount your agent's data dir (shown: OpenClaw's ~/.openclaw) docker run -p 8900:8900 \ -v ~/.openclaw:/root/.openclaw \ -v /tmp/moltbot:/tmp/moltbot \ clawmetry ``` **Docker Compose ์์:** ```yaml version: '3.8' services: clawmetry: build: . ports: - "8900:8900" volumes: - ~/.openclaw:/root/.openclaw:ro - /tmp/moltbot:/tmp/moltbot:ro restart: unless-stopped ``` > **์ฐธ๊ณ :** Docker์์ ์คํํ ๋๋ ClawMetry๊ฐ ์ค์ ์ ์๋์ผ๋ก ๊ฐ์งํ ์ ์๋๋ก ์์ด์ ํธ์ ๋ฐ์ดํฐ + ๋ก๊ทธ ๋๋ ํฐ๋ฆฌ(์: `~/.openclaw`, `~/.claude`, `~/.codex`)๋ฅผ ๋ง์ดํธํ์ธ์. ## ์๊ตฌ ์ฌํญ - Python 3.8 ์ด์ - Flask (pip์ ํตํด ์๋ ์ค์น๋จ) - ๋์ผํ ๊ธฐ๊ธฐ์์ ์คํ ์ค์ธ AI ์์ด์ ํธ ๋ฐํ์: OpenClaw, NVIDIA NemoClaw, Claude Code, Codex, Cursor, Goose, Hermes, opencode, Qwen Code, Aider, NanoClaw, PicoClaw, Pi, Deep Agents, n8n ์ค ํ๋(๋๋ Docker์ ๊ฒฝ์ฐ ๋ง์ดํธ๋ ๋ณผ๋ฅจ) - Linux ๋๋ macOS ## NemoClaw / OpenShell ์ง์ ClawMetry๋ [NemoClaw](https://github.com/NVIDIA/NemoClaw)๋ฅผ ์๋์ผ๋ก ๊ฐ์งํฉ๋๋ค. NemoClaw๋ ์๋๋ฐ์คํ๋ OpenShell ์ปจํ ์ด๋ ๋ด์์ ์์ด์ ํธ๋ฅผ ์คํํ๋, OpenClaw๋ฅผ ์ํ NVIDIA์ ์ํฐํ๋ผ์ด์ฆ ๋ณด์ ๋ํผ์ ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ณ๋์ ์ค์ ์ด ํ์ํ์ง ์์ต๋๋ค. ๋๊ธฐํ ๋ฐ๋ชฌ์ ์ธ์ ํ์ผ์ด ํธ์คํธ์ `~/.openclaw/`์ ์๋ OpenShell ์ปจํ ์ด๋ ๋ด๋ถ์ ์๋ ์๋์ผ๋ก ์ฐพ์๋ ๋๋ค. ### ์๋ ๋ฐฉ์ ClawMetry๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก NemoClaw๋ฅผ ๊ฐ์งํฉ๋๋ค: 1. **๋ฐ์ด๋๋ฆฌ ๊ฐ์ง** โ `nemoclaw` CLI๊ฐ ์๋์ง ํ์ธํ๊ณ `nemoclaw status`๋ฅผ ์คํํ์ฌ ์๋๋ฐ์ค ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค 2. **์ปจํ ์ด๋ ๊ฐ์ง** โ ์คํ ์ค์ธ Docker ์ปจํ ์ด๋๋ฅผ ์ค์บํ์ฌ `openshell`, `nemoclaw`, `ghcr.io/nvidia/` ์ด๋ฏธ์ง๋ฅผ ์ฐพ๊ณ , ๋ณผ๋ฅจ ๋ง์ดํธ๋ `docker cp`๋ฅผ ํตํด ์ธ์ ์ ์ฝ์ต๋๋ค NemoClaw ์ปจํ ์ด๋์์ ๋๊ธฐํ๋ ์ธ์ ํ์ผ์ ํด๋ผ์ฐ๋ ๋์๋ณด๋์์ `runtime=nemoclaw`์ `container_id` ๋ฉํ๋ฐ์ดํฐ๋ก ํ๊ทธ๋๋ฏ๋ก, ํ์ค OpenClaw ์ธ์ ๊ณผ ํ๋์ ๊ตฌ๋ถํ ์ ์์ต๋๋ค. ### ๊ถ์ฅ ์ค์ : ํธ์คํธ์์ ๋๊ธฐํ ๋ฐ๋ชฌ ์คํ ์ต์์ ๊ฒฝํ์ ์ํด์๋ ClawMetry์ ๋๊ธฐํ ๋ฐ๋ชฌ์ (์๋๋ฐ์ค ๋ด๋ถ๊ฐ ์๋) **ํธ์คํธ ๋จธ์ **์์ ์คํํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด NemoClaw ๋คํธ์ํฌ ์ ์ฑ ์ ํ์ ํผํ ์ ์์ต๋๋ค. ```bash # On the host (outside the sandbox) pip install clawmetry clawmetry connect clawmetry sync ``` ๋๊ธฐํ ๋ฐ๋ชฌ์ ์คํ ์ค์ธ ๋ชจ๋ OpenShell ์ปจํ ์ด๋ ๋ด๋ถ์ ์ธ์ ์ ์๋์ผ๋ก ์ฐพ์ต๋๋ค. ### ์ ํ ์ฌํญ: ๋ช ์์ ์๋๋ฐ์ค ์ด๋ฆ ์ง์ ์๋ ๊ฐ์ง๊ฐ ์๋ํ์ง ์์ผ๋ฉด, ClawMetry๊ฐ ์ฌ๋ฐ๋ฅธ ์๋๋ฐ์ค๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ์ง์ ํ์ธ์: ```bash export NEMOCLAW_SANDBOX=my-sandbox-name clawmetry sync ``` ### ์๋๋ฐ์ค ๋ด๋ถ์์ ์คํํ๊ธฐ (๊ณ ๊ธ) ๋๊ธฐํ ๋ฐ๋ชฌ์ ๋ฐ๋์ OpenShell ์๋๋ฐ์ค **๋ด๋ถ**์์ ์คํํด์ผ ํ๋ค๋ฉด, ClawMetry ์์ง API์ ์ ๊ทผํ ์ ์๋๋ก NemoClaw ๋คํธ์ํฌ ์ ์ฑ ์ ๋ค์์ ์ด๊ทธ๋ ์ค ๊ท์น์ ์ถ๊ฐํ์ธ์: ```yaml # nemoclaw-policy.yaml network: egress: - host: ingest.clawmetry.com port: 443 protocol: https ``` ๋ค์์ผ๋ก ์ ์ฉํ์ธ์: ```bash nemoclaw policy apply --file nemoclaw-policy.yaml ``` ### ํฌํธ ๋ฐ ์๋ํฌ์ธํธ | ์๋ํฌ์ธํธ | ํฌํธ | ํ๋กํ ์ฝ | ํ์ ์ฌ๋ถ | |---|---|---|---| | `ingest.clawmetry.com` | 443 | HTTPS | ์ (๋๊ธฐํ ๋ฐ๋ชฌ โ ํด๋ผ์ฐ๋) | | `localhost:8900` | 8900 | HTTP | ์ (๋ก์ปฌ ๋์๋ณด๋ UI) | | Docker ์์ผ (`/var/run/docker.sock`) | โ | Unix ์์ผ | ์ปจํ ์ด๋ ์ธ์ ํ์ง์ฉ | ๋๊ธฐํ ๋ฐ๋ชฌ์ `ingest.clawmetry.com`์ผ๋ก๋ง ์์๋ฐ์ด๋ HTTPS ํธ์ถ์ ํฉ๋๋ค. ์ธ๋ฐ์ด๋ ํฌํธ๋ ํ์ํ์ง ์์ต๋๋ค. --- ## ํด๋ผ์ฐ๋ ๋ฐฐํฌ SSH ํฐ๋, ๋ฆฌ๋ฒ์ค ํ๋ก์, Docker์ ๋ํด์๋ **[ํด๋ผ์ฐ๋ ํ ์คํธ ๊ฐ์ด๋](https://github.com/vivekchand/clawmetry/blob/main/docs/CLOUD_TESTING.md)** ๋ฅผ ์ฐธ๊ณ ํ์ธ์. ## ํ ์คํธ ์ด ํ๋ก์ ํธ๋ BrowserStack์ผ๋ก ํ ์คํธ๋ฉ๋๋ค. [](https://browserstack.com) ## ํ ๋ ๋ฉํธ๋ฆฌ ClawMetry๋ ์ต๋ช ์ ์ค์น ์๋ช ์ฃผ๊ธฐ ํ์ `https://app.clawmetry.com/api/install`๋ก ์ ์กํฉ๋๋ค: ์ ๊ธฐ๊ธฐ์์ `clawmetry` CLI๋ฅผ ์ฒ์ ์คํํ ๋ ํ๋์ `install` ํ, ์ ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ ํ ์ฒซ ์คํ ์ ํ๋์ `update` ํ, ๋์๋ณด๋ ๋ด ์จ๋ณด๋ฉ ์ ํ์ ์๋ฃํ ๋ ํ๋์ `onboarded` ํ. ์ด๋ ์ค์ ์ค์น ์๋ฅผ ์ง๊ณํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค(์์ PyPI ๋ค์ด๋ก๋ ์์น๋ ์ฝ 98%๊ฐ ๋ฏธ๋ฌ, CI, ์๋ ์ ๋ฐ์ดํธ ์ฌ๋ค์ด๋ก๋์ ๋๋ค), ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ์ด๋ค ์์ด์ ํธ ํ๋ ์์ํฌ์ ๋ฒ์ ์ด ์ฌ์ฉ๋๊ณ ์๋์ง ํ์ ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. **์๋ช ์ฃผ๊ธฐ ์ด๋ฒคํธ ๋ฐ ๋ฒ์ ๋น ์ต๋ ํ ๋ฒ์ POST**๋ก, ๋ค์์ ํฌํจํฉ๋๋ค: | ํ๋ | ์์ | ์ด์ | |---|---|---| | `install_id` | `~/.clawmetry/install_id`์ ์ ์ฅ๋ ๋ฌด์์ UUID | ์ค๋ณต ์ ๊ฑฐ; ์ฌ์ฉ์๊ฐ ํด๋ผ์ฐ๋ ๋๊ธฐํ๋ฅผ ๋ช ์์ ์ผ๋ก ์ฐ๊ฒฐํ๊ธฐ ์ ๊น์ง๋ ์ต๋ช (๊ทธ ์ดํ์๋ ์ธ์ฆ๋ ๋ฐ๋ชฌ ํํธ๋นํธ๊ฐ ์ด๋ฅผ ์ ๋ฌํ์ฌ ์ด ์ค์น๋ฅผ ์ฌ์ฉ์์ ๊ณ์ ์ ์ฐ๊ฒฐ) | | `event` | `install` / `update` / `onboarded` | ์ ๊ท ์ค์น์ ๊ธฐ์กด ์ค์น์ ์ ๊ทธ๋ ์ด๋ ๊ตฌ๋ถ | | `version` | `0.12.167` | ์ค์ ์ฌ์ฉ ์ค์ธ ๋ฒ์ ํ์ | | `os` / `os_version` | `Darwin` / `25.3.0` | ํ๋ซํผ ์ง์ ์ฐ์ ์์ | | `python` | `3.11.15` | Python ๋ฒ์ ์ง์ ๋งคํธ๋ฆญ์ค | | `agent` | `openclaw` / `nemoclaw` / `hermes` / `none` | ๋ค์์ ํตํฉํด์ผ ํ ์์ด์ ํธ ํ์ | | `is_ci` / `ci_provider` | `true` / `github_actions` | ์ฌ๋์ ์ํ ์ค์น์ CI ๋ ธ์ด์ฆ ๊ตฌ๋ถ | **์ ์กํ์ง ์๋ ๊ฒ**: IP(ํด๋ผ์ฐ๋๋ ์๋ฒ ์ธก์์ ์์ฒญ์ผ๋ก๋ถํฐ ๊ตญ๊ฐ ์ฝ๋๋ฅผ ๋์ถํ ํ IP๋ฅผ ํ๊ธฐํฉ๋๋ค), ํธ์คํธ๋ช , ์ฌ์ฉ์๋ช , ์ํฌ์คํ์ด์ค ๊ฒฝ๋ก, ํ์ผ ๋ด์ฉ, api_key, ์ด๋ฉ์ผ, ๊ฐ์ธ ์๋ณ ์ ๋ณด๋ ์ํฌ์คํ์ด์ค ๊ด๋ จ ์ด๋ค ๊ฒ๋ ์ ์กํ์ง ์์ต๋๋ค. ์ ์ก๋๋ ํ์ด๋ก๋๋ [`clawmetry/telemetry.py`](clawmetry/telemetry.py)์์ ํ์ธํ ์ ์์ต๋๋ค. **์ตํธ์์** (๋ค์ ์ค ํ๋๋ง ํด๋ ์๊ตฌ์ ์ผ๋ก ๋นํ์ฑํ๋ฉ๋๋ค): ```bash export CLAWMETRY_NO_TELEMETRY=1 # per-shell export DO_NOT_TRACK=1 # W3C cross-tool standard touch ~/.clawmetry/notelemetry # persistent file marker ``` ๋คํธ์ํฌ ์คํจ๊ฐ `clawmetry` ์คํ์ ๋ง๋ ์ผ์ ์์ต๋๋ค. ์ด ํ์ 3์ด ํ์์์์ ๊ฐ์ง ๋ฐ๋ชฌ ์ค๋ ๋์์ ์คํ๋๋ ๋ฐ์ฌ ํ ๋ง๊ฐ(fire-and-forget) ๋ฐฉ์์ ๋๋ค. ## ์คํ ํ์คํ ๋ฆฌ ## ๋ผ์ด์ ์ค MIT --- ๐ฆ ๋น์ ์ ์์ด์ ํธ๊ฐ ์๊ฐํ๋ ๊ฒ์ ์ง์ผ๋ณด์ธ์ @vivekchand๊ฐ ๋ง๋ฆ ยท clawmetry.com ยท OpenClaw ์ํ๊ณ์ ์ผ๋ถ
๐ฆ ๋น์ ์ ์์ด์ ํธ๊ฐ ์๊ฐํ๋ ๊ฒ์ ์ง์ผ๋ณด์ธ์ @vivekchand๊ฐ ๋ง๋ฆ ยท clawmetry.com ยท OpenClaw ์ํ๊ณ์ ์ผ๋ถ