What problem does it solve? Harness-specific assumptions in skills, hooks, and subagent definitions fail silently: a hardcoded path falls through, a tool-name table matches nothing, and a hook wired to the wrong event never fires, all while exiting zero. This Skill teaches how to write agent tooling that survives a change of harness (Claude Code, Antigravity, and future agents) and how to port tooling that did not. ## Core Features & Use Cases - Portability patterns: Resolution ladders instead of constants, matching on argument names instead of tool names, emitting every deny dialect at once, and per-path fail-open vs fail-closed decisions. - Mechanical scanning: Ships scripts/portability_scan.py, which flags single-harness paths, single-harness environment variables, brand context files without AGENTS.md, tool-name tables, and absolute home paths. - Dated harness reference: references/harness-matrix.md documents config locations, hook payloads, tool and argument names, capability denial, and session record formats per harness, with ground-truth commands to verify. - Use Case: Before publishing a skill that hardcodes ~/.claude/skills/ and keys logic on the Read tool name, run the scanner and apply the ladder and argument-name patterns so the same skill works under Antigravity without silent no-ops. ## Quick Start Review my skill directory for harness-specific assumptions and run the portability scan on it, then fix any lock-in it flags.