Plugin marketplace add fails with EFAULT on macOS 26, and deleting the cache directory does not break the loop

Status Fixed / completed
Reported on v2.1.232
Maintainer reply None cached
Activity 3 comments · opened Aug 14, 2026 · closed Aug 14, 2026

Summary

/plugin marketplace add fails on macOS 26 with EFAULT: bad address in system call
argument
during "finalize marketplace cache". This reproduces #53181 (closed as
inactive, now locked) on a current version, and adds one observation that narrows
the cause considerably:

The rm fails with EFAULT even when the target directory does not exist.

A rm of a non-existent path should fail with ENOENT, not EFAULT. So this is not
about the directory's contents, permissions, or chflags — the failing call never had
a directory to act on.

Environment

  • Claude Code 2.1.232
  • macOS 26.6.1 (build 25G76), Darwin 25.6.0, Apple Silicon
  • Node v20.18.0

Reproduction

/plugin marketplace add tecolicom/agent-skills
  -> Successfully added marketplace: tecolicom

/plugin install greple@tecolicom
  -> Couldn't load marketplace "tecolicom": Failed to load marketplace "tecolicom"
     from source (github): Failed to finalize marketplace cache. Please manually
     delete the directory at /Users/<user>/.claude/plugins/marketplaces/tecolicom
     if it exists and try again.

     Technical details: EFAULT: bad address in system call argument,
     rm '/Users/<user>/.claude/plugins/marketplaces/tecolicom'

Deleting the directory and retrying produces the same error, indefinitely.

The part that is new — stated with its limits

Correction to how I first worded this. I originally wrote that the rm fails on a
path that does not exist, as if I had observed the two simultaneously. I had not. What
I actually observed is below; the inference is likely but not proven, and the
distinction matters for anyone debugging it.

What is certain: I removed the directory with rm -rf (exit 0), confirmed it was gone,
and the very next attempt failed with the same EFAULT on the same path. When I
inspected — seconds later — no directory existed:

$ python3 -c "import os; b='/Users/<user>/.claude/plugins/marketplaces'; print(sorted(os.listdir(b)))"
['claude-plugins-official']

$ xattr -l /Users/<user>/.claude/plugins/marketplaces/tecolicom
xattr: No such file: /Users/<user>/.claude/plugins/marketplaces/tecolicom

What that leaves open: the finalize sequence is presumably clone-to-temp → remove
destination → rename. It is possible finalize created a partial destination, failed
to remove it, and something cleaned it up before I looked. So "the rm targeted a
nonexistent path" is an inference across that window, not a direct observation. I have
not managed to catch the directory's state at the instant of the error.

What survives regardless of which it is: the remedy the error message gives does not
work.
Deleting the directory from a shell succeeds, and the next attempt fails
identically. That loop is reproducible and has no exit.

#53181 suggested chflags -R nouchg as a factor. That does not fit here: the
directories I removed carried no uchg/schg flags (find -flags +uchg -o -flags
+schg
returned nothing), and rm -rf needed no special handling.

What I ruled out

The repository is not the cause:

  • git clone --depth 1 https://github.com/tecolicom/agent-skills.git succeeds
  • .claude-plugin/marketplace.json is present and valid: name, owner, plugins
  • plugin source values use the "./skills/<name>" relative form, which the official

marketplace also uses (53 of its entries)

  • marketplace name and repo owner are both tecolicom, so #52827 (owner/name case

mismatch) does not apply

And per #53181, the same error occurs with claude-plugins-official, so it is not
specific to any third-party repository.

Sandbox interception: checked, no evidence

EFAULT from an fs syscall suggested seatbelt interception on Tahoe, so I looked:

  • log show --last 40m --predicate 'sender == "Sandbox"' — 0 entries
  • no deny messages mentioning claude
  • claude is not running under sandbox-exec (no such process), it is

~/.local/share/claude/versions/2.1.232 invoked directly

So I have no evidence for that hypothesis. Recording the negative result so nobody
else spends time on it.

Possibly relevant

On this machine claude-plugins-official does load, from a cache directory of 429
files created before the failures began. The two directories differ in mode: the
working one is 755, while the failed partial clones were 700. I have not verified
whether that is a cause or a symptom, and I did not force a refresh of the working
marketplace to test it — that would have broken the one marketplace that still works.

Two failed attempts left directories containing only .git and no working files, which
is consistent with the failure happening at the finalize/rename step rather than during
the clone.

Impact

The plugin system is unusable for adding any new marketplace on this platform. The
suggested remedy in the error message does not work. The workaround is to bypass
marketplaces entirely — copying a plugin's SKILL.md into ~/.claude/skills/ — which
gives up updates and everything else the marketplace provides.

Filing fresh because #53181 is closed and locked.

View original on GitHub ↗

3 Comments

shigechika · 2 months ago

Fixed in 2.1.233. Closing.

Same machine, same repository, same commands as the report:

/plugin marketplace add tecolicom/agent-skills   -> Successfully added
/plugin install greple@tecolicom                 -> ✓ Installed. Plugin is now active.
/plugin install textconv@tecolicom               -> ✓ Installed

The cache directory that could not be finalized before is now a complete
checkout:

| | 2.1.232 | 2.1.233 |
|---|---|---|
| working files (excl. .git) | 0 | 9 |
| directory mode | 700 | 755 |
| registered in known_marketplaces.json | no | yes, with lastUpdated |
| installed_plugins.json | — | entry with gitCommitSha |

claude-plugins-official continues to load, so nothing regressed for the
marketplace that already worked.

One observation I cannot explain, offered as data rather than diagnosis: the
successful run left an extra directory <name>.bak alongside the real one, with
identical contents. Something in the finalize path now appears to move the
existing directory aside rather than remove it — but the CLI source is not
published, so I can only report what the filesystem shows, not what the code
does.

Thanks for the fix.

shigechika · 2 months ago

Correction: my "fixed in 2.1.233" comment above was wrong

I closed this saying 2.1.233 fixed it. It did not. The variable I changed was not
the one I thought I was changing, and the report is misleading as it stands.

What I failed to mention when I filed this — because I did not know it
mattered — is that this machine syncs dotfiles with
Mackup over iCloud Drive, and the plugin
directory was a symlink into it:

~/.claude/plugins -> ~/Library/Mobile Documents/com~apple~CloudDocs/Mackup/.claude/plugins

The sequence

  1. 2.1.232 — /plugin marketplace add fails with EFAULT. Filed this issue.
  2. 2.1.233 — same command succeeds. I took that as the fix and closed.
  3. Still 2.1.233, a few hours later — every file under the plugin cache and

the marketplace checkout becomes unreadable:

``
$ head -c 40 ~/.claude/plugins/marketplaces/claude-plugins-official/README.md
head: Error reading ...
$ python3 -c "open(...).read()"
OSError: [Errno 11] Resource deadlock avoided # EDEADLK
``

ls worked (metadata present), reads did not. /plugin uninstall and
/plugin install both failed with EDEADLK on copyfile.

  1. Two independent signs of iCloud trouble in the same directory:
  • a conflict copy: claude-plugins-official 2 beside claude-plugins-official
  • brctl status <path> → BRCloudDocsErrorDomain:30 - Client zone not found
  1. Replaced the symlink with a real local directory (and dropped the path

from Mackup's sync list). Nothing else changed — same 2.1.233, same
repositories, same commands:

``
/plugin marketplace add tecolicom/agent-skills -> success, first try
/plugin install greple@tecolicom -> success
/plugin marketplace add anthropics/claude-plugins-official -> success
/plugin install skill-creator@claude-plugins-official -> success
``

Three plugins now install and load normally.

What I think this means, and what I am not claiming

The observation that fits everything is that the variable was iCloud's
responsiveness, not the CLI version.
Step 2 most likely caught a moment when
iCloud was serving the files, and I read that as a fix.

I cannot prove the CLI is blameless — its source is not published, so I can only
report what the filesystem did. What I can say is that my earlier "fixed in
2.1.233" claim was not supported by the evidence I had, and I should not have
closed on a single successful run.

Worth checking if you hit this

If /plugin fails with EFAULT or EDEADLK on macOS, check whether
~/.claude/plugins is a symlink into iCloud Drive, Dropbox, or similar:

ls -ld ~/.claude/plugins

A dotfile manager (Mackup, chezmoi, stow) may have put it there. The plugin
directory is a working cache the CLI writes to constantly — cloud sync produces
conflict copies and, in this case, files that stat fine but cannot be read.
Excluding it from sync fixed it here.

Given that, #53181 may be worth another look: it reports the same EFAULT on the
official marketplace, and nobody asked the reporter about cloud-synced dotfiles.

Reopening is at the maintainers' discretion — I do not know whether there is a
CLI-side change to make here, or only a documentation note. Either way the
current state of this issue tells the next person the wrong thing.

github-actions[bot] · 14 days ago

This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.