Skip to content

Make plugins/flyte installable as a Google Antigravity plugin - #47

Merged
cosmicbboy merged 2 commits into
mainfrom
antigravity-plugin
Oct 3, 2026
Merged

cosmicbboy merged 2 commits into
mainfrom
antigravity-plugin

Conversation

@davidmirror-ops

@davidmirror-ops davidmirror-ops commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Makes plugins/flyte/ a native Google Antigravity plugin, so Antigravity users get all skills and both MCP servers from one install, like Claude Code and Codex users already do:

git clone https://github.com/flyteorg/flyte-agent-plugins.git
agy plugin install ./flyte-agent-plugins/plugins/flyte

The skills needed no changes: they use only name + description frontmatter, which Antigravity accepts as is. What was missing was plugin packaging.

The README documents every install route that works with agy 1.2.16:

  • agy plugin install <path> copies the plugin in.
  • A plugins.json loads it in place from a checkout. It can be global, or committed per repo with a relative path, for example next to a git submodule, so a team shares it.
  • A folder dropped into <repo>/.agents/plugins/.
  • From PyPI, with no git needed: agy plugin install "$(uvx flyte-agent-plugins path)". This only works from the first release that includes this PR, because the published 0.0.8 package has no plugin.json.

Changes

New manifests in plugins/flyte/, next to the existing ones and sharing the same skills/ tree:

  • plugin.json is Antigravity's plugin marker, and it must sit at the plugin root (docs). It carries name, version and description. The docs only show name, but agy writes version into the manifests it generates itself, so it's accepted. set_version.py writes it and verify.py's version check covers it, like every other manifest.
  • mcp_config.json holds the same two servers as .mcp.json, written in Antigravity's format. Antigravity rejects url/type on remote servers and needs serverUrl (docs), so .mcp.json can't be reused. flyte-cluster (stdio) is identical.

Packaging, following the repo's existing conventions:

  • verify.py: a new check_antigravity() fails if plugin.json stops matching the Claude manifest's name/description, or if mcp_config.json drifts from .mcp.json. The only difference it allows is url → serverUrl. The npm-tarball and wheel content checks now also require both new files.
  • build.py: copy_plugin vendors both files into the npm and PyPI packages. Both are added to the npm files allowlist, and antigravity is added to KEYWORDS.

Docs:

  • Root README:
    • a new "Google Antigravity" install section; the heading becomes "Install as a plugin (Claude Code, Codex, and Antigravity)" and its anchor is updated
    • an Antigravity row in the harness table, plus a note that Antigravity's global skills directory is ~/.gemini/..., not ~/.agents/skills/
    • the two new files added to the Layout section
  • plugins/flyte/README.md: matching install section and MCP note.
  • README.md.tmpl: two harness lists updated.

Not in this PR

  • Marketplace install. name@marketplace only reaches Google's Agent Marketplace, which installs by an ID Google issues; agy has no command to add a third-party marketplace. Listing there would be a separate conversation with Google.
  • Antigravity support in flyte-agent-plugins mcp install. agy 1.2.16 has agy mcp add/remove, so the MCP installer could drive it the way it drives claude/codex. That's a follow-up.
  • An antigravity target for flyte-skills install. Antigravity's global skills directory differs between the app/IDE (~/.gemini/config/skills/) and agy (~/.gemini/antigravity-cli/skills/). That needs a decision, so it's left for a follow-up. --target agents --project and --dir already work.
  • Generic wording in skills. Three deploy skills say "use AskUserQuestion", a Claude Code tool name. Other harnesses just ask in chat, as Codex does today.

Test plan

  • python packaging/verify.py: all checks pass, including the new antigravity checks and the tarball/wheel contents
  • Negative check: editing the flyte-cluster pin in mcp_config.json makes check_antigravity() fail
  • Tested in Antigravity CLI (agy 1.2.16):
    • agy plugin validate ./plugins/flyte: ok, 23 skills, 2 MCP servers
    • agy plugin install ./plugins/flyte: copied to ~/.gemini/config/plugins/flyte/, and agy plugin list shows flyte with components skills, mcpServers
    • In an agy -p session: all 23 skills load, flyte_flyte-docs exposes its 3 search tools and flyte_flyte-cluster its 29 tools, so both servers start. Tool calls weren't run because headless mode blocks MCP calls without an allow rule.
  • Also tested in agy:
    • project .agents/plugins.json with an absolute path: loads with 23 skills and both servers
    • project .agents/plugins.json with a relative path to a vendored checkout: loads with 23 skills and both servers
    • global ~/.gemini/config/plugins.json: loads with 23 skills and both servers
    • a copy in .agents/plugins/flyte/: loads with 23 skills and both servers
    • an empty control workspace: no plugin loaded
  • agy plugin import on a Claude-format copy (no plugin.json/mcp_config.json) writes flyte-docs as "command": "" and loads only flyte-cluster. The README warns against this route.
  • PyPI route: a wheel built from this branch validates, and agy plugin install "$(uvx --from <wheel> flyte-agent-plugins path)" installs it as flyte with 23 skills and both servers. Published 0.0.8 fails with missing plugin.json, as expected.
  • plugin.json with version validates, and set_version.py 0.0.8 leaves it byte-identical.
  • Each new file is required: validate errors with missing plugin.json without the manifest, and finds no MCP servers without mcp_config.json. Using .mcp.json as is fails with MCP server "flyte-docs" must have either command or serverUrl.

🤖 Generated with Claude Code

davidmirror-ops and others added 2 commits October 3, 2026 07:59
Antigravity identifies a plugin by a bare plugin.json at the plugin root
and reads MCP servers from mcp_config.json, requiring `serverUrl` (not
`url`/`type`) for remote servers. Add both alongside the Claude Code and
Codex manifests so the same skills/ tree installs with
`agy plugin install ./plugins/flyte`, MCP servers included.

The new files are mirrors, so verify.py checks them against
.claude-plugin/plugin.json and .mcp.json, and build.py vendors them into
the npm and PyPI packages like the other manifests.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: davidmirror-ops <david.espejo@union.ai>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: davidmirror-ops <david.espejo@union.ai>
@davidmirror-ops
davidmirror-ops marked this pull request as ready for review October 3, 2026 13:18
@cosmicbboy
cosmicbboy merged commit 2f545c4 into main Oct 3, 2026
7 checks passed
@davidmirror-ops davidmirror-ops mentioned this pull request Oct 3, 2026
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