Skip to content

Skip a working local Claude checkout and name found sources - #19

Merged
ktenman merged 2 commits into
mainfrom
issue-18-claude-directory-skip
Sep 22, 2026
Merged

ktenman merged 2 commits into
mainfrom
issue-18-claude-directory-skip

Conversation

@ktenman

@ktenman ktenman commented Sep 22, 2026

Copy link
Copy Markdown
Owner

Fixes #18. Targets ktenman/superpowers:main like every fork PR; the template's dev rule is upstream's, and the fork's dev is a stale upstream mirror.

Who is submitting this PR? (required)

Field Value
Your model + version Claude Opus 5.5 (claude-opus-5-5, 1M context)
Harness + version Claude Code 2.1.280 on macOS 15.7.9 (arm64), Node.js 24.21.0
All plugins installed superpowers@superpowers-dev 6.4.1 (this fork's checkout as a directory marketplace, enabled), superpowers@claude-plugins-official 6.4.1 (disabled), ponytail@ponytail 4.8.3, claude-seo@agricidaniel-claude-seo 2.2.0, frontend-design@claude-plugins-official, swift-lsp@claude-plugins-official 1.0.0
Human partner who reviewed this diff Konstantin Tenman reported the failure and asked for this fix and PR. The complete diff has not been reviewed yet; that review happens on this PR.

What problem are you trying to solve?

After #17, npx github:ktenman/superpowers on a machine set up with the old scripts/install.sh printed this and exited 1:

claude: FAILED: Marketplace superpowers-dev does not match ktenman/superpowers#main. To migrate, review the existing registration and explicitly remove it and its installed plugin(s):
claude plugin marketplace remove superpowers-dev
Then rerun the installer. These commands are not run automatically.

It reads as "Superpowers is not installed in Claude", but it was. install.sh had registered the checkout as a directory marketplace ({"source":"directory","path":"/Users/tenman/superpowers"}), the plugin was enabled, and Claude Code loads directory marketplaces in place, so every skill was live. Refusing to replace that registration is intended (#16). The report was the problem: it didn't name what it found, didn't say the skills were already live, and failed every run for a setup docs/fork-install.md says to keep when live development is wanted. Details in #18.

What does this PR change?

Refusals now name the registration they found, e.g. found directory /path, found git <url>#<ref>, or found local /path for Codex. A Claude directory marketplace whose plugin is enabled and loads without errors is reported as claude: skipped (… at <path>; Claude loads the skills live from that checkout …) with the existing migration command; it runs only the two list calls and doesn't fail the run. The docs match.

Is this change appropriate for the core library?

This is fork-only installer infrastructure for ktenman/superpowers (the installer from #17), not a contribution to obra/superpowers. No skill content, hooks or dependencies change.

What alternatives did you consider?

  • Better message but keep exit 1 (the fallback in Installer reports Claude FAILED when superpowers-dev is a local directory marketplace #18). The docs say to keep the directory marketplace when live development is wanted, so a working setup would still fail every run.
  • Skip every directory registration, or trust enabled alone. A disabled or missing plugin gives Claude no Superpowers skills. A moved checkout stays "enabled": true in claude plugin list --json but reports "errors": ["Marketplace superpowers-dev failed to load: cache-miss"]. "Skills live from that checkout" would be false in each case, so they still fail, now naming the directory.
  • Replace the registration, or install from it. Replacing violates Replace install.sh with an npx installer for Claude Code, Codex and Copilot CLI #16 (the installer never removes a registration). Installing from the directory marketplace would install the checkout's branch, not the remote main the installer promises.
  • Skip for Copilot too. In-place loading is only verified for Claude Code.
  • The exact skip message proposed in Installer reports Claude FAILED when superpowers-dev is a local directory marketplace #18. It added a second migration wording for one case. The skip reuses migration(), so the command text matches every other refusal.
  • Use an npm installer library. skills (vercel-labs, see "Why not a skills library" in Installer reports Claude FAILED when superpowers-dev is a local directory marketplace #18) and similar packages copy or link SKILL.md folders without the plugin's SessionStart hook. plugins (vercel-labs) is the only multi-harness plugin installer found, but it writes Claude and Codex configuration directly, clones without a ref, has no update or remove, and would silently mix a same-name local marketplace with the fork. Each would also add the first dependency.

Does this PR contain multiple unrelated changes?

No. Naming the found source and skipping a working local checkout are the two parts of the fix proposed in #18. The second commit narrows the skip to plugins that load, and the docs describe the result.

Existing PRs

Environment tested

Harness (e.g. Claude Code, Cursor) Harness version Model Model version/ID
Claude Code: development session; installer run against its real directory registration and a moved checkout in an isolated CLAUDE_CONFIG_DIR 2.1.280 Claude Opus 5.5 claude-opus-5-5[1m]
Codex CLI: only to record marketplace list --json for a local marketplace, in a throwaway CODEX_HOME 0.155.1 n/a n/a

New harness support (required if this PR adds a new harness)

Not applicable. No harness is added.

Evaluation

  • Initial prompts: "please investigate what happened what superpowers is not installing the skill to claude maybe we need to improve of fix something create github issue", then "start implementing the fix for the bug using superpowers use this github issue then create pr".
  • This changes installer output, not skill behavior, so no agent eval sessions were run. Real runs, with only claude and node on PATH:
    • The affected machine before (a7f228f): the claude: FAILED: … output above, exit 1.
    • The same machine after: claude: skipped (superpowers-dev is a local directory marketplace at /Users/tenman/superpowers; Claude loads the skills live from that checkout, not from ktenman/superpowers#main). To migrate, …, exit 0. Besides the --version probe, only claude plugin marketplace list --json and claude plugin list --json ran.
    • A directory marketplace whose checkout was then moved, in an isolated CLAUDE_CONFIG_DIR: skipped, exit 0 with the first commit (a false success); claude: FAILED: … (found directory <path>), exit 1 with the second.
  • node --test tests/installer/test-install.mjs: 36/36 passed. Each of the 8 new or changed tests failed before its fix. tests/run-offline-tests.sh in a fresh clone at the head commit: 18/18 suites passed.

Rigor

  • If this is a skills change: I used superpowers:writing-skills and
    completed adversarial pressure testing (paste results below). (Not a skills change.)
  • This change was tested adversarially, not just on the happy path. Disabled, not-installed and failing-to-load directory cases still fail, and so do Git sources for another repo or ref. Six deliberate mutations each failed at least one test: dropping the enabled check, the load-error check, the ref, the path, the early return, or the Codex source. A code-review subagent found the moved-checkout case, fixed in the second commit, then stopped on an API error before its full report.
  • I did not modify carefully-tuned content (Red Flags table,
    rationalizations, "human partner" language) without extensive evals
    showing the change is an improvement. No skill content changed.

Human review

  • A human has reviewed the COMPLETE proposed diff before submission

Not yet. The fork owner asked for this PR directly, and the diff is reviewed here.

@ktenman
ktenman merged commit 2bc7900 into main Sep 22, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Installer reports Claude FAILED when superpowers-dev is a local directory marketplace

1 participant