tokr 0.1.0

Persistent token-usage ledger for AI coding agents. Captures on write, queries forever.
# Pricing in USD per million tokens (MTok).
# Update via `tokr update-prices`; past rows keep their stamped pricing_version,
# so changes here don't touch history until you run `tokr recost`.

# Opus 4.x - starting with 4.5 Anthropic cut Opus from $15/$75 to $5/$25.

[[model]]
name = "claude-opus-4-7"
effective_from = "2026-03-01T00:00:00Z"
input_per_mtok          = 5.00
output_per_mtok         = 25.00
cache_write_5m_per_mtok = 6.25
cache_write_1h_per_mtok = 10.00
cache_read_per_mtok     = 0.50

[[model]]
name = "claude-opus-4-6"
effective_from = "2026-01-01T00:00:00Z"
input_per_mtok          = 5.00
output_per_mtok         = 25.00
cache_write_5m_per_mtok = 6.25
cache_write_1h_per_mtok = 10.00
cache_read_per_mtok     = 0.50

[[model]]
name = "claude-opus-4-5"
effective_from = "2025-11-01T00:00:00Z"
input_per_mtok          = 5.00
output_per_mtok         = 25.00
cache_write_5m_per_mtok = 6.25
cache_write_1h_per_mtok = 10.00
cache_read_per_mtok     = 0.50

# 4.0 / 4.1 are still on the old $15/$75 tier.

[[model]]
name = "claude-opus-4-1"
effective_from = "2025-08-01T00:00:00Z"
input_per_mtok          = 15.00
output_per_mtok         = 75.00
cache_write_5m_per_mtok = 18.75
cache_write_1h_per_mtok = 30.00
cache_read_per_mtok     = 1.50

[[model]]
name = "claude-opus-4-0"
effective_from = "2025-05-01T00:00:00Z"
input_per_mtok          = 15.00
output_per_mtok         = 75.00
cache_write_5m_per_mtok = 18.75
cache_write_1h_per_mtok = 30.00
cache_read_per_mtok     = 1.50

# Sonnet 4.x - flat $3/$15 across the generation.

[[model]]
name = "claude-sonnet-4-6"
effective_from = "2025-12-01T00:00:00Z"
input_per_mtok          = 3.00
output_per_mtok         = 15.00
cache_write_5m_per_mtok = 3.75
cache_write_1h_per_mtok = 6.00
cache_read_per_mtok     = 0.30

[[model]]
name = "claude-sonnet-4-5"
effective_from = "2025-09-01T00:00:00Z"
input_per_mtok          = 3.00
output_per_mtok         = 15.00
cache_write_5m_per_mtok = 3.75
cache_write_1h_per_mtok = 6.00
cache_read_per_mtok     = 0.30

[[model]]
name = "claude-sonnet-4-0"
effective_from = "2025-05-01T00:00:00Z"
input_per_mtok          = 3.00
output_per_mtok         = 15.00
cache_write_5m_per_mtok = 3.75
cache_write_1h_per_mtok = 6.00
cache_read_per_mtok     = 0.30

# Haiku 4.5 - launch date is in the id suffix (claude-haiku-4-5-20251001).

[[model]]
name = "claude-haiku-4-5"
effective_from = "2025-10-01T00:00:00Z"
input_per_mtok          = 1.00
output_per_mtok         = 5.00
cache_write_5m_per_mtok = 1.25
cache_write_1h_per_mtok = 2.00
cache_read_per_mtok     = 0.10

# Pre-4.x models. Kept so old transcripts cost correctly; not expected to
# appear in new sessions.

[[model]]
name = "claude-sonnet-3-7"
effective_from = "2025-02-01T00:00:00Z"
input_per_mtok          = 3.00
output_per_mtok         = 15.00
cache_write_5m_per_mtok = 3.75
cache_write_1h_per_mtok = 6.00
cache_read_per_mtok     = 0.30

[[model]]
name = "claude-haiku-3-5"
effective_from = "2024-10-01T00:00:00Z"
input_per_mtok          = 0.80
output_per_mtok         = 4.00
cache_write_5m_per_mtok = 1.00
cache_write_1h_per_mtok = 1.60
cache_read_per_mtok     = 0.08

[[model]]
name = "claude-haiku-3"
effective_from = "2024-03-01T00:00:00Z"
input_per_mtok          = 0.25
output_per_mtok         = 1.25
cache_write_5m_per_mtok = 0.30
cache_write_1h_per_mtok = 0.50
cache_read_per_mtok     = 0.03

[[model]]
name = "claude-opus-3"
effective_from = "2024-03-01T00:00:00Z"
input_per_mtok          = 15.00
output_per_mtok         = 75.00
cache_write_5m_per_mtok = 18.75
cache_write_1h_per_mtok = 30.00
cache_read_per_mtok     = 1.50

# GPT-5 (Codex). OpenAI has no prompt-cache write tier, so the two cache_write_*
# columns stay zero; cached_input_tokens map onto cache_read at the discount rate.

[[model]]
name = "gpt-5"
effective_from = "2025-08-01T00:00:00Z"
input_per_mtok          = 0.625
output_per_mtok         = 5.00
cache_write_5m_per_mtok = 0.0
cache_write_1h_per_mtok = 0.0
cache_read_per_mtok     = 0.125

[[model]]
name = "gpt-5-mini"
effective_from = "2025-08-01T00:00:00Z"
input_per_mtok          = 0.25
output_per_mtok         = 2.00
cache_write_5m_per_mtok = 0.0
cache_write_1h_per_mtok = 0.0
cache_read_per_mtok     = 0.025

[[model]]
name = "gpt-5-codex"
effective_from = "2025-09-01T00:00:00Z"
input_per_mtok          = 1.25
output_per_mtok         = 10.00
cache_write_5m_per_mtok = 0.0
cache_write_1h_per_mtok = 0.0
cache_read_per_mtok     = 0.125

[[model]]
name = "gpt-5.3-codex"
effective_from = "2026-03-01T00:00:00Z"
input_per_mtok          = 2.00
output_per_mtok         = 10.00
cache_write_5m_per_mtok = 0.0
cache_write_1h_per_mtok = 0.0
cache_read_per_mtok     = 0.20

[[model]]
name = "gpt-5.4"
effective_from = "2026-04-01T00:00:00Z"
input_per_mtok          = 2.50
output_per_mtok         = 15.00
cache_write_5m_per_mtok = 0.0
cache_write_1h_per_mtok = 0.0
cache_read_per_mtok     = 0.25

# <synthetic> covers Claude's rate-limit / api-error stubs. Their usage block
# is zero anyway, but stamping it at $0 keeps the cost path unambiguous.

[[model]]
name = "<synthetic>"
effective_from = "2024-01-01T00:00:00Z"
input_per_mtok          = 0.0
output_per_mtok         = 0.0
cache_write_5m_per_mtok = 0.0
cache_write_1h_per_mtok = 0.0
cache_read_per_mtok     = 0.0

# Fallback for models we don't recognise. Priced at Sonnet rates so the number
# isn't wildly off; rows hit by this show "__unknown__@..." in pricing_version,
# easy to grep and recost once real rates land.

[[model]]
name = "__unknown__"
effective_from = "2024-01-01T00:00:00Z"
input_per_mtok          = 3.00
output_per_mtok         = 15.00
cache_write_5m_per_mtok = 3.75
cache_write_1h_per_mtok = 6.00
cache_read_per_mtok     = 0.30