native-app-performance — скилл для Claude Code
Скилл для профилирования нативных приложений macOS и iOS через xctrace и Time Profiler. Разбор трейсов Instruments идёт из командной строки, без открытия Instruments.
npx skills add harperreed/dotfiles --skill native-app-performance -a claude-codeЧто делает native-app-performance
Скилл ведёт агента по всей цепочке: записать Time Profiler, выгрузить сэмплы, символизировать и отсортировать горячие кадры. Запись идёт либо с привязкой к уже запущенному процессу через --attach <pid>, либо с запуском бинарника через --launch. Дальше scripts/extract_time_samples.py достаёт из трейса XML с временными сэмплами, а scripts/top_hotspots.py символизирует их и выдаёт список самых нагруженных кадров приложения.
Внутри три скрипта: scripts/record_time_profiler.sh для записи, scripts/extract_time_samples.py для экспорта и scripts/top_hotspots.py для символизации и ранжирования. Работает только на macOS, потому что опирается на xcrun xctrace, vmmap и atos. Нужен запущенный процесс или путь к бинарнику, а также адрес загрузки __TEXT из vmmap.
ASLR сдвигает адреса при каждом запуске, поэтому адрес загрузки надо брать из vmmap в момент работы приложения, а не из прошлого сеанса. После пересборки обновите путь в --binary: символы должны соответствовать тому трейсу, который вы разбираете. Если стеки пустые, запись была слишком короткой или попала на простой — увеличьте --time-limit и воспроизведите медленный сценарий во время захвата.
Какие задачи решает
- найти горячие кадры в нативном приложении без запуска Instruments
- записать Time Profiler для уже запущенного процесса по PID
- разобрать готовый файл
.traceиз командной строки - символизировать сэмплы и сопоставить их с нужным бинарником
- проверить, что профилируется локальная сборка, а не копия из
/Applications
Примеры запросов агенту
- Запиши Time Profiler на 90 секунд для запущенного процесса и сохрани трейс в
/tmp/App.trace - Разбери
/tmp/App.trace, выгрузи сэмплы и покажи топ-30 горячих кадров - Символизируй сэмплы по бинарнику
/path/App.app/Contents/MacOS/Appс адресом загрузки изvmmap
Как установить native-app-performance
1Через Skills CLI (Vercel)
npx skills add harperreed/dotfiles --skill native-app-performance -a claude-code2Вручную: положить файлы
~/.claude/skills/native-app-performance/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/native-app-performance/
1Через Skills CLI (Vercel)
npx skills add harperreed/dotfiles --skill native-app-performance -a codex2Вручную: положить файлы
.agents/skills/native-app-performance/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add harperreed/dotfiles --skill native-app-performance -a cursor2Вручную: положить файлы
.cursor/skills/native-app-performance/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install harperreed/dotfiles native-app-performance2Вручную: положить файлы
.github/skills/native-app-performance/SKILL.md1Через Skills CLI (Vercel)
npx skills add harperreed/dotfiles --skill native-app-performance -a gemini-cli2Командой платформы
gemini skills install https://github.com/harperreed/dotfiles --path .claude/skills/native-app-performanceВручную: положить файлы
.devin/skills/native-app-performance/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add harperreed/dotfiles --skill native-app-performance -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о native-app-performance
Как установить native-app-performance в Claude Code?
Выполните npx skills add harperreed/dotfiles --skill native-app-performance -a claude-code. Скилл появится в ~/.claude/skills/native-app-performance/SKILL.md.
Что делает native-app-performance?
Записывает Time Profiler через xctrace, выгружает сэмплы, символизирует их и предлагает список горячих кадров. Всё это без открытия Instruments.
Почему сэмплы не символизируются?
Скорее всего, взят не тот адрес загрузки __TEXT. Из-за ASLR его нужно получать из vmmap, пока приложение работает, и обновлять путь в --binary после новой сборки.