2026-09-19 Unified Coding Agents Interface and AGY Skills MCP
What I set out to do
Diagnose why agy (Antigravity CLI) showed no configured MCP servers and was missing Obsidian knowledge skills (knowledge-management, note, people), rename the legacy gemini.nix module to agy.nix, and implement a unified coding agent interface across all coding agents.
What I actually did
-
Diagnosed root causes:
programs.antigravity-cli.enableMcpIntegrationdefaulted tofalseupstream and was omitted fromgemini.nix. Home Manager had left~/.gemini/config/mcp_config.jsonunmanaged as a stale, empty 0-byte file from July 26.knowledge-management,note, andpeoplewere declared incommon/lib.nixas Claude-only skills and only wired intoclaude.nix.
-
Renamed module:
- Moved
nix/home-manager/modules/coding-agents/geminitonix/home-manager/modules/coding-agents/agy. - Renamed
gemini.nixtoagy.nixand updated error contexts, comments, andAGENTS.md.
- Moved
-
Built unified coding agents interface:
- Created coordinator module
nix/home-manager/modules/coding-agents/common/coding-agents.nixdeclaringprograms.codingAgents = { enable, enableMcp, skills, contextFile }. - Moved
gen-people-schema.pyandpeople-schema-prose.mdintocoding-agents/common/and consolidatedpeopleSchemaGeneratedgeneration. - Included
knowledge-management,note, andpeoplein the universalskillsset alongsideportableSkills. - Propagated
skillsandenableMcpIntegrationtoprograms.antigravity-cli,programs.pi-coding-agent,programs.codex, andprograms.claude-code. - Wired
note-template.mdandpeople-schema.mddynamic asset links to.claude/,.gemini/config/, and.pi/agent/skill directories.
- Created coordinator module
-
Added contract test:
- Created
nix/tests/coding-agents-contract.nixand registered it innix/tests/default.nix. - Verifies that all enabled coding agents mount all universal skills and enable MCP integration.
- Created
-
Verified and deployed:
- Ran
just check(passed formatting, linting, deadnix, statix, and flake checks). - Executed
hm switch, removing the stale 0-byte~/.gemini/config/mcp_config.jsonso Home Manager deployed the live MCP configuration and the complete skill set into~/.gemini/config/skills/.
- Ran
-
Unified global context (instructions):
- Wired
programs.codingAgents.contextFile(common/context/AGENTS.md) directly toprograms.antigravity-cli.context.GEMINI,programs.pi-coding-agent.context,programs.codex.context, andhome.mutableFilefor.claude/CLAUDE.mdand.codex/AGENTS.md. - Linked
programs.claudeSkillSync.instructions.sourceso account-wide instructions trackcodingAgents.contextFile. - Stripped hardcoded context paths from
agy.nix,claude.nix,pi.nix,codex.nix, andskill-sync.nix. - Added context validation to
nix/tests/coding-agents-contract.nixand verified withjust checkandhm switch.
- Wired
-
Unified Universal Agents and Permissions:
- Extended
programs.codingAgentswithagents(attrsOf (either path package)) defaulting to dynamic discovery of./agents/*.md(comment-remover,commit,github-automation,python-reviewer,template-filler). - Added centralized
permissionsoptions (allow,ask,deny) with baseline guardrails (askforgit push,git checkout;denyforgit -C,git --git-dir,git --work-tree). - Projected
agentsacross all four targets:- Claude Code:
programs.claude-code.agents = cfg.agents;(symlinked into~/.claude/agents/). - Pi:
programs.pi-coding-agent.agents = cfg.agents;andprompts = cfg.agents;(symlinked into~/.pi/agent/agents/and~/.pi/agent/prompts/). - Antigravity:
programs.antigravity-cli.commands = cfg.agents;mapped viaformatForGeminiCommand, then re-injected as skills at~/.gemini/config/skills/. - Codex: dynamically compiled into standalone Codex skills with
SKILL.mdviaformatForCodexSkill, deployed into~/.codex/skills/.
- Claude Code:
- Projected
permissionsacross all four targets:- Antigravity CLI: translated to
command(...)syntax inprograms.antigravity-cli.permissions. - Pi: injected into
~/.pi/agent/extensions/pi-automode/config.jsonunderpermissionswithbash(...)patterns. - Claude Code: translated into
Bash(...)patterns and merged intobaseAskPermissionsandbaseDenyPermissions. - Codex: converted into Starlark
prefix_rule(...)patterns withpromptandforbiddendecisions inrules.default.
- Antigravity CLI: translated to
- Expanded
nix/tests/coding-agents-contract.nixwith assertions for all universal agents and baseline permissions on every enabled agent. - Verified with
just check,nix flake check, and activated viahm switch.
- Extended
What was striking
- Antigravity’s upstream Home Manager module (
programs.antigravity-cli) already contained full support for transformingprograms.mcp.serversinto~/.gemini/config/mcp_config.jsonwith stdio and http/serverUrl handling. It was simply disabled becauseenableMcpIntegrationwas unset. - Inverting control through a coordinator module in
common/eliminated boilerplate across four separate agent modules without requiring custom submodule wrappers over upstream Home Manager options. - Global context files across agents differ in deployment requirements (some like Claude and Codex require mutable real files to allow runtime memory updates, while Antigravity and Pi take store symlinks), but the source of truth can be completely centralized through
codingAgents.contextFile.