Per-agent extension manifests that let supported coding agents install the Perfetto skill. The skill itself lives in ai/skills/perfetto/ and is shared across agents; only the install-time manifest is per-agent.
This directory is the source of truth. The release pipeline assembles it (with ai/skills/ and the tools/trace_processor wrapper) into the ai-agents branch. See RFC-0026 for the design and docs/getting-started/using-ai.md for how users install.
ai/extensions/
├── claude-code/
│ ├── plugin.json → plugins/perfetto/.claude-plugin/plugin.json
│ └── marketplace.json → .claude-plugin/marketplace.json
└── codex/
├── plugin.json → plugins/perfetto/.codex-plugin/plugin.json
└── marketplace.json → .agents/plugins/marketplace.json
The arrows show where each file lands on the ai-agents branch. Claude Code and Codex are the only agents that need a per-agent manifest. Every other agent (OpenCode, Pi, Antigravity, …) is a fallback consumer of the root skills/ tree, installed via tools/agents-install (served at https://get.perfetto.dev/agents-install) — no manifest required.
The one content difference between the two consumers is the environment setup the bundler resolves into the skill: plugin consumers (plugins/perfetto/skills/) get the bundled-trace_processor variant, fallback consumers (root skills/) get the standalone fetch-it-yourself variant. See ai/skills/README.md for how the bundler assembles the single skill.
tools/release/roll-prebuilts stamps the release version into the manifests and tools/agents-install at roll time, in lockstep with the bundled trace_processor. Before the first roll they carry the 0.0.0-dev sentinel; build_ai_agents.py does no rewriting.
skills/; manifests don't enumerate them.tools/check_extension_manifests.py before sending the change.