Agent skill

Elodin Tracy

by elodin-sys in elodin-sys/elodin

Profile Elodin with Tracy. An agent skill from elodin-sys/elodin.

Apache-2.0Auto-check: notesDevelopment

Install Elodin Tracy

skills CLI
$ npx skills add elodin-sys/elodin --skill elodin-tracy -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install elodin-sys/elodin elodin-tracy --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/elodin-sys/elodin.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.cursor/skills/elodin-tracy .claude/skills/elodin-tracy && rm -rf skills-src

Use ~/.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/

Facts

Skill name
elodin-tracy
GitHub stars
547
Token cost
~2.8k tokens
SKILL.md length
898 words
Files
1
Skills in repo
14
Repo updated
First seen
Licence
Apache-2.0

At a glance

Profile Elodin with Tracy. An agent skill from elodin-sys/elodin.

  • Works in 4 steps: Quick Start → What Gets Profiled → Build Details → …
  • Profiling the editor
  • SKILL.md covers 1. Quick Start, 2. What Gets Profiled, 3. Build Details and 4. Adding Custom Instrumentation, plus 4 more sections
  • Calls just, nix and sh; reaches docs.rs

What it does

Elodin Tracy is an agent skill from elodin-sys/elodin. Profile Elodin with Tracy. Use when profiling the editor, simulation, building with tracy features, capturing traces, analyzing performance, or adding custom instrumentation.

Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development. It works with Rust and Linux. The repository describes itself as: Elodin simulation and flight software monorepo. The licence is Apache-2.0.

When your agent uses it

  • Profiling the editor
  • Building with tracy features
  • Capturing traces
  • Analyzing performance

Example prompts

  • “/elodin-tracy”

Requirements

  • Python 3
  • Docker

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Quick Start
  2. What Gets Profiled
  3. Build Details
  4. Adding Custom Instrumentation

What it can do on your machine

Read from SKILL.md and the folder at commit 729022c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • just
    • nix
    • sh
    • cargo

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • docs.rs

    Also links to:

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Elodin Tracy loads about 2.8k tokens when it runs. Until then it costs about 47 tokens; SKILL.md has 898 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~47
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

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.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteRuns commands with sudoSKILL.md:34
    sudo elodin editor examples/sensor-camera/main.py
  • NoteRuns commands with sudoSKILL.md:203
    sudo elodin editor examples/sensor-camera/main.py
  • NoteRuns commands with sudoSKILL.md:213
    sudo sh -c "ulimit -n 65536 && elodin editor examples/sensor-camera/main.py"
  • NoteRuns commands with sudoSKILL.md:221
    sudo systemctl stop systemd-timesyncd
  • NoteRuns commands with sudoSKILL.md:223
    sudo systemctl start systemd-timesyncd

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from elodin-sys/elodin at commit 729022c, republished under its Apache-2.0 licence (© elodin-sys). 898 words, ~2,783 tokens.

Download SKILL.mdSave it as .claude/skills/elodin-tracy/SKILL.md (or your agent's skills folder).
name
elodin-tracy
description
Profile Elodin with Tracy. Use when profiling the editor, simulation, building with tracy features, capturing traces, analyzing performance, or adding custom instrumentation.

Profiling Elodin with Tracy

Tracy is a real-time, nanosecond-resolution hybrid frame and sampling profiler. https://github.com/wolfpld/tracy | BSD 3-clause


1. Quick Start

Linux only. Tracy profiling requires Linux. On macOS, just install tracy will abort with an explanation. Use a Linux machine or an OrbStack NixOS VM (see the elodin-nix skill) for profiling workflows.

bash
nix develop
just install tracy
elodin editor examples/sensor-camera/main.py

In a second terminal:

bash
tracy                    # launches the Tracy profiler GUI

Click Connect in the Tracy UI. You will see both the editor process (Bevy systems, UI rendering) and the simulation subprocess (IREE kernel execution) as separate clients.

For full sampling and context-switch data on Linux, run the profiled binary with elevated privileges:

bash
sudo elodin editor examples/sensor-camera/main.py
Tracy Ports

Each Elodin process uses a dedicated Tracy port so they can be profiled independently or simultaneously:

ProcessTracy Port
Editor / elodin run8087
Render server8088
Simulation (IREE)8089
Elodin-DB8090

When using the Tracy GUI, connect to each port separately. When using tracy-capture, specify the port with -p.

CLI Capture and Export

To capture traces headlessly (useful for CI, remote machines, or agentic workflows):

bash
# Editor + render-server (Tracy v0.13.x protocol):
tracy-capture -a 127.0.0.1 -p 8087 -o /tmp/trace-editor.tracy -s 30 &
tracy-capture -a 127.0.0.1 -p 8088 -o /tmp/trace-render.tracy -s 30 &

sleep 1
elodin editor examples/sensor-camera/main.py

# After capture completes, export to CSV for analysis:
tracy-csvexport /tmp/trace-editor.tracy > /tmp/trace-editor.csv
tracy-csvexport /tmp/trace-render.tracy > /tmp/trace-render.csv
tracy-csvexport /tmp/trace-sim.tracy > /tmp/trace-sim.csv

Start the capture before launching Elodin so the servers are listening when the Tracy clients initialize. The -s 30 flag records for 30 seconds; adjust as needed.

You can also open saved .tracy files in the GUI later:

bash
tracy /tmp/trace-editor.tracy

2. What Gets Profiled

Editor Process

When the tracy feature is enabled, the editor binary (apps/elodin) sets up a tracing_tracy::TracyLayer in its tracing subscriber (apps/elodin/src/cli/mod.rs). This means every Rust tracing span becomes a Tracy zone.

Automatic (zero code changes):

  • All Bevy systems, schedules, and stages (via bevy/trace_tracy)
  • Any function annotated with #[tracing::instrument]

Bevy's own profiling guide: https://github.com/bevyengine/bevy/blob/main/docs/profiling.md

Tracy-specific runtime behavior:

  • Present mode switches to AutoNoVsync (eliminates vsync idle from profiles)
  • Winit uses continuous() mode instead of reactive/game mode
Cranelift-MLIR JIT (sim subprocess)

When cranelift-mlir is built with --features tracy (propagated via nox-py/tracy from just install tracy), each JIT-compiled function emits a Tracy zone named after its FuncId → name mapping (e.g. main, inner_929, svd). The zones appear in the same sim-subprocess Tracy port (8089) alongside the existing sim instrumentation.

Activation requires both:

  • Build with --features tracy (or just install tracy)
  • Runtime: ELODIN_CRANELIFT_DEBUG_DIR=<path>

Without ELODIN_CRANELIFT_DEBUG_DIR, the Cranelift JIT IR emits no probe calls, so Tracy produces zero zones for JIT'd functions — the feature is runtime-toggled orthogonally to the Cargo feature. See libs/cranelift-mlir/PERFORMANCE.md for the full workflow.

Elodin-DB Process

When built with --features tracy, the elodin-db binary (libs/db/src/main.rs) adds a TracyLayer to its tracing subscriber on port 8090. Instrumented hot paths:

  • handle_conn -- per-connection lifetime
  • handle_packet -- per-packet dispatch
  • sink_table -- table decomposition + write-lock acquisition (the primary write path)
  • apply_value (trace-level) -- per-component write within a table
  • push_buf (trace-level) -- mmap append to index + data files
  • follow_stream -- follow/replication egress path
  • coalescing_flush (trace-level) -- TCP write coalescing

The apply_value and push_buf spans use trace_span! to minimize overhead at default log levels. Set RUST_LOG=trace or connect Tracy to capture them.

A throughput benchmark is available:

bash
# Customer scenario: 400 components at 250Hz, per-component connections, with a reader
elodin-db-bench --scenario customer --json

# Same workload but batched into single-table packets (faster)
elodin-db-bench --scenario customer --mode batch --json

# Custom configuration
elodin-db-bench --components 1000 --frequency 100 --duration 20 --mode per-component

3. Build Details

What just install tracy does
  1. Builds nox-py (Python extension) with maturin develop -F tracy
  2. Builds the elodin editor and elodin-db binaries with cargo build --release -p elodin -p elodin-db --features tracy, which activates bevy/trace_tracy and adds tracing-tracy to both processes
Feature chain
apps/elodin          tracy = ["elodin-editor/tracy", "bevy/trace_tracy", "dep:tracing-tracy"]
libs/elodin-editor   tracy = ["bevy/trace_tracy"]
libs/db              tracy = ["dep:tracing-tracy"]  (adds TracyLayer to subscriber, port 8090)
libs/nox-py          tracy = ["cranelift-mlir/tracy"]  (forwards to JIT profiling layer)
libs/cranelift-mlir  tracy = ["dep:tracy-client"]  (emits per-JIT-function zones, port 8089)

4. Adding Custom Instrumentation

Rust (editor/runtime)

Any tracing span automatically appears in Tracy when the tracy feature is enabled:

rust
#[tracing::instrument]
fn my_hot_function() {
    // entire function is a Tracy zone
}

fn partial_instrumentation() {
    let _span = tracing::info_span!("critical_section").entered();
    // only this block is a Tracy zone
}

The current EnvFilter (s10=info,elodin=info,impeller=info,...) controls which spans reach Tracy. To capture more detail:

bash
RUST_LOG=debug elodin editor examples/sensor-camera/main.py
Show full SKILL.md (352 more words)Show less
Instrument Options
rust
#[tracing::instrument(skip(graph))]
fn my_hot_function() {
    // Entire function is a Tracy zone.
}

The `skip(graph)` option tells [`#[tracing::instrument]`](https://docs.rs/tracing/0.1/tracing/attr.instrument.html) not to attach the `graph` argument as a span field. By default the macro would try to record every parameter (usually via `Debug`), which is noisy for large values, can fail if a type has no useful `Debug`, and is rarely needed when you only want a named zone in Tracy.

---

## 6. Tips and Troubleshooting

### Tracy won't connect

- Ensure the profiler UI is running and listening **before** starting the Elodin binary
- Or set `TRACY_NO_EXIT=1` to keep the app alive until Tracy connects:
  ```bash
  TRACY_NO_EXIT=1 elodin editor examples/sensor-camera/main.py
Missing sampling / CPU data

Sampling and context-switch capture require elevated privileges on Linux:

bash
sudo elodin editor examples/sensor-camera/main.py

If you see the Tracy timeline but no ghost zones or CPU core list, this is the cause.

"RESOURCE_EXHAUSTED; failed to open file"

Tracy keeps many file descriptors open. Increase the limit:

bash
sudo sh -c "ulimit -n 65536 && elodin editor examples/sensor-camera/main.py"
GPU timeline drift

On some Linux systems, GPU and CPU timelines drift due to network time sync:

bash
sudo systemctl stop systemd-timesyncd
# Re-enable when done:
sudo systemctl start systemd-timesyncd
Headless render server crash (resolved)

With Tracy enabled, Bevy's RenderDiagnosticsPlugin requires a DiagnosticsStore resource. The headless render server disables DiagnosticsPlugin but now explicitly initializes DiagnosticsStore to prevent panics (libs/elodin-editor/src/headless.rs).


Appendix A: Tracy Tools

tracy-profiler (GUI)
tracy-profiler [file.tracy]               # Open saved trace
tracy-profiler -a 127.0.0.1 [-p 8086]    # Auto-connect to address
tracy-capture (CLI)
tracy-capture -o out.tracy [-a addr] [-p port] [-f] [-s seconds] [-m mem%]
tracy-csvexport
tracy-csvexport trace.tracy [-f name] [-c] [-s sep] [-e] [-u] > out.csv

Columns: name, src_file, src_line, total_ns, total_perc, counts, mean_ns, min_ns, max_ns, std_ns.

tracy-update
tracy-update old.tracy new.tracy [-4|-h|-e|-z level] [-j streams] [-d] [-c] [-r] [-s flags]

Strip flags: locks messages plots Memory images ctx-switches sampling Code Source-cache.


Appendix B: Compile-Time Macros Reference

All defined project-wide. In Elodin, these are managed by the tracy-client-sys crate (editor).

Core
  • TRACY_ENABLE -- required; without it all macros are no-ops
  • TRACY_ON_DEMAND -- profile only when server is connected (saves memory)
  • TRACY_NO_EXIT -- wait for server before exiting (also env var)
Network
  • TRACY_NO_BROADCAST -- no UDP presence announcement
  • TRACY_ONLY_LOCALHOST -- localhost only (also env var)
  • TRACY_PORT -- data+broadcast port (default 8086; also env var)
Feature Toggles
  • TRACY_NO_SYSTEM_TRACING -- no kernel data (also env var)
  • TRACY_NO_CONTEXT_SWITCH -- no context switch capture
  • TRACY_NO_SAMPLING -- no call stack sampling
  • TRACY_NO_CALLSTACK -- no call stack support at all
  • TRACY_NO_CODE_TRANSFER -- no executable code retrieval
  • TRACY_FIBERS -- fiber/coroutine support (small perf hit)
  • TRACY_CALLSTACK=<depth> -- force callstack capture on all macros
  • TRACY_SAMPLING_HZ=<freq> -- sampling frequency (default 10 kHz Linux)

Appendix C: Viewer Keyboard Shortcuts

KeyAction
A/DScroll left/right
W/SZoom in/out
Ctrl+FFind Zone
Ctrl+dragDefine time range
Ctrl+click zoneZone statistics
Middle-clickZoom to extent
Left-click zoneZone info
Right-click zoneSet time range
Ctrl+Alt+RReconnect (live)

Appendix D: Limits

Hard limits: 64 threads/lock, 65534 source locations, 255 recursive zone appearances, 1.6-day max session, 4B memory frees, 16M unique callstacks. Little-endian only, 48-bit VA.

Pitfalls:

  • exit() inside a zone = hang. Use exception workaround.
  • Every Free needs matching Alloc. Mismatch kills session.
  • Without TRACY_ON_DEMAND, events buffer unbounded in RAM.

Linux notes:

  • Sampling and context switches require root or perf_event_paranoid set to -1.
  • Docker: --privileged --pid=host --user 0:0, mount /sys/kernel/debug.

© elodin-sys, 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

Files

Just SKILL.md in .cursor/skills/elodin-tracy of elodin-sys/elodin.

Open the folder on GitHubat commit 729022c

Compare with similar skills

Elodin Tracy 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.

Elodin Tracy compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Elodin Tracy this skillelodin-sys/elodin547—~2.8kAutomated safety check: NotesApache-2.0
OpenLogi Device DiagnosisAprilNEA/OpenLogi23k—~1.6kAutomated safety check: PassApache-2.0
Prosestatic-web-server/static-web-server2.4k—~1.2kAutomated safety check: PassApache-2.0
Gridbash Panesjasonsuhari/gridbash134—~1.5kAutomated safety check: PassMIT
Emskin Patternsemskin/emskin124—~1.6kAutomated safety check: PassGPL-3.0
Rust Backendstatic-web-server/static-web-server2.4k—~2.1kAutomated safety check: PassApache-2.0

Similar skills

  • OpenLogi Device Diagnosis

    AprilNEA/OpenLogi

    Finds the first failing layer when an OpenLogi Logitech device is missing or misbehaving across enumeration, open, probe, IPC and UI.

    23k GitHub stars~1.6k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Prose

    static-web-server/static-web-server

    Write or edit human-readable text for the Static Web Server (SWS) project — commit messages, CHANGELOG entries, PR descriptions, issue bodies, rustdoc comments, CLI help text, READMEs, and user docs…

    2.4k GitHub stars~1.2k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Gridbash Panes

    jasonsuhari/gridbash

    Coordinate with sibling agent panes from inside a GridBash grid — list panes and their roles, read what a pane is currently doing, prompt one pane or every other pane, and rename pane titles so the…

    134 GitHub stars~1.5k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Emskin Patterns

    emskin/emskin

    Coding and workflow patterns extracted from the emskin repo (nested Wayland compositor for Emacs).

    124 GitHub stars~1.6k tokensUpdated 5 mo ago
    DevelopmentAuto-check passed
  • Rust Backend

    static-web-server/static-web-server

    Write or modify Rust code in the Static Web Server (SWS) project — modules, types, error handling, async code, hyper responses, feature-gated code, and the local commands that mirror CI.

    2.4k GitHub stars~2.1k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Code Quality

    static-web-server/static-web-server

    Review or self-check a change to the Static Web Server (SWS) project before it is called done — correctness, invariants, API design, concurrency, maintainability, and an SWS-specific review checklist.

    2.4k GitHub stars~1.1k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from elodin-sys/elodin

All 14 skills in this repo
  • Branch Regression

    elodin-sys/elodin

    Compare two git branches (usually the current branch vs main) by running every example on each, capturing exit codes, logs, and editor screenshots, then diffing the results.

    547 GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed
  • Elodin Cranelift

    elodin-sys/elodin

    Work with the Cranelift JIT MLIR backend. An agent skill from elodin-sys/elodin.

    547 GitHub stars~2k tokensUpdated yesterday
    Auto-check passed
  • Elodin DB

    elodin-sys/elodin

    Work with Elodin-DB, the time-series telemetry database. An agent skill from elodin-sys/elodin.

    547 GitHub stars~2.9k tokensUpdated yesterday
    Auto-check passed
  • Elodin Dev

    elodin-sys/elodin

    Develop and contribute to the Elodin codebase. An agent skill from elodin-sys/elodin.

    547 GitHub stars~896 tokensUpdated yesterday
    Auto-check passed
  • Elodin Editor Dev

    elodin-sys/elodin

    Contribute to the Elodin Editor, the 3D viewer and graphing tool.

    547 GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Elodin Headless Capture

    elodin-sys/elodin

    Run the Elodin Editor without a physical display in Gamescope, take screenshots, and record video through PipeWire and GStreamer.

    547 GitHub stars~2.2k tokensUpdated yesterday
    Auto-check: notes

Works with

Categories

Questions about Elodin Tracy

What does Elodin Tracy do?

Profile Elodin with Tracy. An agent skill from elodin-sys/elodin. Elodin Tracy is an agent skill from elodin-sys/elodin. Profile Elodin with Tracy.

When should I use Elodin Tracy?

Elodin Tracy fits situations like: profiling the editor; building with tracy features; capturing traces; analyzing performance.

How do I install Elodin Tracy in Claude Code?

Run `npx skills add elodin-sys/elodin --skill elodin-tracy -a claude-code`. Or copy the skill folder (.cursor/skills/elodin-tracy in elodin-sys/elodin) into .claude/skills/elodin-tracy in your project. Claude Code loads it when a task matches its description.

How do I install Elodin Tracy in Codex?

Run `npx skills add elodin-sys/elodin --skill elodin-tracy -a codex`. Or copy the skill folder (.cursor/skills/elodin-tracy in elodin-sys/elodin) into .agents/skills/elodin-tracy in your project. Codex loads it when a task matches its description.

Can I use Elodin Tracy in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add elodin-sys/elodin --skill elodin-tracy -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/elodin-tracy, .gemini/skills/elodin-tracy, .github/skills/elodin-tracy and .opencode/skills/elodin-tracy in your project.

What does Elodin Tracy need to run?

Going by SKILL.md and its folder, Elodin Tracy needs the command-line tools its instructions call (just, nix, sh and cargo). Our summary lists: Python 3; Docker.

Does Elodin Tracy access the network?

SKILL.md names 2 domains. In commands or code: docs.rs; the agent is likely to contact it when it follows the instructions. As links in the text: github.com. This is read from the text; nothing was executed.

Is Elodin Tracy safe to install?

Our automated static check of SKILL.md found notes only (runs commands with sudo), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Elodin Tracy use?

Elodin Tracy 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.

How many tokens does Elodin Tracy use?

About 2.8k 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.

What are the alternatives to Elodin Tracy?

Skills that share tags, products or a category with Elodin Tracy: OpenLogi Device Diagnosis (AprilNEA/OpenLogi, 23k stars), Prose (static-web-server/static-web-server, 2.4k stars), Gridbash Panes (jasonsuhari/gridbash, 134 stars) and Emskin Patterns (emskin/emskin, 124 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Elodin Tracy?

elodin-sys (a GitHub organization) maintains it in elodin-sys/elodin, which has 547 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 9, 2026.

Source: elodin-sys/elodin on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.