native-app-profiling

A command-line workflow for measuring CPU use in native macOS and iOS apps. It records Time Profiler data with Apple’s xctrace tool and helps identify which code paths take the most time.

In plain words
What is it for?
Use it to record a running or newly launched app, export timing samples, translate stack frames into readable function names, and locate CPU hotspots.
Why use it?
It helps find performance bottlenecks without opening Instruments, Apple’s graphical profiling app. This makes slow code paths easier to inspect from a terminal or automated workflow.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/termio-sh/termio/native-app-profiling
Any agent
npx skills add termio-sh/termio --skill native-app-profiling
Clone the repo
git clone --depth 1 https://github.com/termio-sh/termio

Made for: Claude Code, Codex.

Per session 45 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,229 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00045 $0.01229
Opus 5 $0.00023 $0.00615
Sonnet 5 $0.00009 $0.00246
Haiku 4.5 $0.00005 $0.00123

Measured 3d ago against content hash 35e52c4f40a7, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

native-app-profiling scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/native-app-profiling/SKILL.md · 184 lines

How it starts

The opening of the file, as written. The whole thing — 184 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Native App Performance Profiling (CLI)

Overview

Record Time Profiler via xctrace, extract samples, symbolicate, and identify hotspots without opening Instruments.

Quick Start

1) Record Time Profiler

Attach to running process:

# Get the PID first
pgrep -x "AppName"

# Record for 90 seconds
xcrun xctrace record \
    --template 'Time Profiler' \
    --time-limit 90s \
    --output /tmp/App.trace \
    --attach <pid>

Launch and record:

xcrun xctrace record \
    --template 'Time Profiler' \
    --time-limit 90s \
    --output /tmp/App.trace \
    --launch -- /path/to/App.app/Contents/MacOS/App

2) Export Time Samples

List available schemas in the trace:

xcrun xctrace export --input /tmp/App.trace --toc

Export time profile data:

xcrun xctrace export \
    --input /tmp/App.trace \
    --xpath '/trace-toc/run/data/table[@schema="time-profile"]' \
    --output /tmp/time-profile.xml

3) Get Load Address for Symbolication

While the app is running, get the __TEXT segment load address:

vmmap <pid> | grep "__TEXT"

Look for the load address (typically starts with 0x1...).

4) Symbolicate Stack Frames

Use atos to symbolicate addresses:

atos -o /path/to/App.app/Contents/MacOS/App -l 0x100000000 <address>

Workflow Notes

  • Correct binary: Confirm you're profiling the right build (local vs /Applications)
  • Trigger the slow path: During capture, perform the action that's slow
  • Capture duration: If stacks are empty, capture longer or avoid idle time
  • Symbol matching: Binary symbols must match the trace (same build)

Available Templates

List all profiling templates:

xcrun xctrace list templates

Common templates:

  • Time Profiler - CPU sampling
  • Allocations - Memory allocations
  • Leaks - Memory leak detection
  • System Trace - System-level activity
  • Animation Hitches - UI performance

Common Commands

Task Command
List templates xcrun xctrace list templates
List devices xcrun xctrace list devices
Record help xcrun xctrace help record
Export help xcrun xctrace help export
Get PID pgrep -x "AppName"
Get load address vmmap <pid> | grep __TEXT
Symbolicate atos -o <binary> -l <load-addr> <address>

Read the full file on GitHub · 184 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 3d ago First seen · 184 lines · 45 tokens per session scan A 35e52c4f40a7

Subscribe to this mod's changes

native-app-profiling is a skill published in the GitHub repository termio-sh/termio (359 stars, last pushed 3d ago), licensed MIT. It adds 45 tokens to every session and 1,229 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

batch

Execute batch operations on multiple files in parallel. Automatically discovers files, splits into chunks, and processes with parallel worker agents. Use /batch followed by operation and file pattern.

QwenLM/qwen-code · 37 tokens

extension-creator

Create, scaffold, customize, validate, and locally test Qwen Code extensions. Use when the user wants a new Qwen Code extension, needs help choosing an extension template, wants to add QWEN.md context, commands, skills, agents, MCP servers, settings, hooks, channels, or LSP servers, or asks how to link and test an…

QwenLM/qwen-code · 96 tokens

notion

Notion API for creating and managing pages, databases, and blocks. Use when the user wants to create a Notion page, query a Notion database, update Notion properties, search Notion, add content to Notion, manage Notion blocks, or interact with Notion data sources and workspaces via the API.

elizaOS/eliza · 69 tokens

pr-feedback

Fetches PR review feedback and inline comments, categorizes them, and presents options to the user. Use when the user asks to get, read, address, or fix review comments on a pull request.

strands-agents/harness-sdk · 44 tokens

docs

Access and update the user's Docs vaults. Use whenever the user asks to read, find, create, update, or store a note, document, plan, or HTML artifact; when a Docs @-mention appears in context; or when an answer should link to a document the user can open in Docs.

get-bb/bb · 64 tokens

dev-pain-finder

Scrape real developer pain points for any keyword, technology, or problem space from Reddit, Hacker News, dev.to, and GitHub Discussions simultaneously — then group complaints by theme, score them by frequency and upvote weight, and return a ranked opportunity map showing where developer frustration is high and…

tinyfish-io/tinyfish-cookbook · 160 tokens