Each repository gets 10 GB of cache for free; entries unused for seven days are deleted, and past the limit the least recently used go first. Since 20 November 2025 administrators can raise both limits (up to 10 TB for a personal repository), paying for the extra storage:
gh cache list --json key,ref --jq '.[] | "\(.ref) \(.key[0:28])..."'
gh api repos/{owner}/{repo}/actions/cache/retention-limit --jq .
gh api repos/{owner}/{repo}/actions/cache/storage-limit --jq .Output
refs/heads/ci/cache-demo npm-Linux-874b14aefae1e1bf21...
refs/heads/ci/cache-demo npm-Linux-874b14aefae1e1bf21...
refs/heads/main node-cache-Linux-x64-npm-874...
refs/heads/main node-cache-Linux-arm64-npm-8...
refs/pull/17/merge node-cache-Linux-x64-npm-874...
refs/pull/17/merge node-cache-Linux-arm64-npm-8...
{"max_cache_retention_days":7}
{"max_cache_size_gb":10}Each scope keeps its own copy of a key. Large projects hit the ceiling with keys that change on every commit, and the symptom is thrashing, not an error. gh 29 cache delete <key> removes an entry; anything a later job must find belongs in an artifact.