cost-federation — Claude Code skill: federated request spend tracking
Tracks federated request costs per peer in rolling windows (1h, 24h, 7d) and checks suspension thresholds. Use it when opening federation channels to new peers or monitoring consumption.
npx skills add ruvnet/ruflo --skill cost-federation -a claude-codeWhat cost-federation does
The skill connects to the federation_spend event bus from ADR-097 Phase 3 — each federated request generates an event with peer ID, tokens used, and USD spent. The script accumulates these into rolling windows, shows per-peer costs, and flags peers exceeding the suspension threshold.
Run: node plugins/ruflo-cost-tracker/scripts/federation.mjs. By default it outputs a markdown table with 1h / 24h / 7d windows and a threshold check block. Switch to JSON with FED_FORMAT=json, override the namespace (FED_NAMESPACE=federation-spend), or adjust the threshold (FED_SUSPEND_THRESHOLD_USD=5.0).
Until Phase 3 lands upstream, the skill works cleanly and reports "no events found". Events should contain: peerId, taskId, tokensUsed, usdSpent, ts — the script reads any record with prefix fed-spend- from storage and aggregates automatically.
What it helps with
- collect per-peer federated spend statistics over the past 7 days
- verify whether limits on a specific peer are exceeded
- establish baseline spend before onboarding a new peer
- trace why a peer was suspended via the event chain
Example prompts for the agent
- Run cost-federation and show which peer spent the most in the last 24 hours
- cost-federation over the past 7 days — output as JSON table
- Check peers with spend above $3 per hour
How to install cost-federation
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill cost-federation -a claude-code2Manually: put the files in place
~/.claude/skills/cost-federation/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/cost-federation/
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill cost-federation -a codex2Manually: put the files in place
.agents/skills/cost-federation/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill cost-federation -a cursor2Manually: put the files in place
.cursor/skills/cost-federation/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install ruvnet/ruflo cost-federation2Manually: put the files in place
.github/skills/cost-federation/SKILL.md1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill cost-federation -a gemini-cli2Platform CLI
gemini skills install https://github.com/ruvnet/ruflo --path plugins/ruflo-cost-tracker/skills/cost-federationManually: put the files in place
.devin/skills/cost-federation/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill cost-federation -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about cost-federation
How do I install cost-federation in Claude Code?
Run npx skills add ruvnet/ruflo --skill cost-federation -a claude-code, then open ~/.claude/skills/cost-federation/SKILL.md.
What does cost-federation do?
It tracks costs for federated requests to other peers, groups them into 1h / 24h / 7d windows, and shows which peers exceed the configured threshold (default $5 per period).
What if ADR-097 Phase 3 hasn't landed yet?
The skill continues working and reports "no events found" — this is expected. Once upstream publishes events to the federation-spend namespace, they will be picked up automatically.
Source text
SKILL.md · MIT
---
name: cost-federation
description: Consumer-side wiring for ADR-097 Phase 3 federation_spend events — per-peer rolling windows + suspension-threshold check
argument-hint: ""
allowed-tools: Bash
---
# Cost Federation
ADR-097 Phase 3 specifies a `federation_spend` event bus that publishes one event per `federation_send` completion: `{peerId, taskId, tokensUsed, usdSpent, ts}`. Cost-tracker is the declared consumer — it aggregates per-peer rolling windows (1h / 24h / 7d) and the federation breaker queries that aggregate to suspend peers exceeding the configured threshold.
**Phase 3 isn't landed upstream yet.** This skill is the consumer-side wiring; it activates the moment upstream publishes events to the `federation-spend` namespace. Until then it reports cleanly with a "no events found" notice.
## When to use
- Before opening federation traffic to a new peer — establish baseline.
- Periodically (e.g. `/loop 5m`) to monitor per-peer spend across windows.
- After ADR-097 Phase 2/3 lands — to verify breaker suspension reasoning.
## Steps
1. **Run the script**:
```bash
node plugins/ruflo-cost-tracker/scripts/federation.mjs
```
Optional env:
- `FED_FORMAT=json` — JSON instead of markdown
- `FED_NAMESPACE=federation-spend` — override target namespace
- `FED_SUSPEND_THRESHOLD_USD=5.0` — breaker threshold (ADR-097 default)
2. **Inspect** — per-peer 1h/24h/7d windows of count + USD spent, plus a "Suspension threshold check" block flagging peers over the breaker line.
## Storage contract (consumer side)
When Phase 3 lands, events should be persisted to namespace `federation-spend` with key prefix `fed-spend-` and JSON value matching:
```json
{
"peerId": "<peer-uuid>",
"taskId": "<task-uuid>",
"tokensUsed": 12345,
"usdSpent": 0.0287,
"ts": "2026-05-05T..."
}
```
The script reads any record matching that prefix, regardless of how upstream produces them. Multiple events per peer accumulate cleanly into the rolling-window sums.
## Cross-references
- [ADR-097: Federation budget circuit breaker](../../../../v3/docs/adr/ADR-097-federation-budget-circuit-breaker.md) — the complete spec
- `cost-report` — same data, different lens (cost-report focuses on local agent spend; this skill on per-peer federated spend)
- `ruflo-federation` plugin — the producer side (when Phase 3 lands)
© ruvnet · MIT · ruvnet/ruflo