Opened the dashboard at 23:47
Microsoft cancelled Claude Code subscriptions. Here's the production audit one indie operator ran on $847/mo of Anthropic spend.
When Microsoft Cancelled Claude Code
Microsoft cancelled internal Claude Code subscriptions for its engineering org earlier this month. My monthly Anthropic spend is $847. My exposure to that decision is non-zero. Here’s the audit I ran on my own platform the night the news hit.
Foreword: I don’t care about the politics. I care about whether the API endpoint I hit 14,000 times a day next quarter still has the same SLA, the same pricing tier, and the same model availability. Microsoft was reportedly one of the largest enterprise consumers of Claude on Bedrock and direct API. When a single account that size pulls back, three things move: capacity allocation, pricing leverage, and roadmap priority. If you’re running production workloads on Anthropic, all three matter.
What I checked first
Opened the dashboard at 23:47 local. Pulled the last 30 days of latency p50/p95 for every model I touch:
model p50_ms p95_ms error_rate
claude-opus-4-7 1840 4720 0.03%
claude-sonnet-4-6 620 1490 0.01%
claude-haiku-4-5 210 540 0.00%
claude-sonnet-4-6 (batch) N/A N/A 0.00%
No regression. Capacity headroom on Sonnet 4.6 was actually better than the prior week - which tracks if a large enterprise customer just freed up reserved throughput. That’s a one-night data point, not a trend. I’m running a sentinel that snapshots these numbers every 4 hours so I have a real before/after by July.
The dependency map
Forge runs 6 content properties through Claude Code skills + the Anthropic SDK + APScheduler. Here’s the breakdown of what calls what:
| Workload | Model | Calls/day | Failure mode if model deprecated |
|---|---|---|---|
| Long-form drafts | Opus 4.7 | 38 | Fall back to Sonnet 4.6, accept quality hit |
| Social post generation | Sonnet 4.6 | 1,840 | Fall back to Haiku 4.5, accept structure drift |
| Skill-driven slash commands | Sonnet 4.6 | 4,200 | Hard failure - skills are tuned to this model |
| Cost-cap classifier | Haiku 4.5 | 12,000 | Trivial - multiple substitutes |
| Background research agent | Opus 4.7 (extended) | 6 | No fallback - kill the feature |
The two rows that scare me are ‘skill-driven slash commands’ and ‘background research agent.’ Skills carry implicit prompt assumptions - token budgets, JSON output shape, how aggressive the model is about asking follow-up questions. Moving from Sonnet 4.6 to Sonnet 4.5 broke 14 of my 47 skills in November when I tested it. That was a same-family minor version. A forced migration to a different family would be worse.
Why one enterprise account matters
Anthropic doesn’t publish revenue concentration. Reuters and The Information have both reported in the last six months that two customers - one of them Microsoft for Copilot infrastructure overflow - account for a material share of API revenue. Pick your own number; the directional point is what matters: if one of the top three accounts cancels, the company has three levers.
- Raise prices on the remaining customers.
- Reallocate capacity to consumer (claude.ai) and direct enterprise.
- Reprioritize the model roadmap toward whatever the new largest customers want.
Lever 1 hits me directly. Lever 2 helps me (more capacity per dollar). Lever 3 is the long fuse. If Anthropic’s next 18 months get steered by, say, AWS-via-Bedrock priorities, model behavior on long-context coding tasks could drift in a direction that breaks my skills. I have no contract that protects against that. Neither do you.
The production hardening checklist
I ran this against Forge the morning after. Anyone running anything serious on Anthropic should run the same audit. Failure modes first, then the fix:
- Hard-coded model strings scattered across 40+ files
- No circuit breaker on 529 overloaded responses
- No fallback model wired into the SDK wrapper
- Skills tested against one model version only
- No cost cap per job - a runaway loop could burn $200 before I’d notice
- Cached prompts pinned to one model; cache invalidates on switch
Every one of those is a normal-week problem. They become a bad-week problem when the underlying provider gets shaken.
Fix 1: centralize model selection
One file. One dict. Every call site reads from it.
# foundry/models.py
MODELS = {
"draft": "claude-opus-4-7",
"social": "claude-sonnet-4-6",
"skill": "claude-sonnet-4-6",
"classify": "claude-haiku-4-5-20251001",
}
FALLBACKS = {
"claude-opus-4-7": "claude-sonnet-4-6",
"claude-sonnet-4-6": "claude-haiku-4-5-20251001",
}
Commit 7c4a1b9 migrated the codebase. 31 files touched, 412 lines changed, took 90 minutes with Claude Code doing the actual edits.
Fix 2: circuit breaker on 529
Anthropic returns HTTP 529 when the system is overloaded. The SDK retries automatically with backoff but doesn’t give up gracefully. I wrapped every call:
from anthropic import APIStatusError
class OverloadCircuit:
def __init__(self, threshold=5, window_s=60):
self.failures = []
self.threshold = threshold
self.window = window_s
def record(self):
now = time.time()
self.failures = [t for t in self.failures if now - t < self.window]
self.failures.append(now)
def open(self):
return len(self.failures) >= self.threshold
When the circuit opens, jobs queue to disk and resume when a probe call succeeds. Total cost of the change: 67 lines, one new test file, $0.42 in Claude credits to write it.
Fix 3: per-job cost cap
I lost $14 last March to a recursion bug in a draft agent. Not catastrophic. Also not zero. Now every job carries a max_cost_usd field and the wrapper aborts when the running total crosses it:
if job.cost_so_far_usd > job.max_cost_usd:
logger.error(f"cost_cap_exceeded job={job.id} cost={job.cost_so_far_usd:.2f}")
raise CostCapExceeded(job.id)
The ledger writes every API response’s usage block to SQLite. I can query exact spend per skill per day. That’s also the file I check first when any pricing change rumors land.
Fix 4: skill compat matrix
I now run a nightly job that fires every skill against every supported model and diffs the output against a golden file. Output shape changes (JSON key drift, extra preamble text, missing fields) get flagged. Cost: $3.20/night. Caught 4 silent regressions in the last 60 days that I would have hit in production otherwise.
What this is not
This isn’t a ‘Anthropic is doomed, migrate to OpenAI’ post. I run mixed-model evals every quarter. Claude Sonnet 4.6 beats GPT-5.x on my skill workload by a comfortable margin - specifically on instruction-following at long context (~120k tokens) and on producing parseable JSON without prompt scaffolding. The gap has held for nine months. I’m not moving on a rumor.
It also isn’t a ‘Microsoft cancelled, so the model is good now, capacity for everyone’ post. We don’t know the actual volume change. We don’t know if Anthropic is replacing that revenue with other enterprise contracts. We don’t know if the cancellation is final or a negotiating posture.
What I’d watch over the next 90 days
- Console pricing page diff. I scrape it weekly and store the hash. No change since March.
- Model deprecation notices. Anthropic emails 6 months ahead. Last one was for Claude 3 family in February.
- API p95 latency on Sonnet 4.6 during US business hours. Reserved capacity getting reallocated to other customers would show up here first.
- Rate limit ceilings in console. Mine jumped from 4k RPM to 8k RPM in April with no request from me. That’s a tell that capacity is available.
- Whether the next model release (Opus 4.8 / Sonnet 4.7) keeps the same pricing tier or shifts. Pricing-tier shifts are how providers extract margin without a ‘price increase’ headline.
None of those are private signals. They’re public data anyone can scrape. The difference between an operator who panics on rumors and one who doesn’t is having the scrapers already running before the news hits.
Receipts
Forge has been running on Anthropic for 14 months. Total spend to date: $9,847. Total publish events: 23,406 posts across 6 properties. Average cost per published piece: $0.42. Median p95 latency: 1.49s on Sonnet 4.6. Zero unplanned model migrations. Three planned ones (Opus 4.5 → 4.6 → 4.7, Sonnet 4.5 → 4.6).
If Microsoft cancelling their Claude Code subscriptions changes any of those numbers, you’ll see the post-mortem here with the commit hash that fixed it.
Try Claude Code yourself: https://claude.ai/code
Contains a referral link.
Keep Reading
claude-codeNothing crashed, nothing shipped
An agent committed at 03:17; production absorbed it at 03:20. Eleven silent hours later: why every commit is a deployment, and how to watch them land.
claude-codeEleven hours lost to one settings file
The undocumented Claude Code config flags, hooks, env vars, and permission patterns I rely on to run six properties in production.
claude-codeOur repair agent patched the wrong file four times
A Claude Code repair agent patched the wrong file four times in 31 hours. Why agents anchor on tracebacks, and the prompt rewrite that fixed it.
Stay in the loop
New writing delivered when it's ready. No schedule, no spam.