
Native App Performance
If you're tired of waiting for Instruments to open just to find performance bottlenecks, this gets you Time Profiler data entirely from the command line. You attach to or launch your app with xctrace, extract the samples to XML, then symbolicate and rank the hotspots using atos and the runtime load address from vmmap. It includes Python scripts that do the extraction and ranking for you. The workflow is solid if you're already living in the terminal and just want stack traces with line numbers pointing to your top 30 CPU hogs. One catch: you need to match your binary exactly and grab the ASLR offset while the app is running, but the docs walk you through it.
- skills.sh installs
- 248
- GitHub stars
- 7.5K
- last updated
- Aug 21, 2026
Install
$ npx -y skills add steipete/agent-scripts --skill native-app-performance --agent claude-codeInstalls into .claude/skills of the current project.
Files
Native App Performance (CLI-only)
Goal: record Time Profiler via xctrace, extract samples, symbolicate, and propose hotspots without opening Instruments.
Quick start (CLI)
- Record Time Profiler (attach):
# Start app yourself, then attach
xcrun xctrace record --template 'Time Profiler' --time-limit 90s --output /tmp/App.trace --attach <pid>
- Record Time Profiler (launch):
xcrun xctrace record --template 'Time Profiler' --time-limit 90s --output /tmp/App.trace --launch -- /path/App.app/Contents/MacOS/App
- Extract time samples:
scripts/extract_time_samples.py --trace /tmp/App.trace --output /tmp/time-sample.xml
- Get load address for symbolication:
# While app is running
vmmap <pid> | rg -m1 "__TEXT" -n
- Symbolicate + rank hotspots:
scripts/top_hotspots.py --samples /tmp/time-sample.xml \
--binary /path/App.app/Contents/MacOS/App \
--load-address 0x100000000 --top 30
Workflow notes
Sponsors
Details
- Repository
- github.com/steipete/agent-scripts
- Categories
- AI & Agent Building, Debugging
- First seen
- Jun 3, 2026