« All posts

Your Claude Skill Is Invisible to Codex — Here's the Fix

Agent skills are locked to one tool by default. Here's how splitting contracts from implementations makes them portable across Claude, Codex, and MCP.

By 2026, every agent tool independently converged on the same primitive: agent behavior configured as markdown files in the repo — CLAUDE.md, AGENTS.md, SKILL.md, TOML-based Codex configs, .mcp.json. The shape is right: files are diffable, versionable, and travel with git. But every tool speaks its own dialect, so a capability wired into one product's config stays invisible to the other agents in your fleet — forcing manual re-wiring, by hand, every time you add a new agent.

This piece names that manual re-wiring the 'interop tax' and proposes a fix: split each capability into a contract and an implementation. Using agentproto's TOOL.md and DRIVER specs as a working example, a pure contract file declares a tool's id, input/output schemas (via Zod), and its mutation/approval profile — with zero execution logic — while a separate, type-checked driver binds that contract to real code, similar to how a Solidity contract implements an interface.

The payoff: a single daemon reads a repo's tools/ and drivers/ directories and serves them over MCP, so Claude Code, Codex, and other agents can all consume the same docs.search capability from one declaration. For engineers, the practical takeaway is that decoupling the promise from the implementation removes the afternoon of re-wiring normally paid per new agent added to a stack.