opencode, Antigravity, Pi, and other agents that read skills
Add Cranes and the Cranes skill to agents that read Agent Skills, and keep your own skills synced into them with the cranes command.
What you get
Agents that read Agent Skills (folders with a SKILL.md in them) use Cranes in three parts:
- The Cranes connection, so the agent can bring in your thinking and save to Cranes.
- The Cranes skill, which tells the agent when to call Cranes and what’s worth saving.
- The
cranescommand, which copies your own Cranes skills into the agent’s skills folder.
Claude Code, Cursor, and Codex have their own plugins: see Claude Code, Cursor, and Codex.
Set up
1. Get the cranes command and the Cranes skill from Cranes’s public plugin repository, cranesintelligence/plugins. In a terminal:
git clone --depth 1 https://github.com/cranesintelligence/plugins.git ~/.cranes/plugins
cp ~/.cranes/plugins/core/cranes.py ~/.cranes/cranes.py
To update later, run git -C ~/.cranes/plugins pull and copy again.
2. Add Cranes to your agent.
opencode
-
Add the Cranes skill:
mkdir -p ~/.agents/skills && cp -R ~/.cranes/plugins/skills/cranes ~/.agents/skills/cranes -
Add Cranes to
opencode.json:{ "$schema": "https://opencode.ai/config.json", "mcp": { "cranes": { "type": "remote", "url": "https://usecranes.com/connect/mcp", "enabled": true, "oauth": {} } } } -
To sync your skills whenever a session starts, save this as
~/.config/opencode/plugins/cranes.js:export const Cranes = async ({ $ }) => ({ event: async ({ event }) => { if (event.type === "session.created") { await $`python3 ${process.env.HOME}/.cranes/cranes.py skills sync`.quiet().nothrow() } }, })
Google Antigravity
-
Add the Cranes skill to Antigravity’s skills folder,
~/.gemini/config/skillsfor Antigravity 2.0 and the IDE (for the CLI, use~/.gemini/antigravity-cli/skills):cp -R ~/.cranes/plugins/skills/cranes ~/.gemini/config/skills/cranes -
Add Cranes to
~/.gemini/config/mcp_config.json. Antigravity needs theserverUrlfield:{ "mcpServers": { "cranes": { "serverUrl": "https://usecranes.com/connect/mcp" } } }
Pi
- Add the Cranes skill:
mkdir -p ~/.agents/skills && cp -R ~/.cranes/plugins/skills/cranes ~/.agents/skills/cranes - Add Cranes:
pi mcp add cranes --url https://usecranes.com/connect/mcp. Or add{ "mcpServers": { "cranes": { "url": "https://usecranes.com/connect/mcp" } } }to~/.pi/agent/mcp.json.
Any other agent
- Copy
~/.cranes/plugins/skills/cranesinto the agent’s skills folder. - Add
https://usecranes.com/connect/mcpas a remote MCP server with OAuth. See Any other AI that supports MCP.
Sign in
Each sign-in opens Cranes in your browser. Check what it may use, choose whether to Keep my own ideas, and choose Allow.
- For the connection, sign in through the agent:
- opencode:
opencode mcp auth cranes - Antigravity signs you in on its own.
- Pi:
pi mcp login cranes, or/mcpin a session. - Any other agent: as it asks.
- opencode:
- For the
cranescommand: runpython3 ~/.cranes/cranes.py login. This sign-in is shared on your computer with the plugins for Claude Code, Cursor, and Codex, and shows under Use in other AIs as Cranes for coding agents.
What’s automatic, and when you ask
-
Your thinking comes in when you ask. Type
@cranes, or ask what your thinking says. The agent calls Cranes, guided by the Cranes skill. -
Saving waits for your yes. Ask the agent to save something, or say yes when it offers.
-
Your skills. Run
python3 ~/.cranes/cranes.py skills syncto copy them in. Without--dir, they go to~/.agents/skills, which opencode and Pi read. For Antigravity, add--dir ~/.gemini/config/skills; for any other agent,--dirand its skills folder. opencode syncs at each session start with the plugin above; elsewhere, run the sync again when your skills change.Each skill becomes a folder named
cranes-plus the skill’s name. A copy you edit is never overwritten; the command says so, and the agent can offer to save your edit back to Cranes. Copies of skills you removed from Cranes are removed unless you edited them, and folders Cranes didn’t write are never touched. -
@cranesbefore the agent starts. If your agent has a hook that runs on each prompt and passes a command’s output to the model, runpython3 ~/.cranes/cranes.py guidancethere with the prompt as input. For a prompt with@cranes, it prints what Cranes guided and where each part came from; any other prompt gets nothing and never reaches Cranes. It never makes the hook fail.
See When Cranes comes in.