CLAUDE LABJP
MCP — Support for the 2026-07-28 spec is rolling out across Claude. The protocol moves from bidirectional and stateful to request/response, so MCP servers can now live on serverless and edge infrastructureEXTENSIONS — Three official extensions have landed: MCP Apps for server-rendered UI, Tasks for async and long-running work, and Enterprise Managed Auth for IdP-based org-wide provisioningADOPTION — MCP passed 400 million monthly SDK downloads, roughly 4x growth this year, settling into its role as the standard way to connect agents to applicationsQUOTA — Today, August 19, is the last day of the 50 percent weekly usage boost for Claude Code subscribers. If you have long agent runs queued, this is the windowPRICING — Claude Sonnet 5's introductory rate of $2 per million input tokens and $10 output ends August 31; standard pricing of $3 and $15 takes over on September 1, twelve days outFIX — A bug where MCP v2 connections endlessly reopened subscriptions against servers with fixed timeouts is resolved, and a forward_user_identity setting was added for user attributionMCP — Support for the 2026-07-28 spec is rolling out across Claude. The protocol moves from bidirectional and stateful to request/response, so MCP servers can now live on serverless and edge infrastructureEXTENSIONS — Three official extensions have landed: MCP Apps for server-rendered UI, Tasks for async and long-running work, and Enterprise Managed Auth for IdP-based org-wide provisioningADOPTION — MCP passed 400 million monthly SDK downloads, roughly 4x growth this year, settling into its role as the standard way to connect agents to applicationsQUOTA — Today, August 19, is the last day of the 50 percent weekly usage boost for Claude Code subscribers. If you have long agent runs queued, this is the windowPRICING — Claude Sonnet 5's introductory rate of $2 per million input tokens and $10 output ends August 31; standard pricing of $3 and $15 takes over on September 1, twelve days outFIX — A bug where MCP v2 connections endlessly reopened subscriptions against servers with fixed timeouts is resolved, and a forward_user_identity setting was added for user attribution
Articles/Cowork
Cowork/2026-07-05Advanced

The Two Weeks My Web Monitor Said Everything Was Fine — Field Notes on Catching Silent Misses

A competitor monitor built on Cowork and Claude in Chrome can keep reporting no changes while quietly missing them. Here is how I separated fetch success from extraction success and instrumented the silent failures, with the code I actually run.

cowork13claude-in-chrome4web-monitoringobservability21scheduled-tasks4selector-drift

Premium Article

The Two Weeks My Monitor Said Everything Was Fine

I had a task watching a competitor's pricing page. It crawled three times a day and reported any diff. For weeks the log read a calm row of "no changes," and I took that calm as proof that all was well.

Then one day I opened that competitor's page for an unrelated reason and my finger froze on the trackpad. A top-tier plan's price had moved. A new entry plan had appeared. My monitor had not noticed any of it for two weeks.

The monitor had not crashed. It started on schedule every time, fetched the page every time, and concluded "no changes" every time. It was reporting health while seeing nothing, and it had no idea.

These are the notes on how I traced those two silent weeks and what instrumentation I added so it would never happen again — with the code I actually run. As an indie developer running several sites myself, I am writing this for anyone doing competitor monitoring, price tracking, or change detection on Cowork who would rather not learn it the way I did.

Fetch Success and Extraction Success Are Not the Same Thing

The root cause was that my pipeline collapsed two entirely different outcomes into a single notion of "success."

The fetch succeeded: HTTP 200, real body text in hand. But the extraction — pulling prices out of that text — was failing silently. The competitor had rebuilt the page, and the class names wrapping the prices had changed. My extraction selector matched nothing and returned an empty string. Compare empty to empty, and of course you get "no changes."

StageWhat actually happenedHow the monitor read it
Page fetchSuccess (200, body present)Healthy
Element extractionFailed (selector miss, empty)Misread as healthy
Diff compareEmpty vs empty → zero diff"No changes"

Put plainly, the monitor was translating "could not read it" into "it did not change." Those two mean the opposite things. The first is a fault in the monitor; the second is the monitor working correctly. As long as they share a shelf, faults will forever walk past wearing the face of business as usual.

The first thing to fix was to carry a signal for whether extraction succeeded, entirely independent of the comparison.

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
Separating fetch success from extraction success and measuring extraction liveness with content anchors
A coverage watcher that treats a too-quiet stretch of zero changes as its own weak alert
Structure fingerprinting to catch selector drift, cutting both false positives and silent misses
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 $10 for lifetime access
View Membership →

Related Articles

Cowork2026-07-17
It Worked on My Machine, but Nobody Could Trigger It — Four Assumptions I Stripped Out of a Cowork Plugin
I bundled four working automation skills into a plugin and shared it. Only one of them ever fired. Here is how I measured skill trigger rate, and the four assumptions — vocabulary, paths, connections, and naming — I had to strip out before it was portable.
Cowork2026-07-12
The Night a Connector Grew Write Tools, Your Unattended Job Could Quietly Send Something
The moment a connector update quietly adds write tools, a job you run unattended can suddenly send email or delete files. Here is how to build a gate that snapshots a connector's tool surface, diffs it, and stops unapproved writes before they run — drawn from indie development.
Cowork2026-07-05
When Claude Declines a Request on Safety Grounds, What Should an Unattended Pipeline Return?
A third kind of ending that is neither an error nor a normal completion — a safety decline. Here is how to fold it into a pipeline you run unattended, with a classifier and a review-queue design drawn from indie development.
📚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 →