CLAUDE LABJP
PRICING — September 1 was the scheduled date for the Sonnet 5 price increase, and it did not happen. The introductory $2/$10 per MTok now stands as the regular pricePARTNER — Salesforce and Anthropic announced Claudeforce, an expanded partnership. The Salesforce in Claude plugin ships with 37 prebuilt sales skills, from meeting prep to pipeline managementTRUST — Claudeforce serves Claude through Amazon Bedrock inside the Salesforce Trust Boundary, so data and inference never leave the security perimeter — an answer aimed squarely at regulated industriesBETA — Salesforce in Claude is with select pilot customers for now, with an open beta expected during SeptemberLIMITS — The 50% weekly-limit boost runs through September 13. From September 14 the permanent level is 25% above the pre-promotion baseline, roughly a 17% cut from todayRELEASE — Claude Code has shipped nothing since v2.1.251 on August 28. Against a pace of one release every 0.8 days, a four-day gap is among the longest yetPRICING — September 1 was the scheduled date for the Sonnet 5 price increase, and it did not happen. The introductory $2/$10 per MTok now stands as the regular pricePARTNER — Salesforce and Anthropic announced Claudeforce, an expanded partnership. The Salesforce in Claude plugin ships with 37 prebuilt sales skills, from meeting prep to pipeline managementTRUST — Claudeforce serves Claude through Amazon Bedrock inside the Salesforce Trust Boundary, so data and inference never leave the security perimeter — an answer aimed squarely at regulated industriesBETA — Salesforce in Claude is with select pilot customers for now, with an open beta expected during SeptemberLIMITS — The 50% weekly-limit boost runs through September 13. From September 14 the permanent level is 25% above the pre-promotion baseline, roughly a 17% cut from todayRELEASE — Claude Code has shipped nothing since v2.1.251 on August 28. Against a pace of one release every 0.8 days, a four-day gap is among the longest yet
Articles/API & SDK
API & SDK/2026-05-27Advanced

Tail Latency in Scheduled Claude API Workloads: A Three-Layer Guardrail Against Retry Storms

After running six sites in parallel through scheduled Claude API tasks for several months, 14 days of logs revealed three distinct p95/p99 patterns and a retry storm I had been creating from my own client. This is the guardrail design I landed on — jitter, budget, circuit breaker — with the before/after numbers.

Claude API119tail latencyretry stormproduction111scheduled workloadindie developer20

Premium Article

I have been publishing apps as an indie developer since 2014. By the time the cumulative download count crossed 50 million, my workflow had drifted in the opposite direction of "ship more, automate more." I was spending more time watching what I had already built than building anything new. The last five months have been about running six sites in parallel — four Dolice Labs technology blogs plus two writing blogs in a separate folder — entirely through Cowork scheduled tasks. Claude API is the engine; GitHub and Cloudflare Workers are the rails.

A few weeks into that setup, one symptom kept catching my eye. A task scheduled to run at 02:00 JST was sometimes still running at 02:38. The API was responding. The retries were not. That gap — between "the model returned" and "the client gave up retrying" — is what this article is about.

The signal I missed when I only looked at p50

For the first few weeks I checked the average completion time and called it good. The median sat in a tight band, and the chart looked fine. The habit I inherited from my grandfather, who was a temple carpenter, is to keep touching the work until it tells you something. I started touching p95, p99, and the individual samples above 60 seconds, and the picture changed.

Latency itself was not the problem. The retry layer was misreading "slow but eventually fine" responses as failures, and was generating extra load from my own client. The same pattern I had hit before on the AdMob revenue side of indie apps: my retry policy was the dominant cause of the tail, not the upstream.

The shape of p95/p99 in 14 days of scheduled traffic

Here is the raw frame of the observation. Six sites, 14 days (2026-05-12 to 2026-05-25), 1,842 Claude API calls. Single requests, no streaming, a mix of claude-sonnet and claude-haiku.

MetricValue
Successful calls1,789 (97.1%)
Failed calls53 (2.9%)
p50 completion time7.4 s
p95 completion time19.8 s
p99 completion time41.2 s
Max187 s (outlier)
Avg retries on success0.18
Avg retries on failure4.6

A p99 of 41 seconds for an isolated call is acceptable on its own. The 4.6 average retries on failure is not. Every failure was triggering nearly five extra requests against the same endpoint. That is what I am calling a retry storm in this article.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
Three p95/p99 escalation patterns extracted from 14 days of scheduled Claude API traffic, with the observation queries that let me separate model jitter from self-inflicted retry storms
A working TypeScript implementation of a three-layer guardrail (jittered exponential backoff, per-minute budget, lightweight circuit breaker) sized for solo or small-team production use
Before/after numbers across p50, p95, p99, max latency, retry counts, and failure rate after rolling out the guardrails across 16 scheduled tasks per day
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Claude Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $15 for lifetime access
View Membership →

Related Articles

API & SDK2026-07-12
Designing Around Claude API 413 request too large — Preflight Sizing and Splitting
Pack too much text, images, and tool_result into one request and Claude API rejects it with 413 request too large. Here is a code-backed design for measuring request bytes before you send, telling the two kinds of 413 apart, and splitting requests without breaking them.
API & SDK2026-06-28
Measure Streaming CPU and Dropped Chunks to Stabilize Long Batch Jobs
You start an overnight batch, and by morning only half of it finished. The culprits were CPU pinned during streaming and a quiet connection drop. Here is a monitor wrapper that measures stream CPU and throughput, and resumes from interruptions.
API & SDK2026-06-27
Designing the Give-Up Condition in Self-Repair Loops: Four Error Classes, Four Retry Budgets
LLM self-repair loops break on the fantasy that 'if you keep fixing, it eventually passes.' Classify errors into four classes, give each its own retry budget. Working TypeScript and real cost numbers included.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →