-
Notifications
You must be signed in to change notification settings - Fork 12
CS-10900: Add Claude Code plugin for boxel-cli #4632
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
FadhlanR
wants to merge
4
commits into
main
Choose a base branch
from
cs-10900-add-claude-code-plugin-for-boxel-cli
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
80bf07f
CS-10900: Add Claude Code plugin for boxel-cli
FadhlanR e935183
CS-10900: Document plugin release flow in plugin README
FadhlanR db73171
CS-10900: Generate plugin skills from cardstack/boxel-skills
FadhlanR 8383855
CS-10900: Address review feedback and fix boxel-skills sync CI
FadhlanR File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,15 @@ | ||
| { | ||
| "name": "cardstack-boxel", | ||
| "owner": { | ||
| "name": "Cardstack", | ||
| "url": "https://boxel.ai" | ||
| }, | ||
| "description": "Claude Code plugins published from the cardstack/boxel monorepo.", | ||
| "plugins": [ | ||
| { | ||
| "name": "boxel-cli", | ||
| "source": "./packages/boxel-cli/plugin", | ||
| "description": "Skills for working with Boxel realms via @cardstack/boxel-cli." | ||
| } | ||
| ] | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| { | ||
| "name": "boxel-cli", | ||
| "description": "Claude Code skills for working with Boxel realms via @cardstack/boxel-cli. Requires @cardstack/boxel-cli >= 0.0.1 installed on PATH (npm install -g @cardstack/boxel-cli).", | ||
| "version": "0.1.1", | ||
| "author": { | ||
| "name": "Cardstack", | ||
| "url": "https://boxel.ai" | ||
| }, | ||
| "homepage": "https://github.com/cardstack/boxel/tree/main/packages/boxel-cli/plugin", | ||
| "repository": "https://github.com/cardstack/boxel.git", | ||
| "license": "MIT" | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,105 @@ | ||
| # `boxel-cli` Claude Code plugin | ||
|
|
||
| Claude Code skills for working with Boxel realms via [`@cardstack/boxel-cli`](https://www.npmjs.com/package/@cardstack/boxel-cli). | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| Install the boxel CLI globally so the plugin's skills can shell out to it: | ||
|
|
||
| ```bash | ||
| npm install -g @cardstack/boxel-cli | ||
| ``` | ||
|
|
||
| Verify: | ||
|
|
||
| ```bash | ||
| boxel --version | ||
| ``` | ||
|
|
||
| The plugin documents commands in `@cardstack/boxel-cli >= 0.0.1`. Newer plugin versions may document commands that older CLI versions do not have — keep both reasonably fresh. | ||
|
|
||
| ## Install | ||
|
|
||
| ### External users (marketplace) | ||
|
|
||
| ```text | ||
| /plugin marketplace add cardstack/boxel | ||
| /plugin install boxel-cli | ||
| ``` | ||
|
|
||
| ### Internal / development (`--plugin-dir`) | ||
|
|
||
| From a checkout of `cardstack/boxel`: | ||
|
|
||
| ```bash | ||
| claude --plugin-dir packages/boxel-cli/plugin | ||
| ``` | ||
|
|
||
| `/reload-plugins` picks up local edits without restarting Claude Code. | ||
|
|
||
| ## What you get | ||
|
|
||
| Skills appear under the `/boxel-cli:` namespace. | ||
|
|
||
| | Skill | Use it for | | ||
| |---|---| | ||
| | `/boxel-cli:boxel-development` | Authoring `.gts` card definitions and `.json` instances. The high-level Boxel patterns guide. Generated from [`cardstack/boxel-skills`](https://github.com/cardstack/boxel-skills). | | ||
| | `/boxel-cli:boxel-design` | Design-discovery prompts for distinctive Boxel UI. Generated from [`cardstack/boxel-skills`](https://github.com/cardstack/boxel-skills). | | ||
| | `/boxel-cli:boxel-file-structure` | File and directory naming rules, `adoptsFrom` module paths, link relationship semantics. | | ||
| | `/boxel-cli:realm-sync` | `boxel realm sync/push/pull/create/list` — moving files between local disk and a realm. | | ||
| | `/boxel-cli:realm-history` | `boxel realm history/wait-for-ready/cancel-indexing` — inspecting and steering realm indexing. | | ||
| | `/boxel-cli:file-ops` | `boxel file read/write/list/delete/lint/touch` — single-file operations against a realm. | | ||
| | `/boxel-cli:search` | `boxel search` — federated search across realms. | | ||
| | `/boxel-cli:profile` | `boxel profile list/add/switch/remove/migrate` — managing realm-server credentials. | | ||
|
|
||
| ## Versioning | ||
|
|
||
| The plugin's `version` is independent of `@cardstack/boxel-cli`'s npm version. The plugin only describes the CLI; it does not bundle it. | ||
|
|
||
| | Change | `package.json` `version` (npm CLI) | `plugin.json` `version` | | ||
| |---|---|---| | ||
| | New / changed CLI command | bump | bump (synopsis regenerates) | | ||
| | Plugin prose only | — | bump | | ||
| | CLI refactor / bug fix (no Commander change) | bump | — | | ||
| | New `cardstack/boxel-skills` release | — | bump (after re-running `pnpm build:skills`) | | ||
|
|
||
| See [Releasing](#releasing) below for how a `plugin.json` bump actually reaches users. | ||
|
|
||
| ## Releasing | ||
|
|
||
| The plugin is **git-distributed** through `.claude-plugin/marketplace.json` at the monorepo root — there is no separate npm publish step for the plugin. A release is simply: merge to `main` with a bumped `plugin.json` `version`. | ||
|
|
||
| ### Steps | ||
|
|
||
| 1. If you changed CLI commands, run `pnpm build:plugin` from `packages/boxel-cli/` to regenerate the `<!-- generated:commands -->` blocks in each `SKILL.md`. | ||
| 2. If `cardstack/boxel-skills` cut a new tag (or you want to pull in upstream edits), bump `BOXEL_SKILLS_VERSION` in `packages/boxel-cli/scripts/build-skills.ts` and run `pnpm build:skills` from `packages/boxel-cli/`. That regenerates `plugin/skills/boxel-development/` and `plugin/skills/boxel-design/` from the pinned tag. | ||
| 3. Bump `packages/boxel-cli/plugin/.claude-plugin/plugin.json` `version` (semver — patch for prose, minor for new skills, major for breaking changes to skill names/contracts). | ||
| 4. Open a PR. CI in `.github/workflows/ci-lint.yaml` will fail if the synopsis is stale (*synopsis freshness* check), if the boxel-skills sync is stale (*boxel-skills sync* check), or if the bump is missing when generated content changed (*synopsis-bump* / *boxel-skills-bump coupling* checks). | ||
| 5. Merge to `main`. That's the publish — `cardstack/boxel`'s `.claude-plugin/marketplace.json` is the source of truth and Claude Code pulls from it directly. | ||
|
|
||
| ### How users pick up the new version | ||
|
|
||
| - **Automatic:** Claude Code refreshes marketplaces on startup for public repos. | ||
| - **Manual:** `/plugin marketplace update && /plugin update` inside Claude Code. | ||
|
|
||
| The marketplace cache is keyed on `plugin.json` `version` — **forgetting the bump means no user sees the change**, even after merge. The CI coupling check exists to prevent exactly this. | ||
|
|
||
| ### Adding a new plugin to the marketplace | ||
|
|
||
| If a future ticket adds a second plugin under `packages/<other>/plugin`, append an entry to `.claude-plugin/marketplace.json` at the repo root: | ||
|
|
||
| ```json | ||
| { | ||
| "name": "<plugin-name>", | ||
| "source": "./packages/<other>/plugin", | ||
| "description": "..." | ||
| } | ||
| ``` | ||
|
|
||
| Each plugin's own `plugin.json` `version` drives its update lifecycle — the marketplace catalog itself does not need a version bump. | ||
|
|
||
| ### What a plugin release does *not* do | ||
|
|
||
| - It does **not** publish or update `@cardstack/boxel-cli` on npm. That ships separately via the `manual-boxel-cli-publish.yml` workflow. | ||
| - It does **not** require users to reinstall — `/plugin update` is in-place. | ||
| - It does **not** bundle the CLI. Users still need `npm install -g @cardstack/boxel-cli` (see [Prerequisites](#prerequisites)). |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.