Skip to content

Rename the CLI plugin basecamp-cli, keep basecamp as its alias; mirror the hosted plugin - #8

Merged
jeremy merged 5 commits into
mainfrom
hosted-basecamp-plugin
Oct 7, 2026
Merged

jeremy merged 5 commits into
mainfrom
hosted-basecamp-plugin

Conversation

@jeremy

@jeremy jeremy commented Oct 5, 2026 •

Copy link
Copy Markdown
Member

The CLI plugin becomes basecamp-cli@37signals, with the same source (basecamp/basecamp-cli). For a deprecation window, basecamp stays listed as an alias with exactly the same source, so existing installs keep loading and updating. The hosted Basecamp plugin is mirrored into plugins/basecamp for Anthropic's directory, which publishes it as basecamp. This marketplace doesn't list it.

Merge and release order

Merge both PRs together, this one first. Don't submit plugins/basecamp to Anthropic's directory until the basecamp-cli release that ships basecamp/basecamp-cli#840 is out. Until then, CLI plugin installs carry the manifest name basecamp, and a directory plugin also named basecamp would collide with them.

  1. Merge this PR (claude-plugins#8). It's safe on its own: basecamp and basecamp-cli both serve the current CLI plugin, and plugins/basecamp is unlisted here. This marketplace has no tags or releases. Clients see a change on main on their next marketplace update.
  2. Merge Rename the agent plugin basecamp → basecamp-cli basecamp-cli#840 right after, with nothing in between. Both entries use an unpinned url source, so they serve basecamp-cli's main as soon as it lands. Installed copies update only when the plugin version changes, though.
  3. Cut the basecamp-cli release with scripts/release.sh (next after v0.12.0). It pushes a release-prep commit to main that bumps .claude-plugin/plugin.json and .codex-plugin/plugin.json, then tags v*, which runs release.yml. The version bump is what moves basecamp@37signals installs to the renamed manifest and the one-time notice. The 7-day window starts here. A CLI built from #840 installs basecamp-cli@37signals, so step 1 has to come first.
  4. Then submit plugins/basecamp to the directory, along with the connector listing. The directory reads this folder from main, and the name is permanent once listed. If it was already submitted before this merge, merging step 1 publishes it, so hold this PR until after step 3.
  5. After 7 days: remove the alias and relax bin/check-marketplace rule 2 in a separate PR here. A basecamp-cli release also drops the basecamp@37signals stale handling. Retire the basecamp@37signals alias after the 7-day rename window basecamp-cli#857 tracks both. Pointing basecamp here at the hosted plugin is a further decision after that.

What changes

  • .claude-plugin/marketplace.json:
    • basecamp-cli is the CLI plugin, with an unchanged url source.
    • basecamp is a deprecated alias with the identical source, and its description says so.
  • plugins/basecamp/: the hosted plugin, mirrored from plugins/claude/basecamp in the connector repository (basecamp-mcp-server #195). That repository stays the source of truth. The folder is unlisted here.
  • bin/sync-basecamp-plugin <checkout>:
    • copies the plugin from a connector checkout and refuses an uncommitted source;
    • runs claude plugin validate;
    • prints the source commit, which goes in the commit message;
    • --check exits 1 on drift.
  • bin/check-marketplace, run by the new Check workflow, fails on duplicate names. It also fails on a basecamp entry whose source isn't exactly basecamp-cli's, so the hosted plugin can't take the name early by mistake. Its header says when the rule can change. The workflow pins actions/checkout by SHA, has read-only permissions and doesn't persist credentials.
  • README:
    • the rename, the alias and its window, and the manual switch;
    • what plugins/basecamp is and why it isn't listed;
    • hey and fizzy, which were in the marketplace but still marked "coming soon".

Window and later steps

  1. Window: 7 days from the CLI release that ships #840 (Jeremy, 2026-10-05). Removal is tracked in Retire the basecamp@37signals alias after the 7-day rename window basecamp-cli#857. The alias delivers the new plugin version, whose session-start notice prompts basecamp setup, so most installs see the prompt within a day or two.
  2. Removing the alias is its own later PR, after the window. That PR also relaxes bin/check-marketplace rule 2.
  3. Pointing basecamp at the hosted plugin is a further decision. It has to wait for a basecamp-cli release that no longer treats basecamp@37signals as the old CLI plugin; until then, setup would uninstall it.

Checked (throwaway CLAUDE_CONFIG_DIR)

  • No breakage. I installed basecamp@37signals from current main, then refreshed the marketplace to this branch. The install still shows ✔ enabled, and plugin update basecamp@37signals works.
  • The alias serves the renamed manifest. With both entries pointed at #840's build (manifest name: basecamp-cli), a fresh basecamp@37signals install loads as basecamp-cli 0.11.0.
  • Manual switch. install basecamp-cli@37signals, then uninstall basecamp@37signals, ends with only basecamp-cli enabled. #840 covers basecamp setup doing it and the notice.
  • Plugin updates follow the version. plugin update was a no-op when only the manifest name changed and the version didn't. Alias users get the renamed manifest and the notice hook once the CLI release bumps the plugin version.
  • bin/check-marketplace:
    • passes on this tree, and with the alias removed;
    • fails with basecamp pointed at plugins/basecamp, without a basecamp-cli entry, and with a duplicate name.
  • Validation. claude plugin validate . and claude plugin validate plugins/basecamp pass. The only warning is the marketplace having no description, which was already there.
  • Public-repo scrub. The mirror has no internal hostnames, tokens or private links. Its manifest repository points here, and #195 holds that with a test.

Mirror source

plugins/basecamp was synced with bin/sync-basecamp-plugin from basecamp/basecamp-mcp-server@b65ae99e4f1870fa7e56331199c4d91f44bf60c6 (main, which includes #195 merged at 47e67f0). --check reports no drift, and claude plugin validate passes on the plugin and the marketplace.

Needs a decision

  • Window decided: 7 days.

basecamp is now the plugin Anthropic's directory lists: Basecamp through
its hosted connector, for claude.ai chat, Cowork, and Claude Code. It's
mirrored into plugins/basecamp from the connector repository, which stays
the source of truth; bin/sync-basecamp-plugin copies and validates it, and
--check reports drift.

The CLI plugin keeps its source and becomes basecamp-cli. The README says
which to pick and how an existing install moves to the new name.
@jeremy

jeremy commented Oct 5, 2026

Copy link
Copy Markdown
Member Author

Dependency from basecamp/basecamp-cli#840: during the rename, this marketplace should list the CLI plugin as basecamp-cli and list no basecamp plugin. That way basecamp@37signals can only mean the pre-rename CLI plugin, and basecamp setup can safely replace it by key. The hosted plugin's files can live in this repo for directory submission without being listed here. Re-adding basecamp to marketplace.json (pointing at the hosted plugin) is a later step. It has to wait for a deprecation window and for a CLI release that stops treating basecamp@37signals as stale; otherwise setup would uninstall the hosted plugin.

basecamp-cli's setup now treats any installed basecamp@37signals as the
old CLI plugin and moves it to basecamp-cli. Listing the hosted plugin as
basecamp at the same time would get it uninstalled by setup, and would
hand it to anyone still on the old install at their next update. So the
marketplace drops the name for a deprecation window. plugins/basecamp
stays here for Anthropic's directory, unlisted.

bin/check-marketplace, run in CI, fails on duplicate names or on a
basecamp entry, and says when that rule can go: after the window, and
after a CLI release that stops treating basecamp@37signals as stale.
@jeremy jeremy changed the title Add the hosted basecamp plugin; rename the CLI plugin basecamp-cli Rename the CLI plugin basecamp-cli; mirror the hosted plugin, unlisted Oct 5, 2026
@jeremy

jeremy commented Oct 5, 2026

Copy link
Copy Markdown
Member Author

Addressed in 9baea1e: the marketplace lists basecamp-cli and no basecamp, and bin/check-marketplace (run in CI) fails if a basecamp entry comes back before the deprecation window and a CLI release that stops treating basecamp@37signals as stale. plugins/basecamp stays here, unlisted, for the directory.

…ndow

Dropping the name broke every existing install: once the marketplace
refreshed, basecamp@37signals failed to load. Now basecamp stays listed,
with exactly basecamp-cli's source, so those installs keep loading and
updating, and basecamp setup moves them over at the user's pace.

bin/check-marketplace allows a basecamp entry only as that alias. Pointing
it anywhere else, such as the hosted plugin, still fails until the window
ends (30 days proposed) and a CLI release stops treating basecamp@37signals
as the old CLI plugin. Removing the alias is its own later PR.
@jeremy jeremy changed the title Rename the CLI plugin basecamp-cli; mirror the hosted plugin, unlisted Rename the CLI plugin basecamp-cli, keep basecamp as its alias; mirror the hosted plugin Oct 6, 2026
@jeremy
jeremy marked this pull request as ready for review October 7, 2026 01:28
Copilot AI balanced review requested due to automatic review settings October 7, 2026 01:28
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-07T01:30:14.139843Z 5c19ad6 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@jeremy

jeremy commented Oct 7, 2026

Copy link
Copy Markdown
Member Author

Re-synced plugins/basecamp with bin/sync-basecamp-plugin from basecamp/basecamp-mcp-server@b65ae99 (main, which includes #195 merged at 47e67f0), in 5c19ad6. --check reports no drift. claude plugin validate passes on the plugin and on the marketplace (only the existing warning that the marketplace has no description), and bin/check-marketplace passes. Marked ready for review.

Review threads: none. Codex reported no findings on 5c19ad6. Copilot couldn't review because the requester hit its quota limit; a re-review has to be requested from the Reviewers UI.

The description now gives the exact merge and release order with basecamp/basecamp-cli#840. The rule that matters: don't submit plugins/basecamp to the directory until the CLI release that ships #840 is out. basecamp/basecamp-cli#857 tracks the alias removal.

@jeremy
jeremy merged commit d5a11b0 into main Oct 7, 2026
1 of 2 checks passed
@jeremy
jeremy deleted the hosted-basecamp-plugin branch October 7, 2026 03:45
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.

2 participants