Cookbook: Using AI with Perfetto
NOTE: Googlers: use go/perfetto-ai-skills and go/perfetto-ai-skills-android-memory instead of this page.
The Perfetto AI skill is a skill for coding agents
such as Claude Code, Codex, OpenCode, Antigravity and Cursor. Point your agent
at a trace and ask questions in plain English: it loads the trace into
trace_processor, writes the PerfettoSQL and reports what it found. It can
also record traces and follow guided workflows for Android memory and GPU
analysis. The skill bundles trace_processor, so there is nothing else to
install.
Quick start
1. Install the skill
| Agent | Install |
|---|---|
| Claude Code | /plugin marketplace add google/perfetto@ai-agents, then /plugin install perfetto@perfetto |
| Codex | codex plugin marketplace add google/perfetto --ref ai-agents, then install perfetto from the plugin list |
| OpenCode | Add to opencode.json: "skills": { "urls": ["https://raw.githubusercontent.com/google/perfetto/ai-agents/plugins/perfetto/skills"] } |
| Other (Antigravity, Cursor, ...) | Use the fallback installer (below) |
For any other agent, use the fallback installer, which needs Python 3:
# macOS / Linux: into an agent's default directory
curl -fsSL https://get.perfetto.dev/agents-install | python3 - --agent <claude|codex|opencode|antigravity|pi>
# macOS / Linux: into any skills directory, e.g. one committed to your repo
curl -fsSL https://get.perfetto.dev/agents-install | python3 - --target <path># Windows (use curl.exe, not the PowerShell curl alias)
curl.exe -fsSL https://get.perfetto.dev/agents-install | python - --target <path>To share the setup with your team, point --target at a per-agent directory
in your repo (for example .claude/) and commit the result.
2. Ask about a trace
Mention a trace file and ask your question:
Investigate object retention and potential leaks in heap_dump.pftrace.No trace yet? Let the agent record one:
> Record a Java heap dump of com.example.app from my connected device and
find what is keeping memory alive.You do not need to mention the skill: the agent picks it up whenever the
conversation involves a trace or a performance problem. In Claude Code you can
also invoke it explicitly with /perfetto:perfetto.
Example prompts
Memory leaks and heap dumps
Guided workflows for leaks, OOMs, churn and allocation hot paths.
Investigate object retention and potential leaks in heap_dump.pftrace.
Why does com.example.app's Java heap keep growing? Compare before.pftrace
and after.pftrace.
Analyze native heap allocations and find memory growth hot paths in
native_heap.pftrace.
Which code paths allocate the most short-lived objects in
java_alloc.pftrace?
Here are 40 heap dumps of com.example.app in ~/dumps/. Cluster them and
find the common root causes.The agent runs tested SQL to extract dominator paths, native callstacks or allocation summaries, then searches your workspace for the suspect classes and points at the files to fix. See Using AI in the Android cookbook for more.
Ad-hoc trace analysis
Any question you could answer with PerfettoSQL.
Load ~/traces/startup.pftrace and tell me which threads used the most CPU
in the first two seconds.
Why is app startup slow in startup.pftrace? Break down the main thread.
Find the top causes of uninterruptible sleep for com.example.myapp in
trace.pftrace.
Which frames were janky in jank.pftrace and what was the UI thread doing?The agent discovers the tables and standard library modules it needs rather than guessing, and keeps the trace loaded across queries.
Recording
Traces from a connected Android device or the local Linux machine.
> Record a 10 second trace of com.example.app starting up on my connected
device, then tell me what took the longest.The agent picks a config from the bundled examples, records the trace and then analyses it.
GPU performance
Is the workload GPU-bound or host-bound, and why. Counter support is deepest for NVIDIA/CUDA today.
> Is this workload GPU-bound or host-bound? The trace is at game.pftrace.
> The GPU looks busy but the workload is slow. Was the clock throttled or
slow to ramp in gpu.pftrace?
> Which kernels dominate this CUDA trace, and are they compute-bound or
memory-bound?The agent splits the timeline into busy and idle time, attributes idle gaps to host-side causes, checks for DVFS ramp or thermal throttling, and for compute workloads classifies kernels against the hardware's compute and memory ceilings.
Offline install
Machines that can't reach github.com at install time can use the
perfetto-ai-skill.zip asset attached to each
GitHub release: download it
where you have connectivity, copy it across, and unzip it into your agent's
skills directory (for example .claude/skills/). It contains a single
perfetto/ skill folder with SKILL.md inside — no installer needed.
The bundled bin/trace_processor wrapper downloads the native
trace_processor binary on first use and caches it in
~/.local/share/perfetto/prebuilts/ under the name
trace_processor_shell-<first 16 hex chars of its sha256>. On a fully
offline machine, seed that cache yourself: download your platform's prebuilt
zip from the same release page (for example linux-amd64.zip, containing
trace_processor_shell), then run:
mkdir -p ~/.local/share/perfetto/prebuilts
SHA=$(sha256sum trace_processor_shell | cut -c1-16)
cp trace_processor_shell ~/.local/share/perfetto/prebuilts/trace_processor_shell-$SHAThe wrapper trusts any file already present under that name, so the binary
must come from the same release. On Windows the cache directory is
%USERPROFILE%\.local\share\perfetto\prebuilts and the file is
trace_processor_shell-<sha256 prefix>.exe.
Updating
Updating uses the same mechanism as installing:
| Installed via | Update by |
|---|---|
| Claude Code marketplace | Claude Code's normal plugin update flow (/plugin → manage/update, which pulls the latest ai-agents branch). |
| Codex marketplace | Codex's plugin update mechanism. |
OpenCode skills.urls |
Nothing to do — the URL always serves the latest published skill. |
| Fallback installer | Re-run the same curl ... agents-install command. It detects the existing install and asks before replacing it (pass --yes to skip the prompt). |
New skill versions are published with each Perfetto release. The fallback
installer installs the latest release by default; pass --version vX.Y to
pin a specific one.
Design
The design is described in RFC-0025 and RFC-0026.
Contributing
To author or modify a skill, see
ai/skills/CONTRIBUTING.md.