Conversation
User-facing changes:
- Claude Code's interactive 'claude agents' dashboard now works correctly
when launched through pilot (previously fell back to static list)
- Code search switches from Probe to Semble: hybrid BM25 + Model2Vec
semantic embeddings, code-aware chunking, ~1.5ms queries, available
as both CLI ('semble search') and MCP tool
- LSP support (vtsls, basedpyright, gopls) now installs through Anthropic's
Piebald-AI/claude-code-lsps plugin marketplace - same path pilot already
uses for context-mode, codex, and chrome-devtools
- Pilot's hooks, MCP servers, and agents now live in their native
~/.claude/ locations (settings.json hooks, ~/.claude.json mcpServers,
~/.claude/agents/) - no plugin-dir wrapping needed
- Non-destructive uninstall: user-modified Pilot MCP servers and
user-added hook entries are preserved; only Pilot-installed LSP plugins
are removed (user-managed ones untouched)
- Pilot Console: removed Semble subsection from the Tool Token Savings
card so the row's height matches Yield panel
- Bump fast-uri to 3.1.2 (CVE-2026-6321/6322) and
@babel/plugin-transform-modules-systemjs to 7.29.4 (CVE-2026-44728)
via npm/bun overrides
- README + Docusaurus customization docs refreshed for the new layout
- Various rule and skill content polish from prior sessions
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
|
Caution Review failedPull request was closed or merged during review WalkthroughThe PR replaces Probe with Semble across docs and installer, adds Semble installation and Claude LSP plugin installs, introduces agents support, implements baseline-aware merging of Pilot hooks and MCP servers into native Claude config, updates uninstall to remove only baseline-matching items, and adds/updates tests and manifest entries. ChangesProbe to Semble Migration & Config Consolidation
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Suggested labels
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 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 |
|
Claude finished @maxritter's task in 3m 43s —— View job Code Review — PR #143
This is a large, well-scoped PR. The overall design is sound — migrating to native Medium1. # current (no guard)
merged = merge_pilot_hooks(current_hooks, incoming_hooks, baseline_hooks)The fix is to wrap in 2. Low3. Same marketplace added up to 3 times during LSP install if not _run_bash_with_retry(f"claude plugins marketplace add {_LSP_MARKETPLACE}", timeout=60):
_write_pilot_lsp_manifest(sorted(pilot_owned))
return FalseThen 4. 5. User-deleted Pilot MCP servers are silently reinstalled on upgrade # Note: user-deleted Pilot servers ARE reinstalled — deletion is not treated as
# a user customisation; the server is simply absent from `current`, so step 4
# adds it back from incoming.Info / Nits6. Docstring says "Asserts signature uniqueness" but uses 7. "semble": {
"command": "uvx",
"args": ["--from", "semble[mcp]", "semble"]
}This depends on 8. README step 2 still says "plugin" What's Well Done
|
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
installer/tests/unit/steps/test_dependencies.py (1)
41-74:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAssert Semble installer invocation in the core dependency flow test.
Line 41 patches
install_semble, but the test never verifies it was called. Add an assertion so Semble regressions are caught.Suggested patch
mock_python_tools.assert_called_once() mock_plugin_deps.assert_called_once() + _mock_semble.assert_called_once()As per coding guidelines,
**/tests/**and**/test_*.pyreviews should focus on test coverage for the feature being tested.Also applies to: 96-101
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@installer/tests/unit/steps/test_dependencies.py` around lines 41 - 74, The test patches install_semble but never asserts it was invoked; in test_dependencies_run_installs_core add an assertion that the Semble patch was called (e.g., call assert_called_once() on the mock for install_semble — the parameter named _mock_semble in the test) to ensure the installer is invoked; apply the same fix to the related test covering the core dependency flow around lines 96-101 by asserting its install_semble mock was called as well.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/docusaurus/docs/features/mcp-servers.md`:
- Around line 171-175: The fenced code block containing the sample calls to
mcp__semble__search and mcp__semble__find_related lacks a language tag (causing
MD040); update that code fence to include a language identifier (e.g., "text")
so the block starts with ```text and ends with ``` to satisfy markdownlint and
keep the examples for mcp__semble__search and mcp__semble__find_related
unchanged.
In `@installer/steps/claude_files.py`:
- Around line 451-452: The baseline file for MCP servers is being overwritten by
_merge_app_config (the baseline_path.write_text(json.dumps(source,...)) call),
which removes the prior mcpServers and prevents
_merge_mcp_servers_into_claude_json from seeing them; fix by preserving the
mcpServers key when writing the baseline or by giving MCP servers their own
dedicated baseline file. Concretely: in _merge_app_config, before writing the
new baseline, load the existing baseline if present and copy any existing
"mcpServers" value into source (or write source to a separate
.pilot-mcp-baseline.json and update _merge_mcp_servers_into_claude_json to read
that file); ensure the change removes the lost-data overwrite that causes
merge_pilot_mcp_servers(current_servers, incoming_servers, None) to misclassify
Pilot-owned servers.
---
Outside diff comments:
In `@installer/tests/unit/steps/test_dependencies.py`:
- Around line 41-74: The test patches install_semble but never asserts it was
invoked; in test_dependencies_run_installs_core add an assertion that the Semble
patch was called (e.g., call assert_called_once() on the mock for install_semble
— the parameter named _mock_semble in the test) to ensure the installer is
invoked; apply the same fix to the related test covering the core dependency
flow around lines 96-101 by asserting its install_semble mock was called as
well.
🪄 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: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 4362c48c-77d9-4fbc-8c43-57a56a1d6092
⛔ Files ignored due to path filters (48)
console/package.jsonis excluded by!console/**console/src/services/worker/http/routes/ToolSavingsRoutes.tsis excluded by!console/**console/src/ui/viewer/views/Usage/ToolSavingsCards.tsxis excluded by!console/**console/src/ui/viewer/views/Usage/index.tsxis excluded by!console/**docs/docusaurus/package-lock.jsonis excluded by!**/package-lock.jsonlauncher/cli.pyis excluded by!launcher/**launcher/config.pyis excluded by!launcher/**launcher/customize.pyis excluded by!launcher/**launcher/model_config.pyis excluded by!launcher/**launcher/settings_injector.pyis excluded by!launcher/**launcher/tests/unit/test_cli.pyis excluded by!launcher/**launcher/tests/unit/test_customize.pyis excluded by!launcher/**launcher/tests/unit/test_model_config.pyis excluded by!launcher/**launcher/tests/unit/test_settings_injector.pyis excluded by!launcher/**launcher/tests/unit/test_wrapper.pyis excluded by!launcher/**launcher/wrapper.pyis excluded by!launcher/**pilot/.lsp.jsonis excluded by!pilot/**pilot/.mcp.jsonis excluded by!pilot/**pilot/hooks/tests/test__util.pyis excluded by!pilot/**pilot/hooks/tests/test_tool_redirect.pyis excluded by!pilot/**pilot/hooks/tool_redirect.pyis excluded by!pilot/**pilot/package.jsonis excluded by!pilot/**pilot/plugin.jsonis excluded by!pilot/**pilot/rules/cli-tools.mdis excluded by!pilot/**pilot/rules/code-review-reception.mdis excluded by!pilot/**pilot/rules/development-practices.mdis excluded by!pilot/**pilot/rules/mcp-servers.mdis excluded by!pilot/**pilot/rules/task-and-workflow.mdis excluded by!pilot/**pilot/rules/testing.mdis excluded by!pilot/**pilot/scripts/mcp-server.cjsis excluded by!pilot/**pilot/scripts/worker-service.cjsis excluded by!pilot/**pilot/settings.jsonis excluded by!pilot/**pilot/skills/benchmark/tests/test_aggregate_benchmark.pyis excluded by!pilot/**pilot/skills/create-skill/steps/02-understand.mdis excluded by!pilot/**pilot/skills/create-skill/steps/04-create.mdis excluded by!pilot/**pilot/skills/prd/steps/03-clarify.mdis excluded by!pilot/**pilot/skills/setup-rules/steps/01-reference.mdis excluded by!pilot/**pilot/skills/setup-rules/steps/04-audit.mdis excluded by!pilot/**pilot/skills/setup-rules/steps/05-explore.mdis excluded by!pilot/**pilot/skills/setup-rules/steps/09-discover.mdis excluded by!pilot/**pilot/skills/setup-rules/steps/10-cross-check.mdis excluded by!pilot/**pilot/skills/setup-rules/steps/12-summary.mdis excluded by!pilot/**pilot/skills/spec-bugfix-plan/steps/03-investigation.mdis excluded by!pilot/**pilot/skills/spec-implement/steps/01-read-plan.mdis excluded by!pilot/**pilot/skills/spec-implement/steps/04-tdd-loop.mdis excluded by!pilot/**pilot/skills/spec-plan/steps/05-task-understanding.mdis excluded by!pilot/**pilot/skills/spec-plan/steps/06-exploration.mdis excluded by!pilot/**pilot/ui/index4.jsis excluded by!pilot/**
📒 Files selected for processing (22)
README.mddocs/docusaurus/blog/2026-02-18-fast-mode.mddocs/docusaurus/docs/features/cli.mddocs/docusaurus/docs/features/customization.mddocs/docusaurus/docs/features/mcp-servers.mddocs/docusaurus/docs/features/open-source-tools.mddocs/docusaurus/docs/features/rules.mddocs/docusaurus/docs/getting-started/installation.mddocs/docusaurus/docs/workflows/setup-rules.mddocs/docusaurus/docs/workflows/spec.mddocs/docusaurus/package.jsondocs/site/src/components/DeepDiveSection.tsxdocs/site/src/components/TechStack.tsxdocs/site/src/components/WhatsInside.tsxinstaller/steps/claude_files.pyinstaller/steps/dependencies.pyinstaller/steps/settings_merge.pyinstaller/tests/unit/steps/test_claude_files.pyinstaller/tests/unit/steps/test_dependencies.pyinstaller/tests/unit/test_manifest.pyinstaller/upstreams.yamluninstall.sh
💤 Files with no reviewable changes (1)
- installer/upstreams.yaml
CodeRabbit (must-fix): - MCP baseline file was being clobbered by _merge_app_config on every install, which wiped Pilot's mcpServers tracking and caused incorrect ownership classification on second install. Switch to a dedicated .pilot-mcp-baseline.json (mirrors the .pilot-hooks-baseline.json pattern). Uninstall script updated to read from the new file. - Add install_semble and install_rtk assertions to test_dependencies_run_installs_core so regressions on those installers are caught. - Add 'text' language tag to MCP example fenced code block (markdown lint). Claude (medium / nits): - Wrap merge_pilot_hooks call in try/except ValueError so a corrupted pilot/hooks/hooks.json logs and skips the merge instead of crashing the entire install. - Update merge_pilot_hooks docstring to say 'Validates ... raises ValueError' (was 'Asserts ...', which is misleading vs. plain assert). - README install-steps wording: 'Sets up ~/.claude/ plugin' → 'Installs into ~/.claude/ (native layout)' — Pilot is no longer a Claude Code plugin.
|
Claude finished @maxritter's task in 1m 51s —— View job Incremental Code Review — PR #143
✅ Resolved from prior reviewMedium findings — both fixed:
Low/info findings — fixed:
New issue — Low
for subdir in "commands" "skills" "rules"; do
local dir="$CLAUDE_DIR/$subdir"
if [ -d "$dir" ] && [ -z "$(ls -A "$dir" 2>/dev/null)" ]; then
rmdir "$dir" 2>/dev/null || true
fi
doneSince The success message on line 226 is also now stale — it says "Removed $removed_count Pilot-managed skills and rules" but agents are included in that count. Still open from prior review
|
The 8.8.0 release pipeline failed because the prepareCmd's sed step referenced pilot/plugin.json, which was deleted in #143. Remove it from both the sed list (prepare step) and the @semantic-release/git assets list so the next release cycle can bump versions cleanly. Also confirmed no other tracked file (CI workflows, install.sh, etc.) references the removed pilot/plugin.json — only intentional refs in _remove_legacy_plugin_marker's docstring + the test asserting we skip it during install.
|
🎉 This PR is included in version 8.8.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
Summary
User-facing changes shipped in this PR:
claude agentsdashboard now works when launched through pilot. Previously it fell back to the static list because pilot wrappedclaudewith--plugin-dir, which Claude Code disables the dashboard for.semble search) and MCP tool.vtsls,basedpyright,goplsinstall throughPiebald-AI/claude-code-lsps— the sameclaude plugins installpath pilot already uses for context-mode, codex, and chrome-devtools.~/.claude/locations:~/.claude/settings.jsonhooks~/.claude.jsonmcpServers~/.claude/agents/~/.pilot/.pilot-lsp-plugins.json).fast-urito 3.1.2 (CVE-2026-6321 / CVE-2026-6322) and@babel/plugin-transform-modules-systemjsto 7.29.4 (CVE-2026-44728) via npm/bun overrides.Verification
installer/tests/unit/ launcher/tests/unit/)cd console && bun test)tsc --noEmit)basedpyrightclean on all changed Python filesuv run python -m launcher.buildpilot:spec-reviewand Codex changes-review ran during planning + verification phases; all must_fix and should_fix findings addressed inlineImplementation plan
docs/plans/2026-05-12-drop-plugin-system-native-install.md(Status: VERIFIED)Summary by CodeRabbit
New Features
pilot agentsCLI to manage background agent sessionsDocumentation
Chores