> ํ•œ๊ตญ์–ด translation of [README](../../../README.md), auto-generated from the English source. English is canonical; open a PR against `README.md` for content changes. # ๐Ÿฆž ClawMetry [![PyPI Downloads](https://static.pepy.tech/badge/clawmetry)](https://clickpy.clickhouse.com/dashboard/clawmetry) [![PyPI Downloads/week](https://static.pepy.tech/badge/clawmetry/week)](https://clickpy.clickhouse.com/dashboard/clawmetry) [![PyPI version](https://img.shields.io/pypi/v/clawmetry?color=E5443A&label=version)](https://pypi.org/project/clawmetry/) [![GitHub stars](https://img.shields.io/github/stars/vivekchand/clawmetry?style=flat&color=E5443A)](https://github.com/vivekchand/clawmetry/stargazers) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) ClawMetry - #5 Product of the Day on Product Hunt **๋‹น์‹ ์˜ ์—์ด์ „ํŠธ๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์„ ์ง€์ผœ๋ณด์„ธ์š”.** **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** ์—์„œ ์—ด๋ฆฌ๋ฉฐ, ๊ทธ๊ฑธ๋กœ ๋์ž…๋‹ˆ๋‹ค. ![Flow Visualization](https://clawmetry.com/screenshots/flow.png) ## 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 โ€” ์‹ค์‹œ๊ฐ„ ์—์ด์ „ํŠธ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ ![Brain tab](https://raw.githubusercontent.com/vivekchand/clawmetry/main/screenshots/brain.png) ### ๐Ÿ“Š Overview โ€” ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ ์„ธ์…˜ ์š”์•ฝ ![Overview tab](https://raw.githubusercontent.com/vivekchand/clawmetry/main/screenshots/overview.png) ### โšก Flow โ€” ์‹ค์‹œ๊ฐ„ ๋„๊ตฌ ํ˜ธ์ถœ ํ”ผ๋“œ ![Flow tab](https://raw.githubusercontent.com/vivekchand/clawmetry/main/screenshots/flow.png) ### ๐Ÿ’ฐ Tokens โ€” ๋ชจ๋ธ ๋ฐ ์„ธ์…˜๋ณ„ ๋น„์šฉ ๋ถ„์„ ![Tokens tab](https://raw.githubusercontent.com/vivekchand/clawmetry/main/screenshots/tokens.png) ### ๐Ÿงฌ Memory โ€” ์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ ![Memory tab](https://raw.githubusercontent.com/vivekchand/clawmetry/main/screenshots/memory.png) ### ๐Ÿ” Security โ€” ๋ณด์•ˆ ํƒœ์„ธ ๋ฐ ๊ฐ์‚ฌ ๋กœ๊ทธ ![Security tab](https://raw.githubusercontent.com/vivekchand/clawmetry/main/screenshots/security.png) ### ๐Ÿšจ Alerts โ€” ์˜ˆ์‚ฐ ํ•œ๋„, ์˜ค๋ฅ˜์œจ ํŠธ๋ฆฌ๊ฑฐ, Slack / Discord / PagerDuty / Email๋กœ์˜ ์›นํ›… ![Alerts tab](https://raw.githubusercontent.com/vivekchand/clawmetry/main/screenshots/alerts.png) ### โœ‹ Approvals โ€” ์œ„ํ—˜ํ•œ ๋„๊ตฌ ํ˜ธ์ถœ์„ ์ˆ˜๋™ ์Šน์ธ ๋’ค์—์„œ ์ฐจ๋‹จ; ์ •์ฑ… ๊ธฐ๋ฐ˜ ๋ณดํ˜ธ ๊ทœ์น™ ![Approvals tab](https://raw.githubusercontent.com/vivekchand/clawmetry/main/screenshots/approvals.png) **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์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฉ๋‹ˆ๋‹ค. [![BrowserStack](https://img.shields.io/badge/tested%20with-BrowserStack-orange.svg)](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) ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ## ์Šคํƒ€ ํžˆ์Šคํ† ๋ฆฌ Star History Chart ## ๋ผ์ด์„ ์Šค MIT ---

๐Ÿฆž ๋‹น์‹ ์˜ ์—์ด์ „ํŠธ๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์„ ์ง€์ผœ๋ณด์„ธ์š”
@vivekchand๊ฐ€ ๋งŒ๋“ฆ ยท clawmetry.com ยท OpenClaw ์ƒํƒœ๊ณ„์˜ ์ผ๋ถ€