clidash

command module
v0.0.0-...-cd652b3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 23, 2026 License: MIT Imports: 18 Imported by: 0

README

clidash

One dashboard for your AI coding CLIs — token usage, estimated cost, and every logged-in account, right in your terminal.

Go Reference CI

You run Claude Code and Codex CLI all day. Nobody knows what either one spent today. clidash scans the session logs already sitting on your disk, aggregates them per day and per model, and estimates cost from public list prices. No daemons, no cloud, no telemetry — just go run.

┌ clidash ────────────────────────────────────────────────────────────────┐
│  claude 948K tok / $57.99     codex 9.5M tok / $27.54    total $85.53  │
│  [1] Usage   [2] Accounts   [3] Help                                   │
│  Date        Tool    Model                In        Out      Cost      │
│  2026-08-23  codex   gpt-5-codex         936,204   83,202   $2.37     │
│  2026-08-23  claude  claude-opus-4-1       2,989     795   $1.59     │
│  2026-08-22  claude  claude-sonnet-4-5    18,709   5,191   $0.61     │
│  …                                                                     │
└────────────────────────────────────────────────────────────────────────┘

Web mode (clidash -web) — same data, zero-dependency HTML dashboard (screenshot uses generated demo data):

clidash web dashboard

Install

From source (Go 1.25+):

go install github.com/ihopenre-eng/clidash@latest

Prebuilt binaries: grab a clidash-<os>-<arch> (or .exe) asset from Releases — Windows, macOS and Linux, amd64 + arm64, no cgo, single static file.

Quickstart

clidash                 # TUI (default)
clidash -web            # web dashboard on http://localhost:7747
clidash -port 8080 -web
clidash -sessions       # list recent sessions in the terminal
clidash -sessions -days 30
clidash -sidebar        # narrow live panel, for a split pane
clidash -sidebar -open  # split this Windows Terminal window and run it there
clidash -sidebar -budget 40
clidash -statusline     # one-line summary, for a CLI status bar
clidash -dir D:\data    # scan an alternate home directory

Status line

⧗ 52.4M $94.01 · cx 7d █░░░░░░░ 7% · 7d $365.20 · 13 sessions

One line, meters included: today's tokens and spend, the Codex plan window, the trailing week, and how many sessions have been active today.

Point Claude Code at it in ~/.claude/settings.json. If a status line command is already configured, hand it to -wrap and its output is kept in front rather than replaced:

{
  "statusLine": {
    "type": "command",
    "command": "clidash -statusline -gap 1 -wrap \"your-existing-command\"",
    "refreshInterval": 2
  }
}

Options: -budget 100 adds a meter for today against that target, -bar-width sets how many cells each meter takes, and -gap 1 prints a blank line afterwards so the line does not crowd whatever the host draws underneath it.

Claude Code reports its own context and five-hour window, so clidash does not repeat them. The Codex meter earns its place for the opposite reason: Codex has no status line that can carry a custom figure, so this is the only place it shows up.

Sidebar

Install it once and it is there from then on:

clidash -install          # docks to the right edge, starts at every logon
clidash -install -budget 40
clidash -uninstall        # take it back out

The docked window parks against the screen edge, stays above the window it sits beside, and keeps out of the taskbar and alt-tab list. It shows itself when Claude Code or Codex starts and hides again when the last one exits, so it is only on screen while it is telling you something. -always keeps it up regardless, -no-topmost lets other windows cover it, -dock left moves it, and -dock-width sets the pixel width.

This is the mode to use when Claude Code runs as a desktop app rather than inside a terminal: there is no pane to split and no shell to hook, so a window of its own is the only surface that works.

Inside a terminal there are two lighter options:

clidash -sidebar            # run it in a pane you split yourself
clidash -sidebar -open      # split the current Windows Terminal window

The panel adapts to whatever width and height it is given, down to 22 columns.

 clidash                        CODEX 7D
 ───────────────────            █░░░░░░░░░░░░░░░░░░  7%
                                resets 4d 8h
 TODAY
 $68.76                         CONTEXT
 38.3M tok                      cc ████████████░░░░  61%
 budget $40.00                     304.1K / 500K
 cc ███████████████████████░    cx █░░░░░░░░░░░░░░░   7%
 cx █░░░░░░░░░░░░░░░░░░░░░░░       18.4K / 258.4K

 BURN (1h)                      CACHE HIT
 $60.83/h                       99%

 7 DAYS                         TODAY BY DIR        13
 $339.95                        cc myapp        $67.71
 ▁▁▁▁▁▁▁▁▃▃▃▃████▃▃▃▃           cx scripts       $0.67
 M   T   W   T   F   S   S      cx docs          $0.32

-budget 40 turns today's total amber at 80% and red at the limit.

Two figures are worth explaining. Burn is spend per hour over the last hour, prorated across each session's span, so a long session does not dump its whole cost into the final minute. Context is the size of the last prompt each CLI sent. Codex reports its window directly; Claude Code never does, so the limit is inferred from the largest prompt that model has been seen to accept, rounded up to the nearest standard tier.

Features

  • Today / last 7 days at a glance — every view leads with the current day and the rolling week, not just an all-time total.
  • Per-session breakdown — every conversation with its project, model, turn count, tokens and cost, most recently active first.
  • Claude Code usage — parses ~/.claude/projects/**/*.jsonl, aggregates input / output / cache-read / cache-write tokens per day and model.
  • Codex CLI usage — parses ~/.codex/sessions/**/rollout-*.jsonl (token_count events), found via recursive JSON search so format tweaks don't break it.
  • Cost estimation — configurable pricing tables (claude.PricingTable, codex.PricingTable); cache reads and cache writes priced separately.
  • Account overview — Claude OAuth account, Codex login (decoded JWT email claim or "api-key configured"), every git identity in ~/.gitconfig including [includeIf] includes, active gh CLI account.
  • TUI + web mode — bubbletea terminal UI by default, or -web for a zero-dependency HTML chart page.
  • Sidebar-sidebar runs a live panel sized for a split pane beside your CLI: today and the week, spend per hour, the Codex plan meter with its reset countdown, a context gauge per active session, cache hit rate, and today's spend grouped by directory. Sections drop in priority order when the pane is short.
  • Status line-statusline prints one line for a CLI status bar, with meters drawn inline: the Codex plan window, and today's spend against -budget when you set one. -wrap keeps whatever command was there before. Recent-window scanning plus a cached background rescan keeps a two-second redraw cheap.
  • Zero telemetry — nothing is collected, nothing is uploaded. The web server binds to 127.0.0.1 only.
  • Privacy-first parsing — clidash reads usage counters and account metadata only. API keys, OAuth tokens and credential files are never displayed or stored.
  • Windows-first, cross-platform — built with os.UserHomeDir + filepath, pure Go, no cgo.

FAQ

Where does the data come from? Claude Code and Codex CLI already write JSONL session logs under ~/.claude and ~/.codex. clidash reads those files read-only and aggregates them locally. Account info comes from ~/.claude.json (OAuth email/org), ~/.codex/auth.json (only the decoded JWT email claim), ~/.gitconfig, and gh auth status.

Are the costs exact? No — they are estimates from public list prices ($/MTok), with fallback rates for unknown models. Override the exported pricing tables if you're on different rates or want your negotiated prices.

Does it phone home? Never. There is no telemetry, no update check, no network calls except the optional local web server listening on localhost.

How does clidash avoid double counting? Two things would inflate the numbers if left alone. Codex token_count events carry the running session total, so summing them grows with the square of the turn count — clidash counts the per-turn last_token_usage delta instead. And Claude Code writes a sub-agent turn to both the parent and the child transcript, and replays history when a session is resumed, so clidash bills each requestId once.

Why is the cached-token share so large? That is real. Every turn re-reads the whole conversation prefix, and both CLIs report those reads as input tokens. They are billed at a fraction of the fresh rate — 10% for Anthropic cache reads, and $0.125/MTok for gpt-5 cached input — which clidash prices separately. Codex reports input_tokens as a superset of cached_input_tokens, so only the difference is charged at the full rate.

These are list prices — is that what I actually paid? Only if you are on the API. On a Claude Code or ChatGPT subscription you paid the subscription fee; the figure here is what the same traffic would have cost at public list prices.

Does it work on macOS / Linux? Yes. Windows-first, but everything is stdlib + bubbletea, so all three platforms build in CI.

Roadmap

  • Gemini CLI support
  • GitHub Copilot CLI support
  • Per-session breakdown
  • CSV / JSON export
  • Budget alerts

License

MIT © 2026 Lee Seonghyeon (ihopenre-eng)

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
internal
dock
Package dock parks the sidebar window against the edge of the desktop.
Package dock parks the sidebar window against the edge of the desktop.
gauge
Package gauge draws the small meters the status line and the sidebar share.
Package gauge draws the small meters the status line and the sidebar share.
sidebar
Package sidebar renders a narrow always-on usage panel meant for a split pane beside a coding CLI.
Package sidebar renders a narrow always-on usage panel meant for a split pane beside a coding CLI.
statusline
Package statusline renders the one-line usage summary that Claude Code shows under the prompt and that the Codex session hook prints on startup.
Package statusline renders the one-line usage summary that Claude Code shows under the prompt and that the Codex session hook prints on startup.
termwidth
Package termwidth settles how wide an ambiguous-width glyph is measured to be.
Package termwidth settles how wide an ambiguous-width glyph is measured to be.
ui
web

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL