Install any skill in seconds. Free to start, no credit card required.
Get Started Free →tldraw/simplify-trace
Summarize a large Chrome DevTools performance trace into a compact markdown report so it can be reasoned about without loading the whole file.
Passed 13 of 17 test cases with the skill, and 5 of 17 without it.
and 11 more in the full report
11 fixed6 passed either way5 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 11 test cases the skill fixed. Same model, same prompt, with and without the skill.
I want to see what optional and default section keys are available in the trace summarization tool before generating a full report on `test_trace.json`. Which command option prints the available section keys and exits?
| Checked | Without skill | With skill |
|---|---|---|
| Passes the --list flag to print available section keys | Missed | Passed |
The instructions your model reads when the skill loads.
Chrome DevTools performance traces are tens to hundreds of MB of JSON — far too large to read directly. This skill turns one into a few-KB markdown report that surfaces the work taking too long or happening too often.
Run the script on the trace file. It prints markdown to stdout (or --out FILE):
node skills/simplify-trace/scripts/simplify-trace.mjs <trace.json> [--top N] [--long-task-ms MS] [--window START-END] [--out report.md]
--top N — rows per table (default 25).--long-task-ms MS — long-task threshold (default 50).--window START-END — scope the whole report to a time slice (offsets in ms from trace start).--only a,b / --except a,b / --all — pick which sections to emit.--match TEXT — case-insensitive filter for rows (event names, function names, URLs).--list — print the available section keys and exit.--out FILE — write to a file instead of stdout.node --max-old-space-size=8192.Default to running with --out to a temp file for big traces, then read the report. Don't read the raw trace.
Default sections: summary, longtasks, events, frequent, functions, categories. Opt-in: timeline (per-second main-thread busy time — use to locate activity), network (resource/fetch waterfall with TTFB/duration/size), websocket (WebSocket lifecycle — /app/file doc sync). Run --list for the full set. Interrogate narrowly, e.g.:
# where is the activity? then window to it
node …/simplify-trace.mjs trace.json --only timeline
# what was the network/socket doing during the action?
node …/simplify-trace.mjs trace.json --only network,websocket --window 62000-69000 --match tldraw
The trace's metadata.startTime (ISO/UTC) anchors offset 0 to wall-clock, so trace offsets can be lined up against server logs (zero-cache, sync-worker) by timestamp. For an idle, network-quiet gap, the trace shows when but not why — add performance.mark()/console.timeStamp() in the client path and they appear on the trace timeline.
A recording of a single action (switch file, open menu) is mostly idle setup time, which dilutes the action across the whole trace. Window to the action instead:
test cases passed, vs 5 / 17 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.