ccspend
v0.1.0
Published
ccusage, but for the real money your agent spends — an agentic-payments statusline for Claude Code.
Maintainers
Readme
Features
- See every wallet's USDC balance live in the Claude Code status line — across agentcash (Base/Tempo/Solana), the standalone Tempo wallet, and any public EVM address, grouped one line per wallet.
- Per-session spend delta — watch what a session actually costs, as it happens.
- Itemized payment feed — the last paid call (host · amount · protocol), captured from a
PostToolUsehook. - Composes, never evicts —
ccspend setupwraps your existing status line (claude-hud, presence, …) instead of replacing it. Theme-relative colours, honoursNO_COLOR. - Reads, never pays — a passive observability layer on top of your wallets. It never holds keys or moves funds.
- Concurrency-safe, zero runtime deps — parallel subagents paying at once won't corrupt state; the network stays off the render path.
Every other agentic-payments tool is either a wallet that pays or a merchant-side web dashboard. ccspend is the missing piece: payer-side, in your terminal, across every wallet.
Overview
┃ $1.13 // Δ sess −0.021 // ⇢ stableenrich.dev −$0.01 (x402)
┃ agentcash 0.59 (base 0.30 · tempo 0.28)
┃ tempo-cli 0.55Total across your wallets, this session's spend, and the last thing your agent paid for — then one line per wallet. A single wallet collapses to one compact line.
Install
Requires Node.js ≥ 18.
npx ccspend setupsetup wires ccspend into your Claude Code settings.json composably: it keeps your current status line and renders the money line above it, and adds the payment hook. It's idempotent (re-run any time) and backs up your settings first.
CLI wallets (agentcash, Tempo) appear automatically when their CLI is present. To also track a read-only EVM wallet by public address, add it to ~/.ccspend/config.json:
{
"evm": [{ "label": "cdp", "address": "0xYourPublicAddress", "chain": "base" }]
}How it works
ccspend setupreads your existingstatusLine, saves it as ccspend's base, and points the status line at ccspend — so it renders above your HUD, not instead of it.ccspend statuslineis a pure reader: Claude Code pipes it the session JSON, it reads a small on-disk cache (~/.ccspend/) and prints the block. No network, so it's instant.ccspend hookruns on each payment tool call: it appends the payment to a feed and refreshes balances under a lock. The network work lives here, off the render path.- Balances come from each wallet's own source — the
agentcash/tempoCLIs and read-only EVMeth_calls. ccspend never holds keys or moves funds.
Community
License
MIT License
