Operations
Plans and entitlements#
ClawMetry is open core. The dashboard, the store, the CLI and the whole observation path are free and always will be. What a paid plan adds is breadth — more runtimes, more nodes, more channels, longer retention — and the governance and analysis features built on top.
This page is the reference for what is in which tier and how the answer is computed. To ask the question about your install, use the entitlement commands.
The tiers#
| Tier id | Label | Source |
|---|---|---|
oss | OSS | No license, no cloud account. The default. |
cloud_free | Free | A cloud account with no paid plan. |
trial | Trial | A time-boxed grant with paid-tier reach. |
cloud_starter | Starter | Paid, hosted. |
cloud_pro | Pro | Paid, hosted. |
pro | Self-hosted Pro | Paid, your own ingest. |
enterprise | Enterprise | Paid, with the compliance surface. |
They are ranked in exactly that order. tier_rank() is what every "is this
enough?" and "what is the next tier?" question resolves against; Trial ranks
between Free and Starter, which is why a trial reaches paid runtimes but not
every Pro feature.
The five axes#
An entitlement is not one number. Five independent axes are checked separately, and a plan can be sufficient on four and short on the fifth.
| Axis | Question |
|---|---|
| Features | Is this feature in the tier's set? |
| Runtimes | Is this runtime id in the tier's set? |
| Channels | How many chat channels may run concurrently? |
| Nodes | How many machines may register? |
| Retention | How far back may the store keep data? |
Capacity#
| Tier | Nodes | Channels | Retention |
|---|---|---|---|
| OSS | 1 | 3 | 7 days |
| Free | 1 | 3 | 7 days |
| Trial | unlimited | unlimited | 30 days |
| Starter | unlimited | unlimited | 30 days |
| Pro (cloud) | unlimited | unlimited | 90 days |
| Self-hosted Pro | unlimited | unlimited | 90 days |
| Enterprise | unlimited | unlimited | unlimited |
Channels and nodes are capacity-scoped, not catalogue-scoped: every one of
the chat adapters is free code, and what a tier bounds is how many you run at
once. That is why clawmetry channels --why takes a count rather than an
adapter name.
CLAWMETRY_RETENTION_DAYS can shorten the window but never lengthen it past
the tier cap. clawmetry retention --json shows both the cap and the effective
value.
Runtimes#
3 of the 30 supported runtimes are free at every tier:
| Runtime | Why free |
|---|---|
| OpenClaw | The reference runtime ClawMetry grew up around. |
| Goose | Free adapter. |
| NemoClaw | Free adapter. |
The other 27 — Claude Code, Codex, Cursor, Copilot, Gemini CLI, Aider, Cline, OpenHands, Devin and the rest — unlock at Trial and above. There is no partial runtime ladder: every paid tier gets the whole set. See Runtime support for what each one exposes.
Features#
Free at every tier, including OSS with no account:
| Feature | |
|---|---|
| Overview | Sessions |
| Transcripts | Usage |
| Brain | Flow |
| Tracing | Health |
| Logs | Crons |
| Channels | NeMo Governance |
Added at Starter:
| Feature | What it is |
|---|---|
| Cloud sync | Encrypted snapshots to the hosted dashboard. |
| Multi-runtime | More than one runtime ingesting on a node. |
| Multi-node fleet | The fleet view across machines. |
| All channels | The concurrent-channel cap lifts. |
| Approval queue | The human-in-the-loop queue behind pre-tool gates. |
| Budget limits | Enforced spend ceilings. |
| Per-runtime health timeline | Health broken out per runtime rather than aggregate. |
Added at Pro:
| Feature | What it is |
|---|---|
| Anomaly detection | Statistical outliers in token and cost series. |
| Cost optimizer | Model-routing and waste recommendations. |
| Per-run waste flags | Which specific run burned money for nothing. |
| Per-run compare | Two runs side by side. |
| Error triage | Grouped failures with likely cause. |
| Eval suite | Scored evaluation runs. |
| Self-Evolve | Agent-driven improvement loops. |
| Asset registry | Tracked models, prompts and skills. |
| Tool policy | Per-tool permission rules. |
| Custom alerts | Alert rules beyond the built-ins. |
| Alert webhooks | Alerts delivered to your endpoint. |
| Custom webhooks | Arbitrary event webhooks. |
| Custom runtime ingest | Push a runtime we do not ship an adapter for. |
| OTel export | Ship ClawMetry's data out over OpenTelemetry. |
Added at Enterprise:
| Feature | What it is |
|---|---|
| SSO | Single sign-on. |
| RBAC | Role-based access control. |
| Audit logs | Who did what in ClawMetry itself. |
| SIEM export | Feed a security information and event management system. |
| EU AI Act Evidence Pack | The compliance artefact. |
| Custom data residency | Where the data physically lives. |
| Air-gapped license | Activation with no outbound network. |
Feature ids are stable
The strings in these tables — anomaly_detection, per_run_compare,
siem_export — are the ids the API and CLI use. clawmetry features --why
anomaly_detection and
GET /api/entitlement/lock-reason?feature=anomaly_detection take exactly these.
How the tier is resolved#
Three sources, checked in order. The first one that answers wins:
- A local license file —
~/.clawmetry/license.key. This is what
self-hosted Pro, Enterprise and air-gapped installs use.
- The cloud plan cache —
~/.clawmetry/cloud_plan.json, written by the
daemon from the heartbeat. This is how a hosted plan reaches the dashboard process, which does its own entitlement resolution and never talks to the billing system directly.
- OSS free — the fallback, and also what any failure resolves to. A broken
license file or an unreachable cloud never escalates privileges and never crashes the app; it degrades to free.
The result is cached for 60 seconds. That is why a plan change can take up
to a minute to show in the UI, and why clawmetry diagnose prints the cache
age.
clawmetry diagnose # which source answered, cache age, enforcement stateThe diagnostic reports the license path and whether a file is there, the cloud plan path and size, the enforcement env var, the cache age and TTL, whether the next call will hit the cache, and the retention override — enough to tell "no license" apart from "license present but not being read".
Grace mode#
Grace is on by default. While grace is true, every check answers
allowed regardless of the resolved tier: allows_feature, allows_runtime
and allows_node_count all short-circuit to true.
clawmetry tier --json | jq '{tier, grace, enforced}'This is deliberate — the paywall is announced before it bites, and a node that is quietly ingesting a paid runtime today under grace should not stop dead on an upgrade. It is also the answer to "why is this runtime marked locked in the UI but still showing sessions?"
| Variable | Effect |
|---|---|
CLAWMETRY_ENFORCE | 1/true/yes/on turns enforcement on for this node. |
CLAWMETRY_ENFORCE_AT | The announced enforce-at moment — ISO date, ISO datetime, or epoch seconds. Used to preview what a future date will lock. |
CLAWMETRY_ENFORCE_AT is what the *_at variants of every entitlement query
resolve against, so you can ask "what will be locked when enforcement starts?"
before it does.
Expiry#
A trial or a term license carries an expiry. After it passes:
- Paid features stop being allowed. Free features are unaffected.
- Paid runtimes stop being allowed. The free runtimes keep ingesting.
- The node limit collapses to 1.
Nothing is deleted and the daemon keeps running. An expired install is a free install, not a broken one. A user who lets a trial lapse can also opt into free-only mode, which the dashboard surfaces as an explicit banner rather than a silently narrower product.
Where the answer is enforced#
The entitlement is one verdict read from many places, never re-derived:
| Surface | How |
|---|---|
| Dashboard | GET /api/entitlement — the tier, the sets, grace, and the lock reasons the UI renders next to disabled controls. |
| CLI | clawmetry tier / runtimes / features / channels / nodes / retention / bundle. |
| Daemon ingest | A paid runtime's adapter is only loaded when the entitlement allows it. |
| Guard enforcement | One of the three locks on autonomous action, and it fails closed — an unresolvable entitlement means no signal is sent. |
That last row is the one asymmetry worth knowing: everywhere else a failure degrades to free and keeps working, but a control path that could signal a real process refuses rather than guesses.
Choosing a tier#
clawmetry bundle \
--runtimes claude_code,cursor,codex \
--features anomaly_detection,cost_optimizer \
--channels 6 --retention-days 90 --nodes 4This answers the actual purchasing question — the cheapest tier that covers everything you named, across all five axes at once — instead of making you read five tables and take the maximum yourself.