cost-export — Claude Code skill: what it does, how to install
Exports cost telemetry into Prometheus textfile or webhook JSON formats for external dashboards like Grafana or Datadog.
npx skills add ruvnet/ruflo --skill cost-export -a claude-codeWhat cost-export does
The skill pulls session-* and budget-config-* records from the cost-tracking namespace in AgentDB, formatting them for external observability systems. Without this step, spending data stays locked inside the agent storage. Running the underlying export.mjs script with no flags outputs JSON directly to stdout.
Supplying --prometheus <path> writes metrics formatted for the Prometheus node_exporter textfile collector. Emitted values include total dollar spend, per-tier breakdowns, session message counters, and the cost_tracker_budget_utilization gauge. For remote dashboards, --webhook <url> sends the payload as a POST request.
The script produces nothing useful unless cost-track has already populated the records. Custom authorization headers for the webhook payload must be passed through the EXPORT_WEBHOOK_HEADER environment variable.
What it helps with
- export agent cost metrics into Prometheus textfile format
- stream session spending payloads to an external webhook endpoint
- track budget utilization gauges inside Grafana dashboards
Example prompts for the agent
- Export cost telemetry to Prometheus textfile at /tmp/cost_tracker.prom
- Send cost tracking JSON payload via webhook to my endpoint
How to install cost-export
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill cost-export -a claude-code2Manually: put the files in place
~/.claude/skills/cost-export/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/cost-export/
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill cost-export -a codex2Manually: put the files in place
.agents/skills/cost-export/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill cost-export -a cursor2Manually: put the files in place
.cursor/skills/cost-export/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install ruvnet/ruflo cost-export2Manually: put the files in place
.github/skills/cost-export/SKILL.md1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill cost-export -a gemini-cli2Platform CLI
gemini skills install https://github.com/ruvnet/ruflo --path plugins/ruflo-cost-tracker/skills/cost-exportManually: put the files in place
.devin/skills/cost-export/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill cost-export -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set104
The whole set →Similar
Questions about cost-export
How to install cost-export in Claude Code?
Run npx skills add ruvnet/ruflo --skill cost-export -a claude-code. The skill file installs to ~/.claude/skills/cost-export/SKILL.md.
What does cost-export do?
It extracts session costs and budget records from AgentDB and formats them as Prometheus gauges or webhook JSON.
What headers can be sent with the webhook?
Set authorization or custom headers using the EXPORT_WEBHOOK_HEADER environment variable as comma-separated key-value pairs.
Source text
SKILL.md · MIT
---
name: cost-export
description: Export cost-tracking telemetry in Prometheus textfile or webhook JSON formats — for external observability (Grafana, Datadog, custom dashboards)
argument-hint: "[--prometheus <path>] [--webhook <url>]"
allowed-tools: Bash
---
# Cost Export
Pulls every `session-*` and `budget-config-*` record from `cost-tracking` and emits in formats consumable by external observability systems. Without this, cost data lives only inside the AgentDB namespace; with it, the same data lights up dashboards.
## When to use
- After any cost-track run, to refresh metrics for Grafana / Datadog / Prometheus.
- Cron-friendly via `/loop 5m` to keep external dashboards near-real-time.
- One-shot to a webhook for ad-hoc reporting (Slack, custom endpoint).
## Steps
1. **Pick a format** — textfile collector for Prometheus / Grafana, or webhook POST for everything else:
```bash
# Prometheus node_exporter textfile collector
node plugins/ruflo-cost-tracker/scripts/export.mjs --prometheus /var/lib/node_exporter/textfile_collector/cost_tracker.prom
# Webhook (POSTs JSON; add auth via env)
EXPORT_WEBHOOK_HEADER='Authorization: Bearer $TOKEN' \
node plugins/ruflo-cost-tracker/scripts/export.mjs --webhook https://hooks.example.com/cost-tracker
# Stdout JSON (default if no flag)
node plugins/ruflo-cost-tracker/scripts/export.mjs
```
2. **Inspect what's emitted** — Prometheus output includes:
```
cost_tracker_total_usd <gauge>
cost_tracker_tier_total_usd{tier="opus|sonnet|haiku"} <gauge>
cost_tracker_session_total_usd{session="<8-char>"} <gauge>
cost_tracker_session_messages{session="<8-char>"} <counter>
cost_tracker_budget_usd <gauge> (if budget configured)
cost_tracker_budget_utilization <gauge> (spent / budget)
```
3. **Webhook payload shape** — the JSON the webhook receives matches the stdout JSON: `{ exportedAt, sessions: [...], budget, totalUsd, byTier }`. Headers may be added via `EXPORT_WEBHOOK_HEADER='K1: V1, K2: V2'` (comma-separated).
## Env overrides
| Env | Default | Purpose |
|---|---|---|
| `EXPORT_NAMESPACE` | `cost-tracking` | Override target namespace |
| `EXPORT_WEBHOOK_HEADER` | unset | Comma-separated `K: V` pairs for webhook auth |
| `EXPORT_QUIET=1` | unset | Suppress non-error confirmation output |
## Cross-references
- `cost-track` — produces the data this skill exports
- `cost-budget-check` — the same `cost_tracker_budget_*` metrics are alertable in Prometheus
- node_exporter textfile collector docs (Prometheus convention) — drop the `.prom` file in the collector directory and Prometheus picks it up
© ruvnet · MIT · ruvnet/ruflo