bug: skills add fails with EPERM on macOS 26 -- giget cache in shared ~/.cache collides with app-data protection

Offen
#603 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
55/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Ruhig
Tech-Stack
macos

Rechercherichtung

Beginne im skills-Installer bei clearGigetCache() und verfolge den giget-Download-Aufruf, um zu sehen, wie dessen Cache-Verzeichnis ausgewählt wird. Reproduziere den gemeldeten Befehl cmd skills add und überprüfe anschließend, dass Downloads ~/.commandcode/cache/giget verwenden und dass die Bereinigung beschädigter Archive auf dasselbe Verzeichnis abzielt, auch wenn XDG_CACHE_HOME gesetzt ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Problem

cmd skills add downloads repos via giget, which defaults its cache to the shared ~/.cache/giget. On macOS 26 (Tahoe), this breaks with a confusing error:

$ cmd skills add owner/repo/path --global -f
✘ Failed to fetch "owner/repo": EPERM: operation not permitted, mkdir '/Users/callsen/.cache/giget'

Root cause: macOS Tahoe stamps directories with a com.apple.provenance xattr identifying the creating app, and denies access to processes attributed to other apps -- reportedly even when the app has Full Disk Access (see Apple Community discussion on 26.4 third-party app stamps: https://discussions.apple.com/thread/256294444). ~/.cache is shared by many CLIs across many host apps (terminal emulators, IDEs, other agents), so whichever app first created ~/.cache/giget effectively owns it. Run cmd from a different terminal app and the mkdir/stat gets EPERM. The kernel returns EPERM rather than EEXIST, so the error misleadingly suggests a local permissions problem.

Observed on v1.5.0, macOS 26 (Darwin 25.3), where ~/.cache contained a dozen subdirs unreadable by the invoking terminal (giget, codex-runtimes, huggingface, starship, ...), all created by tools running under other host apps.

Workaround (confirmed working)

giget honors XDG_CACHE_HOME:

XDG_CACHE_HOME="$HOME/.commandcode/cache" cmd skills add owner/repo/path --global -f

This works because ~/.commandcode is created by cmd itself, so the invoking app owns its provenance stamp.

Proposal

  1. Point giget's download cache at a directory Command Code already owns -- ~/.commandcode/cache/giget -- instead of the shared ~/.cache/giget. Setting XDG_CACHE_HOME for the giget call (or using its cache-dir option if available) is sufficient.
  2. Fix the related hardcoded path: clearGigetCache() in the skills installer rm-rf's ~/.cache/giget/gh/<owner>-<repo> unconditionally. If the cache moves (or a user sets XDG_CACHE_HOME themselves), the corrupted-archive recovery path clears the wrong directory and the retry loop can never self-heal.
  3. Optionally: on EPERM from the cache path, surface a hint about macOS app-data protection rather than the raw errno, since the failure reads like a filesystem permissions bug and is not.

On macOS 26 this is a correctness issue, not a preference: any user who installs skills from a different terminal app than the one that first populated ~/.cache/giget hits a hard failure.

Related: #602 (skills update/provenance).

Vorherrschende Sprache
Keine Sprachdaten
Sterne
4k
Forks
350
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus CommandCodeAI/command-code

Alle Issues in CommandCodeAI/command-code

Ähnliche Issues

Weitere Issues zu CLI

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.