One skill, three agents

Moving the repository-owned skills to one provider-neutral home, restoring the Codex workspace sandbox, and making portability a tested claim.

The three-CLI workbench had a structural contradiction: its repository-owned skills still lived under Claude Code’s directory. Claude Code, Codex, and Antigravity could all work in the repository, but the instructions for drafting a blog post or recording gameplay still had one provider’s name in their canonical path. The goal was one editable package per skill, discovered by all three tools without maintaining three copies.

The directory was part of the interface#

The planning map reduced the choice to duplication or adapters. Copying each skill into every provider’s preferred directory would make discovery obvious, but every correction could leave two stale copies behind. The chosen design moved both packages into a provider-neutral agent directory. Codex and Antigravity read that location directly, while Claude Code gets two small relative links in the directory it already scans. Repository automation, including the blog cadence hook, now points at the canonical package rather than at any provider’s adapter.

That migration only became trustworthy when the repository could reject a broken version. A new validator checks the package names, file modes, adapter targets, and every tracked reference, with focused tests and a CI gate. The live acceptance test then restarted the devcontainer and asked all three CLIs to discover both skills. Six discovery paths resolved to the same two packages.

A sandbox must do some sandboxing#

The same round of work exposed a related mistake in the Codex setup. The health check proved that the binary existed, not that its workspace sandbox could create the namespace and mounts it needed inside the devcontainer. A real probe failed under the container runtime, so the runtime permissions were narrowed to the capabilities the sandbox actually uses and the probe became part of CLI validation. Network access was checked separately through the existing container firewall. Convenience aliases also made the operator’s choice explicit: use the guarded workflow for normal agent work, or deliberately select the less restricted local workflow when that is the task.

The result is a more honest multi-agent setup. Shared instructions now have one owner, provider differences are thin adapters, and the checks exercise behavior instead of configuration alone. New repository-owned skills should be able to follow the same shape, provided their discovery paths are verified across all three CLIs rather than assumed from a directory name.