Summary
scripts/install.py resolves two different directories for the ide flavor depending on which function you look at, so a skills install and its MCP server config can end up split across two different Antigravity profile directories.
Root cause
get_target_dir() (used to decide where skills get installed) hardcodes the ide flavor to ~/.gemini/antigravity/skills:
elif flavor == "ide":
return gemini_home / "antigravity" / "skills"
But get_profile_dir() (used to decide where the MCP config gets merged) prefers ~/.gemini/antigravity-ide/ when that directory already exists on disk:
if flavor == "ide":
if (gemini_home / "antigravity-ide").exists():
return gemini_home / "antigravity-ide"
return gemini_home / "antigravity"
Both are meant to describe the same "ide" runtime profile, but they disagree whenever ~/.gemini/antigravity-ide/ exists.
Impact
Running python3 scripts/install.py --flavor=ide --mode=global on a machine where ~/.gemini/antigravity-ide/ exists:
- installs the SecOps skills into
~/.gemini/antigravity/skills/
- but merges the
google-security-operations MCP server config into ~/.gemini/antigravity-ide/mcp_config.json
The skills load in one profile with no MCP server configured in that profile, and the MCP server is configured in a profile that never loaded the skills. There's no error at install time or at skill-invocation time — the SecOps tools simply aren't reachable.
Suggested fix
Have get_target_dir() and get_profile_dir() share one source of truth for the ide flavor's directory (e.g. have get_target_dir() call get_profile_dir() internally, or extract a single resolve_ide_home() helper both use), so skills and MCP config always land in the same profile.
Found while critically reviewing PR #2 / branch agy_plugin_v0001.
Summary
scripts/install.pyresolves two different directories for theideflavor depending on which function you look at, so a skills install and its MCP server config can end up split across two different Antigravity profile directories.Root cause
get_target_dir()(used to decide where skills get installed) hardcodes theideflavor to~/.gemini/antigravity/skills:But
get_profile_dir()(used to decide where the MCP config gets merged) prefers~/.gemini/antigravity-ide/when that directory already exists on disk:Both are meant to describe the same "ide" runtime profile, but they disagree whenever
~/.gemini/antigravity-ide/exists.Impact
Running
python3 scripts/install.py --flavor=ide --mode=globalon a machine where~/.gemini/antigravity-ide/exists:~/.gemini/antigravity/skills/google-security-operationsMCP server config into~/.gemini/antigravity-ide/mcp_config.jsonThe skills load in one profile with no MCP server configured in that profile, and the MCP server is configured in a profile that never loaded the skills. There's no error at install time or at skill-invocation time — the SecOps tools simply aren't reachable.
Suggested fix
Have
get_target_dir()andget_profile_dir()share one source of truth for theideflavor's directory (e.g. haveget_target_dir()callget_profile_dir()internally, or extract a singleresolve_ide_home()helper both use), so skills and MCP config always land in the same profile.Found while critically reviewing PR #2 / branch
agy_plugin_v0001.