Skip to content
Tally

Docs

Tally is a tiny agent plus a dashboard. The agent reads usage your AI tools already record, prices it, and uploads hourly totals. Here is everything it does.

01Install

  1. 01
    curl -fsSL https://tally.arnavprabhu.com/install.sh | sh
    Install the agent (macOS · Linux)
  2. 02
    tally login
    Approve this machine in your browser
  3. 03
    tally service install
    Run in the background, sync every 5 min

The installer detects your OS and CPU, downloads a single static binary from https://tally.arnavprabhu.com/downloads and puts it in ~/.local/bin (or /usr/local/bin if writable). No root, no runtime.

tally login uses a device code: approve the code at /device and the machine appears under Machines.

Config lives in ~/.config/tally/config.json (0600), state and logs in ~/.local/state/tally/. XDG_CONFIG_HOME, XDG_STATE_HOME, TALLY_SERVER and TALLY_TOKEN are respected.

02CLI commands

tally login [--server URL]Link this machine: opens the browser, shows a code, saves a device token.
tally logoutForget the device token on this machine.
tally statusServer, device, last sync and detected providers.
tally sync [--dry-run] [--provider id]Collect and upload once. --dry-run prints the exact JSON payload instead.
tally daemonSync in a loop (default every 300s, jittered, exponential backoff).
tally service install | uninstall | statusRun the daemon at login via launchd (macOS) or a systemd user unit (Linux).
tally providersList every provider, whether it was detected and enabled.
tally providers enable | disable <id>Turn a provider on or off.
tally keys set <provider>Store an API key locally (prompted, no echo). Keys never leave the machine.
tally keys ls | rm <provider>List (masked) or remove stored keys.
tally updateRe-run the installer to get the latest version.
tally versionPrint the agent version.

03How cost is computed

API-equivalent value

Σ tokens × list price (per model)

What your usage would cost at public API prices — input, output, cache reads and cache writes priced separately from a versioned pricing table (/api/pricing). Useful for comparing plans.

Real spend

plan $ × 12 ÷ 365 per day + billed API $

Subscriptions are prorated per day. API-billed accounts use actual billed dollars where the provider reports them, otherwise the API-equivalent estimate. Free accounts count as $0.

Value multiplier = API-equivalent value ÷ real spend. A Max plan at 12× means you used twelve times its price in API terms. Set plan prices and billing modes on Accounts; your edits are never overwritten.

04Plan limits

Where providers expose them, the agent reports quota windows — Claude's 5-hour session and weekly windows, Codex primary/secondary limits, Cursor's monthly requests, API credit balances — as a percent used plus the reset time. The dashboard counts down to each reset, keeps 30 days of history and can alert you at any threshold.

05Privacy

Uploaded

  • + Provider & model name
  • + Token & request counts
  • + Cost in USD
  • + Project folder basename
  • + Hostname, OS, arch
  • + Hour bucket timestamps
  • + Plan-limit % and reset time
  • + Account label (renamable, hideable)

Never uploaded

  • Prompts or completions
  • Source code or diffs
  • Full file paths
  • API keys
  • OAuth tokens
  • Browser cookies

API keys stay in the agent's local config. Device tokens are stored server-side only as SHA-256 hashes. Run tally sync --dry-run to see the exact payload. Delete your account any time from Settings — everything is removed immediately.

06Supported providers

IDProviderSourceStatus
Anthropic providers · 2
claude
Claude Code
JSONL transcripts in ~/.claude/projects, ~/.config/claude/projects, $CLAUDE_CONFIG_DIR, Claude Desktop agent/code sessions, claude-swap profiles; acco
Local logs · Local loginimplemented
claudeplatform
Claude Platform (Anthropic API)
Admin API usage_report/messages, cost_report, organizations/me (daily)
API keyimplemented
CLI coding-agent providers · 11
gemini
Gemini CLI
Logs: ~/.gemini/tmp/<project>/chats/session-.json(l) (per-message tokens, project from .project_root). Limits: ~/.gemini/oauth_creds.json → POST cloud
Local logs · Local loginimplemented
opencode
OpenCode
Logs: ~/.local/share/opencode/opencode.db (OPENCODE_DB, XDG_DATA_HOME, option db_path). Legacy message+step-finish parts (one event per step) plus v2
Local logs · API keyimplemented
opencodego
OpenCode Go
Logs: opencode-go rows from the OpenCode DB. Limits: GET https://opencode.ai/zen/go/v1/usage → session (5h), weekly, monthly. The token comes from the
Local logs · Local login · API keyimplemented
pi
Pi
Logs: Pi/OMP JSONL transcripts. Roots: ~/.pi/agent/sessions, ~/.omp/agent/sessions (PI_CONFIG_DIR), ~/.local/share/omp/sessions, ~/.omp/profiles//(age
Local logsimplemented
amp
Amp
Limits only. The access token (AMP_API_KEY / tally keys set amp, or the Amp CLI's ~/.local/share/amp/secrets.json) → POST https://ampcode.com/api/inte
Local login · API keyimplemented
factory
Droid (Factory)
Logs: ~/.factory/sessions/<proj>/<session>.settings.json tokenUsage (cumulative per session). There's one event per session at the last .jsonl timesta
Local logs · API keypartial
kilo
Kilo
Logs: ~/.local/share/kilo/kilo.db (same OpenCode-fork schema, KILO_DB). Limits: GET https://app.kilo.ai/api/trpc/user.getCreditBlocks,kiloPass.getStat
Local logs · Local login · API keyimplemented
kiro
Kiro
Limits: kiro-cli state DB (~/Library/Application Support/kiro-cli/data.sqlite3, Linux ~/.local/share/kiro-cli/…, KIRO_DATA_DIR). auth_kv kirocli:odic:
Local loginimplemented
xkiro
xKiro
GET https://api.xkiro.com/v1/usage → daily free tokens (used/limit, reset 00:00 UTC).
API keyimplemented
qoder
Qoder
GET https://qoder.com/api/v2/me/usages/big_model_credits (or qoder.com.cn) → monthly big-model credits (total + shared quota merged, nextResetAt).
API keymanual cred
copilot
GitHub Copilot
Logs: Copilot CLI ~/.copilot/session-store.db assistant_usage_events (one row per call, cwd from sessions). For sessions not in the store, it reads ~/
Local logs · Local login · API keyimplemented
AI APIs, gateways & misc services · 39
abacus
Abacus AI
apps.abacus.ai/api/_getOrganizationComputePoints, POST /api/_getBillingInfo → monthly compute-point window
API keymanual cred
abliteration
abliteration.ai
api.abliteration.ai/v1/credits → credits used/total
API keyimplemented
aerostack
Aerostack
api.aerostack.dev/api/billing/usage → monthly AI-token window, tier
API keyimplemented
aiand
ai&
api.aiand.com/logs?range=30days (paged) → per-request tokens + cost → hourly events per model
API keyimplemented
aixy
Aixy
{base}/v1/usage (key.usage) → one window per applicable budget, spend_7d counter
API keyimplemented
atlascloud
Atlas Cloud
api.atlascloud.ai/public/v1/balance → credits balance
API keyimplemented
bifrost
Bifrost
{base}/api/governance/virtual-keys/quota (header x-bf-vk) → budget windows (hourly/daily/weekly/monthly or budget_<id>, provider/model scoped provider
API keyimplemented
chatbox
Chatbox AI
api.chatboxai.app/api/license/detail/realtime → monthly plan tokens, topup, images, quota
API keyimplemented
clawrouter
ClawRouter
{base}/v1/usage → monthly budget window; month-to-date requests/tokens/cost event
API keyimplemented
cosmic
Cosmic AI
dapi.cosmicjs.com/v3/projects/usage?project_id= → input_tokens / output_tokens allowance windows
API keyimplemented
deepgram
Deepgram
api.deepgram.com/v1/projects, /projects/{id}/usage/breakdown?start=<month start>&end=<today> → month-to-date requests + tokens event
API keyimplemented
elevenlabs
ElevenLabs
api.elevenlabs.io/v1/user/subscription → monthly character credits (resets), voice_slots, professional_voices
API keyimplemented
exa
Exa
admin-api.exa.ai/team-management/api-keys/{id}/usage (current UTC month) → month-to-date spend event
API keyimplemented
fal
fal
api.fal.ai/v1/account/billing?expand=credits (Key auth) → credits balance, username
API keyimplemented
flora
FLORA
app.flora.ai/api/v1/workspaces/{ws}/usage → credits balance; month-to-date spend + runs event
API keyimplemented
futureagi
Future AGI
api.futureagi.com/usage/v2/usage-overview/ → one window per meter with a free allowance; billing-period estimated-cost event
API keyimplemented
huggingface
Hugging Face
huggingface.co/api/whoami-v2, /api/settings/billing/usage-v2 → month-to-date billable Inference Providers spend event, monthly spending-limit + includ
API keypartial
langdock
Langdock
app.langdock.com/api/trpc/usageSettings.getPersonalUsage → session (5h) / weekly percent
API keymanual cred
linkup
Linkup
api.linkup.so/v1/credits/balance → credits balance
API keyimplemented
litellm
LiteLLM
{base}/key/info → /user/info (personal budget + team_budget) or /team/info; /user/daily/activity (30 d) → per-day per-model tokens/requests/spend even
API keyimplemented
lithosai
LithosAI
console.lithosai.cloud/api/me, /api/billing → credits balance; /api/billing/spend → daily spend events
API keymanual cred
llmman
llmman
{host}/llmman/node → memory window (loaded model bytes / memory)
API keyimplemented
llmproxy
LLM Proxy
{base}/v1/quota-stats → quota (most-used quota group), requests_total/tokens_total/approx_spend counters
API keypartial
munito
Munito
api.munito.ai/admin/v1/limits + /organization → daily / monthly spend windows; month-to-date spend event
API keyimplemented
neuralwatt
Neuralwatt
api.neuralwatt.com/v1/quota → credits balance, monthly kWh window, key_allowance; current-month cost/requests/tokens event
API keyimplemented
parallel
Parallel
POST platform.parallel.ai/api/rpc/billing/payments/refresh-balance → credits balance
API keymanual cred
poe
Poe
api.poe.com/usage/current_balance → credits (points); /usage/points_history (≤5×100 rows, 30 d) → hourly per-bot request/cost events
API keyimplemented
replicate
Replicate
replicate.com/account/billing (React props → account) → /api/{users,organizations}/{name}/invoices current monthly-usage invoice → month-to-date spend
API keymanual cred
sailresearch
Sail Research
api.sailresearch.com/v2/usage/summary?range=30d → credits balance, spend_30d counter
API keyimplemented
sofya
Sofya
sofya.co/v1/auth/me → credits, plan_credits (free-tier reset), purchased_credits
API keyimplemented
soniox
Soniox
api.soniox.com/v1/organization/balance + /usage/monthly → monthly budget window, prepaid credits, month-to-date spend event
API keyimplemented
sub2api
sub2api
{base}/v1/usage?days=30&timezone=UTC → daily/weekly/monthly subscription windows or quota, rate_<window> limits, credits balance; today's requests/tok
API keyimplemented
tavily
Tavily
api.tavily.com/usage → monthly plan credits, key, paygo windows
API keyimplemented
tinyapi
TinyApi
tinyapi.rest/api/user/credits → credits balance
API keymanual cred
typesafe
TypeSafe
console.typesafe.ai/settings/billing: discovers the getBillingOverviewResult Next.js server-action id from page JS chunks, then POST with Next-Action
API keymanual cred
vercel
Vercel AI Gateway
ai-gateway.vercel.sh/v1/credits → credits balance + lifetime_spend; optional personal budget via api.vercel.com/v2/user + /ai-gateway/budgets/list → d
API keyimplemented
wayfinder
Wayfinder
{base}/healthz, /router/models, /v1/savings?period=30d → requests_30d, tokens_30d, spend_30d (realized vs baseline), saved_30d counters
API keypartial
xapi
X API
console.x.com/api/me → /api/accounts/{id}/credits → credits (purchased + free)
API keymanual cred
zenmux
ZenMux
zenmux.ai/api/v1/management/subscription/detail → session (5 h) / weekly (7 d) flow windows, plan; /payg/balance → credits
API keyimplemented
IDE & subscription coding-tool providers · 27
cursor
Cursor
Session: the Cursor.app state.vscdb (cursorAuth/accessToken, cachedEmail, stripeMembershipType), then ~/.config/cursor/auth.json (cursor-agent). The J
Local login · API keyimplemented
windsurf
Windsurf
1) Manual session bundle (JSON with devin_session_token, devin_auth1_token, devin_account_id, devin_primary_org_id) sent to POST windsurf.com/_backend
Local login · API keyimplemented
zed
Zed
GET cloud.zed.dev/client/users/me with Authorization: <user_id> <token>: plan (plan_v3), edit_predictions used/limit, cycle end, GitHub login. Alterna
Local login · API keymanual cred
warp
Warp
POST app.warp.dev/graphql/v2?op=GetRequestLimitInfo (User-Agent: Warp/1.0) gives monthly credits used/limit + reset, and addon_credits (user + workspa
API keyimplemented
jetbrains
JetBrains AI
The most recently modified <config>/JetBrains/<IDE><ver>/options/AIAssistantQuotaManager2.xml (macOS ~/Library/Application Support/{JetBrains,Google},
Local logspartial
augment
Augment
Auggie CLI auggie account status (15 s). The parsed credits remaining/used/limit become monthly, plus the cycle end. Without the CLI: app.augmentcode.
Local login · API keyimplemented
devin
Devin
GET app.devin.ai/api/<org>/billing/quota/usage (Bearer + x-cog-org-id) gives daily/weekly % + resets, plan, and overage balance.
API keymanual cred
antigravity
Antigravity
Local language server of Antigravity.app, the IDE extension, or agy. ps -ax finds language_server processes with Antigravity markers and their --csrf_
Local loginpartial
traecn
Trae CN
Cookie → POST api.trae.cn/cloudide/api/v3/common/GetUserToken (short-lived token, never stored) → POST /trae/api/v2/pay/user_current_entitlement_list
API keymanual cred
coderabbit
CodeRabbit
Runs coderabbit usage (20 s, CODERABBIT_CLI_DISABLE_AUTO_UPDATE=true, stderr discarded). Parses Your reviews into a reviews counter (no denominator),
Local loginimplemented
gitkraken
GitKraken AI
GET api.gitkraken.dev/v1/ai-tasks/usage gives weekly personal + weekly_org shared pool (credits; -1 means unlimited, which becomes a counter).
API keymanual cred
ibmbob
IBM Bob
GET api.us-east.bob.ibm.com/admin/v1/profile, then per instance/team GET https://api.<region_domain>/admin/v1/teams/<team>/users/<user> gives monthly[
API keyimplemented
raycast
Raycast
GET www.raycast.com/frontend_api/current_user/ai_credits (only __raycast_session + csrf_token are sent) gives monthly credits (total−remaining)/total
API keymanual cred
v0
v0
GET api.v0.dev/v1/user/billing (token: billing balance used/total + cycle end, plus on_demand balance; legacy: allowance) + GET /v1/rate-limits (rate_
API keyimplemented
commandcode
Command Code
/alpha/billing/credits + /alpha/billing/subscriptions with a user_… key, or /internal/… with the web session cookie (api.commandcode.ai). Gives monthl
Local login · API keyimplemented
codebuff
Codebuff
POST www.codebuff.com/api/v1/usage gives credits used/quota + next reset. With the CLI session: GET /api/user/subscription adds tier, email, and the w
Local login · API keyimplemented
clinepass
ClinePass
GET api.cline.bot/api/v1/users/me/plan/usage-limits gives session (five_hour), weekly, monthly % + resets.
Local login · API keyimplemented
devpass
DevPass
GET api.llmgateway.io/v1/key gives monthly plan credits $, weekly premium $ + reset, and key_spend (all-time key spend / limit). Plan none means pay-a
API keyimplemented
helmcode
Helmcode
cloud-api.<tenant>/api/usage/quota gives a per-model token cap/used window (monthly, monthly:<model>, rolling_<h>h:<model> for premium). /api/billing
API keymanual cred
workbuddy
WorkBuddy
POST www.workbuddy.cn/billing/meter/get-user-resource-summary gives monthly credits (Σ credit packages total−remain) and the plan. Sessions are bound
API keymanual cred
zoommate
ZoomMate
GET ai.zoom.us/ai-computer/api/v1/credits/status with Bearer gives credits used/budget cap + cycle end. A pasted zoom.us cookie is exchanged for a sho
API keymanual cred
hyper
Charm Hyper
API key: GET hyper.charm.land/v1/credits → balance. Cookie: the dashboard HTML is checked for the team redirect, then "Hypercredits Available" is scra
API keyimplemented
muse
Muse Code
Usage: Muse CLI logs ~/.local/share/muse/sessions/YYYY/MM/DD//session.jsonl (MUSE_SESSIONS_DIR). model_completed / automated_review_completed events b
Local logs · Local loginimplemented
museai
Muse (muse.ai)
Next.js server action fetchSubscriptionAction (POST muse.ai/ with Next-Action: <id>). The id is discovered from page JS chunks (≤96 + 32), cached in m
API keymanual cred
t3chat
T3 Chat
GET t3.chat/api/trpc/getCustomerData?batch=1… (JSONL). Finds the customer object and maps it to session (4-hour Base %) + reset and monthly (Overage %
API keymanual cred
notion
Notion AI
POST app.notion.com/api/v3/getSpaces (user, workspaces) → getCreditRateLimitStatus {spaceId} gives session (rolling 6h) and monthly credits used/limit
API keymanual cred
manus
Manus
POST api.manus.im/user.v1.UserService/GetAvailableCredits (Bearer = session_id cookie value) gives monthly (proMonthly − periodic), daily refresh cred
API keymanual cred
LLM API platforms · 25
openrouter
OpenRouter
GET /api/v1/credits (credits used/total), GET /api/v1/key (key spend cap + reset), GET /api/v1/activity (+?date=) per-model daily tokens/requests/spen
API keyimplemented
deepseek
DeepSeek
GET api.deepseek.com/user/balance; with a Platform token: GET platform.deepseek.com/api/v0/usage/by_api_key/{amount,cost} (per-model daily cache-hit/m
API keyimplemented
moonshot
Moonshot / Kimi Open Platform
GET /v1/users/me/balance on api.moonshot.ai (USD) or api.moonshot.cn (CNY)
API keyimplemented
kimi
Kimi Code
GET api.kimi.com/coding/v1/usages (china) or api.kimi.ai/coding/v1/usages (international): ratio pools limit_5h / limit_7d / limit_month_total, legacy
API keyimplemented
xai
xAI API
Management API: GET /v1/billing/teams/{team}/prepaid/balance, GET …/postpaid/invoice/preview, POST …/usage (daily USD, 30 days)
API keyimplemented
grok
Grok (SuperGrok / Grok Build)
GET cli-chat-proxy.grok.com/v1/billing?format=credits (credit usage %, period, prepaid balance) + GET …/v1/settings (plan tier)
API keyimplemented
groq
Groq
Stytch POST api.stytchb2b.groq.com/sdk/v1/b2b/sessions/authenticate (session → JWT), then GET api.groq.com/platform/v1/organizations/{org}/activity (p
API keymanual cred
mistral
Mistral
GET admin.mistral.ai/api/billing/v2/usage?month&year (per-model daily tokens; cost = billed units × the response's price table, EUR→USD), GET /api/bil
API keymanual cred
fireworks
Fireworks AI
GET api.fireworks.ai/v1/accounts (slug discovery), GET /v1/accounts/{slug}/billing/summary?startTime&endTime for yesterday and today (UTC)
API keyimplemented
deepinfra
DeepInfra
GET api.deepinfra.com/payment/checklist?compute_owed=true (balance/owed, cycle limit), GET /payment/usage?from=current (month-to-date spend, booked at
API keyimplemented
perplexity
Perplexity
GET www.perplexity.ai/rest/billing/credits → recurring (monthly), bonus and purchased API credits, balance
API keymanual cred
venice
Venice
GET api.venice.ai/api/v1/billing/balance (USD balance, DIEM balance / epoch allocation)
API keyimplemented
zai
z.ai / GLM Coding Plan
GET /api/monitor/usage/quota/limit (5-hour + weekly token/credit windows, MCP monthly), GET /api/monitor/usage/model-usage (hourly per-model tokens si
API keyimplemented
minimax
MiniMax
GET api.minimax.io/v1/token_plan/remains, fallback /v1/api/openplatform/coding_plan/remains; China host api.minimaxi.com retried when the global host
API keyimplemented
alibaba
Alibaba Coding Plan
POST {modelstudio.console.alibabacloud.com | bailian.console.aliyun.com}/data/api.json?action=zeldaEasy.broadscope-bailian.codingPlan.queryCodingPlanI
API keyimplemented
qwencloud
Qwen Cloud
home.qwencloud.com: GET /tool/user/info.json (sec_token), POST /data/api.json ea-service/LoadHumanInfo + BssOpenAPI-V3/GetSeatSubscriptionSummary (Tea
API keypartial
stepfun
StepFun
POST platform.stepfun.com/api/step.openapi.devcenter.Dashboard/QueryStepPlanRateLimit (5-hour + weekly or credit pool) + …/GetStepPlanStatus (plan)
API keymanual cred
doubao
Doubao (Volcengine Ark)
Volcengine OpenAPI, V4-signed: POST open.volcengineapi.com/?Action=GetCodingPlanUsage&Version=2024-01-01 (Coding Plan 5-hour/weekly/monthly) + ?Action
API keyimplemented
longcat
LongCat
longcat.chat: GET /api/v1/user-current, POST /api/pay/quota/metering/token-packs/summary, GET /api/lc-platform/v1/tokenUsage, GET /api/lc-platform/v1/
API keymanual cred
mimo
Xiaomi MiMo
platform.xiaomimimo.com: GET /api/v1/balance, /api/v1/tokenPlan/detail, /api/v1/tokenPlan/usage
API keymanual cred
chutes
Chutes
GET api.chutes.ai/users/me/subscription_usage, fallback GET /users/me/quotas + /users/me/quota_usage/{chute_id} (rolling 4-hour + monthly windows)
API keyimplemented
synthetic
Synthetic
GET api.synthetic.new/v2/quotas (rolling 5-hour, weekly token/credit limit, search hourly; generic quota fallback)
API keyimplemented
sakana
Sakana AI
HTML scrape of console.sakana.ai/billing (5-hour + weekly % used, reset, plan/price) and ?tab=payAsYouGo (credit balance)
API keymanual cred
nous
Nous Portal
GET portal.nousresearch.com/api/oauth/account (subscription credits, top-up, total usable)
API keyimplemented
ollama
Ollama Cloud
GET ollama.com/api/balance (purchased credit balance, monthly included credits)
API keyimplemented
OpenAI-family & cloud LLM platform providers · 5
codex
Codex
Local rollout logs ~/.codex/sessions//rollout-.jsonl + ~/.codex/archived_sessions/.jsonl (or $CODEX_HOME, option codex_home). Plan limits: GET https:/
Local logs · Local loginimplemented
openai
OpenAI API
GET /v1/organization/costs (daily, group_by=line_item) → billing_api. GET /v1/organization/usage/completions (daily, group_by=model) → provider_api to
API keyimplemented
azureopenai
Azure OpenAI
Azure Cost Management Query API (ActualCost, daily, grouped by ServiceName + Meter, filtered with (?i)openai|cognitive|foundry) → billing_api. Uses a
API keypartial
bedrock
AWS Bedrock
Cost Explorer GetCostAndUsage (daily, grouped by SERVICE, keeps services containing "Bedrock", which includes Marketplace "… (Amazon Bedrock Edition)"
API keyimplemented
vertexai
Vertex AI
Cloud Monitoring timeSeries.list: aiplatform.googleapis.com/publisher/online_serving/token_count (by model_user_id + type) and …/model_invocation_coun
Local loginimplemented

109 providers · generated from the agent docs at build time