Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Report the user's current AxonFlow tier (Free or Pro), Pro license expiry date, endpoint, and whether a license token is configured. Use when the user asks "am I on Pro?", "what tier am I on?", "when does my Pro license expire?", "is my license active?", or wants to know which AxonFlow they're talking to.
.claude/skills/hashgraph-online-pro-tier-status/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 39% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 18% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -69% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 13% | 0% |
The Codex plugin runs in one of two tiers:
AXONFLOW_LICENSE_TOKEN env var and no license_token = "..." line in ~/.codex/axonflow.toml (or the line is there but its JWT exp is in the past — the plugin will not forward an expired token). The plugin omits the X-License-Token HTTP header on every governed request, and the agent applies free-tier quota / retention defaults.AXONFLOW_LICENSE_TOKEN is exported in the Codex environment (operator override; CI use) or ~/.codex/axonflow.toml contains a license_token = "AXON-..." line whose JWT exp is in the future. The plugin sends X-License-Token: <token> on every governed request, and the agent's PluginClaimMiddleware validates the Ed25519 signature + DB row, then stamps a Pro-tier context on the request.Invoke the status surface in one of two ways:
scripts/recover.sh status reads tenant_id and tier directly from the plugin's persisted state (~/.config/axonflow/try-registration.json, the configured license token's JWT exp claim). No HTTP call to the agent. Faster, works offline, and works exactly when the user typically asks this question — while debugging the Stripe Checkout flow, when the agent isn't reachable yet, or when they just want a quick read on which tenant they're on. Tell the user: "I'll run scripts/recover.sh status to print your tenant_id, tier, and Pro license expiry locally — no agent round-trip." Invoke via exec_command:bashbash $PLUGIN_DIR/scripts/recover.sh status
axonflow_get_tenant_id via the axonflow MCP server (auto-discovered by Codex when axonflow is configured in ~/.codex/config.toml MCP servers). It returns the same shape but resolved server-side, which catches edge cases the local script can't: a Pro license revoked by the platform, clock skew on JWT exp, or a server-side tier override. Use it when the user asks something like "is my Pro license still valid on the server" or "the agent is rejecting me, what does the agent see for me?". In all other cases the local script is sufficient and cheaper.When the AxonFlow MCP server is available, Codex can answer related questions directly via tool calls without spawning shell scripts:
axonflow_get_tenant_id — tenant identity + tier + upgrade URLs.axonflow_list_pro_features — locked V1 Pro feature list (5 differentiators + $9.99 / 90 days pricing). Useful when the user asks "what would I get if I upgraded?".axonflow_request_approval — file a HITL approval request before a risky operation (Free tier: 1 per rolling 7d; Pro: unlimited).axonflow_create_tenant_policy — create a custom tenant policy (Free tier: 2 active max; Pro: unlimited).axonflow_get_cost_estimate — pre-flight LLM cost for a multi-step plan. Pro-only — the tool isn't visible to Free callers.Prefer these tools over equivalent shell scripts when both exist; they are auth-context-aware on the server side and don't require local shell state.
The script's tier line takes one of three shapes — surface whichever one the user got:
tier Pro tier active (expires 2026-08-03, 90 days remaining) — paid Pro tier active.tier Pro tier active (expires UNKNOWN — could not parse token) — token configured but the JWT body did not parse. Treat as Pro for display; the platform is the source of truth on validity.tier Free tier (Pro expired 2026-02-04 — visit https://getaxonflow.com/pricing/ to renew) — token is on disk but its exp has passed. The plugin will not forward an expired token; the user must buy a renewal and replace the token via AXONFLOW_LICENSE_TOKEN=<new> or scripts/recover.sh apply-token.tier Free tier (no AXON- license token configured) — no token loaded.When the user lands on Free tier (Pro expired …), point them at the renew URL embedded in the line and the scripts/recover.sh apply-token hint the script prints below.
AXONFLOW_ENDPOINT or the community-saas default)~/.codex/axonflow.toml existstenant_id (read from ~/.config/axonflow/try-registration.json) — needed to paste into the Stripe checkout custom field at /proset (AXON-...XXXX) — last 4 chars only, never the full bearer credential)If the user is on Free and asks about upgrading, tell them: a Pro license token arrives by email after Stripe Checkout completes, and they install it with scripts/recover.sh apply-token (or by setting AXONFLOW_LICENSE_TOKEN). Don't paste the token into chat — the script reads from stdin or env.
For richer governance activity (policy hits, override usage, audit volume), point the user to the governance-status skill, which calls the platform's get_policy_stats MCP tool.
The script extracts the JWT exp claim for display only; signature validation is the platform's job.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 10,168 | 8,491 | -16% | 1 | 1 | 0% | 740 | 1,716 | +132% | 0 | 0 | — |
case-02 | fail→fail | 7,160 | 21,495 | +200% | 1 | 1 | 0% | 373 | 1,960 | +425% | 0 | 0 | — |
case-03 | fail→fail | 12,308 | 8,603 | -30% | 1 | 1 | 0% | 1,234 | 1,862 | +51% | 0 | 0 | — |
case-04 | fail→pass | 13,916 | 8,402 | -40% | 1 | 1 | 0% | 1,468 | 2,037 | +39% | 0 | 0 | — |
case-05 | pass→pass | 11,821 | 9,606 | -19% | 1 | 1 | 0% | 1,078 | 2,129 | +97% | 0 | 0 | — |
case-06 | pass→pass | 16,561 | 12,332 | -26% | 1 | 1 | 0% | 1,871 | 2,683 | +43% | 0 | 0 | — |
case-07 | fail→pass | 14,961 | 11,168 | -25% | 1 | 1 | 0% | 1,690 | 2,519 | +49% | 0 | 0 | — |
case-08 | fail→pass | 17,019 | 9,173 | -46% | 1 | 1 | 0% | 1,729 | 2,032 | +18% | 0 | 0 | — |
case-09 | fail→pass | 69,166 | 6,972 | -90% | 1 | 1 | 0% | 5,480 | 1,692 | -69% | 0 | 0 | — |
case-10 | fail→pass | 15,346 | 8,939 | -42% | 1 | 1 | 0% | 1,747 | 1,977 | +13% | 0 | 0 | — |
case-11 | fail→pass | 14,511 | 7,777 | -46% | 1 | 1 | 0% | 1,596 | 1,854 | +16% | 0 | 0 | — |
case-12 | fail→pass | 17,774 | 7,903 | -56% | 1 | 1 | 0% | 2,047 | 1,808 | -12% | 0 | 0 | — |
case-13 | fail→pass | 20,098 | 8,456 | -58% | 1 | 1 | 0% | 2,393 | 2,011 | -16% | 0 | 0 | — |
case-14 | fail→pass | 11,293 | 9,872 | -13% | 1 | 1 | 0% | 1,054 | 2,154 | +104% | 0 | 0 | — |
case-15 | fail→pass | 16,306 | 7,176 | -56% | 1 | 1 | 0% | 1,927 | 1,722 | -11% | 0 | 0 | — |
case-16 | fail→pass | 15,519 | 10,335 | -33% | 1 | 1 | 0% | 1,777 | 2,364 | +33% | 0 | 0 | — |
case-17 | fail→pass | 17,471 | 10,187 | -42% | 1 | 1 | 0% | 2,077 | 2,151 | +4% | 0 | 0 | — |
case-18 | fail→pass | 15,264 | 6,743 | -56% | 1 | 1 | 0% | 1,786 | 1,559 | -13% | 0 | 0 | — |
case-19 | fail→pass | 18,003 | 6,875 | -62% | 1 | 1 | 0% | 1,995 | 1,643 | -18% | 0 | 0 | — |
case-20 | pass→pass | 11,124 | 8,467 | -24% | 1 | 1 | 0% | 968 | 1,934 | +100% | 0 | 0 | — |
case-21 | fail→pass | 18,263 | 8,104 | -56% | 1 | 1 | 0% | 2,173 | 1,919 | -12% | 0 | 0 | — |
case-22 | fail→pass | 20,094 | 7,523 | -63% | 1 | 1 | 0% | 2,561 | 1,773 | -31% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +73 percentage points is the difference between those two pass rates over the 20 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.