Agent skill

Analyze Performance Traces

by tutti-os in tutti-os/tutti

Analyze Chrome, Chromium, Electron, React DevTools, or Perfetto-compatible JSON traces and audit user-reported profiling findings without loading large artifacts into context; prove…

Apache-2.0Auto-check passedMobile

Install Analyze Performance Traces

skills CLI
$ npx skills add tutti-os/tutti --skill analyze-performance-traces -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install tutti-os/tutti analyze-performance-traces --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/tutti-os/tutti.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.codex/skills/analyze-performance-traces .claude/skills/analyze-performance-traces && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
analyze-performance-traces
GitHub stars
3.8k
Token cost
~3.3k tokens
SKILL.md length
1,501 words
Files
3 (incl. scripts)
Skills in repo
8
Repo updated
First seen
Licence
Apache-2.0

At a glance

Analyze Chrome, Chromium, Electron, React DevTools, or Perfetto-compatible JSON traces and audit user-reported profiling findings without loading large artifacts into context; prove…

  • Works in 3 steps: Trace-backed: a trace is supplied or… → Reported-finding audit: the user… → Source-only: no trace-derived lead…
  • Reported profiling durations
  • SKILL.md covers Choose the evidence mode, Start safely, Build one evidence chain and Audit forced layout precisely, plus 5 more sections
  • Calls pnpm, node and make

What it does

Analyze Performance Traces is an agent skill from tutti-os/tutti. Analyze Chrome, Chromium, Electron, React DevTools, or Perfetto-compatible JSON traces and audit user-reported profiling findings without loading large artifacts into context; prove trigger-to-render/layout chains, separate measured facts from source inference, find exact code choke points, classify forced layout and render fanout, implement semantically safe fixes, and verify behavior plus repository budgets. Use for trace files, reported profiling durations or call chains, dropped frames, long tasks, resize or…

Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including scripts (for example `agents/openai.yaml`).

It sits in Mobile, covering Mobile performance. It works with React. The repository describes itself as: Where people and agents build in tune. The licence is Apache-2.0.

When your agent uses it

  • Reported profiling durations
  • Layout thrashing
  • Selector hot paths
  • Interaction latency

Example prompts

  • “/analyze-performance-traces”

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Trace-backed: a trace is supplied or discoverable. Durations, processes, threads, and event ordering may be reported from it.
  2. Reported-finding audit: the user supplies durations or a chain but not the artifact. Treat those details as leads. Confirm current source…
  3. Source-only: no trace-derived lead exists. Report hypotheses, not measured bottlenecks.

What it can do on your machine

Read from SKILL.md and the folder at commit 207beee. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/, which the agent can run.

    Shell commands in SKILL.md call:

    • pnpm
    • node
    • make

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pnpm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Analyze Performance Traces loads about 3.3k tokens when it runs. Until then it costs about 171 tokens; SKILL.md has 1,501 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~171
When it runs · the whole SKILL.md, loaded when a task matches
~3.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from tutti-os/tutti at commit 207beee, republished under its Apache-2.0 licence (© tutti-os). 1,501 words, ~3,326 tokens.

Download SKILL.mdSave it as .claude/skills/analyze-performance-traces/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
analyze-performance-traces
description
Analyze Chrome, Chromium, Electron, React DevTools, or Perfetto-compatible JSON traces and audit user-reported profiling findings without loading large artifacts into context; prove trigger-to-render/layout chains, separate measured facts from source inference, find exact code choke points, classify forced layout and render fanout, implement semantically safe fixes, and verify behavior plus repository budgets. Use for trace files, reported profiling durations or call chains, dropped frames, long tasks, resize or scroll jank, render storms, layout thrashing, selector hot paths, interaction latency, or requests to locate exact source-level bottlenecks.

Analyze Performance Traces

End with an evidence chain from trigger to exact source. Fix the earliest proven cause. Never turn an API name or an inclusive duration into a causal claim without checking execution context.

Choose the evidence mode

State which mode applies before making findings:

  1. Trace-backed: a trace is supplied or discoverable. Durations, processes, threads, and event ordering may be reported from it.
  2. Reported-finding audit: the user supplies durations or a chain but not the artifact. Treat those details as leads. Confirm current source paths and trigger conditions; label the durations, thread, and invalidation scope unverified.
  3. Source-only: no trace-derived lead exists. Report hypotheses, not measured bottlenecks.

Do not block a reported-finding audit merely because the original trace file is absent. If the user asks for safe implementation after the source chain is proven, proceed within authorization; require a comparable post-change trace before claiming millisecond or frame-rate improvement.

If neither a trace nor a concrete lead exists, ask for the smallest reproducible capture unless the user explicitly wants source-only analysis.

Start safely

  1. Read repository instructions, nearest area instructions, relevant architecture docs, current diff, and validation policy. Record Git baseline before editing.

  2. Discover trace artifacts without printing them wholesale. For each candidate:

    sh
    ls -lh TRACE.json
    head -c 512 TRACE.json
    tail -c 512 TRACE.json
  3. Run the bundled bounded-memory summarizer:

    sh
    node <skill-dir>/scripts/summarize-trace TRACE.json --top 40 --min-ms 16
  4. Record trace revision/build, production versus development mode, profiling hooks, source maps, screenshots, React tracks, renderer count, and capture window. Separate profiler startup and instrumentation overhead from product work.

  5. Prefer a repository-owned performance runner when it reproduces the same interaction. List scenarios first; a convenient but different scenario is not proof. In this repository, inspect docs/conventions/testing.md and use pnpm perf:agent-gui -- --list-scenarios when relevant.

Tutti manual capture

When a new Desktop trace is required:

sh
TUTTI_ELECTRON_REMOTE_DEBUGGING_PORT=9223 \
TUTTI_ELECTRON_JS_FLAGS=--max-old-space-size=8192 \
VITE_TUTTI_WHY_DID_YOU_RENDER=0 \
make dev-gui

Then capture from another terminal:

sh
pnpm trace:desktop -- --duration 15

Build one evidence chain

Work in this order:

  1. Select process/thread: identify browser main, renderer main, compositor, workers, and GPU threads. Never sum unrelated threads.

  2. Select the window: locate the interaction or burst containing the symptom. Quantify long tasks, layout/style, scripting, paint, frame signals, and repeated events only inside that window.

  3. Correlate timestamps: connect input, timer, stream, resize, or observer delivery to state updates, React commits, DOM mutation, style/layout, paint, and missed frames.

  4. Measure fanout: count repeated components, selectors, entities, DOM nodes, or geometry reads. Express multiplicative patterns such as 34 sections × 67 updates = 2,278 renders.

  5. Map to source: use stack URLs, source maps, named React tracks, event handlers, class names, and unique strings. Follow symbols with rg. Verify current source still matches the traced revision.

  6. Inspect cardinality: use read-only DB/query inspection when scale explains the cost. Remove local paths, secrets, and personal data from durable output.

  7. State the chain:

    text
    trigger → state/DOM write → churn or invalidation → render/layout fanout → paint/frame impact

Keep measured facts, source-confirmed facts, and inference visibly separate. Do not rank nested events only by inclusive time; use self time when available or label duration inclusive.

Audit forced layout precisely

For every suspected geometry hotspot, record:

FieldQuestion
TriggerWhat invokes it, and how often?
InvalidationWhich DOM/style write may have dirtied layout first?
Read/operationscrollHeight, client*, offset*, rect/style read, scrollIntoView, virtualizer measurement?
Phaserender, ref commit, layout effect, effect, observer, event, or animation frame?
ScopeWhich scroll/layout subtree must become current?
SemanticsWhy is the read needed: selection, bottom lock, prepend anchor, tooltip, placement?
EvidenceTrace-backed, source-confirmed path, or inference?

Apply these rules:

  • A geometry API can force layout only when relevant layout is dirty. Its presence alone is not proof.
  • A layout effect after a DOM-heavy commit is high risk because the read occurs before paint while invalidation is pending.
  • ResizeObserver runs after layout calculation; a read-first callback usually consumes current geometry. Writes earlier in the same observer delivery can dirty layout again, so keep observer callbacks read-first, then write.
  • requestAnimationFrame, scroll events, and ordinary effects are not automatically layout-clean.
  • scrollIntoView performs synchronous visibility/scroll calculation. An explicit low-frequency reveal may still be correct and cheaper than changing interaction timing.
  • Replacing scrollIntoView with offsetTop, rect reads, or computed style does not inherently remove forced layout.
  • Distinguish natural layout work from synchronously forced scheduling. Observer-driven code may coalesce layout without eliminating the layout itself.
  • Do not claim “whole page/tree layout” without trace scope, layout-object evidence, or containment analysis.

Recognize root-cause families

  • Reducer recreates every entity when derived values are unchanged.
  • Memoized child receives fresh callbacks, arrays, objects, or context projections.
  • Selector scans/sorts all entities once per consumer, producing O(S × (T + I)) work.
  • Streaming or resize commits trigger unconditional scroll-container geometry reads.
  • A measurement effect reads, writes state/style, then causes another render/layout pass.
  • The same resize is covered by both ResizeObserver and a global resize listener.
  • Virtualizer DOM writes are followed by parent scroll geometry reads in the same commit.
  • Development profiling, extensions, or source-map instrumentation dominate the apparent frame.

Fix the earliest owner. Do not hide producer churn with broad leaf memoization or replace a proven geometry problem with timing heuristics.

Choose a fix without semantic drift

Data and render churn
  • Reuse references when every rendered/derived value is exactly equal.
  • Stabilize event-time callbacks without freezing stale reads.
  • Replace repeated scans with one-pass grouping while preserving filters, orphan rules, stable ordering, and tie-breakers.
  • Keep exact comparators in named helpers.
  • Avoid persistent indexes unless evidence proves ephemeral grouping insufficient.
Show full SKILL.md (636 more words)Show less
DOM geometry and scrolling
  • Separate semantic pre-paint commands from high-frequency content growth. Conversation switches, explicit submit-to-bottom, focus, and prepend restoration may require layout-phase correction; ordinary streaming growth should not automatically share that path.
  • Before reading geometry, gate on the semantic branches that genuinely need it. A hot update that requires no scroll side effect should return before any geometry read.
  • For continuing content/viewport growth, prefer observing the actual content box and viewport. Consume geometry after layout while preserving bottom lock, user scroll-away, prepend anchors, and explicit reveal identity.
  • Expose a narrow content ref through the owning primitive when needed; avoid brittle queries into private DOM structure.
  • Remove a global resize listener only when element/parent observation covers the same geometry changes.
  • Preserve initial observer delivery and text/content-change remeasurement; observing a fixed outer box alone may miss intrinsic overflow changes unless observation is re-established or the measured node resizes.
  • Avoid CSS containment, content-visibility, or size containment around virtualized/dynamic-height content unless measurement, sticky, focus, overlay, and clipping behavior are proven equivalent.
  • Reuse an existing lifecycle effect/observer owner when repository budgets constrain effect count. Do not raise an architecture baseline to land an optimization.
Visibility classification

Treat a change as strictly behavior-preserving only when rendered values, ordering, scroll/focus timing, lock ownership, mounted state, and side effects remain equivalent.

Usually safe after exact tests:

  • return before an unused geometry read;
  • consume observer-delivered geometry while preserving the same lock and anchor transitions;
  • remove a redundant event source with equivalent observation coverage;
  • reuse references or replace equivalent scans.

Potentially user-observable; exclude or request direction unless explicitly authorized:

  • debounce, throttle, or move behavior to a later animation frame/effect;
  • IntersectionObserver visibility gating;
  • delayed reveal or autofocus;
  • always showing a tooltip instead of measuring overflow;
  • virtualization/unmounting, stale caching, event dropping, or reduced animation rate.

Implement with direct performance tests

  1. Preserve architecture and local ownership. Do not add compatibility, fallback, or timing layers without evidence.
  2. Add tests that expose both semantics and the expensive operation:
    • spy on geometry getters; after stable mount, a hot streaming rerender should perform zero synchronous reads when no semantic scroll command exists;
    • mock ResizeObserver, deliver it explicitly, and verify bottom lock plus user scroll-away;
    • verify prepend, selection, focus, reveal revision, tooltip overflow, and native/custom primitive variants affected by the change;
    • add structural-sharing identity tests for render-churn fixes.
  3. Scan sibling callsites by mechanism, not API string alone. Classify each as confirmed same trigger, structurally similar but different frequency/semantics, or unverified.
  4. Run formatter and focused tests while iterating. Inspect the repository's changed-aware dry-run before the final gate.
  5. Run architecture budgets/boundaries. If a metric increases, redesign or merge ownership; never raise the baseline merely to pass.
  6. Run the repository-selected final validation once the diff settles. Perform the documentation-impact and durable-lesson check.

Validate and report

Validate at three levels:

  • Semantic: identical values, ordering, filtering, focus, scroll lock, reveal, prepend, and event behavior.
  • Structural: stable references, bounded render fanout, and no new duplicate effect/observer owner.
  • Performance: prevented hot-path reads/renders proven by tests; comparable trace when practical.

Report:

  1. evidence mode and process/thread/window facts;
  2. exact source chain and trigger frequency;
  3. measured facts versus source inference;
  4. fixes grouped by behavior-preserving versus timing-sensitive;
  5. implementation-plan changes caused by gates or counter-evidence;
  6. tests, typechecks, boundaries, and changed-aware result;
  7. same-mechanism sweep: included, excluded, and why;
  8. documentation impact and line-count distribution when code changed;
  9. anything unverified, especially missing post-change trace.

Never claim millisecond, frame-rate, or layout-scope improvement without a comparable post-change capture. It is valid to claim a proven reduction such as “ordinary streaming rerender performs zero synchronous scrollHeight reads.”

Bundled script

scripts/summarize-trace streams traceEvents, keeps bounded top-event state, and outputs JSON with thread metadata, event totals, long tasks, frame signals, and source hints. Use it first for large traces; write narrow follow-up scripts only after a specific hypothesis exists.

© tutti-os, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (scripts) in .codex/skills/analyze-performance-traces of tutti-os/tutti.

  • SKILL.md
  • agents/openai.yaml
  • scripts/summarize-trace

Open the folder on GitHubat commit 207beee

Compare with similar skills

Analyze Performance Traces next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Analyze Performance Traces compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Analyze Performance Traces this skilltutti-os/tutti3.8k—~3.3kAutomated safety check: PassApache-2.0
PerformanceSidiora-Labs/centra-llm-agents116—~778Automated safety check: PassCustom licence
Argent React Native Optimizationbbplayer-app/BBPlayer1.2k—~1.3kAutomated safety check: PassMIT
React Native Experttech-leads-club/agent-skills7k—~3.2kAutomated safety check: PassCC-BY-4.0
React Devtoolssanity-io/sanity6.4k3 repos~2.1kAutomated safety check: PassMIT
Community Migrationjingjing2222/react-native-nitro-geolocation115—~3.5kAutomated safety check: PassMIT

Similar skills

  • Performance

    Sidiora-Labs/centra-llm-agents

    Performance optimization guidelines for React/React Native applications.

    116 GitHub stars~778 tokensUpdated 21 days ago
    MobileAuto-check passed
  • Optimizes a React Native app by profiling first to find real bottlenecks, then sweeping for mechanical issues.

    1.2k GitHub stars~1.3k tokensUpdated yesterday
    MobileAuto-check passed
  • React Native Expert

    tech-leads-club/agent-skills

    Guides React Native and Expo work for cross-platform apps: Expo Router navigation, fast lists, Reanimated animation, platform-specific code and project structure.

    7k GitHub stars~3.2k tokensUpdated yesterday
    MobileAuto-check passed
  • React Devtools

    sanity-io/sanity

    Official

    React DevTools CLI for AI agents. An agent skill from sanity-io/sanity.

    6.4k GitHub starsUsed in 3 repos~2.1k tokens
    MobileAuto-check passed
  • Community Migration

    jingjing2222/react-native-nitro-geolocation

    Migrate React Native apps from @react-native-community/geolocation to react-native-nitro-geolocation.

    115 GitHub stars~3.5k tokensUpdated 26 days ago
    MobileAuto-check passed
  • React Composition Structure

    fluid-design-io/payload-better-auth-starter

    React and React Native file-system architecture patterns that scale.

    121 GitHub stars~899 tokensUpdated yesterday
    MobileAuto-check passed

More from tutti-os/tutti

All 8 skills in this repo
  • Tutti UI System

    tutti-os/tutti

    A skill your agent uses when working with @tutti-os/ui-system components, replacing local UI with shared components, querying component ids or metadata, promoting UI into shared base or business…

    3.8k GitHub stars~2.7k tokensUpdated yesterday
    Auto-check passed
  • From a Tutti checkout, run, audit, freshly replay, publish, or diagnose Session Replay cassettes that are driven by case-repository scenario scripts (CDP), not by interactive UI recording.

    3.8k GitHub stars~4k tokensUpdated yesterday
    Auto-check passed
  • Create, convert, or repair one Tutti workspace app as either a self-contained publishable package under package/ or a Chrome-style local debug app under .tutti/dev-app/.

    3.8k GitHub stars~5.9k tokensUpdated yesterday
    Auto-check passed
  • Build or evolve a complex agent-enabled Tutti workspace app repository.

    3.8k GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Review tutti git diffs for project structure, layering, module ownership, and duplicate event-center infrastructure by planning focused architecture review tasks, then having the main agent…

    3.8k GitHub stars~2.3k tokensUpdated yesterday
    Auto-check passed
  • Tutti App Release

    tutti-os/tutti

    Set up, review, run, or debug external repositories that publish a Tutti workspace app through the reusable Tutti App Release GitHub Actions workflow.

    3.8k GitHub stars~4.1k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Analyze Performance Traces

What does Analyze Performance Traces do?

Analyze Chrome, Chromium, Electron, React DevTools, or Perfetto-compatible JSON traces and audit user-reported profiling findings without loading large artifacts into context; prove…. Analyze Performance Traces is an agent skill from tutti-os/tutti. Analyze Chrome, Chromium, Electron, React DevTools, or Perfetto-compatible JSON traces and audit user-reported profiling findings without loading large artifacts into context; prove trigger-to-render/layout chains, separate measured facts from source inference, find exact code choke points, classify forced layout and render fanout, implement semantically safe fixes, and verify behavior plus repository budgets.

When should I use Analyze Performance Traces?

Analyze Performance Traces fits situations like: reported profiling durations; layout thrashing; selector hot paths; interaction latency.

How do I install Analyze Performance Traces in Claude Code?

Run `npx skills add tutti-os/tutti --skill analyze-performance-traces -a claude-code`. Or copy the skill folder (.codex/skills/analyze-performance-traces in tutti-os/tutti) into .claude/skills/analyze-performance-traces in your project. Claude Code loads it when a task matches its description.

How do I install Analyze Performance Traces in Codex?

Run `npx skills add tutti-os/tutti --skill analyze-performance-traces -a codex`. Or copy the skill folder (.codex/skills/analyze-performance-traces in tutti-os/tutti) into .agents/skills/analyze-performance-traces in your project. Codex loads it when a task matches its description.

Can I use Analyze Performance Traces in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add tutti-os/tutti --skill analyze-performance-traces -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/analyze-performance-traces, .gemini/skills/analyze-performance-traces, .github/skills/analyze-performance-traces and .opencode/skills/analyze-performance-traces in your project.

What does Analyze Performance Traces need to run?

Going by SKILL.md and its folder, Analyze Performance Traces needs the command-line tools its instructions call (pnpm, node and make).

Does Analyze Performance Traces access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Analyze Performance Traces safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Analyze Performance Traces use?

Analyze Performance Traces is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Analyze Performance Traces use?

About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Analyze Performance Traces?

Skills that share tags, products or a category with Analyze Performance Traces: Performance (Sidiora-Labs/centra-llm-agents, 116 stars), Argent React Native Optimization (bbplayer-app/BBPlayer, 1.2k stars), React Native Expert (tech-leads-club/agent-skills, 7k stars) and React Devtools (sanity-io/sanity, 6.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Analyze Performance Traces?

tutti-os (a GitHub organization) maintains it in tutti-os/tutti, which has 3,805 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 8, 2026.

Source: tutti-os/tutti on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.