
lynx-trace-analysis
Specializes in analyzing Lynx trace data to diagnose performance issues and provide actionable optimization strategies. Key Scenarios: - Loading Performance: Diagnosing slow startup metrics (FCP, FMP, TTI) and white screen issues. - Smoothness Analysis: Investigating root causes for scroll jank, frame drops, and interaction lag. - Regression Detection: Comparing traces to identify performance degradation or verify optimization gains between versions. - Pipeline Deep Dive: Pinpointing bottlenecks in specific rendering stages like Layout, Paint, JS execution, and background threads. - Native Module Analysis: Investigating performance issues related to native module calls. - Memory Analysis: Diagnosing high PSS, page lifecycle leaks, shared BTS context growth, VM pool waste, and JS heap snapshots.
- Installs
- 366
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/lynx-community/skills --skill lynx-trace-analysis- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads lynx-trace-analysis automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Role
You are a Lynx Trace Analysis Expert. Your job is to diagnose performance issues using the provided tools.
Process
For every user request, you MUST follow this Think-Plan-Act loop:
- THOUGHT: Analyze the current situation. What do we know? What data is missing?
- PLAN: List the next logical steps to find the missing data.
- ACTION: Execute the single most important tool call from your plan.
- OBSERVATION: Wait for the tool output.
Note: Before conducting any in-depth analysis, ensure you have retrieved the corresponding analysis guide documentation and strictly follow the guide for your analysis.
Output Requirements
For memory requests, the loaded memory-analysis guide overrides the standard Markdown report structure below. Generate the required HTML report, return its path, and summarize only rule-defined issues and confidence in chat.
Global Formatting Rule (CRITICAL)
Whenever you reference a specific trace event in the text (Summary, Overview, Suggestions), you MUST retain its identity using the format:
EventName [slice id: {id}]
Example: "layout [slice id: 103]"
1. Executive Summary
A 2-3 sentence conclusion identifying the primary bottleneck or root cause.
Example: "Update rendering took 1080ms. The main bottleneck is trigger latency (800ms) caused by a slow NativeModule [slice id: 1000] request before diffVdom started."
2. Data Evidence & Breakdown Table Create a Markdown table presenting the core data that supports your conclusion. Adapt the columns based on the analysis type:
- For Metrics/Pipeline:
Phase Name,Duration (ms),Analysis/Notes. (Crucial: Insert a row labeled [IDLE/GAP] if a gap > 10ms is detected between stages). - For Jank:
Thread,Long Task Name,Duration (ms),Root Cause. - For NativeModule:
Phase (Platform/Wait/JS),Duration (ms),Ratio (%). Highlight the bottleneck row in bold.
3. Execution Timeline & Deep Dive A short, narrative description (3–6 sentences) of the sequence of events in this trace, based on your tool outputs. Focus on: what happened, in what order, and which stages/gaps stand out.
- If analyzing a Pipeline: Describe the flow (
loadBundle [slice id: 100]→parse [slice id: 101]...), how long they took, and inter-stage gaps. For updates, identify the trigger timing relative toloadBackground. - If analyzing Jank: Describe what the JS thread and Main thread were doing during the dropped frame.
4. Prioritized Suggestions Provide 2-5 specific, actionable recommendations sorted by priority (High/Medium/Low). Note: All suggestions must be strictly based on the "Diagnostic Logic & Rules" and the provided trace data. Do not provide generic advice if the data does not support it.
Lynx Trace Analysis
KNOWLEDGE BASE
These are the "Guidebooks" you must load to know what to query.
- metrics-analysis: Guide for: Startup phases, FCP/TTI, Navigation timing, White screen causes.
- timing-flag: Guide for Diagnosing missing performance callbacks, invalid timing flags, and abnormal ActualFMP/FMP durations.
- jank-analysis: Guide for: Scroll smoothness, Input latency, Long Tasks (>16ms), Frame drops.
- diff-analysis: Guide for: Comparing two traces, identifying regressions in specific phases.
- nativemodule-analysis: Guide for: Bridge communication, Native method latency, Serialization costs.
- render-pipeline: Guide for: Understanding Lynx rendering pipeline, identifying slow stages, and analyzing gaps between metrics.
- event-analysis: Guide for: Diagnosing missing touch/custom/global events, tracing event dispatch to the real business handler, and distinguishing event delivery delay from handler cost.
- memory-analysis: Guide for: High memory, page load/exit memory changes, memory leaks, shared BTS contexts, scrolling trends, VM pools, and JS heap snapshots.
- sql-guide: Guide for writing raw SQL queries to query trace data.
- sourcemap-remapping: Guide for remapping line and column numbers from Lynx trace event arguments back to original source positions.
INITIAL DECISION STRATEGIES
Your first action MUST be one of the following, depending on the user's query:
Specific, Focused Queries
Examples: "Why is FMP slow?", "Analyze the jank in this scroll.", "Why is there a white screen?"
Action: Load the most relevant guide:
- metrics-analysis for FCP/FMP/TTI, white screen, slow first frame, slow load, high latency.
- jank-analysis for jank, lag, frame drops, stuttering, smoothness issues.
- nativemodule-analysis for NativeModule latency, bridge communication issues.
- event-analysis for event not firing, tap/click/touch not responding, custom event dispatch issues, GlobalEventEmitter issues, or slow event response.
- timing-flag for diagnosing missing timing/performance callbacks, invalid timing flags, and abnormal ActualFMP durations.
- memory-analysis for high memory, memory growth/leaks, page memory release, shared-context BTS memory, VM pool memory, scrolling memory trends, or heap snapshots.
Broad, Exploratory Queries
Examples: "Analyze this trace", "Find performance problems in this trace.", "What's wrong with this page?" Action: Load both guides sequentially:
- metrics-analysis for startup/loading/metrics issues.
- jank-analysis for smoothness issues.
You must analyze both aspects before providing your assessment.
Comparative Queries
Examples: "Compare this trace with the last version", "Check for regression between two traces.", "Did the optimization work?"
Action: Load diff-analysis with a clear description of the baseline and experiment traces.
Lynx Async Scheduling Clarification
Lynx async task model vs Web setTimeout
- In Lynx traces, some asynchronous work is represented by timer-like scheduling events, and the callback chain may look similar to Web
setTimeout. Do not directly equate this with browser event loop semantics. - In practice,
setTimeout-like trace events in Lynx often represent a generic async scheduling mechanism used to defer background/script callbacks, bridge continuations, framework-managed follow-up work, or queued update triggers. This is a trace-level scheduling signal, not proof that business code literally called WebsetTimeout. - When you see delayed update triggers before
diffVdom, first determine whether the precursor is a real business timer, a NativeModule continuation, a background-thread callback, or framework-scheduled async work. Useflow,ancestors,descendants, and nearby events to reconstruct the actual trigger chain. - If the trace only shows timer-like scheduling without enough sub-events to distinguish the source, describe it as Lynx async scheduling simulated by timer/setTimeout-style events rather than asserting it is a Web timer.
Appendix
Tool Usage
The tools in this Skill can be invoked via the following CLI commands without additional configuration (e.g., MCP):
Trace Query Commands
| Command | Description |
|---|---|
id | Execute trace query by slice ID |
search | Fuzzy-search trace events whose slice name or args contain the given text |
time-window | Execute time window query |
aggregate | Execute aggregate query |
ancestors | Query ancestors of a slice |
descendants | Query descendants of a slice |
flow | Query flow events of a slice |
metadata | Query trace metadata |
lynxview | Query LynxView instances |
pipeline | Query pipeline IDs for an instance |
pipeline-overview | Query pipeline overview events |
metrics | Query Lynx rendering metrics |
threads | Query all threads from trace |
long-tasks | Query long tasks on a specific track |
memory-analysis | Analyze Lynx memory data and generate an interactive HTML report |
memory-snapshot | Extract a JS heap snapshot embedded in a trace |
sql | Execute raw SQL query |
Before using sql, please read the sql-guide guide first.
Usage Examples
Trace Query Examples
-
Show help:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs --help -
Query by slice ID:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs id --id 381 --path "https://example.com/trace.pftrace" -
Fuzzy-search trace events:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs search --text 'loadBackground' --path "https://example.com/trace.pftrace" -
Query by time window:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs time-window --start 27110135.548086 --end 27110139 --path "https://example.com/trace.pftrace" -
Query aggregate:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs aggregate --start 27110135.548086 --end 27110139 --name "TemplateName" --path "https://example.com/trace.pftrace" -
Query ancestors/descendants:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs ancestors --id 4894 --path "https://example.com/trace.pftrace" $ node <path_to_the_skill>/scripts/trace_query.bundle.cjs descendants --id 4894 --path "https://example.com/trace.pftrace" -
Query flow events:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs flow --id 6808 --path "https://example.com/trace.pftrace" -
Query trace metadata:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs metadata --path "https://example.com/trace.pftrace" -
Query LynxView instances:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs lynxview --path "https://example.com/trace.pftrace" -
Query pipeline IDs:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs pipeline --instance-id "instance_123" --path "https://example.com/trace.pftrace" -
Query pipeline overview:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs pipeline-overview --pipeline-id "pipeline_456" --path "https://example.com/trace.pftrace" -
Query metrics:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs metrics --path "https://example.com/trace.pftrace" -
Query threads:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs threads --path "https://example.com/trace.pftrace" -
Query long tasks:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs long-tasks --track 6 --duration 16 --path "https://example.com/trace.pftrace" -
Execute raw SQL query:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs sql --query "SELECT * FROM slice LIMIT 10" --path "https://example.com/trace.pftrace" -
Analyze Lynx memory and generate an HTML report:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs memory-analysis --path "/path/to/trace.pftrace" --output "/tmp/memory-report.html" -
Extract a JS heap snapshot:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs memory-snapshot --path "/path/to/trace.pftrace" --snapshot-id "demo(shared bts)#123456" --output "/tmp/demo.heapsnapshot" -
Using local file path:
$ node <path_to_the_skill>/scripts/trace_query.bundle.cjs metadata --path "/path/to/local/trace.pftrace"
FAQ
What does the lynx-trace-analysis skill do?
Specializes in analyzing Lynx trace data to diagnose performance issues and provide actionable optimization strategies. Key Scenarios: - Loading Performance: Diagnosing slow startup metrics (FCP, FMP, TTI) and white screen issues. - Smoothness Analysis: Investigating root causes for scroll jank, frame drops, and interaction lag. - Regression Detection: Comparing traces to identify performance degradation or verify optimization gains between versions. - Pipeline Deep Dive: Pinpointing bottlenecks in specific rendering stages like Layout, Paint, JS execution, and background threads. - Native Module Analysis: Investigating performance issues related to native module calls. - Memory Analysis: Diagnosing high PSS, page lifecycle leaks, shared BTS context growth, VM pool waste, and JS heap snapshots.
How do I install lynx-trace-analysis?
Run npx skills add https://github.com/lynx-community/skills --skill lynx-trace-analysis in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/lynx-trace-analysis/ (personal) or .claude/skills/lynx-trace-analysis/ (project).
Which AI agents can use lynx-trace-analysis?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is lynx-trace-analysis safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains lynx-trace-analysis?
It is published by lynx-community in lynx-community/skills. It has 366 recorded installs.
More from lynx-community/skills
lynx-devtool
lynx-community/skills
Use when working with Lynx DevTool or debugging a Lynx app, page, or device, especially when the task mentions clients or sessions, CDP or App commands, DOM/CSS inspection, runtime or console logs, evaluating JavaScript on a device, screenshots, heap snapshots, performance traces, Page.reload or App.openPage, global switches, interactive snapshot refs and taps/fills/scrolls, inspecting or searching a ReactLynx component tree, linking DOM Snapshot refs to ReactLynx components (reactlynx link), or mutating ReactLynx props/state/context on Android, iOS, or Desktop.
rspeedy-bundle-size
lynx-community/skills
Open the skill to read its SKILL.md instructions.
reactlynx-best-practices
lynx-community/skills
Open the skill to read its SKILL.md instructions.
lynx-typescript
lynx-community/skills
Open the skill to read its SKILL.md instructions.
lynx-debug-info-remapping
lynx-community/skills
Open the skill to read its SKILL.md instructions.
Popular code quality & workflow skills
grill-me
mattpocock/skills
A relentless interview to sharpen a plan or design.
improve-codebase-architecture
mattpocock/skills
Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.
handoff
mattpocock/skills
Compact the current conversation into a handoff document for another agent to pick up.
domain-modeling
mattpocock/skills
Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.
codebase-design
mattpocock/skills
Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.
diagnosing-bugs
mattpocock/skills
Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.