Pyroscope
grafana/skills
Continuously profile applications with Grafana Pyroscope and read the result as flame graphs.
Analyze Samply Firefox-profiler output, record focused profiles, summarize hot threads/stacks, inspect symbolication, and compare profile evidence before and after a performance change.
$ npx skills add vortex-data/vortex --skill samply -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install vortex-data/vortex samply --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/vortex-data/vortex.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/samply .claude/skills/samply && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "samply" agent skill from https://github.com/vortex-data/vortex/tree/develop/.agents/skills/samply into .claude/skills/samply/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "samply", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/vortex-data/vortex/tree/develop/.agents/skills/samplyType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add vortex-data/vortex --skill samply -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install vortex-data/vortex samply --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vortex-data/vortex.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/samply .agents/skills/samply && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "samply" agent skill from https://github.com/vortex-data/vortex/tree/develop/.agents/skills/samply into .agents/skills/samply/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "samply", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add vortex-data/vortex --skill samply -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install vortex-data/vortex samply --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vortex-data/vortex.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/samply .cursor/skills/samply && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "samply" agent skill from https://github.com/vortex-data/vortex/tree/develop/.agents/skills/samply into .cursor/skills/samply/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "samply", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/vortex-data/vortex.git --path .agents/skills/samply--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add vortex-data/vortex --skill samply -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install vortex-data/vortex samply --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vortex-data/vortex.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/samply .gemini/skills/samply && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "samply" agent skill from https://github.com/vortex-data/vortex/tree/develop/.agents/skills/samply into .gemini/skills/samply/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "samply", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install vortex-data/vortex samplyInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add vortex-data/vortex --skill samply -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/vortex-data/vortex.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/samply .github/skills/samply && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "samply" agent skill from https://github.com/vortex-data/vortex/tree/develop/.agents/skills/samply into .github/skills/samply/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "samply", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add vortex-data/vortex --skill samply -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install vortex-data/vortex samply --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vortex-data/vortex.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/samply .opencode/skills/samply && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "samply" agent skill from https://github.com/vortex-data/vortex/tree/develop/.agents/skills/samply into .opencode/skills/samply/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "samply", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
samplyAnalyze Samply Firefox-profiler output, record focused profiles, summarize hot threads/stacks, inspect symbolication, and compare profile evidence before and after a performance change.
Samply is an agent skill from vortex-data/vortex. Analyze Samply Firefox-profiler output, record focused profiles, summarize hot threads/stacks, inspect symbolication, and compare profile evidence before and after a performance change.
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts (for example `agents/openai.yaml`, `scripts/profile_activity.py` and `scripts/profile_inverted_tree.py`).
It sits in Development, covering Performance optimization. It works with Python and Rust. The repository describes itself as: An extensible, state-of-the-art framework for columnar compression, and the fastest FOSS columnar file format. Formerly at @spiraldb, now an Incubation Stage project at… The licence is Apache-2.0.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d9ad4cf. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 3 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
python3gitjqFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Samply loads about 2.7k tokens when it runs. Until then it costs about 48 tokens; SKILL.md has 1,211 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from vortex-data/vortex at commit d9ad4cf, republished under its Apache-2.0 licence (© vortex-data). 1,211 words, ~2,676 tokens.
.claude/skills/samply/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Use this skill when a task involves Samply recordings or Firefox-profiler JSON, especially
profile.json.gz files, samply record, samply load, symbolication, thread timeline skew, or
hot stack interpretation. Keep the loop evidence-driven: establish a focused baseline, record the
exact target, summarize the profile before deep code reading, make one scoped change, and rerun the
same target.
This skill is intentionally project-agnostic. Any project-specific benchmark harness, environment variables, metrics, or logging commands should live in a separate benchmark skill or in the current task context.
Do not disappear into profile spelunking while useful output is already available. As soon as a timing run finishes, report the timing lines or comparison table before starting deeper analysis. As soon as a profile summary is available, report the top threads/functions/stacks before reading more code. Then continue investigating with those facts visible.
For long performance sessions, use this cadence:
samply load command the user can
run to inspect it in Firefox Profiler, and the first stack/function summary;Check branch state and changed surface when working in a repository:
git status --short
git branch --show-current
git diff --statRun a focused timing command before profiling. Prefer one executable, one workload/input, one mode, and enough iterations to smooth obvious noise. If the experiment has a runtime environment toggle, prefix every timing and profile command with the same env setting; this is often faster than recompiling and makes A/B comparisons clearer.
Generic shape:
FEATURE_TOGGLE=1 <timing-command> --iterations 5 --output /tmp/<label>.jsonlIf a project has an existing benchmark harness, use that harness for the timing baseline and copy its exact target arguments into the profiled command.
Record a focused Samply profile. Prefer recording without --unstable-presymbolicate first,
then symbolicate offline with the scripts below. This avoids chasing misleading
pre-symbolicated stacks when unwinding or symbol lookup gets confused.
FEATURE_TOGGLE=1 samply record --save-only --rate 1000 \
--output /tmp/<label>.profile.json.gz \
-- /absolute/path/to/<binary> <args>Put environment assignments before samply record, as shown above. Do not put them after the
-- separator; everything after -- is the command Samply launches and profiles.
On macOS, profiling through a system helper such as env, sleep, /bin/true, or system
Python can be a bad sanity check because signed system executables may block Samply's task-port
handoff. Prefer a locally built binary or a user-owned executable.
In a sandboxed agent environment on macOS, Encountered an error during profiling: Unknown(1100) usually means Samply was blocked before the profiled command started. Rerun the
same samply record command with the required execution permissions instead of changing the
workload.
Use a profile with debug information when stack quality matters. If the symbols or unwinding look suspect, rebuild with the project's highest-quality profiling/debug-symbol profile and record again.
If a profile shows impossible-looking ancestry, such as hot execution frames nested under
unrelated Drop::drop frames or otherwise nonsensical async stacks, do not trust the stack
summary. First verify the binary UUID matches the profile, remove presymbolication from the
recording command, and rebuild with better debug symbols if needed.
After the profile is recorded, immediately show the user the command to open it themselves:
samply load /tmp/<label>.profile.json.gzsamply load starts a local Firefox Profiler server and opens the browser UI. If the user only
wants the URL or the environment cannot open a browser, use:
samply load --no-open /tmp/<label>.profile.json.gzThen report the printed local URL.
Summarize the profile without opening Firefox Profiler. Run a small summary first and report it immediately, then run a wider summary only if needed:
python3 .agents/skills/samply/scripts/profile_summary.py \
/tmp/<label>.profile.json.gz \
--binary /absolute/path/to/<binary> \
--symbolicate \
--weight-mode cpu \
--top 12 \
--threads 2 \
--stacks 4 \
--stack-depth 10Wider follow-up:
python3 .agents/skills/samply/scripts/profile_summary.py \
/tmp/<label>.profile.json.gz \
--binary /absolute/path/to/<binary> \
--symbolicate \
--weight-mode cpu \
--top 30 \
--threads 6 \
--stacks 12For timeline skew, quantify worker occupancy instead of relying only on the visual timeline:
python3 .agents/skills/samply/scripts/profile_activity.py \
/tmp/<label>.profile.json.gz \
--thread-regex '<worker-thread-regex>' \
--bin-ms 10For a focused inverted call tree over a thread class or time range, use:
python3 .agents/skills/samply/scripts/profile_inverted_tree.py \
/tmp/<label>.profile.json.gz \
--binary /absolute/path/to/<binary> \
--symbolicate \
--thread-regex '<worker-thread-regex>' \
--start-ms <start> \
--end-ms <end> \
--contains '<frame-regex>'Inspect code near the actual hot path. Load the workload definition when it matters; do not rely on memory for the workload shape.
Make one narrow change, rerun the focused timing/profile command, and record the before/after command lines and results. Do not broaden the workload until the narrow target explains the change.
Samply writes Firefox-profiler JSON, often compressed as profile.json.gz.
meta, libs, threads, pages, counters, and
profilerOverhead.meta.product names the process, meta.interval is the sampling interval in milliseconds, and
meta.startTime is an epoch timestamp in milliseconds.libs[] records loaded binaries with name, path, debugPath, codeId, breakpadId, and
arch. Use this to verify symbol files still match the profile.threads[] entry has name, tid, samples, stackTable, frameTable, funcTable,
resourceTable, and stringArray.samples.length is the number of stored sample rows. samples.stack[] points into
stackTable. samples.weight[] is the number of collapsed samples represented by that row; use
weight instead of row count when present. samples.threadCPUDelta[] is per-thread CPU delta in
microseconds when present.stackTable is a linked list: stackTable.frame[i] is the current frame and
stackTable.prefix[i] points to the caller stack. Follow prefixes to null and reverse to get
root-to-leaf order.frameTable.func[frame] points into funcTable; funcTable.name[func] points into
stringArray. funcTable.resource[func] points into resourceTable, whose name or lib
fields point back into stringArray.If function names are raw addresses such as 0x3db28a0, the profile is not symbolicated. Before
using atos, verify the binary UUID/code ID matches the profile:
gzip -cd /tmp/<label>.profile.json.gz | jq '.libs[] | {name, path, codeId, breakpadId}'
dwarfdump --uuid /absolute/path/to/<binary>If the UUID/code ID does not match, do not trust symbol names from the current binary. Re-profile, or keep the exact binary plus any symbol sidecar emitted by the recorder.
On macOS, Samply stores app addresses as offsets. Add the Mach-O text load address when using
atos manually:
atos -o /absolute/path/to/<binary> -l 0x100000000 0x103db28a0For a raw offset 0x3db28a0, the address passed to atos is 0x100000000 + 0x3db28a0.
When using the bundled scripts, pass --symbol-lib <library-name> if the binary name in
profile.libs[] differs from the basename of --binary.
profile_activity.py when the Firefox Profiler timeline shows empty space. Good parallel
traces keep worker occupancy high through the timed region; a low-occupancy tail points to
scheduling skew, stragglers, dependency ordering, partition imbalance, blocking, or insufficient
work admission.profile_inverted_tree.py with --contains for allocation frames, blocking frames, or a hot
leaf function to see the caller contexts that produce the samples.Summaries should include:
samply load <profile.json.gz>;© vortex-data, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (scripts) in .agents/skills/samply of vortex-data/vortex.
Open the folder on GitHubat commit d9ad4cf
Samply next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Samply this skillvortex-data/vortex | 3.2k | — | ~2.7k | Automated safety check: Pass | Apache-2.0 | |
| Pyroscopegrafana/skills | 278 | — | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Fory Performance Optimizationapache/fory | 4.6k | — | ~2.2k | Automated safety check: Pass | Apache-2.0 | |
| Code Review ChecklistshareAI-lab/learn-claude-code | 78k | 5 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Pycrazyguitar/pysheeet | 8.2k | — | ~886 | Automated safety check: Pass | MIT | |
| Release Skillsnexmoe/eve | 421 | 3 repos | ~3.3k | Automated safety check: Pass | None |
grafana/skills
Continuously profile applications with Grafana Pyroscope and read the result as flame graphs.
apache/fory
Run profile-driven bottleneck optimization across Apache Fory implementations (Java, C++, Python/Cython, Go, Rust, Swift, C, JavaScript/TypeScript, Dart, Kotlin, Scala).
shareAI-lab/learn-claude-code
Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.
crazyguitar/pysheeet
Comprehensive Python programming reference covering syntax, concurrency, networking, databases, ML/LLM development, and HPC.
nexmoe/eve
Universal release workflow. An agent skill from nexmoe/eve.
RustPython/RustPython
Implements missing CPython C-API functions in RustPython's crates/capi, mapping each header to its module with the pyo3-ffi header split.
vortex-data/vortex
Iterate on Vortex vx-bench query performance with benchmark comparisons, engine-specific benchmark flags, RUSTLOG/tracing/metrics/explain output, and Samply profiles.
vortex-data/vortex
Analyze Vortex GitHub Actions CI failures. An agent skill from vortex-data/vortex.
Categories
Analyze Samply Firefox-profiler output, record focused profiles, summarize hot threads/stacks, inspect symbolication, and compare profile evidence before and after a performance change. Samply is an agent skill from vortex-data/vortex. Analyze Samply Firefox-profiler output, record focused profiles, summarize hot threads/stacks, inspect symbolication, and compare profile evidence before and after a performance change.
Samply fits situations like: tasks that involve Performance optimization.
Run `npx skills add vortex-data/vortex --skill samply -a claude-code`. Or copy the skill folder (.agents/skills/samply in vortex-data/vortex) into .claude/skills/samply in your project. Claude Code loads it when a task matches its description.
Run `npx skills add vortex-data/vortex --skill samply -a codex`. Or copy the skill folder (.agents/skills/samply in vortex-data/vortex) into .agents/skills/samply in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add vortex-data/vortex --skill samply -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/samply, .gemini/skills/samply, .github/skills/samply and .opencode/skills/samply in your project.
Going by SKILL.md and its folder, Samply needs Python for the scripts in its folder and the command-line tools its instructions call (python3, git and jq). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Samply is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Samply: Pyroscope (grafana/skills, 278 stars), Fory Performance Optimization (apache/fory, 4.6k stars), Code Review Checklist (shareAI-lab/learn-claude-code, 78k stars) and Py (crazyguitar/pysheeet, 8.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
vortex-data (a GitHub organization) maintains it in vortex-data/vortex, which has 3,248 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 7, 2026.
Source: vortex-data/vortex on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.