This directory holds the per-agent extension manifests that let each supported OSS coding agent install Perfetto skills with one command. The skills themselves live one level up, in ai/skills/, and are shared across all agents — only the install-time manifest is per-agent.
This directory is the source of truth. The Perfetto release pipeline takes its contents (along with ai/skills/ and the tools/trace_processor Python wrapper) and assembles them into the ai-agents release branch, whose root layout is what each agent's loader expects to see at the top of the cloned repo.
See RFC-0026 for the full design.
ai/extensions/
├── README.md (this file)
├── 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
Claude Code and Codex are the only agents with a marketplace-style plugin install that needs a per-agent manifest. Both use an explicit git source object (git-subdir for Claude, local for Codex) that points the agent at the plugins/perfetto/ subdirectory of the ai-agents branch.
Three other supported agents install skills via mechanisms that need no per-agent manifest on the branch:
skills/index.json from the branch root via the skills.urls config field; the index is generated by the release pipeline.pi install git:github.com/google/perfetto@ai-agents (it auto-discovers from the cloned root skills/ directory) or have the fallback installer write into ~/.agents/skills/.skills/ layout, not the plugins/perfetto/ plugin layout. The fallback installer populates its skills directory; native agy plugin install is not used because as of 2026-05 it has no syntax for pinning a non-default git ref.The fallback path also serves any agent that reads ~/.claude/skills/, ~/.codex/skills/, etc. without needing a marketplace registration.
The arrows show where each file lands on the ai-agents branch. The release pipeline only moves directories — filenames in this directory match their final on-branch filenames exactly.
Every manifest carries "version": "0.0.0-dev" as a sentinel. The release pipeline rewrites this to the release tag (e.g. "v54.0") when it assembles the ai-agents branch — main itself never knows which tag will ship.
When adding or modifying a manifest:
skills/ on the assembled branch. No agent‘s manifest needs to enumerate them. The one exception is OpenCode’s skills/index.json, which the pipeline generates from ai/skills/.tools/check_extension_manifests.py (or tools/run_presubmit) locally before sending the change.