ai/extensions/README.md
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 → .claude-plugin/plugin.json
│ └── marketplace.json → .claude-plugin/marketplace.json
└── codex/
├── plugin.json → .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 installed via
tools/agents-install (served at
https://get.perfetto.dev/agents-install) — no manifest required.
The skill tree is emitted exactly once, at plugins/perfetto/skills/:
plugin installs consume the plugins/perfetto/ subdir, and fallback
consumers (OpenCode's index.json URL, tools/agents-install) read the
same tree at its full path. Every install gets the identical assembled
skill, which carries the trace_processor wrapper at bin/ inside the
skill, so $SKILL_ROOT/bin/trace_processor resolves everywhere. 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.