Skip to content

Add Muse Code as the 31st runtime (protocol-read, not file-read) - #5761

Merged
vivekchand merged 8 commits into
mainfrom
muse-code-runtime
Sep 9, 2026
Merged

Add Muse Code as the 31st runtime (protocol-read, not file-read)#5761
vivekchand merged 8 commits into
mainfrom
muse-code-runtime

Conversation

@vivekchand

Copy link
Copy Markdown
Owner

Adds Meta's Muse Code — its terminal coding agent on Muse Spark — as a supported runtime. Pairs with clawmetry-pro#238, which carries the adapter.

Two products called Muse; only one is observable

The consumer Muse personal agent runs wholly inside Meta's "Muse Secure VM": no API, no SDK, no local footprint, and Meta says it cannot be self-hosted. There is nothing on the machine to ingest and no process to signal, so it is deliberately not a runtime and test_the_consumer_muse_agent_is_not_claimed_as_a_runtime keeps it out of the catalogue.

Muse Code is the opposite: a local process tree, an open-source CLI, real hooks, and a documented protocol.

The first runtime read over a protocol

Muse publishes no session-log schema, so the adapter spawns muse serve and calls the two documented read-only MSP surfaces (session/list, session/read) rather than reverse-engineering a file format. Details in the pro PR; what OSS owns is everything below.

What changed here

Catalogue + loader. PAID_RUNTIMES, _FAMILY_ADAPTER_SPECS, labels, landing path, and every session-prefix set that splits muse_code:<id> (local_store, routes/usage, routes/attention, routes/harness). Both lists are required and independent — 11 adapters once shipped in the wheel while absent from the loader tuple, so those runtimes were never ingested and nothing raised.

Pricing — the placeholder finally has real numbers. The muse-spark entries carried a $1.00/$3.00 placeholder with a comment asking to be updated once Meta publishes official pricing. Meta has, so they now carry the published Meta Model API rates:

model input /1M output /1M
muse-spark-1.3 $1.25 $4.25
muse-spark-1.3-contributor $0.10 $0.20

The two variants are listed separately because contributor is 12.5× cheaper on input and ~21× on output — one family rate would misreport whichever tier the user is not on. Before this, every muse-spark model fell through to the (1.0, 3.0) unknown-provider default: the same dollars for every model, i.e. a guess wearing a number's clothes.

MCP — registered, with a bricking hazard closed. Muse Code speaks MCP, so declaring it MCP-less would be a false statement about the runtime. Added a json_muse writer for its own mcp_servers/transport shape (the mcpServers/type spelling every other runtime uses would be silently ignored by Muse).

The trap: Muse's settings file must contain "schema_version": 1 or the app fails at startup, and _read_json_file returns {} for a missing file — so an install on a machine with no settings file would have written a bare {"mcp_servers": ...} and left the user unable to launch Muse at all. Specs now carry a seed applied only when creating the file from nothing, never merged into a file the user already has, and never on uninstall.

Control — unknown, not unsupported. Muse Code runs a real local process per session, so Stop and Kill would work — but MSP reports no pid anywhere, so a resolver would have to match argv+cwd, and that has not been verified against a real muse. unsupported asserts no per-session process exists here ever, which would be false; unknown is the module's own documented third answer. No buttons are offered rather than offered and inert, and a resume hint covers the gap.

Declared records. runtime_records says tokens on-disk, cost derived, model on-disk, and names the one honest gap: MSP's counted-once prompt total — the figure that resolves whether cached tokens sit inside or beside the input count — rides a live view notification that a cold read does not serve, so our input figure is the raw provider counter and cached tokens are never added to it. docs/compatibility.md carries the same row.

Not in context_coverage — deliberately. Muse Code emits real compaction items, so a zero blowout count here is a real zero and must not be labelled "absence proves nothing".

Runtime count 30 → 31 via scripts/sync_runtime_count.py (that is the bulk of the diff: prose across README, docs, i18n, CLI, device page).

Testing

tests/test_muse_code_runtime_wiring.py (23 tests, registered in ci.yml) covers the catalogue/loader pair, the pricing rows and prefix precedence, the MCP writer including the schema_version seed and the uninstall case, the control verdict, and the declared records. 470 tests pass across the affected OSS files.

make lint fails identically on clean origin/main (228 pre-existing ruff errors in dashboard.py etc.); the files added here are clean.

Follow-ups

  • approval/decide would let Guard resolve a pending approval rather than only signalling a process — better than what we have for any other runtime, and a separate change needing the three intervention locks.
  • A verified pid resolver to turn the control verdict from unknown into working buttons; needs a live muse.
  • Landing page: /runtimes/muse-code must exist and the hero count needs 30 → 31, in the landing repo.

No-PRD: adding a vendor runtime adapter to an existing, documented extension seam; no new product surface or user-facing behaviour beyond one more runtime in the existing catalogue.

🤖 Generated with Claude Code

https://claude.ai/code/session_019cGLYe3MnE6pfMupvvnTJK

@8090-software-factory

Copy link
Copy Markdown

✅ Drift Bot (ClawMetry): no drift detected

Drift Bot analyzed the changed files against this project's blueprints and requirements and found no drift.

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Visual diff

Comparing 3c97f36a6802 (head) against the PR base branch.

48 of 72 comparison(s) flagged (>1% pixel diff).

View Before After Diff
desktop overview before after diff · 0.01%
desktop flow ⚠️ before after diff · 100.00%
desktop brain before after diff · 0.00%
desktop usage ⚠️ before after diff · 100.00%
desktop crons before after diff · 0.01%
desktop memory ⚠️ before after diff · 100.00%
desktop security ⚠️ before after diff · 100.00%
desktop subagents before after diff · 0.00%
desktop transcripts before after diff · 0.36%
desktop logs ⚠️ before after diff · 5.75%
desktop skills ⚠️ before after diff · 1.86%
desktop models ⚠️ before after diff · 100.00%
desktop approvals ⚠️ before after diff · 100.00%
desktop alerts ⚠️ before after diff · 100.00%
desktop notifications ⚠️ before after diff · 2.52%
desktop limits ⚠️ before after diff · 100.00%
desktop clusters ⚠️ before after diff · 1.57%
desktop history ⚠️ before after diff · 100.00%
desktop channels before after diff · 0.00%
desktop harness before after diff · 0.11%
desktop inventory ⚠️ before after diff · 1.42%
desktop nemoclaw ⚠️ before after diff · 100.00%
desktop guard ⚠️ before after diff · 2.74%
desktop signals before after diff · 0.00%
desktop policy before after diff · 0.36%
desktop selfevolve ⚠️ before after diff · 100.00%
desktop swimlane ⚠️ before after diff · 1.99%
desktop tool-catalog ⚠️ before after diff · 2.14%
desktop tracing before after diff · 0.36%
desktop turn-anatomy ⚠️ before after diff · 100.00%
desktop version-impact before after diff · 0.46%
desktop context-economics ⚠️ before after diff · 100.00%
desktop agents before after diff · 0.00%
desktop evals ⚠️ before after diff · 100.00%
desktop bench ⚠️ before after diff · 2.53%
desktop trail ⚠️ before after diff · 100.00%
mobile overview ⚠️ before after diff · 3.62%
mobile flow ⚠️ before after diff · 100.00%
mobile brain ⚠️ before after diff · 100.00%
mobile usage ⚠️ before after diff · 100.00%
mobile crons ⚠️ before after diff · 1.68%
mobile memory ⚠️ before after diff · 1.01%
mobile security ⚠️ before after diff · 3.12%
mobile subagents before after diff · 0.00%
mobile transcripts before after diff · 0.01%
mobile logs ⚠️ before after diff · 5.14%
mobile skills before after diff · 0.01%
mobile models ⚠️ before after diff · 100.00%
mobile approvals before after diff · 0.01%
mobile alerts ⚠️ before after diff · 100.00%
mobile notifications ⚠️ before after diff · 1.61%
mobile limits ⚠️ before after diff · 100.00%
mobile clusters ⚠️ before after diff · 100.00%
mobile history ⚠️ before after diff · 2.35%
mobile channels ⚠️ before after diff · 1.61%
mobile harness ⚠️ before after diff · 100.00%
mobile inventory before after diff · 0.01%
mobile nemoclaw ⚠️ before after diff · 100.00%
mobile guard before after diff · 0.00%
mobile signals ⚠️ before after diff · 4.37%
mobile policy before after diff · 0.01%
mobile selfevolve before after diff · 0.00%
mobile swimlane ⚠️ before after diff · 1.61%
mobile tool-catalog ⚠️ before after diff · 3.69%
mobile tracing ⚠️ before after diff · 100.00%
mobile turn-anatomy before after diff · 0.78%
mobile version-impact before after diff · 0.00%
mobile context-economics before after diff · 0.04%
mobile agents ⚠️ before after diff · 1.68%
mobile evals ⚠️ before after diff · 19.30%
mobile bench before after diff · 0.72%
mobile trail ⚠️ before after diff · 3.00%

Folder: 3c97f36a6802. Full PNGs also attached as a workflow artefact.

Generated by visual-diff bot. Pixel diffs >1% flagged; eyeball the table before merging. This check is non-blocking — fail = bot bug, not a code problem.

vivekchand added a commit that referenced this pull request Sep 9, 2026
…rom it

The blurb opened with OpenClaw and NVIDIA NemoClaw — the names someone who
already knows us recognises, not the names a stranger searches for. Claude
Code and Codex now lead, then Hermes, then OpenClaw.

NemoClaw drops out of the marquee: a strong logo but a weak search term, and
every name in the tuple costs one from the "& N more" tail. It keeps its
free-tier billing in the README's "What's free" row and its own grid link.

NAMED_IN_TAGLINE was a literal 4 — the same bug one layer down, since it
would not have followed the marquee anywhere. It is now len(marquee()), and
a new test pins the README tagline to RUNTIME_MARQUEE in order, so the
tagline and the About blurb cannot name different runtimes while sharing the
same "& N more" arithmetic.

Muse Code is not added here: an id in the marquee must exist in the
catalogue, or the blurb names a runtime nobody can install. It goes in on
the branch that lands the runtime (#5761).

Verified red: growing the marquee by one without touching the README fails
the tagline test and the export check, and --check reports the stale
"& 26 more".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F6yVfSnXoSNgz1E55dm3NC
@vivekchand

Copy link
Copy Markdown
Owner Author

Heads-up from #5762, which adds entitlements.RUNTIME_MARQUEE — the ordered tuple of runtimes named by name in short copy (the GitHub About blurb, the PyPI summary, the README tagline). It exists so & N more has one definition instead of one per surface.

The marquee is now ordered for conversion — Claude Code, Codex, Hermes, OpenClaw — and Muse Code belongs in it, but it can't be added there: an id in that tuple must exist in the catalogue, or the blurb names a runtime nobody can install (test_marquee_names_real_runtimes fails on it). So it belongs on this branch, alongside the other ~18 sites a new runtime touches.

Whichever of us merges second, add one line to clawmetry/entitlements.py:

 RUNTIME_MARQUEE: tuple[str, ...] = (
     "claude_code",
     "codex",
+    "muse_code",
     "hermes",
     "openclaw",
 )

Then python3 scripts/sync_runtime_count.py regenerates SUPPORTED_RUNTIMES.txt, and the README tagline needs the matching name in the same order (test_readme_tagline_names_the_marquee_in_order pins it).

Result once both are in — 31 runtimes, 5 named, and the tail arithmetic stays put:

See your agent think. Zero-config observability & governance for 31 AI agent runtimes: Claude Code, OpenAI Codex, Muse Code, Hermes, OpenClaw & 26 more. Live token costs, sessions, tool calls, crons.

That string is what .github/workflows/sync-github-about.yml pushes to the repo's About box on merge, so Muse Code lands on the storefront the same day it lands in the loader — no follow-up edit.

Not pushing it here: this worktree has uncommitted changes from another session (runtime_probe.py, test_muse_code_runtime_wiring.py).

@8090-software-factory

Copy link
Copy Markdown

⚠️ Drift Bot (ClawMetry): 7 potential drift finding(s)

1. Requirement: Extended Runtime Support

File: CLAUDE.md:6

The CLAUDE.md file states "31 AI agent runtimes" but describes them as "Goose free in OSS, the other 27", which totals only 30 (3 free + 27 paid). With Muse Code added as the 31st runtime, the text should say "the other 28" paid runtimes.

2. Requirement: Extended Runtime Support

File: AGENTS.md:8

The AGENTS.md file states "31 AI agent runtimes" but describes only "Claude Code, Codex, Cursor and 24 more" paid runtimes, totaling 27 paid (3 + 24). With Muse Code added as the 31st runtime, the text should say "25 more" for a total of 28 paid runtimes.

3. Requirement: Extended Runtime Support

File: docs/i18n/es/README.md:16

The Spanish README says "31 runtimes de agentes de IA" but lists "Claude Code, OpenAI Codex y 26 más", which totals only 30 (4 + 26). The PR changed 30 to 31 but failed to update "26 más" to "27 más" to match the new total.

4. Requirement: Extended Runtime Support

File: docs/i18n/fr/README.md:16

The French README says "31 runtimes d'agents IA" but lists "Claude Code, OpenAI Codex et 26 autres", which totals only 30 (4 + 26). The PR changed 30 to 31 but failed to update "26 autres" to "27 autres" to match the new total.

5. Requirement: Extended Runtime Support

File: docs/i18n/pt-BR/README.md:16

The Portuguese (Brazil) README says "31 runtimes de agentes de IA" but lists "Claude Code, OpenAI Codex e mais 26", which totals only 30 (4 + 26). The PR changed 30 to 31 but failed to update "26" to "27" to match the new total.

6. Requirement: Extended Runtime Support

File: docs/i18n/pt-PT/README.md:16

The Portuguese (Portugal) README says "31 runtimes de agentes de IA" but lists "Claude Code, OpenAI Codex e mais 26", which totals only 30 (4 + 26). The PR changed 30 to 31 but failed to update "26" to "27" to match the new total.

7. Requirement: Extended Runtime Support

File: docs/i18n/fil/README.md:16

The Filipino README says "31 AI agent runtimes" but lists "Claude Code, OpenAI Codex at 26 pa", which totals only 30 (4 + 26). This pattern appears across multiple i18n READMEs: es, es-419, fr, pt-BR, pt-PT, fil, el, th all have "30→31" runtime count updates but failed to increment the "X more" count from 26 to 27.

Comment thread CLAUDE.md Outdated

## What is this?
ClawMetry is an open-source, real-time observability and governance layer for **30 AI agent runtimes** — [OpenClaw](https://github.com/openclaw/openclaw), NVIDIA NemoClaw and Goose free in OSS, the other 27 (Claude Code, Codex, Cursor, Copilot, Gemini CLI, Hermes, Aider, opencode, ...) with the optional Pro plugin. `pip install clawmetry && clawmetry` — that's it. Zero config, observation by default.
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 27 (Claude Code, Codex, Cursor, Copilot, Gemini CLI, Hermes, Aider, opencode, ...) with the optional Pro plugin. `pip install clawmetry && clawmetry` — that's it. Zero config, observation by default.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

The CLAUDE.md file states "31 AI agent runtimes" but describes them as "Goose free in OSS, the other 27", which totals only 30 (3 free + 27 paid). With Muse Code added as the 31st runtime, the text should say "the other 28" paid runtimes.

Comment thread AGENTS.md Outdated

## Quick context
ClawMetry is an open-source, real-time observability and governance layer for **30 AI agent runtimes** (OpenClaw, NemoClaw and Goose free in OSS; Claude Code, Codex, Cursor and 24 more with the Pro plugin). The catalogue is `entitlements.FREE_RUNTIMES | PAID_RUNTIMES`; never hardcode the list or the count. `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 **31 AI agent runtimes** (OpenClaw, NemoClaw and Goose free in OSS; Claude Code, Codex, Cursor and 24 more with the Pro plugin). The catalogue is `entitlements.FREE_RUNTIMES | PAID_RUNTIMES`; never hardcode the list or the count. `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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

The AGENTS.md file states "31 AI agent runtimes" but describes only "Claude Code, Codex, Cursor and 24 more" paid runtimes, totaling 27 paid (3 + 24). With Muse Code added as the 31st runtime, the text should say "25 more" for a total of 28 paid runtimes.

github-actions Bot pushed a commit that referenced this pull request Sep 9, 2026
@8090-software-factory

Copy link
Copy Markdown

⚠️ Drift Bot (ClawMetry): 8 potential drift finding(s)

1. Requirement: Extended Runtime Support

File: CLAUDE.md:6

CLAUDE.md states "31 AI agent runtimes" but describes "the other 27" paid runtimes (3 free + 27 = 30 total). With Muse Code as the 31st, it should say "the other 28" for 3 + 28 = 31.

2. Requirement: Extended Runtime Support

File: AGENTS.md:8

AGENTS.md states "31 AI agent runtimes" but lists "Claude Code, Codex, Cursor and 24 more" (3 + 24 = 27 paid). Should say "25 more" for 28 paid runtimes to total 31.

3. Requirement: Extended Runtime Support

File: docs/i18n/es/README.md:16

Spanish README updated runtime count to 31 but still says "26 más" (26 more) instead of "27 más", totaling only 30 (Claude Code, OpenAI Codex + 26 = 28, minus 2 for incomplete listing context).

4. Requirement: Extended Runtime Support

File: docs/i18n/fr/README.md:16

French README updated runtime count to 31 but still says "26 autres" (26 others) instead of "27 autres", maintaining an inconsistent total description.

5. Requirement: Extended Runtime Support

File: docs/i18n/pt-BR/README.md:16

Portuguese (Brazil) README updated runtime count to 31 but still says "26 mais" instead of "27 mais", inconsistent with the new total.

6. Requirement: Extended Runtime Support

File: docs/i18n/pt-PT/README.md:16

Portuguese (Portugal) README updated runtime count to 31 but still says "26 mais" instead of "27 mais", inconsistent with the new total.

7. Requirement: Extended Runtime Support

File: docs/i18n/fil/README.md:16

Filipino README updated runtime count to 31 but still says "26 pa" (26 more) instead of "27 pa", inconsistent with the updated total count.

8. Requirement: Extended Runtime Support

File: docs/i18n/el/README.md:16

Greek README updated runtime count to 31 but still says "26 ακόμη" (26 more) instead of "27 ακόμη", inconsistent with the updated total count.

Comment thread CLAUDE.md Outdated

## What is this?
ClawMetry is an open-source, real-time observability and governance layer for **30 AI agent runtimes** — [OpenClaw](https://github.com/openclaw/openclaw), NVIDIA NemoClaw and Goose free in OSS, the other 27 (Claude Code, Codex, Cursor, Copilot, Gemini CLI, Hermes, Aider, opencode, ...) with the optional Pro plugin. `pip install clawmetry && clawmetry` — that's it. Zero config, observation by default.
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 27 (Claude Code, Codex, Cursor, Copilot, Gemini CLI, Hermes, Aider, opencode, ...) with the optional Pro plugin. `pip install clawmetry && clawmetry` — that's it. Zero config, observation by default.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

CLAUDE.md states "31 AI agent runtimes" but describes "the other 27" paid runtimes (3 free + 27 = 30 total). With Muse Code as the 31st, it should say "the other 28" for 3 + 28 = 31.

Comment thread AGENTS.md Outdated

## Quick context
ClawMetry is an open-source, real-time observability and governance layer for **30 AI agent runtimes** (OpenClaw, NemoClaw and Goose free in OSS; Claude Code, Codex, Cursor and 24 more with the Pro plugin). The catalogue is `entitlements.FREE_RUNTIMES | PAID_RUNTIMES`; never hardcode the list or the count. `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 **31 AI agent runtimes** (OpenClaw, NemoClaw and Goose free in OSS; Claude Code, Codex, Cursor and 24 more with the Pro plugin). The catalogue is `entitlements.FREE_RUNTIMES | PAID_RUNTIMES`; never hardcode the list or the count. `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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

AGENTS.md states "31 AI agent runtimes" but lists "Claude Code, Codex, Cursor and 24 more" (3 + 24 = 27 paid). Should say "25 more" for 28 paid runtimes to total 31.

Copy link
Copy Markdown
Owner Author

✨ auto-fixed: merged latest main into branch (was BEHIND; no conflicts)


Generated by Claude Code

@8090-software-factory

Copy link
Copy Markdown

⚠️ Drift Bot (ClawMetry): 8 potential drift finding(s)

1. Requirement: Extended Runtime Support

File: CLAUDE.md:6

CLAUDE.md states "31 AI agent runtimes" but describes "the other 27" paid runtimes (3 free + 27 = 30 total). With Muse Code as the 31st, it should say "the other 28" to correctly total 31 runtimes.

2. Requirement: Extended Runtime Support

File: AGENTS.md:8

AGENTS.md states "31 AI agent runtimes" but lists "Claude Code, Codex, Cursor and 24 more" (3 + 24 = 27 paid). Should say "25 more" for 28 paid runtimes to total 31.

3. Requirement: Extended Runtime Support

File: docs/i18n/es/README.md:16

Spanish README updated runtime count to 31 but still says "Claude Code, OpenAI Codex y 26 más" instead of "27 más", totaling only 30 (3 + 27). Should increment the descriptive count from 26 to 27.

4. Requirement: Extended Runtime Support

File: docs/i18n/fr/README.md:16

French README updated runtime count to 31 but still says "Claude Code, OpenAI Codex et 26 autres" instead of "27 autres", maintaining an inconsistent total count (3 + 26 = 29). Should increment to 27.

5. Requirement: Extended Runtime Support

File: docs/i18n/pt-BR/README.md:16

Portuguese (Brazil) README updated runtime count to 31 but still says "Claude Code, OpenAI Codex e mais 26" instead of "27", inconsistent with the new total. Should increment the descriptive count from 26 to 27.

6. Requirement: Extended Runtime Support

File: docs/i18n/pt-PT/README.md:16

Portuguese (Portugal) README updated runtime count to 31 but still says "Claude Code, OpenAI Codex e mais 26" instead of "27", inconsistent with the new total. Should increment the descriptive count from 26 to 27.

7. Requirement: Extended Runtime Support

File: docs/i18n/fil/README.md:16

Filipino README updated runtime count to 31 but still says "Claude Code, OpenAI Codex at 26 pa" instead of "27 pa", inconsistent with the new total. Should increment the descriptive count from 26 to 27.

8. Requirement: Extended Runtime Support

File: docs/i18n/el/README.md:16

Greek README updated runtime count to 31 but still says "26 ακόμη" (26 more) instead of "27 ακόμη", inconsistent with the new total. Should increment the descriptive count from 26 to 27.

Comment thread CLAUDE.md Outdated

## What is this?
ClawMetry is an open-source, real-time observability and governance layer for **30 AI agent runtimes** — [OpenClaw](https://github.com/openclaw/openclaw), NVIDIA NemoClaw and Goose free in OSS, the other 27 (Claude Code, Codex, Cursor, Copilot, Gemini CLI, Hermes, Aider, opencode, ...) with the optional Pro plugin. `pip install clawmetry && clawmetry` — that's it. Zero config, observation by default.
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 27 (Claude Code, Codex, Cursor, Copilot, Gemini CLI, Hermes, Aider, opencode, ...) with the optional Pro plugin. `pip install clawmetry && clawmetry` — that's it. Zero config, observation by default.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

CLAUDE.md states "31 AI agent runtimes" but describes "the other 27" paid runtimes (3 free + 27 = 30 total). With Muse Code as the 31st, it should say "the other 28" to correctly total 31 runtimes.

Comment thread AGENTS.md Outdated

## Quick context
ClawMetry is an open-source, real-time observability and governance layer for **30 AI agent runtimes** (OpenClaw, NemoClaw and Goose free in OSS; Claude Code, Codex, Cursor and 24 more with the Pro plugin). The catalogue is `entitlements.FREE_RUNTIMES | PAID_RUNTIMES`; never hardcode the list or the count. `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 **31 AI agent runtimes** (OpenClaw, NemoClaw and Goose free in OSS; Claude Code, Codex, Cursor and 24 more with the Pro plugin). The catalogue is `entitlements.FREE_RUNTIMES | PAID_RUNTIMES`; never hardcode the list or the count. `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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

AGENTS.md states "31 AI agent runtimes" but lists "Claude Code, Codex, Cursor and 24 more" (3 + 24 = 27 paid). Should say "25 more" for 28 paid runtimes to total 31.

github-actions Bot pushed a commit that referenced this pull request Sep 9, 2026
vivekchand added a commit that referenced this pull request Sep 9, 2026
…s from (#5762)

* Make SUPPORTED_RUNTIMES.txt the one runtime list every surface derives from

The GitHub "About" blurb said "26 AI agent runtimes" while the catalogue had
30, and every guard in this repo was green. It is repo *metadata* — no file,
no diff, no CI could see it. The same shape held in the sibling repos, each
carrying its own hand-typed list frozen at whatever the number was the day
someone last edited it: clawmetry-pro said 22, clawmetry-landing 21,
clawmetry-cloud 14. Four lists, four numbers, none visible to the others.

This repo already derived the *count* (entitlements.py -> RUNTIME_COUNT ->
sync_runtime_count.py). What it never exported was the *list*, so nothing
outside it could derive anything.

- SUPPORTED_RUNTIMES.txt: generated export of the catalogue — id, label,
  free/paid tier, clawmetry.com path per runtime, plus COUNT and the
  canonical one-line BLURB. Deliberately trivial grammar (comments,
  KEY = value, TAB-separated rows) so a five-line parser in any language
  reads it; parse_export() is the reference implementation.
- entitlements.RUNTIME_MARQUEE: the runtimes named by name in short copy, so
  "& N more" has one definition instead of one per surface.
- sync_runtime_count.py grows --about (prints the blurb) and generates +
  --checks the export alongside the prose counts it already guarded.
- sync-github-about.yml pushes the derived blurb to the repository
  description on main, so the surface with no CI finally has one. It warns
  and prints the text rather than failing when REPO_ADMIN_TOKEN is unset.
- README tagline: linked OpenClaw and NemoClaw but not Claude Code or Codex,
  which read as "those two are more supported". Links dropped from the
  tagline (the grid below links all 30) and pointed at the list instead.
- FLYWHEEL/CLAUDE/AGENTS point at the file as the single source.

tests/test_supported_runtimes_file.py pins the export against the imported
catalogue, the metadata against its own rows, the blurb under GitHub's 350
character cap, and "& N more" against the names actually printed. Verified
red first: adding a runtime to entitlements.py alone fails 3 of its 7 tests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F6yVfSnXoSNgz1E55dm3NC

* Lead the marquee with Claude Code and Codex, and derive the tagline from it

The blurb opened with OpenClaw and NVIDIA NemoClaw — the names someone who
already knows us recognises, not the names a stranger searches for. Claude
Code and Codex now lead, then Hermes, then OpenClaw.

NemoClaw drops out of the marquee: a strong logo but a weak search term, and
every name in the tuple costs one from the "& N more" tail. It keeps its
free-tier billing in the README's "What's free" row and its own grid link.

NAMED_IN_TAGLINE was a literal 4 — the same bug one layer down, since it
would not have followed the marquee anywhere. It is now len(marquee()), and
a new test pins the README tagline to RUNTIME_MARQUEE in order, so the
tagline and the About blurb cannot name different runtimes while sharing the
same "& N more" arithmetic.

Muse Code is not added here: an id in the marquee must exist in the
catalogue, or the blurb names a runtime nobody can install. It goes in on
the branch that lands the runtime (#5761).

Verified red: growing the marquee by one without touching the README fails
the tagline test and the export check, and --check reports the stale
"& 26 more".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F6yVfSnXoSNgz1E55dm3NC

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@8090-software-factory

Copy link
Copy Markdown

⚠️ Drift Bot (ClawMetry): 8 potential drift finding(s)

1. Requirement: Extended Runtime Support

File: CLAUDE.md:6

CLAUDE.md states "31 AI agent runtimes" but describes "the other 27" paid runtimes (3 free + 27 = 30 total). With Muse Code as the 31st, it should say "the other 28" to correctly total 31 runtimes.

2. Requirement: Extended Runtime Support

File: AGENTS.md:8

AGENTS.md states "31 AI agent runtimes" but lists "Claude Code, Codex, Cursor and 24 more" (3 + 24 = 27 paid). Should say "25 more" for 28 paid runtimes to total 31.

3. Requirement: Extended Runtime Support

File: docs/i18n/es/README.md:16

Spanish README updated runtime count to 31 but still says "Claude Code, OpenAI Codex y 26 más" instead of "27 más", totaling only 30 (3 + 26). Should increment the descriptive count from 26 to 27.

4. Requirement: Extended Runtime Support

File: docs/i18n/fr/README.md:16

French README updated runtime count to 31 but still says "Claude Code, OpenAI Codex et 26 autres" instead of "27 autres", totaling only 30 (3 + 26). Should increment the descriptive count from 26 to 27.

5. Requirement: Extended Runtime Support

File: docs/i18n/pt-BR/README.md:16

Portuguese (Brazil) README updated runtime count to 31 but still says "Claude Code, OpenAI Codex e mais 26" instead of "27", totaling only 30 (3 + 26). Should increment the descriptive count from 26 to 27.

6. Requirement: Extended Runtime Support

File: docs/i18n/pt-PT/README.md:16

Portuguese (Portugal) README updated runtime count to 31 but still says "Claude Code, OpenAI Codex e mais 26" instead of "27", totaling only 30 (3 + 26). Should increment the descriptive count from 26 to 27.

7. Requirement: Extended Runtime Support

File: docs/i18n/fil/README.md:16

Filipino README updated runtime count to 31 but still says "Claude Code, OpenAI Codex at 26 pa" instead of "27 pa", totaling only 30 (3 + 26). Should increment the descriptive count from 26 to 27.

8. Requirement: Extended Runtime Support

File: docs/i18n/es-419/README.md:16

Spanish (Latin America) README updated runtime count to 31 but still says "Claude Code, OpenAI Codex y 26 más" instead of "27 más", totaling only 30 (3 + 26). Should increment the descriptive count from 26 to 27.

Comment thread CLAUDE.md Outdated

## What is this?
ClawMetry is an open-source, real-time observability and governance layer for **30 AI agent runtimes** — [OpenClaw](https://github.com/openclaw/openclaw), NVIDIA NemoClaw and Goose free in OSS, the other 27 (Claude Code, Codex, Cursor, Copilot, Gemini CLI, Hermes, Aider, opencode, ...) with the optional Pro plugin. `pip install clawmetry && clawmetry` — that's it. Zero config, observation by default.
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 27 (Claude Code, Codex, Cursor, Copilot, Gemini CLI, Hermes, Aider, opencode, ...) with the optional Pro plugin. `pip install clawmetry && clawmetry` — that's it. Zero config, observation by default.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

CLAUDE.md states "31 AI agent runtimes" but describes "the other 27" paid runtimes (3 free + 27 = 30 total). With Muse Code as the 31st, it should say "the other 28" to correctly total 31 runtimes.

Comment thread AGENTS.md Outdated

## Quick context
ClawMetry is an open-source, real-time observability and governance layer for **30 AI agent runtimes** (OpenClaw, NemoClaw and Goose free in OSS; Claude Code, Codex, Cursor and 24 more with the Pro plugin). The catalogue is `entitlements.FREE_RUNTIMES | PAID_RUNTIMES`; never hardcode the list or the count. `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 **31 AI agent runtimes** (OpenClaw, NemoClaw and Goose free in OSS; Claude Code, Codex, Cursor and 24 more with the Pro plugin). The catalogue is `entitlements.FREE_RUNTIMES | PAID_RUNTIMES`; never hardcode the list or the count. `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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

AGENTS.md states "31 AI agent runtimes" but lists "Claude Code, Codex, Cursor and 24 more" (3 + 24 = 27 paid). Should say "25 more" for 28 paid runtimes to total 31.

Comment thread docs/i18n/es/README.md Outdated
<a href="https://www.producthunt.com/products/clawmetry?embed=true&utm_source=badge-top-post-badge&utm_medium=badge&utm_campaign=badge-clawmetry-for-openclaw" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=1081207&theme=light&period=daily&t=1771491508782" alt="ClawMetry - #5 Product of the Day on Product Hunt" width="250" height="54" /></a>

**Observa a tu agente pensar.** Observabilidad en tiempo real para **30 runtimes de agentes de IA**: [OpenClaw](https://github.com/openclaw/openclaw), [NVIDIA NemoClaw](https://github.com/NVIDIA/NemoClaw), Claude Code, OpenAI Codex y 26 más. Un solo panel para toda tu flota de agentes.
**Observa a tu agente pensar.** Observabilidad en tiempo real para **31 runtimes de agentes de IA**: [OpenClaw](https://github.com/openclaw/openclaw), [NVIDIA NemoClaw](https://github.com/NVIDIA/NemoClaw), Claude Code, OpenAI Codex y 26 más. Un solo panel para toda tu flota de agentes.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

Spanish README updated runtime count to 31 but still says "Claude Code, OpenAI Codex y 26 más" instead of "27 más", totaling only 30 (3 + 26). Should increment the descriptive count from 26 to 27.

vivekchand and others added 4 commits September 9, 2026 18:21
Meta ships two products called Muse. The consumer personal agent runs
wholly inside Meta's "Muse Secure VM" with no API and no local
footprint, so it cannot be observed and is deliberately NOT a runtime
here; a guard asserts it never enters the catalogue. Muse Code, Meta's
terminal coding agent on Muse Spark, is a local process with a
documented protocol, and that is what this adds.

It is the first runtime read over a PROTOCOL rather than off disk.
Muse publishes no session-log schema, so rather than reverse-engineer
one the adapter (clawmetry-pro) spawns `muse serve` and calls the two
documented read-only MSP 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. The adapter requests no capabilities -- in
particular not `userShell`, which would let the connection run commands
in the workspace -- and MSP's control half (turn/start,
approval/decide) is deliberately not wired: that would be a fifth way
to affect an agent and needs the CLAUDE.md locks.

OSS side:
* catalogue, loader tuple, labels, landing path and every session-prefix
  set that splits "muse_code:<id>"
* pricing: the muse-spark entries were a $1.00/$3.00 placeholder with a
  comment asking to be updated once Meta published rates. Meta has, so
  they now carry the published Meta Model API figures. The two 1.3
  variants are listed separately because contributor is 12.5x cheaper on
  input and ~21x on output -- one family rate would misreport whichever
  tier the user is not on. Before this, every muse-spark model fell
  through to the (1.0, 3.0) unknown-provider default.
* MCP: Muse speaks MCP, so it is registered rather than declared
  MCP-less, with a `json_muse` writer for its own mcp_servers/transport
  shape. Creating the settings file seeds `schema_version: 1` -- without
  it Muse FAILS AT STARTUP, so a bare {"mcp_servers": ...} would leave a
  user unable to launch Muse at all. Uninstall never seeds.
* control: Muse Code runs a real local process tree, but MSP reports no
  pid anywhere, so a resolver would have to match argv+cwd and that has
  not been verified against a real `muse`. It is therefore `unknown`,
  not `unsupported` -- "unsupported" asserts no per-session process
  exists here ever, which would be false -- and no buttons are offered.
  A resume hint covers the gap.
* runtime_records declares tokens on-disk, cost derived, and names the
  one honest gap: MSP's counted-once prompt total rides a live view
  notification a cold read does not serve, so our input figure is the
  raw provider counter and cached tokens are never added to it.

Runtime count 30 -> 31 via scripts/sync_runtime_count.py.

No-PRD: adding a vendor runtime adapter to an existing, documented
extension seam; no new product surface or user-facing behaviour beyond
one more runtime in the existing catalogue.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019cGLYe3MnE6pfMupvvnTJK
Installed muse 1.0.3 and ran the adapter against it. The handshake,
session/list and session/read all work as written, but two path facts
taken from the docs were wrong and would have shipped:

* The muse HOME is `$XDG_DATA_HOME/muse` (default `~/.local/share/muse`)
  — `InitializeResult.museHome` returns exactly that — and it holds
  `session-index.db` plus `sessions/YYYY/MM/DD/<uuid>/session.jsonl`.
  `~/.config/muse` holds only settings.json and auth.json. The adapter
  had these as one directory and looked for settings in the store.
* macOS follows XDG here; it does NOT use ~/Library/Application Support.
  `MUSE_HOME` is not honoured by the binary at all (setting it changes
  nothing) — `XDG_DATA_HOME` is the only lever.

The probe now leads with `session-index.db`, because that is the only
one of these that proves Muse actually RAN: `~/.config/muse` is created
by a first launch that FAILED for want of credentials (observed), so the
bare directory proves installation at most and is no longer listed.

detect() reports museHome, configDir, hasSessionIndex and hasSettings
separately, so a reader can see which evidence was found rather than
trusting one boolean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019cGLYe3MnE6pfMupvvnTJK
test_phase4_adapter_move: bump expected adapter count 28 → 29 for Muse Code.

test_self_diagnostics: _seed / _foreign_present / _ours_present /
test_hand_written_entry_is_never_deleted all used the generic mcpServers
fallthrough for muse_code, but json_muse format stores servers under
mcp_servers. Add explicit json_muse branches so install, status, and
uninstall round-trips work correctly for the new runtime.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A6He4362SAvFvEgXV5rZv2
scripts/sync_runtime_count.py --check was failing because app.js
still referenced 30 runtimes after the 31st was added.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N2PaCRunX6NzsP9KADLJBw

Copy link
Copy Markdown
Owner Author

Non-mergeable PR sweep — 2026-09-09

Automated sweep across all 3 repos (clawmetry, clawmetry-cloud, clawmetry-landing).

bucket count PRs
rebased 1 clawmetry #5761 (this PR)
comment-only (non-trivial conflict) 0
skipped — draft 3 clawmetry #5763, #5730, #5705
skipped — bot-authored 9 clawmetry #5769, #5757, #5376, #5259, #5258, #5257, #5256, #5255, #5153
skipped — clean / blocked-by-CI (not a git conflict) 28 all others (mergeable_state ≠ dirty)
skipped — external contributor 0

What was done on this PR

mergeable_state was dirty (merge conflict in 4 doc files: AGENTS.md, CLAUDE.md, FLYWHEEL.md, README.md). All conflicts were in the runtime-count prose (30 → 31) where main concurrently introduced SUPPORTED_RUNTIMES.txt as the authoritative source. Resolution: took main's richer prose (with SUPPORTED_RUNTIMES.txt references) and preserved this branch's count update (31). Rebased 4 commits onto origin/main; force-pushed with --force-with-lease.

mergeable_state is now blocked (CI running, no git conflict).


Generated by Claude Code

@8090-software-factory

Copy link
Copy Markdown

⚠️ Drift Bot (ClawMetry): 8 potential drift finding(s)

1. Requirement: Extended Runtime Support

File: CLAUDE.md:6

CLAUDE.md states "31 AI agent runtimes" but describes "the other 27" paid runtimes. With Muse Code as the 31st, it should say "the other 28" to correctly total 31 runtimes (3 free + 28 paid).

2. Requirement: Extended Runtime Support

File: AGENTS.md:8

AGENTS.md states "31 AI agent runtimes" but lists "Claude Code, Codex, Cursor and 24 more" (totaling 27 paid). Should say "25 more" for 28 paid runtimes to correctly total 31.

3. Requirement: Extended Runtime Support

File: docs/i18n/es/README.md:16

Spanish README updated runtime count to 31 but still says "Claude Code, OpenAI Codex y 26 más" instead of "27 más", totaling only 30 (3 + 27). The descriptive count was not incremented to match the new total.

4. Requirement: Extended Runtime Support

File: docs/i18n/fr/README.md:16

French README updated runtime count to 31 but still says "Claude Code, OpenAI Codex et 26 autres" instead of "27 autres", totaling only 30. The descriptive count was not incremented to match the new total.

5. Requirement: Extended Runtime Support

File: docs/i18n/pt-BR/README.md:16

Portuguese (Brazil) README updated runtime count to 31 but still says "Claude Code, OpenAI Codex e mais 26" instead of "27", totaling only 30. The descriptive count was not incremented to match the new total.

6. Requirement: Extended Runtime Support

File: docs/i18n/pt-PT/README.md:16

Portuguese (Portugal) README updated runtime count to 31 but still says "Claude Code, OpenAI Codex e mais 26" instead of "27", totaling only 30. The descriptive count was not incremented to match the new total.

7. Requirement: Extended Runtime Support

File: docs/i18n/fil/README.md:16

Filipino README updated runtime count to 31 but still says "Claude Code, OpenAI Codex at 26 pa" instead of "27 pa", totaling only 30. The descriptive count was not incremented to match the new total.

8. Requirement: Extended Runtime Support

File: docs/i18n/es-419/README.md:16

Spanish (Latin America) README updated runtime count to 31 but still says "Claude Code, OpenAI Codex y 26 más" instead of "27 más", totaling only 30. The descriptive count was not incremented to match the new total.

…rge)

I left the Meta cache arm out of estimate_event_cost_usd on the grounds
that MSP documents `cachedTokens` as sitting either inside or beside
`inputTokens` depending on provider, and wiring a rate on a guessed
convention moves real dollars on a guess.

Running a real Muse Code turn settled it. Each `session/tokenUsage`
leg's `cumulative.promptTokens` delta equals that leg's `inputTokens`
exactly, cache included — so for Meta the cached tokens are INSIDE
input, the OpenAI convention, and the cached slice replaces its ordinary
input charge rather than adding to it.

It matters more than the usual rounding: 82.7% of the measured turn's
input was cache reads, so the flat input rate over-charged 5.1x
($0.016280 vs the correct $0.003204).

A flat multiplier cannot serve both tiers either — standard's cached
rate is 0.12x its input rate and contributor's is 0.02x — hence an
explicit _META_CACHED_RATES table with longest-prefix matching, mirroring
MODEL_OVERRIDES.

Also corrects the runtime_records evidence sentence, which claimed token
counters ride each transcript item. They do not; that was the bug.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019cGLYe3MnE6pfMupvvnTJK
Comment thread CLAUDE.md Outdated

## What is this?
ClawMetry is an open-source, real-time observability and governance layer for **30 AI agent runtimes** — [OpenClaw](https://github.com/openclaw/openclaw), NVIDIA NemoClaw and Goose free in OSS, the other 27 (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 **31 AI agent runtimes** — [OpenClaw](https://github.com/openclaw/openclaw), NVIDIA NemoClaw and Goose free in OSS, the other 27 (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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

CLAUDE.md states "31 AI agent runtimes" but describes "the other 27" paid runtimes. With Muse Code as the 31st, it should say "the other 28" to correctly total 31 runtimes (3 free + 28 paid).

Comment thread AGENTS.md Outdated

## Quick context
ClawMetry is an open-source, real-time observability and governance layer for **30 AI agent runtimes** (OpenClaw, NemoClaw and Goose free in OSS; Claude Code, Codex, Cursor and 24 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 **31 AI agent runtimes** (OpenClaw, NemoClaw and Goose free in OSS; Claude Code, Codex, Cursor and 24 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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

AGENTS.md states "31 AI agent runtimes" but lists "Claude Code, Codex, Cursor and 24 more" (totaling 27 paid). Should say "25 more" for 28 paid runtimes to correctly total 31.

#5762 made SUPPORTED_RUNTIMES.txt the one list every other repo reads,
and it landed on main after this branch opened, so Muse Code was in the
catalogue but missing from the generated export — exactly the "in one
list, absent from the other" split that file exists to close.

Regenerated from entitlements.py rather than hand-edited.

RUNTIME_MARQUEE is deliberately left alone: it is the curated short list
of names used in tweet-length copy, not a membership roll, and a 31st
runtime does not belong in a four-name marquee.

Also exempts one line the regenerator rewrote by mistake. The comment
above RUNTIME_MARQUEE narrates a PAST bug — the README once said "& 26
more" next to "30 runtimes" — and bumping that 30 to 31 makes the
sentence describe a state that never happened. There was already a
precedent for this ("historic bug narrative" on runtime_memory.py), so
this joins it rather than reshaping the prose.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019cGLYe3MnE6pfMupvvnTJK
@8090-software-factory

Copy link
Copy Markdown

⚠️ Drift Bot (ClawMetry): 8 potential drift finding(s)

1. Requirement: Extended Runtime Support

File: CLAUDE.md:6

CLAUDE.md states "31 AI agent runtimes" but describes "the other 27" paid runtimes (3 free + 27 = 30 total). With Muse Code as the 31st, it should say "the other 28" to correctly total 31 runtimes.

2. Requirement: Extended Runtime Support

File: AGENTS.md:8

AGENTS.md states "31 AI agent runtimes" but lists "Claude Code, Codex, Cursor and 24 more" (3 + 24 = 27 total). Should say "25 more" for 28 paid runtimes to correctly total 31.

3. Requirement: Extended Runtime Support

File: docs/i18n/es/README.md:16

Spanish README updated runtime count to 31 but still says "Claude Code, OpenAI Codex y 26 más" instead of "27 más", totaling only 30 (OpenClaw, NemoClaw + 26 = 28, not 31). Should increment the descriptive count from 26 to 27.

4. Requirement: Extended Runtime Support

File: docs/i18n/fr/README.md:16

French README updated runtime count to 31 but still says "Claude Code, OpenAI Codex et 26 autres" instead of "27 autres", totaling only 30. Should increment the descriptive count from 26 to 27.

5. Requirement: Extended Runtime Support

File: docs/i18n/pt-BR/README.md:16

Portuguese (Brazil) README updated runtime count to 31 but still says "Claude Code, OpenAI Codex e mais 26" instead of "27", totaling only 30. Should increment the descriptive count from 26 to 27.

6. Requirement: Extended Runtime Support

File: docs/i18n/pt-PT/README.md:16

Portuguese (Portugal) README updated runtime count to 31 but still says "Claude Code, OpenAI Codex e mais 26" instead of "27", totaling only 30. Should increment the descriptive count from 26 to 27.

7. Requirement: Extended Runtime Support

File: docs/i18n/fil/README.md:16

Filipino README updated runtime count to 31 but still says "Claude Code, OpenAI Codex at 26 pa" instead of "27 pa", totaling only 30. Should increment the descriptive count from 26 to 27.

8. Requirement: Extended Runtime Support

File: docs/i18n/es-419/README.md:16

Spanish (Latin America) README updated runtime count to 31 but still says "Claude Code, OpenAI Codex y 26 más" instead of "27 más", totaling only 30. Should increment the descriptive count from 26 to 27.

Comment thread CLAUDE.md Outdated

## What is this?
ClawMetry is an open-source, real-time observability and governance layer for **30 AI agent runtimes** — [OpenClaw](https://github.com/openclaw/openclaw), NVIDIA NemoClaw and Goose free in OSS, the other 27 (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 **31 AI agent runtimes** — [OpenClaw](https://github.com/openclaw/openclaw), NVIDIA NemoClaw and Goose free in OSS, the other 27 (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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

CLAUDE.md states "31 AI agent runtimes" but describes "the other 27" paid runtimes (3 free + 27 = 30 total). With Muse Code as the 31st, it should say "the other 28" to correctly total 31 runtimes.

Comment thread AGENTS.md Outdated

## Quick context
ClawMetry is an open-source, real-time observability and governance layer for **30 AI agent runtimes** (OpenClaw, NemoClaw and Goose free in OSS; Claude Code, Codex, Cursor and 24 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 **31 AI agent runtimes** (OpenClaw, NemoClaw and Goose free in OSS; Claude Code, Codex, Cursor and 24 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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

AGENTS.md states "31 AI agent runtimes" but lists "Claude Code, Codex, Cursor and 24 more" (3 + 24 = 27 total). Should say "25 more" for 28 paid runtimes to correctly total 31.

Drift Bot flagged 8 surfaces claiming 31 runtimes while their prose still
added up to 30, and it was right on every one.

sync_runtime_count.py updates the headline number but deliberately does
not touch the localised "and N more" phrasings — it prints them as a
note instead, because the wording varies too much per locale to rewrite
unattended. I read that note when I ran it and did not act on it, which
is precisely how a note-only warning decays into drift.

Each i18n tagline names 4 runtimes, so N is 31 - 4 = 27, matching the
English README's auto-derived "& 27 more":

  ar de es es-419 fil fr hi pt-BR pt-PT   26 -> 27 more
  ar de hi                                30 -> 31 runtimes (the localised
                                          headline the regex never matched)
  CLAUDE.md    3 free + "the other 27" -> 28
  AGENTS.md    3 free + 3 named + 24   -> 25

Drift Bot flagged 6 of these; ar, de and hi were stale in the other
direction (still "30 runtimes", so internally consistent and invisible to
a check that only compares the two numbers on one line) and are fixed
here too.

Follow-up worth having, not taken in this PR: the number IS derivable
(total minus names) and the script already locates every one of these
lines, so it could rewrite just the digit rather than printing a note
nobody acts on.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019cGLYe3MnE6pfMupvvnTJK
@8090-software-factory

Copy link
Copy Markdown

⚠️ Drift Bot (ClawMetry): 2 potential drift finding(s)

1. Requirement: Extended Runtime Support

File: docs/i18n/el/README.md:16

Greek README updated runtime count to 31 but still says "& 26 ακόμη" instead of "27 ακόμη", totaling only 30. The descriptive count was not incremented to match the new total.

2. Requirement: Extended Runtime Support

File: docs/i18n/th/README.md:16

Thai README updated runtime count to 31 but still says "อีก 26 ตัว" instead of "27 ตัว", totaling only 30. The descriptive count was not incremented to match the new total.

Comment thread docs/i18n/el/README.md Outdated
<a href="https://www.producthunt.com/products/clawmetry?embed=true&utm_source=badge-top-post-badge&utm_medium=badge&utm_campaign=badge-clawmetry-for-openclaw" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=1081207&theme=light&period=daily&t=1771491508782" alt="ClawMetry - #5 Product of the Day on Product Hunt" width="250" height="54" /></a>

**Δες τον agent σου να σκέφτεται.** Παρατήρηση σε πραγματικό χρόνο για **30 runtimes AI agent**: [OpenClaw](https://github.com/openclaw/openclaw), [NVIDIA NemoClaw](https://github.com/NVIDIA/NemoClaw), Claude Code, OpenAI Codex & 26 ακόμη. Ένας πίνακας ελέγχου για ολόκληρο τον στόλο σου από agents.
**Δες τον agent σου να σκέφτεται.** Παρατήρηση σε πραγματικό χρόνο για **31 runtimes AI agent**: [OpenClaw](https://github.com/openclaw/openclaw), [NVIDIA NemoClaw](https://github.com/NVIDIA/NemoClaw), Claude Code, OpenAI Codex & 26 ακόμη. Ένας πίνακας ελέγχου για ολόκληρο τον στόλο σου από agents.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

Greek README updated runtime count to 31 but still says "& 26 ακόμη" instead of "27 ακόμη", totaling only 30. The descriptive count was not incremented to match the new total.

Comment thread docs/i18n/th/README.md Outdated
<a href="https://www.producthunt.com/products/clawmetry?embed=true&utm_source=badge-top-post-badge&utm_medium=badge&utm_campaign=badge-clawmetry-for-openclaw" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=1081207&theme=light&period=daily&t=1771491508782" alt="ClawMetry - #5 Product of the Day on Product Hunt" width="250" height="54" /></a>

**ดูความคิดของเอเจนต์คุณแบบเรียลไทม์** ระบบสังเกตการณ์แบบเรียลไทม์สำหรับ **30 AI agent runtimes**: [OpenClaw](https://github.com/openclaw/openclaw), [NVIDIA NemoClaw](https://github.com/NVIDIA/NemoClaw), Claude Code, OpenAI Codex และอีก 26 ตัว แดชบอร์ดเดียวสำหรับกองเอเจนต์ทั้งหมดของคุณ
**ดูความคิดของเอเจนต์คุณแบบเรียลไทม์** ระบบสังเกตการณ์แบบเรียลไทม์สำหรับ **31 AI agent runtimes**: [OpenClaw](https://github.com/openclaw/openclaw), [NVIDIA NemoClaw](https://github.com/NVIDIA/NemoClaw), Claude Code, OpenAI Codex และอีก 26 ตัว แดชบอร์ดเดียวสำหรับกองเอเจนต์ทั้งหมดของคุณ

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Drift Bot (ClawMetry) — Requirement: Extended Runtime Support

Thai README updated runtime count to 31 but still says "อีก 26 ตัว" instead of "27 ตัว", totaling only 30. The descriptive count was not incremented to match the new total.

Drift Bot flagged 2 more (el, th). Fixing only those would have repeated
the mistake that produced them: I hand-listed the phrasings I expected
("y 26 más", "et 26 autres", ...) instead of sweeping every locale, so I
fixed the ones I could think of and missed the rest.

Swept all 35 instead, matching on the NUMBER rather than the wording, and
found 24 stale — Drift Bot could only see 2 of them. The other 22 said
"30 runtimes ... 26 more": internally consistent, so invisible to a check
that compares the two numbers on one line, and wrong against a catalogue
of 31.

Two more were invisible to the sweep itself: bn and fa write their
numerals in native script (২৬/৩০, ۲۶/۳۰), which no ASCII \d pattern
matches. Those are fixed by mapping digit VALUES to codepoints rather
than typing glyphs, and the final check normalises Bengali, Persian,
Arabic-Indic and Devanagari digits before comparing.

All 35 locales now read 31 runtimes / 27 more, agreeing with the English
README's auto-derived "& 27 more" (31 total - 4 named).

Replacement is guarded: a tagline where the number appears more than once
is skipped and reported rather than rewritten, so a locale whose sentence
happens to contain another 26 is left for a human.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019cGLYe3MnE6pfMupvvnTJK
@8090-software-factory

Copy link
Copy Markdown

✅ Drift Bot (ClawMetry): no drift detected

Drift Bot analyzed the changed files against this project's blueprints and requirements and found no drift.

github-actions Bot pushed a commit that referenced this pull request Sep 9, 2026
@vivekchand
vivekchand merged commit feeff72 into main Sep 9, 2026
51 checks passed
@vivekchand
vivekchand deleted the muse-code-runtime branch September 9, 2026 19:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants