CLAUDE LABJP
2.1.273 — A round of connection work landed together: five opt-in headers for LLM gateways, and a notice when Claude Code stops trying to reconnect an MCP server09/29 — The date beside claude-sonnet-4-5 is 12 days out, but it is an earliest-possible estimate. The model is still Active, and public retirements get at least 60 days noticeMCP — People keep asking to reconnect a dropped server without ending the session. The disconnect is now announced, but reattaching is still something you do by handNEW — A scheduled task ran some days and not others. The cause was that only one folder had been bound to itWINDOWS — When Cowork fails on its very first task, check developer mode and the setup state before going looking for a causeHANDOFF — Before a long draft gets too heavy for one chat, decide on the three things the summary must carry into the next one2.1.273 — A round of connection work landed together: five opt-in headers for LLM gateways, and a notice when Claude Code stops trying to reconnect an MCP server09/29 — The date beside claude-sonnet-4-5 is 12 days out, but it is an earliest-possible estimate. The model is still Active, and public retirements get at least 60 days noticeMCP — People keep asking to reconnect a dropped server without ending the session. The disconnect is now announced, but reattaching is still something you do by handNEW — A scheduled task ran some days and not others. The cause was that only one folder had been bound to itWINDOWS — When Cowork fails on its very first task, check developer mode and the setup state before going looking for a causeHANDOFF — Before a long draft gets too heavy for one chat, decide on the three things the summary must carry into the next one
Articles/Claude Code
Claude Code/2026-08-24Advanced

The same skill lived in two places, and only one copy still had its files

Two scopes held skills with identical names. The SKILL.md files matched down to the sha256, yet one copy was missing the files its own body points to. Here is how I scanned 66 skills and rewrote the detector three times to get from four hits to two real ones.

Claude Code253skill designnamespacesintegrity checksoperations29

Premium Article

One line in the August 23 release notes caught my eye. A bundled skill alias was returning "Unknown command" when a user-scoped or project-scoped skill of the same name shadowed it, and that had been fixed.

I assumed it did not apply to me. I had been careful about naming.

I counted anyway. Forty-two skills on the project side, twenty-four on the user side, sixty-six in total. Five of them existed under the same name in both places.

That much was still within expectations. What followed was not. All five pairs had SKILL.md files that matched down to the sha256 — and two of those pairs held a different number of bundled files.

A name collision is not, by itself, an incident

Which copy wins resolution is a separate question, and I wrote about it in Nothing came back from the skill I called — pinning down name resolution before launch. The conclusion there was to build a table of effective names before starting.

What I ran into this time sits one layer beneath that. Even when the effective name is settled, the entity that wins is not guaranteed to be complete.

When the same skill sits in two places, the natural first move is to compare the bodies. That is what I did.

diff .agents/skills/seo-audit/SKILL.md ~/.claude/skills/seo-audit/SKILL.md
# no output (zero differences)

Zero differences. Both 10,688 bytes. I closed the terminal feeling reassured.

Then I realized I had never looked at the directories themselves.

What was missing was not the body, but the files the body names

Here are the same two directories, listed file by file.

(cd .agents/skills/seo-audit && find . -type f | sort)
# ./SKILL.md
# ./evals/evals.json
# ./references/ai-writing-detection.md
 
(cd ~/.claude/skills/seo-audit && find . -type f | sort)
# ./SKILL.md

Identical bodies. Three files against one.

And the body of SKILL.md contains this line:

references/ai-writing-detection.md

So if the user-scoped copy wins, the skill goes looking for a file that is not there. Because the two SKILL.md files match exactly, neither diff nor sha256sum will ever surface this.

The missing references/ai-writing-detection.md is 6,528 bytes — roughly sixty percent of the size of SKILL.md itself, referenced but absent.

What you compareProject copyUser copyDoes it show?
SKILL.md contents10,688 bytes10,688 bytes (identical)No
SKILL.md sha256matchmatchNo
Files in the directory31Yes
Referenced files presentall presentone absentYes

I had been operating on the top two rows alone.

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
You will be able to check, in your own setup, whether the skill that actually wins name resolution is the complete one
You will be able to catch a failure mode that survives a byte-for-byte diff, using a single check on whether referenced files exist
You will be able to separate false positives from false negatives instead of trusting the count your detector prints
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

Claude Code2026-09-01
Once I passed a dozen MCP servers, I stopped trusting the startup list
Only some of the servers that say connection failed at startup are ones you can actually fix. Here is a probe that separates no-response, launch failure, and protocol rejection, measured across a 14-server fleet where sequential 22.03s became parallel 5.09s, and where trimming the deadline quietly turned healthy servers into failures.
Claude Code2026-08-31
Half of My Scheduled Runs Vanished Without a Single Error
A batch job set to run twice a day was only firing once. No errors, no failure alerts. Here is how to expand your own schedule, count expected runs, and reconcile them against execution records to catch silent misses.
Claude Code2026-08-27
Curating the /model picker with modelPicker, and what replacing the lineup hides
Claude Code v2.1.242 added modelPicker, which lets you write the /model lineup yourself. Here is how appending differs from replacing, why project settings are ignored, and where it quietly narrows what availableModels allows.
📚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