Add Claude Code plugin for end-user skill installation#2640
Add Claude Code plugin for end-user skill installation#2640Jac0bDeal wants to merge 4 commits intomanaflow-ai:mainfrom
Conversation
|
@Jac0bDeal is attempting to deploy a commit to the Manaflow Team on Vercel. A member of the Team first needs to authorize it. |
|
To use Codex here, create a Codex account and connect to github. |
📝 WalkthroughWalkthroughAdds a Claude Code plugin manifest and marketplace metadata for "cmux" by introducing Changes
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~3 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Adds .claude-plugin/plugin.json and marketplace.json so users can install cmux skills via the plugin system. Only exposes end-user skills (cmux, cmux-browser, cmux-markdown), excluding dev-only skills (cmux-debug-windows, release). Install with: /plugin marketplace add manaflow-ai/cmux /plugin install cmux@cmux Closes manaflow-ai#2542 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4bc94ad to
999a2b4
Compare
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
This review could not be run because your cubic account has exceeded the monthly review limit. If you need help restoring access, please contact contact@cubic.dev. |
|
@codex review |
@Jac0bDeal I have started the AI code review. It will take a few minutes to complete. |
|
To use Codex here, create a Codex account and connect to github. |
|
🧠 Learnings used✅ Actions performedReview triggered.
|
|
To use Codex here, create a Codex account and connect to github. |
Greptile SummaryThis PR adds a Claude Code plugin manifest ( Confidence Score: 5/5Safe to merge — config-only change with no runtime behavior. All three skill paths verified to exist, canonical repo URL in place, dev-only skills excluded, and the only prior P1 concern (fork source) is resolved. No remaining P0 or P1 findings. No files require special attention. Important Files Changed
Sequence DiagramsequenceDiagram
actor User
participant CC as Claude Code
participant Marketplace as Plugin Marketplace
participant Repo as manaflow-ai/cmux
User->>CC: /plugin marketplace add manaflow-ai/cmux
CC->>Repo: fetch .claude-plugin/marketplace.json
Repo-->>CC: marketplace metadata + plugin list
CC-->>User: marketplace "cmux" registered
User->>CC: /plugin install cmux@cmux
CC->>Marketplace: resolve source URL
Marketplace-->>CC: https://github.com/manaflow-ai/cmux.git
CC->>Repo: fetch .claude-plugin/plugin.json
Repo-->>CC: skills: [cmux, cmux-browser, cmux-markdown]
CC->>Repo: clone skills/cmux, skills/cmux-browser, skills/cmux-markdown
Repo-->>CC: skill files
CC-->>User: plugin installed (cmux:cmux, cmux:cmux-browser, cmux:cmux-markdown)
Greploops — Automatically fix all review issues by running Reviews (2): Last reviewed commit: "Add language specifier to README code bl..." | Re-trigger Greptile |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.claude-plugin/marketplace.json:
- Around line 15-16: Update marketplace.json to use the production repository
URL and a valid branch/tag: replace the "url" value currently set to
"https://github.com/Jac0bDeal/cmux.git" with
"https://github.com/manaflow-ai/cmux" (to match plugin.json and README) and
change the "ref" from "feat/claude-code-plugin" to an existing branch or tag on
the manaflow-ai/cmux repo (e.g., main or a release tag). Ensure the "url" and
"ref" strings in marketplace.json exactly match the production repository and a
valid ref.
In `@README.md`:
- Around line 123-126: The fenced code block containing the plugin commands
lacks a language tag; update the triple-backtick fence that wraps "/plugin
marketplace add manaflow-ai/cmux" and "/plugin install cmux@cmux" to include a
shell language specifier (e.g., bash or shell) so the block becomes ```bash (or
```shell) for proper syntax highlighting.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 0417a220-a5fb-4603-9332-25246955cc3f
📒 Files selected for processing (3)
.claude-plugin/marketplace.json.claude-plugin/plugin.jsonREADME.md
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
@codex review |
@Jac0bDeal I have started the AI code review. It will take a few minutes to complete. |
|
To use Codex here, create a Codex account and connect to github. |
1 similar comment
|
To use Codex here, create a Codex account and connect to github. |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: Length of output: 3181
Review of
|
| File | Status | Key Issue |
|---|---|---|
plugin.json |
skills array vs. directory string format |
|
marketplace.json |
🚨 Likely broken | Non-standard source object structure |
README.md |
✅ | Looks good |
I'd strongly recommend running claude plugin validate (or testing the actual /plugin marketplace add + /plugin install flow) before merging, specifically to validate that the nested source object in marketplace.json is recognized by the runtime.
🧠 Learnings used
Learnt from: pstanton237
Repo: manaflow-ai/cmux PR: 0
File: :0-0
Timestamp: 2026-04-06T12:03:16.899Z
Learning: Repo: manaflow-ai/cmux — In CLI/cmux.swift, `claudeTeamsLaunchArguments` must use two independent branches: (1) prepend `--teammate-mode auto` only when the caller has NOT already supplied `--teammate-mode`; (2) append `--settings <claudeHooksJSON>` unconditionally (modulo `CMUX_CLAUDE_HOOKS_DISABLED=1` opt-out). These two branches must never be coupled in a single early-return or conditional block — coupling them was the original `#2229` regression (hook JSON silently bypassed when `--teammate-mode auto|manual` was explicit). Mirrors `Resources/bin/claude:208`: `exec "$REAL_CLAUDE" --settings "$HOOKS_JSON" "$@"` where `$@` content never gates hook injection.
Learnt from: Horacehxw
Repo: manaflow-ai/cmux PR: 2492
File: CLI/cmux.swift:319-321
Timestamp: 2026-04-06T09:45:30.721Z
Learning: Repo: manaflow-ai/cmux — Claude hook stop classification precedence: in CLI/cmux.swift, summarizeClaudeHookStop should detect failures by checking (1) hook_event_name == "StopFailure" or (2) presence of the "error" field; only then fall back to stop_reason != "end_turn" for back-compat. The notification subtitle/body should use String(localized:) with keys claude.hook.stop.verb.stopped/completed and claude.hook.stop.state.stopped/completed.
Learnt from: lawrencecchen
Repo: manaflow-ai/cmux PR: 2514
File: CLI/cmux.swift:9698-9706
Timestamp: 2026-04-01T23:08:19.526Z
Learning: Repo: manaflow-ai/cmux — In CLI/cmux.swift (CMUXCLI.runClaudeTeams), custom Claude path candidates (CMUX_CUSTOM_CLAUDE_PATH and UserDefaults key "claudeCodeCustomClaudePath") now reject directory-valued paths by checking isDirectory == false before isExecutableFile, aligning with the Resources/bin/claude wrapper’s [[ -f && -x ]] validation and ensuring fallback to PATH/bundled.
Learnt from: lawrencecchen
Repo: manaflow-ai/cmux PR: 2514
File: CLI/cmux.swift:9691-9711
Timestamp: 2026-04-01T22:58:26.254Z
Learning: Repo: manaflow-ai/cmux — In CLI/cmux.swift (runClaudeTeams), custom Claude path resolution now trims whitespace and rejects paths that point to the cmux wrapper using isCmuxClaudeWrapper(), before falling back to PATH/bundled. The Resources/bin/claude wrapper also resolves the real path and compares against itself, requiring -f/-x to avoid recursion/self-reference.
Learnt from: apollow
Repo: manaflow-ai/cmux PR: 1089
File: CLI/cmux.swift:462-499
Timestamp: 2026-03-09T02:08:54.956Z
Learning: Repo: manaflow-ai/cmux
PR: `#1089`
File: CLI/cmux.swift
Component: ClaudeHookTagExtractor.extractTags(subtitle:body:)
Learning: For Claude Code session tag extraction, pre-redact sensitive spans (UUIDs, emails, access tokens, filesystem paths, ENV_VAR=..., long numerics) across the combined body+subtitle using unanchored sensitiveSpanPatterns before tokenization. Then tokenize and still filter each token with anchored sensitivePatterns. Rationale: prevents PII/path fragments from slipping into searchable tags after delimiter splitting.
Learnt from: lawrencecchen
Repo: manaflow-ai/cmux PR: 2525
File: Sources/GhosttyTerminalView.swift:481-513
Timestamp: 2026-04-02T10:13:39.235Z
Learning: Repo: manaflow-ai/cmux — In Sources/GhosttyTerminalView.swift, terminal file-link resolution trims trailing unmatched closing delimiters “) ] } >” only when they are dangling (more closers than openers), preserving wrapped tokens like “(file:///tmp/a.png)”. Implemented via terminalFileLinkTrailingClosingDelimiters and count comparison inside trimTrailingTerminalFileLinkPunctuation(_:) and exercised by a regression test (PR `#2525`, commit 3f5c5b6d).
Learnt from: pstanton237
Repo: manaflow-ai/cmux PR: 0
File: :0-0
Timestamp: 2026-04-06T12:03:16.899Z
Learning: Repo: manaflow-ai/cmux — In CLI/cmux.swift `runClaudeTeams`, `setenv("CMUX_CLAUDE_PID", ...)` is set unconditionally before the passthrough-subcommand check, mirroring `Resources/bin/claude:188` which exports `CMUX_CLAUDE_PID=$$` before the subcommand `case` statement. This is intentional design: the env var is dead for `mcp`/`config`/`api-key`/`rc`/`remote-control` paths but harmless, and matching the bash wrapper unconditional export exactly is a deliberate design principle for the claude-teams hook injection feature.
Learnt from: lawrencecchen
Repo: manaflow-ai/cmux PR: 2528
File: Sources/AppDelegate.swift:2196-2200
Timestamp: 2026-04-03T03:36:45.112Z
Learning: Repo: manaflow-ai/cmux — In Sources/AppDelegate.swift, when KeyboardShortcutSettings.didChangeNotification fires, AppDelegate must clear configured-chord caches (pendingConfiguredShortcutChord and activeConfiguredShortcutChordPrefixForCurrentEvent) via clearConfiguredShortcutChordState() before refreshing tooltips/UI. Also clear chord state on applicationWillResignActive to avoid cross-activity leakage. Verified by cmuxTests/AppDelegateShortcutRoutingTests.swift::testShortcutChangeClearsPendingConfiguredChord.
Learnt from: outoftime
Repo: manaflow-ai/cmux PR: 1528
File: Resources/shell-integration/fish/vendor_conf.d/cmux-fish-integration.fish:541-546
Timestamp: 2026-03-17T13:59:10.665Z
Learning: Repo: manaflow-ai/cmux — The socket command `report_git_branch` (parsed in Sources/TerminalController.swift) expects the branch name as an **unquoted, bare token**. Wrapping the branch name in double quotes causes it to be silently discarded by the parser. This matches the bash/zsh shell integration convention. Do not suggest quoting the branch argument for this command; the fix was attempted in commit 829437c7 and immediately reverted because it broke branch reporting.
Learnt from: lawrencecchen
Repo: manaflow-ai/cmux PR: 2514
File: Sources/GhosttyTerminalView.swift:3759-3761
Timestamp: 2026-04-01T22:57:41.165Z
Learning: Repo: manaflow-ai/cmux — In Sources/cmuxApp.swift, ClaudeCodeIntegrationSettings.customClaudePath(defaults:) trims surrounding whitespace and returns nil for empty/whitespace-only values; callers (e.g., TerminalSurface.createSurface(for:)) can safely set CMUX_CUSTOM_CLAUDE_PATH without additional trimming.
|
@coderabbitai Thanks for the thorough review. Here's context on the points raised: 1. Skills array format — The array form is supported and tested. The worktrunk plugin uses the same pattern in both its 2. Source object structure — The 3. metadata wrapper — Also matches the worktrunk marketplace format, which is a working published plugin. 4. No ref pinned — Agreed this is fine for now. All formats were validated through actual installation testing ( |
|
Tip For best results, initiate chat on the files or code changes.
Apologies for the noise — the review raised issues that were already validated against the real runtime. The PR looks good to merge. ✏️ Learnings added
🧠 Learnings used |
Summary
.claude-plugin/plugin.jsonmanifest with metadata and explicit skill selection.claude-plugin/marketplace.jsonfor marketplace distributioncmux,cmux-browser,cmux-markdown), excluding dev-only skills (cmux-debug-windows,release)Once merged, users can install with:
Closes #2542
Testing
/plugin marketplace add manaflow-ai/cmuxdiscovers the marketplace/plugin install cmuxinstalls the plugin with only the 3 end-user skillscmux-debug-windows,release) are not exposed/cmux:cmux,/cmux:cmux-browser,/cmux:cmux-markdownDemo Video
N/A — no UI or behavior changes, plugin manifest only.
Review Trigger (Copy/Paste as PR comment)
Checklist
Summary by cubic
Publishes a Claude Code plugin for
cmuxso users can install only the three end‑user skills from the marketplace. Marketplace source points to upstreammanaflow-ai/cmux. Addresses #2542.New Features
.claude-plugin/plugin.jsonexposing./skills/cmux,./skills/cmux-browser,./skills/cmux-markdown; excludescmux-debug-windowsandrelease..claude-plugin/marketplace.jsonwith sourcehttps://github.com/manaflow-ai/cmux.git.Migration
manaflow-ai/cmuxcmux@cmuxWritten for commit 48e1b31. Summary will update on new commits.
Summary by CodeRabbit
New Features
Documentation