CLAUDE LABJP
KEYS — v2.1.238 adds a keybindingFlavor setting. Set it to readline and Ctrl+W deletes back to the previous whitespace, just as in Bash. The classic default is unchangedPLUGINS — Plugin marketplaces can now define a headersHelper that mints HTTP headers, such as a short-lived token, on each catalog fetch. Installing shows the command and asks before running itRUNNER — self-hosted-runner gained defer-shutdown-max-min. On SIGTERM it keeps serving attached sessions, then parks whatever is left after that many minutes and exitsMEMORY — Unbounded memory growth in long interactive sessions is fixed. Subagent tool results are now released once they leave the recent display windowMCP — mcp list and mcp get now show disabled servers as Disabled instead of connecting to them for a health check, so a server you turned off no longer starts just to be listedPRICING — Claude Sonnet 5's introductory $2 per million input and $10 output ends August 31, with standard $3 and $15 pricing from September 1. Nine days to goKEYS — v2.1.238 adds a keybindingFlavor setting. Set it to readline and Ctrl+W deletes back to the previous whitespace, just as in Bash. The classic default is unchangedPLUGINS — Plugin marketplaces can now define a headersHelper that mints HTTP headers, such as a short-lived token, on each catalog fetch. Installing shows the command and asks before running itRUNNER — self-hosted-runner gained defer-shutdown-max-min. On SIGTERM it keeps serving attached sessions, then parks whatever is left after that many minutes and exitsMEMORY — Unbounded memory growth in long interactive sessions is fixed. Subagent tool results are now released once they leave the recent display windowMCP — mcp list and mcp get now show disabled servers as Disabled instead of connecting to them for a health check, so a server you turned off no longer starts just to be listedPRICING — Claude Sonnet 5's introductory $2 per million input and $10 output ends August 31, with standard $3 and $15 pricing from September 1. Nine days to go
Articles/Claude Code
Claude Code/2026-08-22Intermediate

Switching to headersHelper in Claude Code broke auth for project-scoped catalogs only

Moving a private plugin catalog to headersHelper worked at user scope and failed under the project directory. The cause was credential non-inheritance. Here are two working helpers, measured execution costs, and what unattended runs need.

Claude Code230Plugins2Marketplace2Authentication3Indie Development9

Premium Article

Three mornings that week opened with the same failure notification from an unattended run. Each one traced back to an expired token for the private repository that hosts my own plugin catalog.

As an indie developer I keep one shared set of skills and plugins across both the app side and the site side of my work, stored in a private repository and pulled from several machines and projects. The token lived directly in a config file. Every rotation meant remembering where it was, editing it, and discovering the file I forgot the morning an unattended run fell over.

Claude Code v2.1.238, released on August 20, added headersHelper to plugin marketplaces, which lets that arrangement go away. A command runs every time the catalog is fetched and returns HTTP headers, so you can hand over a freshly minted, short-lived token instead of a long-lived one.

The migration should have taken half an hour. Instead, a helper that worked perfectly at user scope stopped authenticating the moment it moved under a project directory, and I burned half a day there. The reason makes complete sense in hindsight. I did not see it coming.

What was actually painful about the token in a config file

With a catalog in a private repository, authentication is needed twice: once to fetch the catalog JSON, and again to fetch the archives it points at. Both used a fixed token.

The annoying part of a fixed token is not the expiry itself. It is that the only channel telling you it expired is an incident. A long-lived token gives no warning at all, and then several machines and several projects fail to fetch at the same moment.

There is also the file. Putting a token in a config file that lives in a repository turns that file into something you can leak. Even at the scale a single indie developer works at, forgetting to keep a project-level .mcp.json out of git is a real possibility.

headersHelper addresses both structurally rather than procedurally.

Where headersHelper actually plugs in

You can attach headersHelper to a URL marketplace definition and to individual catalog entries. The command you name prints a JSON object of headers to stdout, and those headers ride along with the request.

PlacementWhen it runsTypical use
URL marketplaceEvery catalog fetch, plus same-origin archive fetchesProtecting the catalog as a whole
Catalog entryOnly when that plugin is installed or updatedSplitting distribution per entry

The important detail is that an entry-level helper does not run silently. claude plugin install and claude plugin update display the command and ask [y/N]. You can skip the prompt with -y, but skipping is a decision a human makes once.

If you run anything unattended, check this first. Without an explicit -y, a non-interactive path sits waiting for confirmation. I missed this initially and only noticed when the task hit its timeout.

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 know exactly which scope to place a headersHelper in when you move a private plugin catalog to short-lived tokens
You will catch the class of helper that works on your machine and dies once distributed, before you ship it to anyone
You will be able to choose between a static store read and per-request RS256 minting from measured cost (5 ms vs 21 ms) instead of guesswork
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-06-27
When an OAuth Token Expires, Your Unattended Run Has Nowhere to Go — A Token-Lifecycle Design That Keeps Remote MCP Alive
Remote MCP connectors are authorized via OAuth, but access tokens are short-lived. Interactive sessions can re-authorize in a browser; an unattended scheduled run has nobody to click the dialog. Here is a token-lifecycle design that owns expiry and refreshes ahead of time.
Claude Code2026-06-14
Finding and Installing Claude Code Plugins from a Marketplace — Read What's Inside Before You Trust It
A practical walkthrough for discovering and installing Claude Code plugins from a marketplace. Beyond the /plugin commands, it covers how to read the bundled contents before you install, and how to choose between User and Project scope.
Claude Code2026-07-08
Auditing Your Own Code for Required Reason API Declarations with Claude Code
Required reason codes in PrivacyInfo.xcprivacy apply to your own code, not just third-party SDKs. After a wallpaper app of mine was rejected, here is the Claude Code workflow I use to scan Swift sources and match APIs to reason codes before submission.
📚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 →