data-workflows: Skill for Claude Code

.claude/skills/pod-preemption/SKILL.md

pod-preemption is a skill for Claude Code from boettiger-lab/data-workflows. It costs 180 tokens per session (3,780 once invoked), scanned A, original, BSD-3-Clause.

A guide to investigating Kubernetes jobs whose pods are being stopped before they finish. Kubernetes is a system that runs workloads in containers across a cluster.

In plain words
What is it for?
Use it to inspect job status, priority classes, pod mortality, retry settings, and parallelism for long-running workloads.
Why use it?
It shows how to tell ordinary task failures apart from pod deaths caused by preemption, eviction, memory limits, or excessive parallelism. This prevents hidden retries from making an unreliable job look successful.

Skill for Claude Code

Written for Claude Code: installed under .claude/. Also seen: mentions AGENTS.md.

This is boettiger-lab/data-workflows's own configuration. It tells Claude Code how to work on data-workflows itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything data-workflows configures →

Reuse

Borrowing it

Nothing to install: this file belongs to boettiger-lab/data-workflows. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/boettiger-lab/data-workflows/main/.claude/skills/pod-preemption/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/boettiger-lab/data-workflows

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for pod-preemption

README.md
[![agentmods](https://agentmods.dev/badge/skills/boettiger-lab/data-workflows/pod-preemption/github.svg)](https://agentmods.dev/skills/boettiger-lab/data-workflows/pod-preemption)
Your own site
<a href="https://agentmods.dev/skills/boettiger-lab/data-workflows/pod-preemption"><img src="https://agentmods.dev/badge/skills/boettiger-lab/data-workflows/pod-preemption/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for pod-preemption

Your own site · 80×15
<a href="https://agentmods.dev/skills/boettiger-lab/data-workflows/pod-preemption"><img src="https://agentmods.dev/badge/skills/boettiger-lab/data-workflows/pod-preemption.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 180 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,780 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00180 $0.03780
Opus 5.5 $0.00072 $0.01512
Sonnet 5.5 $0.00036 $0.00756
Haiku 4.5 $0.00018 $0.00378

Measured 8d ago against content hash 63c1ba5286d0, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

pod-preemption scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

curl -s "https://s3-west.nrp-nautilus.io/<bucket>?list-type=2&prefix=<path>/hex/h0=<cell>/" \
.claude/skills/pod-preemption/SKILL.md · 255 lines

How it starts

The opening of the file, as written. The whole thing — 255 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Pod Preemption

The tell: failed far exceeds the number of failed indexes

An indexed Job reports both counts. Read them together:

kubectl -n geo-workflows get job <name> \
  -o jsonpath='succeeded={.status.succeeded} failed={.status.failed} failedIndexes={.status.failedIndexes}{"\n"}'

A real example from the CHELSA build (data-workflows #564):

succeeded=120 failed=47 failedIndexes=39,43

122 indices, only two ultimately failed — so roughly 45 pods died and were retried successfully. That ~28% pod mortality is the signal. failed counts pod deaths, not indices; when it is many times larger than len(failedIndexes), the work is fine and the pods are being killed underneath it.

A job can even report Complete=True while this is happening. Retries hide it. Check the gap on every long job, not just failing ones.

⛔ The gap is necessary, not sufficient — OOM-and-reroute looks identical

A wide failed vs failedIndexes gap says pods died and retried. It does not say why. A pipeline with an expected-OOM tier — dense partitions that fail at the normal memory limit and are rerouted to a bigger companion job — produces exactly the same shape, which is also why such jobs carry a deliberately loose maxFailedIndexes.

The GBIF 2026-09 consolidate (data-workflows #662) read succeeded=114 failed=47 failedIndexes=4,12,15,19-21,34 — near-identical to the #564 signature below, same failed=47. It was not preemption. Do not let that number pattern-match you into the wrong answer; it cost a session here exactly that.

Two checks settle it before you touch the data:

  • A clean earlier stage in the same window rules preemption out. Stage 1 of that job ran succeeded=200 failed=0 at default priority, same namespace, same node pool, same window as Stage 2's 47 deaths. Preemption does not selectively spare one stage.
  • Size correlation is the positive tell for OOM. Every failed index was among the largest partitions — the seven held 2.6B of 3.57B rows. Preemption hits indexes without regard to size; OOM hits the big ones and only the big ones.

Read the full file on GitHub · 255 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 8d ago Changed · +1 lines 63c1ba5286d0
  2. 10d ago Changed · +38 lines · +31 tokens per session 11a279401108
  3. 1mo ago Changed · +68 lines · +44 tokens per session 2e5dea0e7a09
  4. 2mo ago First seen · 148 lines · 105 tokens per session scan A 07a1bf8739c1

Subscribe to this mod's changes

pod-preemption is a skill published in the GitHub repository boettiger-lab/data-workflows (5 stars, last pushed 2d ago), licensed BSD-3-Clause. It adds 180 tokens to every session and 3,780 once invoked, about $0.0007 per session on Opus 5.5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

pod-preemption compared with skills from other repositories

pod-preemption next to 6 skills from other repositories
ModTypeStarsLast pushLicenceScanTokensWorks with
pod-preemptionboettiger-lab/data-workflowsSkill52d agoBSD-3-ClauseA180Claude Code
deploy-docker-composeomnigent-ai/omnigentSkill11kyesterdayApache-2.0A84Claude Code, Codex
bdd-container-updateNVIDIA-AI-Blueprints/video-search-and-summarizationSkill2.0kyesterdayApache-2.0A117Cursor
securing-kubernetes-on-cloudxalgorix/xalgorixSkill1.3kyesterdayApache-2.0A80Claude Code, Codex
detecting-privilege-escalation-in-kubernetes-podsxalgorix/xalgorixSkill1.3kyesterdayApache-2.0A40Claude Code, Codex
docker-socket-mountPurpleAILAB/DecepticonSkill6.5k8d agoApache-2.0B67Claude Code
k8s-networkingrohitg00/kubectl-mcp-serverSkill96815d agoMITA34Claude Code, Codex