From f902a25ce9a939a063160a2f03d2b0a231a015ab Mon Sep 17 00:00:00 2001 From: vivekchand Date: Sat, 12 Sep 2026 22:20:49 +0200 Subject: [PATCH 1/2] feat(runtimes): register OpenExecutive as runtime 32 OSS half of the OpenExecutive runtime (adapter ships in clawmetry-pro): catalogue + loader spec, labels, landing path, session-prefix sets, probe, declared record (tokens/cost PARTIAL: specialist calls write no usage row), memory catalogue, resume hint, compaction coverage, and an explicit Guard verdict: one API server serves every conversation, so control is unsupported with a human reason rather than the generic string. Also adds muse_code to sync._RUNTIME_PREFIXES and app.js _CM_RT_PREFIXES, which it was missing from, and pins both with a guard. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_015D9pee1kCZ8NanY9bZirq4 --- .github/workflows/ci.yml | 1 + AGENTS.md | 2 +- ARCHITECTURE.md | 4 +- AUDIT.md | 2 +- CLAUDE.md | 2 +- FLYWHEEL.md | 6 +- README.md | 10 +- SUPPORTED_RUNTIMES.txt | 7 +- clawmetry/behaviour_signals.py | 2 +- clawmetry/cli.py | 4 +- clawmetry/context_coverage.py | 4 + clawmetry/entitlements.py | 7 + clawmetry/license.py | 2 +- clawmetry/local_store.py | 4 +- clawmetry/process_control.py | 16 ++ clawmetry/resume_hints.py | 7 + clawmetry/runtime_memory.py | 19 ++- clawmetry/runtime_probe.py | 11 ++ clawmetry/runtime_records.py | 12 +- clawmetry/static/js/app.js | 11 +- clawmetry/static/js/gw-setup.js | 2 +- clawmetry/sync.py | 8 + clawmetry/tool_risk.py | 2 +- dashboard.py | 2 +- desktop/onboarding.py | 2 +- docs/BRING_YOUR_OWN_AGENT.md | 2 +- docs/CONTEXT_BLOWOUT.md | 2 +- docs/ENTITLEMENTS.md | 2 +- docs/OVERHEAD.md | 2 +- docs/RUNTIME_SCREENSHOTS.md | 2 +- docs/blueprints/quality-cloud-parity.md | 2 +- docs/compatibility.md | 3 +- docs/i18n/ar/README.md | 2 +- docs/i18n/de/README.md | 2 +- docs/i18n/el/README.md | 6 +- docs/i18n/es-419/README.md | 8 +- docs/i18n/es/README.md | 8 +- docs/i18n/fr/README.md | 10 +- docs/i18n/hi/README.md | 2 +- docs/i18n/nl/README.md | 8 +- docs/i18n/pt-BR/README.md | 8 +- docs/i18n/pt-PT/README.md | 8 +- routes/attention.py | 1 + routes/device.py | 2 +- routes/entitlement/_endpoints_06.py | 2 +- routes/harness.py | 1 + routes/usage.py | 2 + setup.py | 2 +- ...est_advertised_runtimes_match_catalogue.py | 1 + tests/test_entitlements.py | 5 +- tests/test_openexecutive_runtime_wiring.py | 137 ++++++++++++++++++ 51 files changed, 303 insertions(+), 76 deletions(-) create mode 100644 tests/test_openexecutive_runtime_wiring.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a709adb8a9..f2b6a4a1c1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -728,6 +728,7 @@ jobs: tests/test_grok_bot_runtime_wiring.py \ tests/test_lovable_runtime_wiring.py \ tests/test_muse_code_runtime_wiring.py \ + tests/test_openexecutive_runtime_wiring.py \ tests/test_delegated_usage.py \ tests/test_local_query_api.py \ tests/test_rollup_session_runtime_backfill.py \ diff --git a/AGENTS.md b/AGENTS.md index 5e91eb3d4c..344d5c4745 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -5,7 +5,7 @@ > **Read [`FLYWHEEL.md`](./FLYWHEEL.md) first.** It is how you ship a change end to end in this repo (code → PR → green CI → `[RELEASE]` → PyPI → cloud → verified live) and the non-negotiable "done" bar. Then [`CLAUDE.md`](./CLAUDE.md) for the architecture deep-dive. This file is the short "what to do"; those two carry the detail. ## Quick context -ClawMetry is an open-source, real-time observability and governance layer for **31 AI agent runtimes** (OpenClaw, NemoClaw and Goose free in OSS; Claude Code, Codex, Cursor and 25 more with the Pro plugin). The catalogue is `entitlements.FREE_RUNTIMES | PAID_RUNTIMES`, exported to [`SUPPORTED_RUNTIMES.txt`](./SUPPORTED_RUNTIMES.txt) — the single file every marketing surface and sibling repo reads. Never hardcode the list or the count; regenerate with `python3 scripts/sync_runtime_count.py`. `pip install clawmetry && clawmetry` — zero config, observation by default. It's a Flask app with an embedded, no-build vanilla-JS frontend; a sync daemon ingests filesystem/gateway/OTLP data into a local **DuckDB** store, and the app reads from DuckDB to serve the UI. +ClawMetry is an open-source, real-time observability and governance layer for **32 AI agent runtimes** (OpenClaw, NemoClaw and Goose free in OSS; Claude Code, Codex, Cursor and 25 more with the Pro plugin). The catalogue is `entitlements.FREE_RUNTIMES | PAID_RUNTIMES`, exported to [`SUPPORTED_RUNTIMES.txt`](./SUPPORTED_RUNTIMES.txt) — the single file every marketing surface and sibling repo reads. Never hardcode the list or the count; regenerate with `python3 scripts/sync_runtime_count.py`. `pip install clawmetry && clawmetry` — zero config, observation by default. It's a Flask app with an embedded, no-build vanilla-JS frontend; a sync daemon ingests filesystem/gateway/OTLP data into a local **DuckDB** store, and the app reads from DuckDB to serve the UI. ## Where new code goes (open-core split) diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 2cb61b940e..1e9c88cd4b 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -14,7 +14,7 @@ ┌──────────────────────────────────────────────────────────────────────┐ │ Your Machine │ │ │ -│ 31 agent runtimes ClawMetry │ +│ 32 agent runtimes ClawMetry │ │ ┌──────────────────┐ ┌───────────────────────────────────┐ │ │ │ OpenClaw │ files │ Sync daemon (clawmetry sync) │ │ │ │ Claude Code │───────►│ • reads sessions, logs, hooks │ │ @@ -96,7 +96,7 @@ C4Context title C1: ClawMetry (open source) system context Person(dev, "Developer / Operator", "Runs AI agents; wants to see what they do, what they cost, and to stop one that has gone wrong") -System(clawmetry, "ClawMetry", "Local-first observability and governance for 31 agent runtimes. Reads what your agents already write; acts on them only through the five gated surfaces above.") +System(clawmetry, "ClawMetry", "Local-first observability and governance for 32 agent runtimes. Reads what your agents already write; acts on them only through the five gated surfaces above.") System_Ext(runtimes, "AI Agent Runtimes", "OpenClaw, NVIDIA NemoClaw and Goose are free in OSS; the other 27 (Claude Code, Codex, Cursor, Copilot, Gemini CLI, Hermes, Aider, opencode, ...) come with the optional Pro plugin") System_Ext(gateway, "OpenClaw Gateway", "WebSocket control plane (JSON-RPC, :18789) for live data + cron RPC") diff --git a/AUDIT.md b/AUDIT.md index 93514dded9..0b4970a7a5 100644 --- a/AUDIT.md +++ b/AUDIT.md @@ -18,7 +18,7 @@ ## Audit method (the only valid "pass") 1. Walk the trial path: hosted dashboard as a trial user, switch runtimes, click the tab → zero blank/wrong/error states + clean console. 2. For data/observability features: send a **real** message/turn and watch it travel channel → daemon → DuckDB → handler → rendered tab → (cloud) snapshot. -3. Verify across **all 31 runtimes**, not just OpenClaw (`/api/runtimes`). +3. Verify across **all 32 runtimes**, not just OpenClaw (`/api/runtimes`). 4. For device-facing slices: the 4-repo chain (pro adapter → OSS `_build_device_summary` → cloud wheel/relay → firmware render). --- diff --git a/CLAUDE.md b/CLAUDE.md index 133eda38b9..0261833b4d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -3,7 +3,7 @@ > **Read [`FLYWHEEL.md`](./FLYWHEEL.md) first.** It is how you ship a change end to end here (code → PR → green CI → `[RELEASE]` → PyPI → cloud → verified live) and the non-negotiable "done" bar. This file is the architecture reference; FLYWHEEL.md is the shipping loop. ## What is this? -ClawMetry is an open-source, real-time observability and governance layer for **31 AI agent runtimes** — [OpenClaw](https://github.com/openclaw/openclaw), NVIDIA NemoClaw and Goose free in OSS, the other 28 (Claude Code, Codex, Cursor, Copilot, Gemini CLI, Hermes, Aider, opencode, ...) with the optional Pro plugin. **Never type that number or that list anywhere new: [`SUPPORTED_RUNTIMES.txt`](./SUPPORTED_RUNTIMES.txt) is the generated single source every surface derives from** (`python3 scripts/sync_runtime_count.py`; `--check` fails CI on drift). `pip install clawmetry && clawmetry` — that's it. Zero config, observation by default. +ClawMetry is an open-source, real-time observability and governance layer for **32 AI agent runtimes** — [OpenClaw](https://github.com/openclaw/openclaw), NVIDIA NemoClaw and Goose free in OSS, the other 28 (Claude Code, Codex, Cursor, Copilot, Gemini CLI, Hermes, Aider, opencode, ...) with the optional Pro plugin. **Never type that number or that list anywhere new: [`SUPPORTED_RUNTIMES.txt`](./SUPPORTED_RUNTIMES.txt) is the generated single source every surface derives from** (`python3 scripts/sync_runtime_count.py`; `--check` fails CI on drift). `pip install clawmetry && clawmetry` — that's it. Zero config, observation by default. **Never hardcode the runtime count or the runtime list anywhere new.** The authoritative sources are `entitlements.FREE_RUNTIMES | entitlements.PAID_RUNTIMES` (the catalogue, and what every quoted number is derived from) and `sync._FAMILY_ADAPTER_SPECS` (what the daemon actually loads — a `clawmetry-pro` adapter is inert until it is named there). `scripts/sync_runtime_count.py` rewrites the number in prose and CI fails on drift; the same script checks the chat-channel count against `entitlements.ALL_CHANNELS`. diff --git a/FLYWHEEL.md b/FLYWHEEL.md index 76977cadd9..1597b96829 100644 --- a/FLYWHEEL.md +++ b/FLYWHEEL.md @@ -26,8 +26,8 @@ The north star: **don't stop at "code compiles." Stop at "verified working in pr > - **Before adding any poller/fetch, ask:** does this need to run on *every* tab? every *N* seconds? can it reuse an existing fetch or the snapshot? > - **Measure before shipping:** open the Network panel / Resource Timing and confirm no endpoint is fetched N× per cycle and no background poller fires off its own screen. "It works" is not enough — "it works without a request storm" is the bar. -> ## Multi-runtime: ClawMetry observes 31 agent runtimes, not just OpenClaw (non-negotiable) -> **ClawMetry is runtime-neutral. It observes 31 AI agent runtimes, not OpenClaw alone.** +> ## Multi-runtime: ClawMetry observes 32 agent runtimes, not just OpenClaw (non-negotiable) +> **ClawMetry is runtime-neutral. It observes 32 AI agent runtimes, not OpenClaw alone.** > **[`SUPPORTED_RUNTIMES.txt`](./SUPPORTED_RUNTIMES.txt) is the one list — do not type a second one.** > It is generated from `FREE_RUNTIMES | PAID_RUNTIMES` in `clawmetry/entitlements.py` and carries every > runtime's id, display label, free/paid tier and clawmetry.com path, plus the derived count and the @@ -47,7 +47,7 @@ The north star: **don't stop at "code compiles." Stop at "verified working in pr > clawmetry-pro's FLYWHEEL said 22, clawmetry-landing's said 21 and clawmetry-cloud's said 14 — four > hand-maintained lists, four different numbers, none of them visible to the others' CI. > - **User-facing copy and UI must never imply OpenClaw-only.** Framing like "designed for OpenClaw agents", "your OpenClaw machine", "No OpenClaw detected", or "Looking for OpenClaw activity" is a bug. Use runtime-neutral language ("your AI agent", "the machine your agent runs on") or name the runtimes ("OpenClaw, NVIDIA NemoClaw + 10 more runtimes", matching the homepage install card). Naming runtimes is public; pricing and tier internals stay private. -> - **Verify across all 31 runtimes, end to end.** Never ship a change verified only on OpenClaw. Use a `/workflow` to fan out a per-runtime E2E check: one agent per runtime that installs or configures it, runs a real turn, and asserts it lands correctly (in Brain by agent_type, in the right tab, with cost and tokens). "Works on OpenClaw" is not "works". +> - **Verify across all 32 runtimes, end to end.** Never ship a change verified only on OpenClaw. Use a `/workflow` to fan out a per-runtime E2E check: one agent per runtime that installs or configures it, runs a real turn, and asserts it lands correctly (in Brain by agent_type, in the right tab, with cost and tokens). "Works on OpenClaw" is not "works". > Burned 2026-06-01: the docs FAQ said "ClawMetry is designed for OpenClaw agents" and the cloud empty-states plus the radar assumed OpenClaw-only. Many surfaces still need this sweep; when you touch a screen, fix its runtime framing. --- diff --git a/README.md b/README.md index 11abb7ae42..94fa829f53 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ reads the session files your coding agents already write, and puts the timeline, the tool calls and whatever token and cost data the runtime exposes into one view — so you can tell a long run that is working from one that is stuck. -Works with **31 AI agent runtimes** — Claude Code, OpenAI Codex, Hermes, OpenClaw & 27 more. One dashboard for your whole agent fleet. ([the full list](SUPPORTED_RUNTIMES.txt), generated from the catalogue.) +Works with **32 AI agent runtimes** — Claude Code, OpenAI Codex, Hermes, OpenClaw & 28 more. One dashboard for your whole agent fleet. ([the full list](SUPPORTED_RUNTIMES.txt), generated from the catalogue.) > 🌐 **Read this in:** [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) · [more →](docs/i18n/) @@ -44,11 +44,11 @@ says which, per runtime), and observing an action is not the same as being able to block it ([which controls are real, per runtime](docs/APPROVALS.md)). -## Works with 31 agent runtimes +## Works with 32 agent runtimes **Free in the open source app:** 🦞 **[OpenClaw](https://clawmetry.com/runtimes/openclaw)** · 🟩 **[NVIDIA NemoClaw](https://clawmetry.com/nemoclaw)** · 🪿 **[Goose](https://clawmetry.com/runtimes/goose)** -**On a paid plan:** ◆ **[Claude Code](https://clawmetry.com/runtimes/claude-code)** · **[Cursor](https://clawmetry.com/runtimes/cursor)** · 🐙 **[GitHub Copilot](https://clawmetry.com/runtimes/copilot)** · ⬡ **[OpenAI Codex](https://clawmetry.com/runtimes/codex)** · ♊ **[Gemini CLI](https://clawmetry.com/runtimes/gemini-cli)** · 💗 **[Lovable](https://clawmetry.com/runtimes/lovable)** · ⠕ **[Replit Agent](https://clawmetry.com/runtimes/replit)** · 🖇 **[Cline](https://clawmetry.com/runtimes/cline)** · 🙌 **[OpenHands](https://clawmetry.com/runtimes/openhands)** · 🧑‍💼 **[OpenWorker](https://clawmetry.com/runtimes/openworker)** · 🎭 **[Muse Code](https://clawmetry.com/runtimes/muse-code)** · **[opencode](https://clawmetry.com/runtimes/opencode)** · **[Aider](https://clawmetry.com/runtimes/aider)** · 🔗 **[n8n](https://clawmetry.com/runtimes/n8n)** · ◈ **[Qwen Code](https://clawmetry.com/runtimes/qwen-code)** · 🅳 **[Devin](https://clawmetry.com/runtimes/devin)** · 🪐 **[Antigravity](https://clawmetry.com/runtimes/antigravity)** · **[Grok Build](https://clawmetry.com/runtimes/grok)** · 🤖 **[Grok Bot](https://clawmetry.com/runtimes/grok-bot)** · ⚡ **[Hermes](https://clawmetry.com/runtimes/hermes)** · **[Pi](https://clawmetry.com/runtimes/pi)** · **[Deep Agents](https://clawmetry.com/runtimes/deep-agents)** · 🌙 **[Kimi CLI](https://clawmetry.com/runtimes/kimi)** · 🐋 **[DeepSeek Harness](https://clawmetry.com/runtimes/deepseek-harness)** · 🦾 **[Exo](https://clawmetry.com/runtimes/exo)** · **[NanoClaw](https://clawmetry.com/runtimes/nanoclaw)** · **[PicoClaw](https://clawmetry.com/runtimes/picoclaw)** · **[QM](https://clawmetry.com/runtimes/qm)** +**On a paid plan:** ◆ **[Claude Code](https://clawmetry.com/runtimes/claude-code)** · **[Cursor](https://clawmetry.com/runtimes/cursor)** · 🐙 **[GitHub Copilot](https://clawmetry.com/runtimes/copilot)** · ⬡ **[OpenAI Codex](https://clawmetry.com/runtimes/codex)** · ♊ **[Gemini CLI](https://clawmetry.com/runtimes/gemini-cli)** · 💗 **[Lovable](https://clawmetry.com/runtimes/lovable)** · ⠕ **[Replit Agent](https://clawmetry.com/runtimes/replit)** · 🖇 **[Cline](https://clawmetry.com/runtimes/cline)** · 🙌 **[OpenHands](https://clawmetry.com/runtimes/openhands)** · 🧑‍💼 **[OpenWorker](https://clawmetry.com/runtimes/openworker)** · 🎭 **[Muse Code](https://clawmetry.com/runtimes/muse-code)** · 🏛️ **[OpenExecutive](https://clawmetry.com/runtimes/openexecutive)** · **[opencode](https://clawmetry.com/runtimes/opencode)** · **[Aider](https://clawmetry.com/runtimes/aider)** · 🔗 **[n8n](https://clawmetry.com/runtimes/n8n)** · ◈ **[Qwen Code](https://clawmetry.com/runtimes/qwen-code)** · 🅳 **[Devin](https://clawmetry.com/runtimes/devin)** · 🪐 **[Antigravity](https://clawmetry.com/runtimes/antigravity)** · **[Grok Build](https://clawmetry.com/runtimes/grok)** · 🤖 **[Grok Bot](https://clawmetry.com/runtimes/grok-bot)** · ⚡ **[Hermes](https://clawmetry.com/runtimes/hermes)** · **[Pi](https://clawmetry.com/runtimes/pi)** · **[Deep Agents](https://clawmetry.com/runtimes/deep-agents)** · 🌙 **[Kimi CLI](https://clawmetry.com/runtimes/kimi)** · 🐋 **[DeepSeek Harness](https://clawmetry.com/runtimes/deepseek-harness)** · 🦾 **[Exo](https://clawmetry.com/runtimes/exo)** · **[NanoClaw](https://clawmetry.com/runtimes/nanoclaw)** · **[PicoClaw](https://clawmetry.com/runtimes/picoclaw)** · **[QM](https://clawmetry.com/runtimes/qm)** Every runtime gets the same dashboard. Run several at once and the header switcher re-scopes every tab to one of them. @@ -77,7 +77,7 @@ Two questions worth answering before you trust any agent-comparison tool. A utilization percentage is only as honest as what it divides by. ClawMetry sizes the window per provider from [a table you can read and PR](clawmetry/context_windows.py), covering Anthropic, OpenAI, Google, xAI, -DeepSeek, Kimi, Qwen, Mistral, Llama and GLM. It does not measure all 31 +DeepSeek, Kimi, Qwen, Mistral, Llama and GLM. It does not measure all 32 runtimes with one vendor's ruler. That matters: a 300K GPT-5 turn scored against Anthropic's 200K reads ">100%, blown" when it is really at 75% of GPT-5's 400K. The same ruler hides a genuinely overflowed 130K DeepSeek turn @@ -97,7 +97,7 @@ ClawMetry can only see compaction events on some runtimes. So | Path | Added to your agent | Default? | |---|---|---| -| Session-file tailing (all 31 runtimes) | **0**. Separate process, no ClawMetry code in your agent | on | +| Session-file tailing (all 32 runtimes) | **0**. Separate process, no ClawMetry code in your agent | on | | HTTP interceptor (`CLAWMETRY_INTERCEPT=1`) | **+0.44 ms** per LLM call, or 0.009% of a 5s call | off | | Pre-tool hook gate (warm cache) | **+44 ms** per gated tool call, over a 36 ms interpreter floor | off | | Enforcement proxy | **+9.7 ms** per LLM call | off | diff --git a/SUPPORTED_RUNTIMES.txt b/SUPPORTED_RUNTIMES.txt index e0de072328..6b9b617eb2 100644 --- a/SUPPORTED_RUNTIMES.txt +++ b/SUPPORTED_RUNTIMES.txt @@ -23,10 +23,10 @@ # (read by the closed-source clawmetry-pro companion). 'landing_path' # is relative to https://clawmetry.com. -COUNT = 31 +COUNT = 32 FREE_COUNT = 3 -PAID_COUNT = 28 -BLURB = See your agent think. Zero-config observability & governance for 31 AI agent runtimes: Claude Code, OpenAI Codex, Hermes, OpenClaw & 27 more. Live token costs, sessions, tool calls, crons. +PAID_COUNT = 29 +BLURB = See your agent think. Zero-config observability & governance for 32 AI agent runtimes: Claude Code, OpenAI Codex, Hermes, OpenClaw & 28 more. Live token costs, sessions, tool calls, crons. goose Goose free /runtimes/goose nemoclaw NemoClaw free /nemoclaw @@ -52,6 +52,7 @@ muse_code Muse Code paid /runtimes/muse-code n8n n8n paid /runtimes/n8n nanoclaw NanoClaw paid /runtimes/nanoclaw opencode opencode paid /runtimes/opencode +openexecutive OpenExecutive paid /runtimes/openexecutive openhands OpenHands paid /runtimes/openhands openworker OpenWorker paid /runtimes/openworker pi Pi paid /runtimes/pi diff --git a/clawmetry/behaviour_signals.py b/clawmetry/behaviour_signals.py index 4cc9a48b3e..4febf1ba90 100644 --- a/clawmetry/behaviour_signals.py +++ b/clawmetry/behaviour_signals.py @@ -881,7 +881,7 @@ def _in_prev(d: int) -> bool: "picoclaw": "PicoClaw", "nanoclaw": "NanoClaw", "antigravity": "Antigravity", "kimi": "Kimi", "n8n": "n8n", "openhands": "OpenHands", "deepagents": "DeepAgents", "lovable": "Lovable", "replit": "Replit", "openworker": "OpenWorker", - "muse_code": "Muse Code", + "muse_code": "Muse Code", "openexecutive": "OpenExecutive", } diff --git a/clawmetry/cli.py b/clawmetry/cli.py index 645c671cb3..f4f9e40e0a 100644 --- a/clawmetry/cli.py +++ b/clawmetry/cli.py @@ -1334,7 +1334,7 @@ def _input(prompt): from clawmetry.license import auto_provision_pro _pro_installed, _pro_msg = auto_provision_pro(api_key, node_id) if _pro_installed: - print(" Pro adapters installed - all 31 runtimes available.") + print(" Pro adapters installed - all 32 runtimes available.") elif _pro_msg: # Entitled but the wheel could not be installed right now; surface a # quiet hint without alarming the user (connect still succeeded). @@ -4239,7 +4239,7 @@ def _input(prompt): print() print(f" {BOLD('Plans')} {DIM('(same either way; each tier includes the one before):')}") print(f" {DIM('Free $0 watch OpenClaw + NVIDIA NemoClaw, forever')}") - print(f" {DIM('Starter $9/node/mo everything in Free + observability for all 31 runtimes')}") + print(f" {DIM('Starter $9/node/mo everything in Free + observability for all 32 runtimes')}") print(f" {DIM('Pro $19/node/mo everything in Starter + governance (alerts, approvals, evals)')}") print() print(f" {BOLD('How do you want to run ClawMetry?')}") diff --git a/clawmetry/context_coverage.py b/clawmetry/context_coverage.py index 4d92744a00..bad8b8e000 100644 --- a/clawmetry/context_coverage.py +++ b/clawmetry/context_coverage.py @@ -103,6 +103,10 @@ # compactions, ran clean" for a session that has compacted, which is the # exact failure this module exists to prevent. Delist once the adapter # emits a compaction event, and only once the WHEEL carrying that ships. + # OpenExecutive keeps only the last N turns in its short-term window + # (memory/short_term.py) and records nothing when older turns fall out, + # so a zero here is absence of evidence, not a clean run. + "openexecutive", "openworker", # Grok Bot compacts (if at all) on its cloud VM; the desktop client # store has no compaction entry kind, so absence proves nothing. diff --git a/clawmetry/entitlements.py b/clawmetry/entitlements.py index a53ce0e93a..9edbee785f 100644 --- a/clawmetry/entitlements.py +++ b/clawmetry/entitlements.py @@ -133,6 +133,11 @@ # terminal coding agent on Muse Spark. NOT the consumer Muse personal # agent, which runs wholly inside Meta's cloud VM and is unobservable. "muse_code", + # OpenExecutive (github.com/SenteLabsAI/OpenExecutive) -- Sente Labs' + # AI executive team: one Executive persona routing to specialist + # agents, answering over web chat and chat/email channels, with a + # scheduler that sends messages on its own later. + "openexecutive", } ) @@ -182,6 +187,7 @@ "lovable": "Lovable", "replit": "Replit Agent", "muse_code": "Muse Code", + "openexecutive": "OpenExecutive", } @@ -225,6 +231,7 @@ "lovable": "/runtimes/lovable", "replit": "/runtimes/replit", "muse_code": "/runtimes/muse-code", + "openexecutive": "/runtimes/openexecutive", } diff --git a/clawmetry/license.py b/clawmetry/license.py index 6732cc8d2a..8bfb013e1f 100644 --- a/clawmetry/license.py +++ b/clawmetry/license.py @@ -964,7 +964,7 @@ def refresh_pro_from_license(node_id: str | None = None) -> tuple[bool, str]: def auto_provision_pro(api_key: str, node_id: str | None = None) -> tuple[bool, str]: """CLOUD ACCOUNT path, called by ``clawmetry connect`` after the cm_ key is saved. Ask the cloud whether this account is ENTITLED to clawmetry-pro and, - if so, download+install the wheel so the node gets all 31 runtimes. + if so, download+install the wheel so the node gets all 32 runtimes. HARD RULES enforced here: * Pro is installed ONLY for an entitled plan (Starter/Pro/Trial/ diff --git a/clawmetry/local_store.py b/clawmetry/local_store.py index a2be5aa78c..254bd65fd1 100644 --- a/clawmetry/local_store.py +++ b/clawmetry/local_store.py @@ -20023,7 +20023,7 @@ def _parse(s: str): "pi", "deepagents", "n8n", "antigravity", "copilot", "grok", "qm", "deepseek_harness", "exo", "kimi", "devin", "gemini_cli", "cline", "openhands", "openworker", "grok_bot", "lovable", "replit", - "muse_code", + "muse_code", "openexecutive", ) # Epoch-ms of the outcome-classifier fix (2026-08-15). Any failure label @@ -20244,7 +20244,7 @@ def _sql_in_clause(values: tuple[str, ...]) -> str: # call sites (and tests) have always reached for it via ``local_store``. # # The old implementation knew exactly two numbers, both Anthropic's, and -# measured all 31 runtimes with that ruler: a 300K GPT-5 turn read as ">100% +# measured all 32 runtimes with that ruler: a 300K GPT-5 turn read as ">100% # blown" (GPT-5 is 400K, so it was at 75%), and a genuinely blown 130K # DeepSeek turn read as a comfortable 65%. See that module's docstring. from clawmetry.context_windows import ( # noqa: E402 (kept near its callers) diff --git a/clawmetry/process_control.py b/clawmetry/process_control.py index a1b9b6be36..a748a6eda4 100644 --- a/clawmetry/process_control.py +++ b/clawmetry/process_control.py @@ -315,6 +315,12 @@ def runtime_control_support(runtime: str, session_id: str = "", "offered and inert"), "platform": plat} + if rt in SHARED_PROCESS_RUNTIMES: + return {"controllable": False, "runtime": rt, "actions": [], + "state": "unsupported", + "reason": SHARED_PROCESS_RUNTIMES[rt], + "platform": plat} + return {"controllable": False, "runtime": rt, "actions": [], "state": "unsupported", "reason": f"No signal support for {rt or 'unknown runtime'}", @@ -397,6 +403,16 @@ def runtime_control_support(runtime: str, session_id: str = "", ) UNSUPPORTED_RUNTIMES = frozenset({"cursor"}) +# Runtimes where ONE process serves every session, so no per-session signal +# exists and signalling the process would halt all of them at once. Each maps +# to the sentence the Guard tab shows beside the disabled controls. +SHARED_PROCESS_RUNTIMES = { + "openexecutive": ("One OpenExecutive API server handles every conversation, " + "every chat channel and the scheduler, so there is no " + "separate process for this conversation. Pausing or " + "stopping the server would halt all of them."), +} + # Runtimes that almost certainly CAN be signalled but have no resolver yet, so # we do not know which pid belongs to a given session. Kept apart from # UNSUPPORTED_RUNTIMES because the two are different claims and the Guard tab diff --git a/clawmetry/resume_hints.py b/clawmetry/resume_hints.py index 47478212ff..cb3ddf0dca 100644 --- a/clawmetry/resume_hints.py +++ b/clawmetry/resume_hints.py @@ -171,6 +171,13 @@ "argument starts a new one in the current workspace.", "source": "clawmetry adapter: MSP session/resume over `muse serve`", }, + "openexecutive": { + "command": "", + "note": "OpenExecutive has no resume command. Reopen the conversation " + "from the Sessions sidebar in the OpenExecutive web UI; a Slack " + "or email conversation continues in its own thread.", + "source": "clawmetry adapter: episodic_memory.db sessions + audit_log", + }, "openworker": { "command": "", "note": "OpenWorker is a desktop app. Reopen the conversation in the " diff --git a/clawmetry/runtime_memory.py b/clawmetry/runtime_memory.py index 3c860b779c..1322168de7 100644 --- a/clawmetry/runtime_memory.py +++ b/clawmetry/runtime_memory.py @@ -1262,6 +1262,23 @@ def _catalog() -> list: ), )) + # ── OpenExecutive (github.com/SenteLabsAI/OpenExecutive) ──────── + # Standing context is the onboarding company profile (profile.yaml) and + # the uploaded company docs, both under packages/core/company/ in a + # clone; the curated knowledge base is Markdown under knowledge/. MCP + # servers are declared in company/mcp_servers.json. + oe_company = os.path.join(ws, "packages", "core", "company") + catalog.append(RuntimeCatalogEntry( + id="openexecutive", label="OpenExecutive", roots=( + RootSpec("memory", os.path.join(oe_company, "profile.yaml"), + label="Company profile", scope="project"), + RootSpec("memory", os.path.join(ws, "knowledge"), + ("*.md", "*/*.md"), "Knowledge base", "project"), + RootSpec("mcp", os.path.join(oe_company, "mcp_servers.json"), + label="mcp_servers.json", scope="project"), + ), + )) + # ── Replit Agent (replit.com) ─────────────────────────────────── # Instructions/memory are replit.md at the workspace root — the agent # both reads it as standing guidance and rewrites it as project docs. @@ -1703,7 +1720,7 @@ def list_all_files(category: Optional[str] = None, Backs the "All runtimes" scope of the Memory / Skills browser. Only groups that actually exist on disk are returned — the per-runtime view is where we spell out the paths we looked at and came up empty, - because listing every absent root for 31 runtimes would be a wall of + because listing every absent root for 32 runtimes would be a wall of noise rather than an answer. ``allowed``, when given, restricts the sweep to that set of runtime diff --git a/clawmetry/runtime_probe.py b/clawmetry/runtime_probe.py index 639cae35e4..c3823653ba 100644 --- a/clawmetry/runtime_probe.py +++ b/clawmetry/runtime_probe.py @@ -214,6 +214,17 @@ def found(self) -> bool: "~/.config/muse/settings.json", "~/.config/muse/auth.json"), env="CLAWMETRY_MUSE_HOME"), + # OpenExecutive writes one SQLite store wherever its API process runs + # (EPISODIC_DB_PATH, default ./episodic_memory.db): packages/core/ in a + # clone under `make dev`, /data/ inside the Docker image. There is no + # fixed home, so the probe globs the clone locations the adapter scans. + RuntimeProbe("openexecutive", "OpenExecutive", + ("~/*/packages/core/episodic_memory.db", + "~/projects/*/packages/core/episodic_memory.db", + "~/src/*/packages/core/episodic_memory.db", + "~/code/*/packages/core/episodic_memory.db", + "/data/episodic_memory.db"), + env="CLAWMETRY_OPENEXECUTIVE_DB"), RuntimeProbe("openworker", "OpenWorker", ("~/.config/coworker/coworker.db", "~/.config/coworker/conversations", diff --git a/clawmetry/runtime_records.py b/clawmetry/runtime_records.py index 26b10928b9..1cd083fe55 100644 --- a/clawmetry/runtime_records.py +++ b/clawmetry/runtime_records.py @@ -53,7 +53,7 @@ # Signals a surface can ask about. Deliberately short: these are the three the # broken-looking panels actually depend on. Adding a fourth means being able to -# answer it for all 31 runtimes, which is the bar that keeps this table true. +# answer it for all 32 runtimes, which is the bar that keeps this table true. SIGNALS = ("tokens", "cost", "model") @@ -255,6 +255,16 @@ def _e(tokens, cost, model, evidence, *, note="", doc_label=None, doc_file="docs "carries token columns; those meter the Auto-Approve reviewer, " "not the agent, and are deliberately excluded from session cost.", ), + "openexecutive": _e( + PARTIAL, PARTIAL, ON_DISK, + "Usage rows cover the Executive's own model calls, not the specialist agents'", + note="OpenExecutive writes one audit row per model call the Executive " + "makes, with the token split, the model and, when routed through " + "OpenRouter, the real charge; otherwise cost is derived from the " + "pricing table. Its specialist agents call the provider directly " + "and write no usage row, so their tokens and dollars are not on " + "disk. A session total is a floor, not the full bill.", + ), "lovable": _e( UNAVAILABLE, UNAVAILABLE, UNAVAILABLE, "No tokens, model or cost", diff --git a/clawmetry/static/js/app.js b/clawmetry/static/js/app.js index b8568ea297..5b600dcf65 100644 --- a/clawmetry/static/js/app.js +++ b/clawmetry/static/js/app.js @@ -5856,7 +5856,7 @@ var _Q_RUNTIME_NAMES = { kimi: 'Kimi CLI', devin: 'Devin', gemini_cli: 'Gemini CLI', cline: 'Cline', openhands: 'OpenHands', openworker: 'OpenWorker', lovable: 'Lovable', replit: 'Replit Agent', - muse_code: 'Muse Code', + muse_code: 'Muse Code', openexecutive: 'OpenExecutive', }; function _qRuntimeLabel(id) { return _Q_RUNTIME_NAMES[id] || id; @@ -12120,7 +12120,7 @@ var _CM_RT_LABEL = { deepseek_harness: 'DeepSeek Harness', exo: 'Exo', kimi: 'Kimi CLI', devin: 'Devin', gemini_cli: 'Gemini CLI', cline: 'Cline', openhands: 'OpenHands', openworker: 'OpenWorker', lovable: 'Lovable', replit: 'Replit Agent', - muse_code: 'Muse Code', + muse_code: 'Muse Code', openexecutive: 'OpenExecutive', }; // The CLOSED session-prefix runtimes (the only keys that can ride a session_id // prefix). Foreign OTLP / OpenLLMetry apps are NOT in here — they have no @@ -12133,6 +12133,7 @@ var _CM_RT_PREFIXES = { kimi: 1, devin: 1, gemini_cli: 1, cline: 1, openhands: 1, openworker: 1, grok_bot: 1, lovable: 1, replit: 1, + muse_code: 1, openexecutive: 1, }; // Dynamic registry of foreign OTLP/OpenLLMetry apps surfaced by the daemon // (runtimeSummary/agentInventory carry `otlp:true` + a `displayName`). These are @@ -29221,7 +29222,7 @@ function clearSwimlaneLanes() { } // One-click preset: most-recent session per distinct runtime (cap 4). This is -// the headline demo path — the 31 runtimes side by side. Respects the global +// the headline demo path — the 32 runtimes side by side. Respects the global // runtime switcher: when scoped to one runtime, only that runtime is picked. function swimlanePresetPerRuntime() { var rtFilter = (typeof _cmRuntimeFilter === 'function') ? _cmRuntimeFilter() : 'all'; @@ -32558,7 +32559,7 @@ async function renderFirstRunReport(overview) { // at: it probes local runtime paths and prescribes `clawmetry connect` / // `clawmetry --sample`. On a hosted node page the probe runs inside the // cloud container, which has no runtimes and never will, so it reported - // "No supported runtime was detected ... checked 31 runtimes" about the + // "No supported runtime was detected ... checked 32 runtimes" about the // server while the reader was looking at their own laptop's sessions. // A local-machine diagnostic has no honest answer to give here. if (window.CLOUD_MODE) { el.style.display = 'none'; return; } @@ -32619,7 +32620,7 @@ async function renderFirstRunReport(overview) { // How widely we looked, and where to get the detail. // - // This used to render the expanded probe path for all 31 runtimes. Two + // This used to render the expanded probe path for all 32 runtimes. Two // problems with putting that on a screen. It carries the account name // (`/Users//...`) into every screenshot, screen-share and pasted // issue of an empty dashboard, which is the rule the detector surface diff --git a/clawmetry/static/js/gw-setup.js b/clawmetry/static/js/gw-setup.js index 6682a2fb50..bc76d3d32a 100644 --- a/clawmetry/static/js/gw-setup.js +++ b/clawmetry/static/js/gw-setup.js @@ -1,7 +1,7 @@ // Gateway connection — headless only. Every manual gateway-token UI is gone: // the auto-popping "ClawMetry Setup" wizard (v0.1-era UX from when ClawMetry // only watched the OpenClaw gateway) and the opt-in Developer > Gateway form -// that replaced it. The product detects 31+ runtimes automatically and the +// that replaced it. The product detects 32+ runtimes automatically and the // gateway token itself is auto-detected server-side from // ~/.openclaw/openclaw.json, so there is nothing left for a user to fill in. // What remains keeps an already-configured connection alive: a ?token=XXX URL diff --git a/clawmetry/sync.py b/clawmetry/sync.py index 4721a227c6..9d9bfdf5d0 100644 --- a/clawmetry/sync.py +++ b/clawmetry/sync.py @@ -8082,6 +8082,7 @@ def _build_node_meta() -> dict: "lovable": "Lovable", "replit": "Replit Agent", "muse_code": "Muse Code", + "openexecutive": "OpenExecutive", } @@ -14913,6 +14914,11 @@ def _build_machine_info(): # inside the workspace shell (`pip install clawmetry` in a Repl) or over # a local clone/export pointed at via CLAWMETRY_REPLIT_ROOTS. ("clawmetry_pro.adapters.replit", "ReplitAdapter"), + # OpenExecutive (github.com/SenteLabsAI/OpenExecutive) -- an AI executive + # team on FastAPI. One SQLite store (episodic_memory.db) holds sessions, + # the audit log with per-call usage, and the outbound sends its scheduler + # has queued. The store has no fixed home, so the adapter discovers it. + ("clawmetry_pro.adapters.openexecutive", "OpenExecutiveAdapter"), ) @@ -16753,6 +16759,8 @@ def _build_model_attribution(): "openworker", "lovable", "replit", + "muse_code", + "openexecutive", }) diff --git a/clawmetry/tool_risk.py b/clawmetry/tool_risk.py index 41cd6bcf6d..7098bb5fb2 100644 --- a/clawmetry/tool_risk.py +++ b/clawmetry/tool_risk.py @@ -6,7 +6,7 @@ Why call-level: definition-level risk (Matimo-style "POST = medium") can't tell ``ls`` from ``rm -rf /`` — both arrive through the same shell tool on -every harness. ClawMetry sees the arguments for all 31+ runtimes at the +every harness. ClawMetry sees the arguments for all 32+ runtimes at the same normalisation point the approvals watcher uses, so the classifier runs on (canonical category, extracted command, raw args) and the SAME verdict applies to a Claude Code ``Bash``, a Codex ``shell``, a Cursor diff --git a/dashboard.py b/dashboard.py index da2bd6e62c..5600d343f0 100644 --- a/dashboard.py +++ b/dashboard.py @@ -12005,7 +12005,7 @@ def _start_otlp_compat_listener(host=None, port=None, debug=False): ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐ │ 🤖 │ READS FILES │ 🦞 │ SHOWS YOU │ 📊 │ │ Your AI agents │ ──────────-> │ │ ──────────-> │ │ - │ Any of 31 runtimes │ │ ClawMetry │ │ Your browser │ + │ Any of 32 runtimes │ │ ClawMetry │ │ Your browser │ │ │ │ Parses logs + │ │ localhost:{port} │ │ Running normally. │ │ sessions. │ │ Live dashboard │ │ Nothing changes. │ │ Serves dashboard. │ │ │ diff --git a/desktop/onboarding.py b/desktop/onboarding.py index 3c2f988fdb..00952c260d 100644 --- a/desktop/onboarding.py +++ b/desktop/onboarding.py @@ -594,7 +594,7 @@ def apply_cm_key( "eyebrow": "You just installed ClawMetry.", "title": "Every AI agent on this machine, in one dashboard.", "body": ( - "Watch spend, sessions, and errors across 31+ runtimes in real time. " + "Watch spend, sessions, and errors across 32+ runtimes in real time. " "Cost breakdowns per model, per skill, per session. Loop detection. " "Budget alerts. All read-only, all local, all yours." ), diff --git a/docs/BRING_YOUR_OWN_AGENT.md b/docs/BRING_YOUR_OWN_AGENT.md index ad831bccea..adf16270a4 100644 --- a/docs/BRING_YOUR_OWN_AGENT.md +++ b/docs/BRING_YOUR_OWN_AGENT.md @@ -1,6 +1,6 @@ # Bring your own agent: OpenTelemetry ingestion end to end -ClawMetry ships adapters for 31 agent runtimes with local footprints (Claude Code, Codex, Cursor, OpenClaw and friends). This guide covers everything else: **any agent that speaks OpenTelemetry**, including fleets you do not run on your laptop. +ClawMetry ships adapters for 32 agent runtimes with local footprints (Claude Code, Codex, Cursor, OpenClaw and friends). This guide covers everything else: **any agent that speaks OpenTelemetry**, including fleets you do not run on your laptop. Who this is for: diff --git a/docs/CONTEXT_BLOWOUT.md b/docs/CONTEXT_BLOWOUT.md index 05545de1b9..cc3681e0b6 100644 --- a/docs/CONTEXT_BLOWOUT.md +++ b/docs/CONTEXT_BLOWOUT.md @@ -29,7 +29,7 @@ burns money without making progress. A utilization percentage is only as honest as what it divides by. Until recently ClawMetry's resolver knew exactly two numbers, both Anthropic's: -200K, and 1M for the `[1m]` variants. It used them for all 31 runtimes. +200K, and 1M for the `[1m]` variants. It used them for all 32 runtimes. The failures were symmetric, and both looked plausible on screen: - a **300K-token GPT-5 turn** rendered as *">100%, blown"*. GPT-5's window is diff --git a/docs/ENTITLEMENTS.md b/docs/ENTITLEMENTS.md index 1e4b21fbb3..a5e0b6599f 100644 --- a/docs/ENTITLEMENTS.md +++ b/docs/ENTITLEMENTS.md @@ -93,7 +93,7 @@ below live here so the free UI can render locked rows with an accurate `claude_code`, `codex`, `cursor`, `aider`, `opencode`, `qwen_code`, `hermes`, `picoclaw`, `nanoclaw`, `pi`, `deepagents`, `n8n`, `antigravity`, `copilot`, `grok`, `grok_bot`, `qm`, `deepseek_harness`, `exo`, -`kimi`, `devin`, `gemini_cli`, `cline`, `openhands`, `openworker`, `lovable`. +`kimi`, `devin`, `gemini_cli`, `cline`, `openhands`, `openworker`, `lovable`, `openexecutive`. **Additional features**, split across three tiers: diff --git a/docs/OVERHEAD.md b/docs/OVERHEAD.md index 2cf72824ed..af7918ae6e 100644 --- a/docs/OVERHEAD.md +++ b/docs/OVERHEAD.md @@ -15,7 +15,7 @@ | Path | Added latency to your agent | Default? | |------|-----------------------------|----------| -| Session-file tailing (how ClawMetry observes all 31 runtimes) | **0**. Separate process, no ClawMetry code in the agent | **on** | +| Session-file tailing (how ClawMetry observes all 32 runtimes) | **0**. Separate process, no ClawMetry code in the agent | **on** | | HTTP interceptor (`CLAWMETRY_INTERCEPT=1`) | **+0.44 ms** per LLM call (wall p50), +0.36 ms CPU | off | | Pre-tool hook gate, warm cache | **+44 ms** per gated tool call, over a 36 ms interpreter floor | off | | Pre-tool hook gate, 60s cache refresh | **+189 ms** on the one call that trips it, network-bound | off | diff --git a/docs/RUNTIME_SCREENSHOTS.md b/docs/RUNTIME_SCREENSHOTS.md index f88841cfcb..ee2cb9173f 100644 --- a/docs/RUNTIME_SCREENSHOTS.md +++ b/docs/RUNTIME_SCREENSHOTS.md @@ -1,6 +1,6 @@ # ClawMetry × your runtime — screenshot gallery -ClawMetry auto-detects 31 agent runtimes with zero config. This gallery shows the dashboard observing **real sessions** from each supported runtime: the runtime switcher scopes every tab (sessions, transcripts, cost, activity) to the agent you pick. +ClawMetry auto-detects 32 agent runtimes with zero config. This gallery shows the dashboard observing **real sessions** from each supported runtime: the runtime switcher scopes every tab (sessions, transcripts, cost, activity) to the agent you pick. > Every screenshot below is the real dashboard rendering a real ClawMetry instance. The 2026-08 refresh: each runtime's store was populated with a showcase project written in that runtime's **native on-disk session format** (schema-verified against the production adapters — 12 sessions per runtime, each building an app for a social cause: clean water, safer roads, food security, and more), plus live Claude Code and OpenClaw sessions captured on a real machine. Alerts, approvals, and quality data come from the product's own evaluators running against that store. diff --git a/docs/blueprints/quality-cloud-parity.md b/docs/blueprints/quality-cloud-parity.md index 0c74e54e3c..cf584352e1 100644 --- a/docs/blueprints/quality-cloud-parity.md +++ b/docs/blueprints/quality-cloud-parity.md @@ -185,7 +185,7 @@ touching function signatures. ### ADR-003: Calibration thresholds hoisted to slice root, not per-card Context: the first version of the snapshot slice embedded the full calibration -thresholds in every per-runtime card. At 31 runtimes the thresholds were +thresholds in every per-runtime card. At 32 runtimes the thresholds were repeated 14 times; each copy was byte-identical. The thresholds made up roughly a quarter of the slice by size. diff --git a/docs/compatibility.md b/docs/compatibility.md index 644d588cfc..a8109f7944 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -1,6 +1,6 @@ # Runtime / Agent Compatibility -ClawMetry observes 31 AI-agent runtimes. Each runtime that +ClawMetry observes 32 AI-agent runtimes. Each runtime that isn't OpenClaw ships a dedicated reader adapter (`clawmetry/adapters/`) that translates its native session format into ClawMetry's unified Session/Event shapes; the daemon then ingests them into the same local DuckDB store and cloud @@ -48,6 +48,7 @@ See [`NUMBAT.md`](NUMBAT.md). | Replit Agent | Beta adapter | One `transcript.jsonl` journal per session under `/.local/state/replit/agent/transcript//` — the agent loop runs on Replit's infrastructure but serializes into the Repl workspace, so the daemon reads it from inside the Repl (`pip install clawmetry` in the workspace shell) or over a clone (`CLAWMETRY_REPLIT_ROOTS`) | Full transcripts with tool calls (write/edit/bash/screenshot vocabulary), typed prompts extracted from the injected wrapper, structural tool errors. **No tokens, model, cost or timestamps in the workspace journal:** Replit bills effort-based checkpoints server-side, so no spend is reported rather than a derived guess, and session times come from file mtimes with the basis declared. No per-session pause/stop/kill: the loop is not a workspace process. | | OpenWorker | Beta adapter | A SQLite index plus one append-only JSONL per session under `~/.config/coworker/` (`$COWORKER_STATE_DIR`, or `%APPDATA%\coworker` on Windows). The same `coworker.db` file holds both the session index and the audit log | Sessions, events, cost and sub-agents. The token split rides a per-message sidecar tagged with the model that produced that turn, so a session that switches models is priced per model. OpenWorker writes no dollars, so cost is always derived and never reported. Team workers carry their lead session, which becomes real sub-agent lineage. The audit log's token columns meter the Auto-Approve reviewer rather than the agent, so they are excluded from session cost. Per-session pause and stop are not offered: one desktop process serves every session. | | Muse Code | Beta adapter | **No on-disk format to read.** Muse Code publishes no session-log schema; its transcript is served over the Muse Session Protocol (MSP), so the adapter spawns `muse serve` and calls the two documented read-only surfaces — `session/list` ("read-only, never touches leases") and `session/read` (a point-in-time cold read that never subscribes). MSP also reports each session's own durable log path, so nothing is guessed. Verified against muse 1.0.3 on macOS: the store is `$XDG_DATA_HOME/muse` (default `~/.local/share/muse`, XDG **even on macOS** — not `~/Library/Application Support`), holding `session-index.db` and `sessions/YYYY/MM/DD//session.jsonl`, while `~/.config/muse` holds only `settings.json` and `auth.json`. `MUSE_HOME` is not honoured by the binary; `XDG_DATA_HOME` is the only lever. Override the store with `CLAWMETRY_MUSE_HOME`, the config dir with `CLAWMETRY_MUSE_CONFIG_DIR`, and the binary with `CLAWMETRY_MUSE_BIN` | Sessions, full transcripts (messages, native reasoning, tool calls, user shell, sub-agents, compaction), fork lineage and cost. Token counts are the counted-once session totals MSP itself reports, tagged with the model that produced them — read via `view/page`, because the folded transcript items carry an EMPTY usage block and reading those alone reports $0.00 for a real paid session. Cost is derived at published Muse Spark rates; Muse writes no dollars. Cached input is billed at Meta's published cached rate, since cached tokens sit *inside* the input count: verified on muse 1.0.3, where 82.7% of a measured turn's input was cache reads and the flat input rate over-charged fivefold. One honest gap remains: the protocol reports no pid anywhere, so Pause/Stop/Kill are not offered rather than offered and inert. The adapter calls only `initialize`, `session/list`, `session/read` and `view/page` (all verified read-only: after paging the session is still `notLoaded`, no lease is taken, and a second concurrent host can read it), and requests no capabilities — in particular not `userShell`, which would let the connection run commands in the workspace. | +| OpenExecutive | Beta adapter | One SQLite store, `episodic_memory.db` (`$EPISODIC_DB_PATH`; `packages/core/` in a clone under `make dev`, `/data/` in Docker). Found automatically in a clone under `~`, `~/projects`, `~/src`, `~/code`, `~/dev`, `~/repos` or `~/workspace`; a Docker named volume is not visible to the host, so bind-mount `/data` or set `CLAWMETRY_OPENEXECUTIVE_DB` | Sessions, events and cost. Every conversation, including ones that started in Slack or email; each specialist consult as a step with its question and answer; tool calls with failures flagged; every outbound send the scheduler queued, with its status (pending, delivered, failed). Usage rows cover the Executive's own model calls, not the specialist agents', so a session's cost is a floor: the real OpenRouter charge where routed through OpenRouter, otherwise derived from the pricing table. Pause and stop are not offered: one API server process serves every conversation and the scheduler. | | ZeroClaw / TrustClaw / Nanobot | Not yet | unverified | Open an issue with a real session capture. | OpenClaw, NVIDIA NemoClaw and Goose are free in the OSS package — their diff --git a/docs/i18n/ar/README.md b/docs/i18n/ar/README.md index 749fc11ac2..bdecbabaee 100644 --- a/docs/i18n/ar/README.md +++ b/docs/i18n/ar/README.md @@ -13,7 +13,7 @@ **يمكن لوكيل أن ينفّذ مئات من استدعاءات الأدوات دون أن يحقق أي تقدم.** تقرأ ClawMetry ملفات الجلسات التي تكتبها وكلاء الترميز لديك بالفعل، وتضع المخطط الزمني، واستدعاءات الأدوات، وأي بيانات عن الرموز (tokens) والتكلفة يكشف عنها بيئة التشغيل في عرض واحد — بحيث يمكنك التمييز بين تشغيل طويل يعمل بنجاح وآخر متعطّل. -يعمل مع **31 بيئة تشغيل لوكلاء الذكاء الاصطناعي** — Claude Code، OpenAI Codex، Hermes، OpenClaw و27 أخرى. لوحة تحكم واحدة لكل أسطول وكلائك. ([القائمة الكاملة](SUPPORTED_RUNTIMES.txt)، مُولَّدة من الكتالوج.) +يعمل مع **31 بيئة تشغيل لوكلاء الذكاء الاصطناعي** — Claude Code، OpenAI Codex، Hermes، OpenClaw و28 أخرى. لوحة تحكم واحدة لكل أسطول وكلائك. ([القائمة الكاملة](SUPPORTED_RUNTIMES.txt)، مُولَّدة من الكتالوج.) > 🌐 **اقرأ هذا بلغة:** [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/) diff --git a/docs/i18n/de/README.md b/docs/i18n/de/README.md index 69c898ba80..6dcd428c29 100644 --- a/docs/i18n/de/README.md +++ b/docs/i18n/de/README.md @@ -16,7 +16,7 @@ liest die Session-Dateien, die deine Coding-Agenten ohnehin schon schreiben, und die Tool-Aufrufe und alle Token- und Kostendaten, die die Laufzeitumgebung offenlegt, in eine einzige Ansicht — so kannst du einen langen, funktionierenden Lauf von einem unterscheiden, der feststeckt. -Funktioniert mit **31 KI-Agenten-Laufzeitumgebungen** — Claude Code, OpenAI Codex, Hermes, OpenClaw & 27 weitere. Ein Dashboard für deine gesamte Agenten-Flotte. ([die vollständige Liste](SUPPORTED_RUNTIMES.txt), generiert aus dem Katalog.) +Funktioniert mit **31 KI-Agenten-Laufzeitumgebungen** — Claude Code, OpenAI Codex, Hermes, OpenClaw & 28 weitere. Ein Dashboard für deine gesamte Agenten-Flotte. ([die vollständige Liste](SUPPORTED_RUNTIMES.txt), generiert aus dem Katalog.) > 🌐 **Lies dies auf:** [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) · [mehr →](docs/i18n/) diff --git a/docs/i18n/el/README.md b/docs/i18n/el/README.md index e39f919a2a..161c7109bf 100644 --- a/docs/i18n/el/README.md +++ b/docs/i18n/el/README.md @@ -47,7 +47,7 @@ pip install clawmetry && clawmetry να την αποτρέψετε ([ποιοι έλεγχοι είναι πραγματικοί, ανά runtime](docs/APPROVALS.md)). -## Λειτουργεί με 31 runtimes πρακτόρων +## Λειτουργεί με 32 runtimes πρακτόρων **Δωρεάν στην open source εφαρμογή:** 🦞 **[OpenClaw](https://clawmetry.com/runtimes/openclaw)** · 🟩 **[NVIDIA NemoClaw](https://clawmetry.com/nemoclaw)** · 🪿 **[Goose](https://clawmetry.com/runtimes/goose)** @@ -80,7 +80,7 @@ pip install clawmetry && clawmetry Ένα ποσοστό χρήσης είναι τόσο ειλικρινές όσο και ο διαιρέτης του. Το ClawMetry προσαρμόζει το μέγεθος του παραθύρου ανά πάροχο από [έναν πίνακα που μπορείτε να διαβάσετε και να προτείνετε αλλαγή μέσω PR](clawmetry/context_windows.py), καλύπτοντας τους Anthropic, OpenAI, Google, xAI, -DeepSeek, Kimi, Qwen, Mistral, Llama και GLM. Δεν μετρά και τα 31 +DeepSeek, Kimi, Qwen, Mistral, Llama και GLM. Δεν μετρά και τα 32 runtimes με τον κανόνα ενός μόνο προμηθευτή. Αυτό έχει σημασία: ένας γύρος 300K GPT-5 βαθμολογημένος έναντι των 200K της Anthropic διαβάζεται ως ">100%, εξαντλημένο" ενώ στην πραγματικότητα βρίσκεται στο 75% του 400K του GPT-5. Ο ίδιος κανόνας κρύβει έναν πραγματικά υπερχειλισμένο γύρο 130K DeepSeek @@ -100,7 +100,7 @@ runtimes με τον κανόνα ενός μόνο προμηθευτή. Αυτ | Διαδρομή | Προστίθεται στον πράκτορά σας | Προεπιλογή; | |---|---|---| -| Παρακολούθηση αρχείων συνεδρίας (και τα 31 runtimes) | **0**. Ξεχωριστή διεργασία, χωρίς κώδικα ClawMetry στον πράκτορά σας | ενεργό | +| Παρακολούθηση αρχείων συνεδρίας (και τα 32 runtimes) | **0**. Ξεχωριστή διεργασία, χωρίς κώδικα ClawMetry στον πράκτορά σας | ενεργό | | HTTP interceptor (`CLAWMETRY_INTERCEPT=1`) | **+0.44 ms** ανά κλήση LLM, ή 0.009% μιας κλήσης 5s | ανενεργό | | Pre-tool hook gate (ζεστή cache) | **+44 ms** ανά ελεγχόμενη κλήση εργαλείου, πάνω από ένα κατώφλι διερμηνέα 36 ms | ανενεργό | | Proxy επιβολής | **+9.7 ms** ανά κλήση LLM | ανενεργό | diff --git a/docs/i18n/es-419/README.md b/docs/i18n/es-419/README.md index 38fd8dc487..5ce2b48fb6 100644 --- a/docs/i18n/es-419/README.md +++ b/docs/i18n/es-419/README.md @@ -16,7 +16,7 @@ lee los archivos de sesión que tus agentes de codificación ya escriben, y reú las llamadas a herramientas y los datos de tokens y costo que el runtime exponga en una sola vista, para que puedas distinguir una ejecución larga que está funcionando de una que está atascada. -Funciona con **31 runtimes de agentes de IA**: Claude Code, OpenAI Codex, Hermes, OpenClaw y 27 más. Un solo panel para toda tu flota de agentes. ([la lista completa](SUPPORTED_RUNTIMES.txt), generada a partir del catálogo.) +Funciona con **32 runtimes de agentes de IA**: Claude Code, OpenAI Codex, Hermes, OpenClaw y 28 más. Un solo panel para toda tu flota de agentes. ([la lista completa](SUPPORTED_RUNTIMES.txt), generada a partir del catálogo.) > 🌐 **Léelo en:** [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) · [más →](docs/i18n/) @@ -47,7 +47,7 @@ indica cuáles, por runtime), y observar una acción no es lo mismo que poder bloquearla ([qué controles son reales, por runtime](docs/APPROVALS.md)). -## Funciona con 31 runtimes de agentes +## Funciona con 32 runtimes de agentes **Gratis en la aplicación de código abierto:** 🦞 **[OpenClaw](https://clawmetry.com/runtimes/openclaw)** · 🟩 **[NVIDIA NemoClaw](https://clawmetry.com/nemoclaw)** · 🪿 **[Goose](https://clawmetry.com/runtimes/goose)** @@ -81,7 +81,7 @@ comparación de agentes. Un porcentaje de utilización es tan honesto como lo que divide. ClawMetry dimensiona la ventana por proveedor a partir de [una tabla que puedes leer y enviar un PR](clawmetry/context_windows.py), que cubre Anthropic, OpenAI, Google, xAI, -DeepSeek, Kimi, Qwen, Mistral, Llama y GLM. No mide los 31 +DeepSeek, Kimi, Qwen, Mistral, Llama y GLM. No mide los 32 runtimes con la regla de un solo proveedor. Eso importa: un turno de GPT-5 de 300K medido contra los 200K de Anthropic se lee como ">100%, desbordado" cuando en realidad está al 75% de los 400K de GPT-5. Esa misma regla oculta un turno de DeepSeek de 130K genuinamente desbordado @@ -101,7 +101,7 @@ ClawMetry solo puede ver eventos de compactación en algunos runtimes. Por eso | Ruta | Agregado a tu agente | ¿Por defecto? | |---|---|---| -| Seguimiento de archivos de sesión (los 31 runtimes) | **0**. Proceso separado, sin código de ClawMetry en tu agente | activado | +| Seguimiento de archivos de sesión (los 32 runtimes) | **0**. Proceso separado, sin código de ClawMetry en tu agente | activado | | Interceptor HTTP (`CLAWMETRY_INTERCEPT=1`) | **+0.44 ms** por llamada al LLM, o 0.009% de una llamada de 5s | desactivado | | Puerta de gancho pre-herramienta (caché en caliente) | **+44 ms** por llamada a herramienta con gancho, sobre un piso de intérprete de 36 ms | desactivado | | Proxy de aplicación de políticas | **+9.7 ms** por llamada al LLM | desactivado | diff --git a/docs/i18n/es/README.md b/docs/i18n/es/README.md index dbac4f6961..ce5a485537 100644 --- a/docs/i18n/es/README.md +++ b/docs/i18n/es/README.md @@ -16,7 +16,7 @@ lee los archivos de sesión que tus agentes de codificación ya generan, y reún las llamadas a herramientas y los datos de tokens y costo que el runtime exponga en una sola vista, para que puedas distinguir una ejecución larga que está funcionando de una que está atascada. -Funciona con **31 runtimes de agentes de IA**: Claude Code, OpenAI Codex, Hermes, OpenClaw y 27 más. Un solo panel para toda tu flota de agentes. ([la lista completa](SUPPORTED_RUNTIMES.txt), generada a partir del catálogo.) +Funciona con **32 runtimes de agentes de IA**: Claude Code, OpenAI Codex, Hermes, OpenClaw y 28 más. Un solo panel para toda tu flota de agentes. ([la lista completa](SUPPORTED_RUNTIMES.txt), generada a partir del catálogo.) > 🌐 **Léelo en:** [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) · [más →](docs/i18n/) @@ -46,7 +46,7 @@ distintos (algunos no publican costo alguno; [la matriz](docs/compatibility.md) por runtime), y observar una acción no es lo mismo que poder bloquearla ([qué controles son reales, por runtime](docs/APPROVALS.md)). -## Funciona con 31 runtimes de agentes +## Funciona con 32 runtimes de agentes **Gratis en la app de código abierto:** 🦞 **[OpenClaw](https://clawmetry.com/runtimes/openclaw)** · 🟩 **[NVIDIA NemoClaw](https://clawmetry.com/nemoclaw)** · 🪿 **[Goose](https://clawmetry.com/runtimes/goose)** @@ -80,7 +80,7 @@ comparación de agentes. Un porcentaje de utilización es tan honesto como el divisor que usa. ClawMetry dimensiona la ventana por proveedor a partir de [una tabla que puedes leer y proponer en PR](clawmetry/context_windows.py), que cubre Anthropic, OpenAI, Google, xAI, -DeepSeek, Kimi, Qwen, Mistral, Llama y GLM. No mide los 31 +DeepSeek, Kimi, Qwen, Mistral, Llama y GLM. No mide los 32 runtimes con la regla de un solo proveedor. Eso importa: un turno de GPT-5 de 300K comparado contra los 200K de Anthropic se lee como ">100%, desbordado" cuando en realidad está al 75% de los 400K de GPT-5. La misma regla oculta un turno de DeepSeek de 130K @@ -100,7 +100,7 @@ ClawMetry solo puede ver eventos de compactación en algunos runtimes. Por eso | Ruta | Añadido a tu agente | ¿Por defecto? | |---|---|---| -| Seguimiento de archivos de sesión (los 31 runtimes) | **0**. Proceso separado, sin código de ClawMetry en tu agente | activado | +| Seguimiento de archivos de sesión (los 32 runtimes) | **0**. Proceso separado, sin código de ClawMetry en tu agente | activado | | Interceptor HTTP (`CLAWMETRY_INTERCEPT=1`) | **+0.44 ms** por llamada al LLM, o 0.009% de una llamada de 5s | desactivado | | Compuerta del hook previo a la herramienta (caché caliente) | **+44 ms** por llamada a herramienta con gate, sobre un piso de intérprete de 36 ms | desactivado | | Proxy de aplicación de políticas | **+9.7 ms** por llamada al LLM | desactivado | diff --git a/docs/i18n/fr/README.md b/docs/i18n/fr/README.md index 5a3ad9fc6d..964660c4c8 100644 --- a/docs/i18n/fr/README.md +++ b/docs/i18n/fr/README.md @@ -16,7 +16,7 @@ lit les fichiers de session que vos agents de codage écrivent déjà, et regrou les appels d'outils et les données de tokens et de coûts exposées par le runtime dans une seule vue, afin que vous puissiez distinguer une longue exécution qui progresse de celle qui est bloquée. -Compatible avec **31 runtimes d'agents IA** — Claude Code, OpenAI Codex, Hermes, OpenClaw et 27 autres. Un seul tableau de bord pour toute votre flotte d'agents. ([la liste complète](SUPPORTED_RUNTIMES.txt), générée à partir du catalogue.) +Compatible avec **32 runtimes d'agents IA** — Claude Code, OpenAI Codex, Hermes, OpenClaw et 28 autres. Un seul tableau de bord pour toute votre flotte d'agents. ([la liste complète](SUPPORTED_RUNTIMES.txt), générée à partir du catalogue.) > 🌐 **Lire ceci en :** [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) · [plus →](docs/i18n/) @@ -37,7 +37,7 @@ que vous avez déjà, les lit en lecture seule, et ne change rien à leur foncti |---|---| | **Ce que ça fait** | Lit les fichiers de session et les journaux que vos agents écrivent déjà. Pas de SDK, pas de changement de code, pas d'instrumentation dans votre application. | | **Ce que vous voyez** | Chronologie des sessions, relecture outil par outil, répartition des tokens et des coûts, et signaux de trajectoire (boucles, échecs répétés) — par runtime. | -| **Ce qui est gratuit** | `pip install clawmetry` lit **OpenClaw, NVIDIA NemoClaw et Goose** sans compte, sans clé et sans appel réseau. Les 27 autres — Claude Code, Codex, Cursor et le reste — sont lus par le compagnon à code source fermé `clawmetry-pro`, disponible avec l'essai de 7 jours ou un abonnement — voir [docs/ENTITLEMENTS.md](docs/ENTITLEMENTS.md) pour la répartition exacte. | +| **Ce qui est gratuit** | `pip install clawmetry` lit **OpenClaw, NVIDIA NemoClaw et Goose** sans compte, sans clé et sans appel réseau. Les 29 autres — Claude Code, Codex, Cursor et le reste — sont lus par le compagnon à code source fermé `clawmetry-pro`, disponible avec l'essai de 7 jours ou un abonnement — voir [docs/ENTITLEMENTS.md](docs/ENTITLEMENTS.md) pour la répartition exacte. | | **Comment commencer** | `pip install clawmetry && clawmetry`, puis ouvrez localhost:8900. Pas encore d'agents sur cette machine ? `clawmetry --sample` s'ouvre sur trois sessions synthétiques étiquetées. | | **Ce qui quitte votre machine** | Aucune donnée de session, sauf si vous exécutez `clawmetry connect`. Deux choses s'exécutent par défaut, toutes deux désactivables et ne transportant aucun contenu de session : un ping d'installation anonyme et une vérification de version PyPI. Chaque destination est inventoriée dans [docs/EGRESS.md](docs/EGRESS.md), reconstituée à partir d'une capture réseau plutôt que d'une lecture de commentaires. | @@ -47,7 +47,7 @@ indique lesquels, par runtime), et observer une action n'est pas la même chose la bloquer ([quels contrôles sont réels, par runtime](docs/APPROVALS.md)). -## Compatible avec 31 runtimes d'agents +## Compatible avec 32 runtimes d'agents **Gratuit dans l'application open source :** 🦞 **[OpenClaw](https://clawmetry.com/runtimes/openclaw)** · 🟩 **[NVIDIA NemoClaw](https://clawmetry.com/nemoclaw)** · 🪿 **[Goose](https://clawmetry.com/runtimes/goose)** @@ -80,7 +80,7 @@ Deux questions qui méritent une réponse avant de faire confiance à un outil d Un pourcentage d'utilisation n'est honnête que si son dénominateur l'est aussi. ClawMetry dimensionne la fenêtre par fournisseur à partir d'[une table que vous pouvez lire et proposer en PR](clawmetry/context_windows.py), couvrant Anthropic, OpenAI, Google, xAI, -DeepSeek, Kimi, Qwen, Mistral, Llama et GLM. Il ne mesure pas les 31 runtimes avec la règle +DeepSeek, Kimi, Qwen, Mistral, Llama et GLM. Il ne mesure pas les 32 runtimes avec la règle d'un seul fournisseur. C'est important : un tour de 300K sur GPT-5, évalué avec la règle des 200K d'Anthropic, affiche ">100%, débordé" alors qu'il est en réalité à 75% des 400K de GPT-5. La même règle masque un tour DeepSeek de 130K, réellement en débordement, en un confortable 65%. @@ -99,7 +99,7 @@ proprement" ou "nous sommes aveugles"**. Un `0` qui signifie réellement aveugle | Chemin | Ajouté à votre agent | Par défaut ? | |---|---|---| -| Suivi des fichiers de session (les 31 runtimes) | **0**. Processus séparé, aucun code ClawMetry dans votre agent | activé | +| Suivi des fichiers de session (les 32 runtimes) | **0**. Processus séparé, aucun code ClawMetry dans votre agent | activé | | Intercepteur HTTP (`CLAWMETRY_INTERCEPT=1`) | **+0,44 ms** par appel LLM, soit 0,009% d'un appel de 5s | désactivé | | Passerelle de hook pré-outil (cache chaud) | **+44 ms** par appel d'outil filtré, au-delà d'un plancher interpréteur de 36 ms | désactivé | | Proxy d'application des règles | **+9,7 ms** par appel LLM | désactivé | diff --git a/docs/i18n/hi/README.md b/docs/i18n/hi/README.md index 853a82b8bf..8e7eb34703 100644 --- a/docs/i18n/hi/README.md +++ b/docs/i18n/hi/README.md @@ -16,7 +16,7 @@ टूल कॉल्स, और रनटाइम जो भी टोकन और लागत डेटा उजागर करता है उसे एक ही व्यू में लाता है — ताकि आप बता सकें कि कौन सा लंबा रन काम कर रहा है और कौन सा अटका हुआ है। -**31 AI एजेंट रनटाइम्स** के साथ काम करता है — Claude Code, OpenAI Codex, Hermes, OpenClaw और 27 अन्य। आपके पूरे एजेंट फ़्लीट के लिए एक डैशबोर्ड। ([पूरी सूची](SUPPORTED_RUNTIMES.txt), कैटलॉग से जनरेट की गई।) +**32 AI एजेंट रनटाइम्स** के साथ काम करता है — Claude Code, OpenAI Codex, Hermes, OpenClaw और 28 अन्य। आपके पूरे एजेंट फ़्लीट के लिए एक डैशबोर्ड। ([पूरी सूची](SUPPORTED_RUNTIMES.txt), कैटलॉग से जनरेट की गई।) > 🌐 **इसे इनमें पढ़ें:** [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/) diff --git a/docs/i18n/nl/README.md b/docs/i18n/nl/README.md index f1d89e074d..fe6bcfc8d6 100644 --- a/docs/i18n/nl/README.md +++ b/docs/i18n/nl/README.md @@ -16,7 +16,7 @@ leest de sessiebestanden die je coding agents al schrijven, en brengt de tijdlij de tool calls en welke token- en kostengegevens de runtime ook maar blootgeeft samen in één overzicht — zodat je een lange run die werkt kunt onderscheiden van een die vastzit. -Werkt met **31 AI agent runtimes** — Claude Code, OpenAI Codex, Hermes, OpenClaw & 27 meer. Eén dashboard voor je hele agent-vloot. ([de volledige lijst](SUPPORTED_RUNTIMES.txt), gegenereerd uit de catalogus.) +Werkt met **32 AI agent runtimes** — Claude Code, OpenAI Codex, Hermes, OpenClaw & 27 meer. Eén dashboard voor je hele agent-vloot. ([de volledige lijst](SUPPORTED_RUNTIMES.txt), gegenereerd uit de catalogus.) > 🌐 **Lees dit in:** [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) · [meer →](docs/i18n/) @@ -47,7 +47,7 @@ laat zien welke, per runtime), en het observeren van een actie is niet hetzelfde deze te blokkeren ([welke controls echt zijn, per runtime](docs/APPROVALS.md)). -## Werkt met 31 agent runtimes +## Werkt met 32 agent runtimes **Gratis in de open source app:** 🦞 **[OpenClaw](https://clawmetry.com/runtimes/openclaw)** · 🟩 **[NVIDIA NemoClaw](https://clawmetry.com/nemoclaw)** · 🪿 **[Goose](https://clawmetry.com/runtimes/goose)** @@ -80,7 +80,7 @@ Twee vragen die het waard zijn om te beantwoorden voordat je een agent-vergelijk Een benuttingspercentage is alleen zo eerlijk als waar het door deelt. ClawMetry bepaalt de venstergrootte per provider vanuit [een tabel die je kunt lezen en er een PR voor kunt indienen](clawmetry/context_windows.py), met dekking voor Anthropic, OpenAI, Google, xAI, -DeepSeek, Kimi, Qwen, Mistral, Llama en GLM. Het meet niet alle 31 +DeepSeek, Kimi, Qwen, Mistral, Llama en GLM. Het meet niet alle 32 runtimes met de liniaal van één leverancier. Dat maakt uit: een beurt van 300K bij GPT-5 gescoord tegen Anthropics 200K leest als ">100%, geblazen" terwijl het eigenlijk op 75% van GPT-5's 400K zit. Diezelfde liniaal verbergt een daadwerkelijk overgelopen beurt van 130K bij DeepSeek @@ -100,7 +100,7 @@ rapporteert `GET /api/context-coverage`, per runtime, of een **nul betekent | Pad | Toegevoegd aan je agent | Standaard? | |---|---|---| -| Session-file tailing (alle 31 runtimes) | **0**. Apart proces, geen ClawMetry-code in je agent | aan | +| Session-file tailing (alle 32 runtimes) | **0**. Apart proces, geen ClawMetry-code in je agent | aan | | HTTP-interceptor (`CLAWMETRY_INTERCEPT=1`) | **+0,44 ms** per LLM-oproep, oftewel 0,009% van een oproep van 5s | uit | | Pre-tool hook gate (warme cache) | **+44 ms** per geblokkeerde tool call, bovenop een interpreter-basis van 36 ms | uit | | Enforcement proxy | **+9,7 ms** per LLM-oproep | uit | diff --git a/docs/i18n/pt-BR/README.md b/docs/i18n/pt-BR/README.md index 63e6496f0a..b9a41904ab 100644 --- a/docs/i18n/pt-BR/README.md +++ b/docs/i18n/pt-BR/README.md @@ -16,7 +16,7 @@ lê os arquivos de sessão que seus agentes de codificação já escrevem, e re as chamadas de ferramentas e quaisquer dados de tokens e custo que o runtime exponha em uma única visualização — para que você consiga distinguir uma execução longa que está funcionando de uma que está travada. -Funciona com **31 runtimes de agentes de IA** — Claude Code, OpenAI Codex, Hermes, OpenClaw e mais 27. Um único painel para toda a sua frota de agentes. ([a lista completa](SUPPORTED_RUNTIMES.txt), gerada a partir do catálogo.) +Funciona com **32 runtimes de agentes de IA** — Claude Code, OpenAI Codex, Hermes, OpenClaw e mais 27. Um único painel para toda a sua frota de agentes. ([a lista completa](SUPPORTED_RUNTIMES.txt), gerada a partir do catálogo.) > 🌐 **Leia isto em:** [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) · [mais →](docs/i18n/) @@ -47,7 +47,7 @@ mostra quais, por runtime), e observar uma ação não é o mesmo que ser capaz bloqueá-la ([quais controles são reais, por runtime](docs/APPROVALS.md)). -## Funciona com 31 runtimes de agentes +## Funciona com 32 runtimes de agentes **Gratuito no aplicativo open source:** 🦞 **[OpenClaw](https://clawmetry.com/runtimes/openclaw)** · 🟩 **[NVIDIA NemoClaw](https://clawmetry.com/nemoclaw)** · 🪿 **[Goose](https://clawmetry.com/runtimes/goose)** @@ -80,7 +80,7 @@ Duas perguntas que vale a pena responder antes de confiar em qualquer ferramenta Uma porcentagem de utilização é tão honesta quanto o valor pelo qual ela é dividida. O ClawMetry dimensiona a janela por provedor a partir de [uma tabela que você pode ler e enviar um PR](clawmetry/context_windows.py), cobrindo Anthropic, OpenAI, Google, xAI, -DeepSeek, Kimi, Qwen, Mistral, Llama e GLM. Ele não mede os 31 +DeepSeek, Kimi, Qwen, Mistral, Llama e GLM. Ele não mede os 32 runtimes com a régua de um único fornecedor. Isso importa: um turno de 300K do GPT-5 pontuado contra os 200K da Anthropic aparece como ">100%, estourado" quando na verdade está em 75% dos 400K do GPT-5. A mesma régua esconde um turno de 130K do DeepSeek genuinamente estourado @@ -100,7 +100,7 @@ O ClawMetry só consegue ver eventos de compactação em alguns runtimes. Por is | Caminho | Adicionado ao seu agente | Padrão? | |---|---|---| -| Leitura contínua do arquivo de sessão (todos os 31 runtimes) | **0**. Processo separado, nenhum código do ClawMetry no seu agente | ativado | +| Leitura contínua do arquivo de sessão (todos os 32 runtimes) | **0**. Processo separado, nenhum código do ClawMetry no seu agente | ativado | | Interceptor HTTP (`CLAWMETRY_INTERCEPT=1`) | **+0,44 ms** por chamada de LLM, ou 0,009% de uma chamada de 5s | desativado | | Gate de hook pré-ferramenta (cache aquecido) | **+44 ms** por chamada de ferramenta controlada, sobre um piso de 36 ms do interpretador | desativado | | Proxy de aplicação de políticas | **+9,7 ms** por chamada de LLM | desativado | diff --git a/docs/i18n/pt-PT/README.md b/docs/i18n/pt-PT/README.md index a8d234a0f7..7dce5b69fb 100644 --- a/docs/i18n/pt-PT/README.md +++ b/docs/i18n/pt-PT/README.md @@ -16,7 +16,7 @@ lê os ficheiros de sessão que os seus agentes de código já escrevem, e junta as chamadas de ferramentas e quaisquer dados de tokens e custo que o runtime exponha numa única vista — para que consiga distinguir uma execução longa que está a funcionar de uma que está encravada. -Funciona com **31 runtimes de agentes de IA** — Claude Code, OpenAI Codex, Hermes, OpenClaw e mais 27. Um único painel para toda a sua frota de agentes. ([a lista completa](SUPPORTED_RUNTIMES.txt), gerada a partir do catálogo.) +Funciona com **32 runtimes de agentes de IA** — Claude Code, OpenAI Codex, Hermes, OpenClaw e mais 27. Um único painel para toda a sua frota de agentes. ([a lista completa](SUPPORTED_RUNTIMES.txt), gerada a partir do catálogo.) > 🌐 **Leia isto em:** [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) · [mais →](docs/i18n/) @@ -47,7 +47,7 @@ indica quais, por runtime), e observar uma ação não é o mesmo que conseguir bloqueá-la ([quais os controlos reais, por runtime](docs/APPROVALS.md)). -## Funciona com 31 runtimes de agentes +## Funciona com 32 runtimes de agentes **Gratuito na aplicação open source:** 🦞 **[OpenClaw](https://clawmetry.com/runtimes/openclaw)** · 🟩 **[NVIDIA NemoClaw](https://clawmetry.com/nemoclaw)** · 🪿 **[Goose](https://clawmetry.com/runtimes/goose)** @@ -81,7 +81,7 @@ comparação de agentes. Uma percentagem de utilização só é tão honesta quanto aquilo por que divide. O ClawMetry dimensiona a janela por fornecedor a partir de [uma tabela que pode ler e propor via PR](clawmetry/context_windows.py), cobrindo Anthropic, OpenAI, Google, xAI, -DeepSeek, Kimi, Qwen, Mistral, Llama e GLM. Não mede os 31 +DeepSeek, Kimi, Qwen, Mistral, Llama e GLM. Não mede os 32 runtimes com a régua de um único fornecedor. Isso importa: um turno de 300K do GPT-5 avaliado com a régua de 200K da Anthropic lê-se como ">100%, estourado" quando na verdade está a 75% dos 400K do GPT-5. A mesma régua esconde um turno de 130K do DeepSeek @@ -101,7 +101,7 @@ O ClawMetry só consegue ver eventos de compactação nalguns runtimes. Por isso | Caminho | Adicionado ao seu agente | Predefinição? | |---|---|---| -| Leitura contínua de ficheiros de sessão (todos os 31 runtimes) | **0**. Processo separado, sem código do ClawMetry no seu agente | ativo | +| Leitura contínua de ficheiros de sessão (todos os 32 runtimes) | **0**. Processo separado, sem código do ClawMetry no seu agente | ativo | | Interceptor HTTP (`CLAWMETRY_INTERCEPT=1`) | **+0,44 ms** por chamada de LLM, ou 0,009% de uma chamada de 5s | inativo | | Porta de bloqueio pré-ferramenta (cache quente) | **+44 ms** por chamada de ferramenta bloqueada, acima de um piso de 36 ms do interpretador | inativo | | Proxy de enforcement | **+9,7 ms** por chamada de LLM | inativo | diff --git a/routes/attention.py b/routes/attention.py index 1664177aa9..82883ab8fb 100644 --- a/routes/attention.py +++ b/routes/attention.py @@ -276,6 +276,7 @@ def build_attention(runtime: str = "") -> dict: "antigravity", "copilot", "grok", "deepagents", "n8n", "pi", "qm", "deepseek_harness", "exo", "kimi", "devin", "gemini_cli", "cline", "openhands", "openworker", "grok_bot", "lovable", "replit", "muse_code", + "openexecutive", }) diff --git a/routes/device.py b/routes/device.py index 36b842b892..a5099d59c0 100644 --- a/routes/device.py +++ b/routes/device.py @@ -344,7 +344,7 @@ def device_preview(): -
one device · all 31 runtimes
+
one device · all 32 runtimes