Repository navigation
Conversation
Claude Code and Factory install a plugin folder from the pouch themselves. Every other assistant now gets its parts: skills linked, agents and commands translated to its dialect, hooks and MCP servers written into its config, with CLAUDE_PLUGIN_ROOT pointing at the plugin's folder. The pouch's own items win over a plugin's of the same name and clashes are reported. Parts are never items of their own: deleting, replacing or editing one in an assistant doesn't touch the pouch, and the next sync puts the plugin's version back.
Cursor's CLI keeps its preferences in cli-config.json (moved by CURSOR_CONFIG_DIR, or XDG_CONFIG_HOME on Linux) and the Antigravity CLI in ~/.gemini/antigravity-cli/settings.json, so targets now carry the folder their settings files are in. Crush's MCP servers are read from and written to the mcp key of crush.json. Windsurf's preferences are a binary file and stay unsupported.
… checkout Cursor counts as installed when only its CLI's moved config folder exists, settings are not written into a settings folder inside a git checkout, and the background service keeps the variables that move assistants' folders.
Droid only loads plugins it installed itself and rejects a directory marketplace in settings.json, so Factory now gets a plugin folder's parts like the assistants without plugins. Qwen Code reads ~/.qwen/skills and the shared ~/.agents/skills; both were left out.
scripts/e2e-plugins.sh adds a plugin written in the web app and ponytail from GitHub, syncs two computers with the real assistant CLIs, and asks each one what it loaded. The shared parts of scripts/e2e-settings.sh move to scripts/e2e-settings/stack.sh.
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Builds on #4; merge that first.
Plugin folders everywhere. A plugin folder (a Claude Code plugin) stays one item in the pouch. Claude Code installs it natively; every other assistant gets its parts, written where and how that assistant expects them: skills, agents, commands (TOML for Gemini CLI and Qwen Code), hooks and MCP servers.
CLAUDE_PLUGIN_ROOTexported before the original command, which is left unchanged. MCP servers get it in theirenv. On Windows, hooks get the path written into the command instead.~/.agents/skills, which it reads.Settings. Cursor CLI's
cli-config.json(~/.cursor,CURSOR_CONFIG_DIR, orXDG_CONFIG_HOME/cursoron Linux) and Antigravity CLI's~/.gemini/antigravity-cli/settings.jsonnow sync. Settings are never written inside a git checkout, and the background service passes the config-location variables through. Windsurf stays unsupported: its preferences are a binary protobuf file.Crush MCP servers sync to
mcpincrush.json.Docker test.
scripts/e2e-plugins.shuses two computers with the real CLIs (one on OpenCode 1, one on OpenCode 2). It adds a test plugin through the web editor and ponytail from GitHub, syncs, then asks each assistant what it loaded. Hooks and MCP servers record that they ran and found their plugin folder. All 10 assistants with a Linux CLI pass. Codex hooks show as written but not run, because Codex asks the user to trust new hooks. Cursor hooks are the same, because Cursor needs an account to run a prompt. The helpers it shares withscripts/e2e-settings.shmove toscripts/e2e-settings/stack.sh, and that test still passes.Checks:
cargo fmt,cargo clippy -D warnings,cargo test --workspace(315 passed).