### Prompt cache fields
The whole hunk
from line 143, old and new numbered
/
lines
from line 143
143143* You change the `command` in your `statusLine` settings
144144* A [`refreshInterval`](#manually-configure-a-status-line) timer elapses, if you set one
145145* A [rate-limit window](#rate-limit-usage) in the data your script last received reaches its `resets_at` time
146* A warm [prompt cache](#prompt-cache-fields) in the data your script last received reaches its `expires_at` time
146147
147148Claude Code debounces updates at 300ms, so rapid changes batch together and your script runs once after the changes stop. A change to the `command` itself skips the debounce: Claude Code runs the new command right away. If a new update triggers while your script is still running, Claude Code cancels the in-flight script. If you edit your script, the changes appear the next time an update trigger re-runs it.
148149
from line 188
187188| `thinking.enabled` | Whether extended thinking is enabled for the session |
188189| `rate_limits.five_hour.used_percentage`, `rate_limits.seven_day.used_percentage` | Percentage of the 5-hour or 7-day rate limit consumed, from 0 to 100 |
189190| `rate_limits.five_hour.resets_at`, `rate_limits.seven_day.resets_at` | Unix epoch seconds when the 5-hour or 7-day rate limit window resets |
191| `prompt_cache` | The session's [prompt cache](/docs/en/prompt-caching) statistics for the main conversation: hit ratio, misses, and whether the cache is warm. See [prompt cache fields](#prompt-cache-fields) for every field. Absent until the main conversation's first API response. Requires Claude Code v2.1.251 or later |
190192| `session_id` | Unique session identifier |
191193| `session_name` | Session name. Uses the custom name set with the `--name` flag or `/rename` when one exists, otherwise the AI-generated session title. The [default display name](/docs/en/sessions#name-your-sessions), such as `my-app-3f`, doesn't populate this field. Absent when the session has neither a custom name nor an AI-generated title |
192194| `prompt_id` | UUID identifying the user prompt currently being processed. Matches the [`prompt.id` attribute on OpenTelemetry events](/docs/en/monitoring-usage#event-correlation-attributes). Absent until the first user input. Requires Claude Code v2.1.196 or later |
from line 256
254256 }
255257 },
256258 "exceeds_200k_tokens": false,
259 "prompt_cache": {
260 "warm": true,
261 "caching_observed": true,
262 "ttl": "1h",
263 "expires_at": 1738429200,
264 "requests": 14,
265 "misses": 2,
266 "expected_rebuilds": 1,
267 "hit_ratio": 0.91,
268 "cache_write_tokens": 352000,
269 "miss_recache_tokens": 310200,
270 "last_miss_at": 1738425230,
271 "recache_tokens_if_cold": 45000
272 },
257273 "fast_mode": false,
258274 "effort": {
259275 "level": "high"
from line 320
304320 * `pr`: appears only while an open PR or GitLab merge request is found for the current branch, and is removed once it merges or closes. `pr.review_state` and `pr.kind` may be independently absent
305321 * `worktree`: appears only while the session is in a [worktree session](/docs/en/worktrees). When present, `branch` and `original_branch` may also be absent for hook-based worktrees
306322 * `rate_limits`: appears only for Claude.ai subscribers (Pro/Max) after the first API response in the session. Each window (`five_hour`, `seven_day`) may be independently absent, and Claude Code drops a window once its `resets_at` time passes. Use `jq -r '.rate_limits.five_hour.used_percentage // empty'` to handle absence gracefully.
323 * `prompt_cache`: appears after the main conversation's first API response. See [prompt cache fields](#prompt-cache-fields)
307324
308325 **Fields that may be `null`**:
309326
from line 351
334351If you calculate context percentage manually from `current_usage`, use the same input-only formula to match `used_percentage`.
335352
336353The `current_usage` object is `null` before the first API call in a session, and again immediately after `/compact` until the next API call repopulates it.
354
355### Prompt cache fields
356
357The `prompt_cache` object summarizes how the session's main conversation is using the [prompt cache](/docs/en/prompt-caching). Claude Code computes it from the cache token counts in the API's responses, so it works on every provider.
358
359The object appears after the main conversation's first API response. Claude Code doesn't count subagent requests in these statistics. Requires Claude Code v2.1.251 or later.
360
361The table lists each field with its meaning. Timestamps are Unix epoch seconds, the same unit as `rate_limits.*.resets_at`. A short status line usually shows one or two of these; `warm` and `hit_ratio` summarize the cache state most directly.
362
363| Field | Description |
364| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
365| `warm` | Whether the cached prefix is still within its TTL. `false` when the last response reported no cache tokens, even while `caching_observed` is `true` |
366| `caching_observed` | Whether any response this session reported cache tokens. `false` means prompt caching is off, or your provider or gateway doesn't report it |
367| `ttl` | [Cache lifetime](/docs/en/prompt-caching#cache-lifetime) of the current cached prefix: `"5m"` or `"1h"` |
368| `expires_at` | When the cached prefix leaves its TTL and goes cold, in epoch seconds. `null` when the last response reported no cache tokens |
369| `requests` | API requests recorded for the main conversation this session |
370| `misses` | Requests that re-processed content the cache already held: more than 5% and at least 2,000 tokens of what the request could have read from cache, with no compaction or tool-result clearing to explain the shortfall in cache reads |
371| `expected_rebuilds` | Cache rebuilds that followed a compaction or a clearing of old tool results |
372| `hit_ratio` | Cache read tokens as a fraction of all input tokens this session, from 0 to 1. The denominator counts cache reads, cache writes, and uncached input. `null` while those counts are all zero |
373| `cache_write_tokens` | All tokens written to the cache this session, the first request's initial write included |
374| `miss_recache_tokens` | Tokens written to the cache by the requests counted as misses |
375| `last_miss_at` | When the last miss happened, in epoch seconds. `null` while the session has no misses |
376| `recache_tokens_if_cold` | Tokens the next request re-caches if the cache has gone cold by then. `null` right after a compaction or a clearing of old tool results, until the next request records the rewritten conversation's size |
377
378Claude Code shows the same statistics in the terminal, on the [`/usage` command's `Prompt cache (main)` line](/docs/en/costs#prompt-cache-statistics).
337379
338380## Examples
339381