Observe Trace
ruvnet/ruflo
Trace agent execution by collecting spans and building a trace tree for a task
Collect, count, and extract Claude Code and Codex CLI local histories into normalized coding-trace JSONL files.
$ npx skills add uw-syfi/TraceLab --skill coding-trace-collect -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install uw-syfi/TraceLab coding-trace-collect --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/uw-syfi/TraceLab.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/coding-trace-collect .claude/skills/coding-trace-collect && 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 "coding-trace-collect" agent skill from https://github.com/uw-syfi/TraceLab/tree/main/skills/coding-trace-collect into .claude/skills/coding-trace-collect/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-trace-collect", 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/uw-syfi/TraceLab/tree/main/skills/coding-trace-collectType 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 uw-syfi/TraceLab --skill coding-trace-collect -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install uw-syfi/TraceLab coding-trace-collect --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/uw-syfi/TraceLab.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/coding-trace-collect .agents/skills/coding-trace-collect && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "coding-trace-collect" agent skill from https://github.com/uw-syfi/TraceLab/tree/main/skills/coding-trace-collect into .agents/skills/coding-trace-collect/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-trace-collect", 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 uw-syfi/TraceLab --skill coding-trace-collect -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install uw-syfi/TraceLab coding-trace-collect --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/uw-syfi/TraceLab.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/coding-trace-collect .cursor/skills/coding-trace-collect && 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 "coding-trace-collect" agent skill from https://github.com/uw-syfi/TraceLab/tree/main/skills/coding-trace-collect into .cursor/skills/coding-trace-collect/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-trace-collect", 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/uw-syfi/TraceLab.git --path skills/coding-trace-collect--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 uw-syfi/TraceLab --skill coding-trace-collect -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install uw-syfi/TraceLab coding-trace-collect --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/uw-syfi/TraceLab.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/coding-trace-collect .gemini/skills/coding-trace-collect && 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 "coding-trace-collect" agent skill from https://github.com/uw-syfi/TraceLab/tree/main/skills/coding-trace-collect into .gemini/skills/coding-trace-collect/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-trace-collect", 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 uw-syfi/TraceLab coding-trace-collectInstalls 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 uw-syfi/TraceLab --skill coding-trace-collect -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/uw-syfi/TraceLab.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/coding-trace-collect .github/skills/coding-trace-collect && 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 "coding-trace-collect" agent skill from https://github.com/uw-syfi/TraceLab/tree/main/skills/coding-trace-collect into .github/skills/coding-trace-collect/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-trace-collect", 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 uw-syfi/TraceLab --skill coding-trace-collect -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install uw-syfi/TraceLab coding-trace-collect --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/uw-syfi/TraceLab.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/coding-trace-collect .opencode/skills/coding-trace-collect && 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 "coding-trace-collect" agent skill from https://github.com/uw-syfi/TraceLab/tree/main/skills/coding-trace-collect into .opencode/skills/coding-trace-collect/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coding-trace-collect", 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.
coding-trace-collectCollect, count, and extract Claude Code and Codex CLI local histories into normalized coding-trace JSONL files.
Coding Trace Collect is an agent skill from uw-syfi/TraceLab. Collect, count, and extract Claude Code and Codex CLI local histories into normalized coding-trace JSONL files. Use when running collectllmtraces.py, extractclauderounds.py, extractcodexrounds.py, collectalluserssudo.sh, scanning current-user or all-user homes, choosing output paths, using --fresh-extract or --append-dedup, or troubleshooting extraction counts.
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).
The repository describes itself as: An open toolkit and public dataset hub for collecting, sanitizing, analyzing, and visualizing coding agent traces. The licence is Apache-2.0.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 11b8b14. 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.
Shell commands in SKILL.md call:
uvFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use uv, 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.
Coding Trace Collect loads about 1.9k tokens when it runs. Until then it costs about 98 tokens; SKILL.md has 627 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 noted patterns worth knowing about, such as sudo or a known installer.
under `/home`: use `--all-user`, or the sudo wrapper when unreadable homes are expected. Use `--home-root PATH` for non- The sudo wrapper's default dated output is a fresh snapshot of currently readable sessions.Use the sudo wrapper for a fresh, named all-user snapshot while preserving final fileAutomated 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.
The full file from uw-syfi/TraceLab at commit 11b8b14, republished under its Apache-2.0 licence (© uw-syfi). 627 words, ~1,911 tokens.
.claude/skills/coding-trace-collect/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Use this skill to collect local Claude Code and Codex history stores and write normalized round traces. Collection finds source files and counts sessions; extraction converts provider-specific histories into JSONL rows where each line is one LLM invocation.
pyproject.toml, README.md, and scripts/collect_llm_traces.py.uv run python ..../home: use --all-user, or the sudo wrapper when unreadable homes are expected. Use --home-root PATH for nonstandard home roots.trace/collections/current/merged.private.jsonl; this both refreshes normalizer fields and
retains history whose raw sessions have been cleaned up.--output without --fresh-extract only when intentionally
maintaining one append-only file.$coding-trace-sanitize has been applied.$coding-trace-analyze for artifact and validator dispatchers. Collection should not own plotting outputs or timing-fit CSVs.Count current-user Claude and Codex history without extraction:
uv run python scripts/collect_llm_traces.pyExtract a combined current-user trace:
uv run python scripts/collect_llm_traces.py --extract-roundsWrite to a specific file and start fresh. This is the recommended current-user command only when intentionally creating a new, non-cumulative dataset:
uv run python scripts/collect_llm_traces.py --extract-rounds trace/llm_round_trace.jsonl --fresh-extractScan all homes under /home without sudo:
uv run python scripts/collect_llm_traces.py --all-user --extract-roundsUse the sudo wrapper for a fresh, named all-user snapshot while preserving final file
ownership. Reuse one collection_id on every host:
collection_id="20260724-100b"
scripts/collect_all_users_sudo.sh \
--collection-id "$collection_id" \
--fresh-extractThe wrapper writes
trace/collections/<collection_id>/hosts/llm_round_trace_v2.<collection_id>.<host>.all_users.jsonl
and a sibling .collection_report.json. With --sanitize, it also writes a sibling
.public.jsonl. It prints an overview summary by default; add --no-summary for quiet batch runs.
Add --quiet-progress only to suppress collector progress messages.
To combine older and newer private normalized traces while letting newer normalizer fields win on overlap:
uv run python scripts/merge_round_traces.py \
trace/collections/current/merged.private.jsonl \
"trace/collections/${collection_id}/hosts/"*.all_users.jsonl \
-o "trace/collections/${collection_id}/merged.private.jsonl"For a private-to-public current-user flow:
collection_id="20260724-100b"
uv run python scripts/collect_llm_traces.py \
--extract-rounds "trace/collections/${collection_id}/merged.private.jsonl" \
--fresh-extract
uv run python scripts/sanitize_round_trace.py \
"trace/collections/${collection_id}/merged.private.jsonl" \
-o "trace/collections/${collection_id}/merged.public.jsonl"The long-form timing-segment CSV is now owned by the timing-fit artifact, not the
collection pipeline. artifacts/run_all.py --db <trace.duckdb> builds it
automatically before timing analyses. Do not precompute it during normal collection.
To build it directly for a timing-only manual run:
uv run python artifacts/llm_generation/timing_fit/collect_timing_fit_trace.py \
--db trace/collections/current/merged.public.duckdb \
-o artifacts/llm_generation/timing_fit/timing_fit_trace.csvThe output has one timing segment per row. Claude segments use message-level output accounting; Codex can also emit reasoning-split segments when reasoning markers and exact reasoning-token counts are available.
Important output names:
trace/llm_round_trace.jsonl.trace/claude_round_trace.jsonl.trace/codex_round_trace.jsonl.trace/collections/<collection_id>/hosts/llm_round_trace_v2.<collection_id>.<host>.all_users.jsonl..collection_report.json.--sanitize: the sibling .public.jsonl.trace/collections/current.artifacts/llm_generation/timing_fit/timing_fit_trace.csv.Use --trace-dir DIR to change the default extraction directory for omitted output
paths. Passing an explicit path to --extract-rounds, --extract-claude-rounds, or
--extract-codex-rounds overrides both the built-in default and --trace-dir.
Use direct extractors when the user already has a provider source directory:
uv run python scripts/extract_claude_rounds.py ~/.claude/projects/PROJECT_DIR -o trace/claude_round_trace.jsonl --append-dedupuv run python scripts/extract_codex_rounds.py ~/.codex/sessions -o trace/codex_round_trace.jsonl --append-dedupPrefer collect_llm_traces.py for normal use because it scans both providers, handles .claude.back, tracks skipped paths, and combines extraction stats.
--json: emit a machine-readable collection report.--no-claude-back: skip .claude.back/projects.--quiet-host-progress: collector option that suppresses progress messages during host scanning and extraction.--quiet-progress: sudo-wrapper option that passes the collector quiet mode.--collection-id: safe collection slug used in both the collection directory and file names;
prefer a UTC-date prefix such as 20260724-100b.--no-summary: sudo-wrapper option that skips the post-collection overview summary.--no-sudo: sudo-wrapper option that runs all-user collection without sudo.--extract-project-filter TEXT: only extract Claude projects whose directory name contains TEXT; repeat the option for multiple filters.--fresh-extract: remove selected extraction outputs before writing.--append-dedup: direct extractor option that appends only unseen trace_key rows.After extraction, check basic shape before analysis:
uv run python artifacts/trace_facts/overview_summary/analyze.py -i trace/collections/current/merged.private.jsonlFor JSON output:
uv run python artifacts/trace_facts/overview_summary/analyze.py -i trace/collections/current/merged.private.jsonl --jsonIf outputs are unexpectedly small, inspect the collection report for skipped_paths, source counts, candidate_rounds, written_rounds, and skipped_duplicate_rounds.
© uw-syfi, 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 1 other file in skills/coding-trace-collect of uw-syfi/TraceLab.
Open the folder on GitHubat commit 11b8b14
Coding Trace Collect 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 |
|---|---|---|---|---|---|---|
| Coding Trace Collect this skilluw-syfi/TraceLab | 138 | — | ~1.9k | Automated safety check: Notes | Apache-2.0 | |
| Observe Traceruvnet/ruflo | 74k | — | ~522 | Automated safety check: Notes | MIT | |
| Dotnet Trace Collectdotnet/skills | 5.6k | 2 repos | ~6.1k | Automated safety check: Pass | MIT | |
| Extractalirezarezvani/claude-skills | 28k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Brand Extractnexu-io/open-design | 100k | — | ~3.1k | Automated safety check: Pass | Apache-2.0 | |
| Design Extractnexu-io/open-design | 100k | — | ~549 | Automated safety check: Pass | Apache-2.0 |
ruvnet/ruflo
Trace agent execution by collecting spans and building a trace tree for a task
dotnet/skills
Guide developers through capturing diagnostic artifacts to diagnose production .NET performance issues.
alirezarezvani/claude-skills
Turn a proven pattern or debugging solution into a standalone reusable skill with SKILL.md, reference docs, and examples.
nexu-io/open-design
Extract a complete Brand Kit from a live website by driving the in-app browser.
nexu-io/open-design
Extract design tokens (color / typography / spacing) from imported source code, screenshots, or Figma exports into the canonical token bag token-map consumes.
ruvnet/ruflo
Extract entities and relations from source files to build a knowledge graph
uw-syfi/TraceLab
Prepare, publish, refresh, or validate the TraceLab public dataset on Hugging Face under UW-SyFI/TraceLab.
uw-syfi/TraceLab
Run, summarize, plot, validate, and export normalized coding-trace JSONL files.
uw-syfi/TraceLab
Explain and work with the normalized coding-trace JSONL row format produced by extractclauderounds.py, extractcodexrounds.py, and collectllmtraces.py.
uw-syfi/TraceLab
Read and explain raw Claude Code and Codex CLI session logs in this coding-trace repo.
uw-syfi/TraceLab
Sanitize normalized coding-trace JSONL rows for public sharing.
uw-syfi/TraceLab
Publish TraceLab snapshots from the internal repo to the public uw-syfi/TraceLab GitHub repo as clean, mergeable, incremental pull requests from a persistent public mirror branch.
Collect, count, and extract Claude Code and Codex CLI local histories into normalized coding-trace JSONL files. Coding Trace Collect is an agent skill from uw-syfi/TraceLab. Collect, count, and extract Claude Code and Codex CLI local histories into normalized coding-trace JSONL files.
Coding Trace Collect fits situations like: running collectllmtraces.py; extractclauderounds.py; extractcodexrounds.py; collectalluserssudo.sh.
Run `npx skills add uw-syfi/TraceLab --skill coding-trace-collect -a claude-code`. Or copy the skill folder (skills/coding-trace-collect in uw-syfi/TraceLab) into .claude/skills/coding-trace-collect in your project. Claude Code loads it when a task matches its description.
Run `npx skills add uw-syfi/TraceLab --skill coding-trace-collect -a codex`. Or copy the skill folder (skills/coding-trace-collect in uw-syfi/TraceLab) into .agents/skills/coding-trace-collect 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 uw-syfi/TraceLab --skill coding-trace-collect -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/coding-trace-collect, .gemini/skills/coding-trace-collect, .github/skills/coding-trace-collect and .opencode/skills/coding-trace-collect in your project.
Going by SKILL.md and its folder, Coding Trace Collect needs the command-line tools its instructions call (uv). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use uv, 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 notes only (runs commands with sudo), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Coding Trace Collect 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 1.9k tokens (SKILL.md is roughly 7.6k 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 Coding Trace Collect: Observe Trace (ruvnet/ruflo, 74k stars), Dotnet Trace Collect (dotnet/skills, 5.6k stars), Extract (alirezarezvani/claude-skills, 28k stars) and Brand Extract (nexu-io/open-design, 100k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
uw-syfi (a GitHub organization) maintains it in uw-syfi/TraceLab, which has 138 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on August 22, 2026.
Source: uw-syfi/TraceLab on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.