Minimizing Ty Ecosystem Changes
astral-sh/ruff
A skill your agent uses when a user says "minimize this ty ecosystem change", "reproduce this ecosystem result", "investigate a primer difference", "investigate a mypyprimer difference"…
Profile-driven performance work on the panache parser or formatter.
$ npx skills add jolars/panache --skill perf-investigation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jolars/panache perf-investigation --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/jolars/panache.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/perf-investigation .claude/skills/perf-investigation && 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 "perf-investigation" agent skill from https://github.com/jolars/panache/tree/main/.agents/skills/perf-investigation into .claude/skills/perf-investigation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "perf-investigation", 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/jolars/panache/tree/main/.agents/skills/perf-investigationType 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 jolars/panache --skill perf-investigation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jolars/panache perf-investigation --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jolars/panache.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/perf-investigation .agents/skills/perf-investigation && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "perf-investigation" agent skill from https://github.com/jolars/panache/tree/main/.agents/skills/perf-investigation into .agents/skills/perf-investigation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "perf-investigation", 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 jolars/panache --skill perf-investigation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jolars/panache perf-investigation --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jolars/panache.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/perf-investigation .cursor/skills/perf-investigation && 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 "perf-investigation" agent skill from https://github.com/jolars/panache/tree/main/.agents/skills/perf-investigation into .cursor/skills/perf-investigation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "perf-investigation", 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/jolars/panache.git --path .agents/skills/perf-investigation--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 jolars/panache --skill perf-investigation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jolars/panache perf-investigation --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jolars/panache.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/perf-investigation .gemini/skills/perf-investigation && 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 "perf-investigation" agent skill from https://github.com/jolars/panache/tree/main/.agents/skills/perf-investigation into .gemini/skills/perf-investigation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "perf-investigation", 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 jolars/panache perf-investigationInstalls 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 jolars/panache --skill perf-investigation -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jolars/panache.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/perf-investigation .github/skills/perf-investigation && 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 "perf-investigation" agent skill from https://github.com/jolars/panache/tree/main/.agents/skills/perf-investigation into .github/skills/perf-investigation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "perf-investigation", 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 jolars/panache --skill perf-investigation -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jolars/panache perf-investigation --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jolars/panache.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/perf-investigation .opencode/skills/perf-investigation && 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 "perf-investigation" agent skill from https://github.com/jolars/panache/tree/main/.agents/skills/perf-investigation into .opencode/skills/perf-investigation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "perf-investigation", 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.
perf-investigationProfile-driven performance work on the panache parser or formatter.
Perf Investigation is an agent skill from jolars/panache. Profile-driven performance work on the panache parser or formatter. Measure first with perf + the right harness; classify hotspots into one of a small set of buckets; apply the matching cheap fix; verify median wall-time moved before committing.
Its SKILL.md is about 3.3k 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, covering Linting and formatting. It works with Pandoc. The repository describes itself as: Language server, formatter, and linter for Quarto and other Markdown flavors. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit dbf4d6d. 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:
cargoFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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.
Perf Investigation loads about 3.3k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 1,406 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); files beside SKILL.md are not scanned.
The full file from jolars/panache at commit dbf4d6d, republished under its MIT licence (© jolars). 1,406 words, ~3,256 tokens.
.claude/skills/perf-investigation/SKILL.md (or your agent's skills folder).Use this skill when asked to "speed up parsing", "speed up formatting",
"look at the parser/formatter hotspots", "fix the regression after
<feature> landed", or anything else where the task is measure
parser/formatter cost on a real input and recover wall-time.
The buckets, workflow, and verification steps are shared across parser and formatter; only the harness invocation and the hot-file map differ. The "Harness" sections below have both — pick the one that matches the target.
commonmark_allowlist greeninline_ir.rs::ScratchEvents is the established shape for
amortizing per-call allocations. Don't invent a new pattern; extend
that one.format(format(x)) == format(x)).
Any formatter perf change that touches emitter shape needs the
golden-cases suite green.builder.token() / builder.start_node() shape needs the
parser golden snapshots and the conformance allowlist green.Follow the parser, formatter, and integration-test invariants in the
repository's root AGENTS.md.
Stress doc: pandoc/MANUAL.txt (~300 KB). Small docs hide per-line
dispatcher cost behind allocator noise.
CARGO_PROFILE_RELEASE_DEBUG=true cargo build --release \
--example profile_parse -p panache-parser
for i in $(seq 1 12); do
taskset -c 0 ./target/release/examples/profile_parse \
pandoc/MANUAL.txt 200 2>&1 | tail -1
donetaskset -c 0 pins to one core — without it, scheduling jitter on a
hybrid-core CPU swamps small wins. Discard the first 2-3 warmup runs;
take median of the remaining ~9-10. Per-run variance on a warm machine
is ~3-5%; demand at least that big a delta before declaring a fix
worked.
The repo's formatting bench is cargo bench --bench formatting. For
focused hotspot work, set PANACHE_BENCH_DOC to the doc you're
investigating and a low PANACHE_BENCH_ITERATIONS:
cd benches/documents && ./download.sh && cd ../.. # first time only
PANACHE_BENCH_DOC=pandoc_manual.md PANACHE_BENCH_ITERATIONS=3 \
cargo bench --bench formatting
# Or end-to-end on a single doc via the CLI binary, with hyperfine if
# available (more honest than ad-hoc shell loops):
CARGO_PROFILE_RELEASE_DEBUG=true cargo build --release
hyperfine --warmup 3 \
'taskset -c 0 ./target/release/panache format \
< pandoc/MANUAL.txt > /dev/null'Same warmup-discard rule applies.
perf record --call-graph=dwarf -F 999 -o /tmp/panache_perf.data -- \
./target/release/examples/profile_parse pandoc/MANUAL.txt 400
perf report --stdio -i /tmp/panache_perf.data \
--no-children -g none --percent-limit 1.0 | head -40Always read cpu_core samples, not cpu_atom — on a hybrid-core
CPU cpu_atom typically captures only a handful of samples and
percentages there are essentially noise. Use --no-children for the
flat self-time view; use -g graph,caller,… (or ,callee,…) when
you need to find who calls a hot leaf. For inline-frame visibility
add --inline.
For flame graphs, the repo already integrates cargo flamegraph:
PANACHE_BENCH_DOC=pandoc_manual.md PANACHE_BENCH_ITERATIONS=3 \
cargo flamegraph --bench formattingEvery parser/formatter hotspot recovered so far falls into one of these buckets. Identify which one BEFORE editing:
s.trim_*_matches([' ', '\t']) or similar
ASCII-set trims show up as core::str::trim_matches /
trim_start_matches with MultiCharEqSearcher /
CharPredicateSearcher::next_reject in the call stack. Replace
with byte-level helpers from parser/utils/helpers.rs
(trim_end_newlines, trim_start_spaces_tabs,
trim_end_spaces_tabs, is_blank_line)..trim().is_empty() on every line — Unicode whitespace
iterator for what is always ASCII. Use is_blank_line(s) instead.try_parse_* runs on every non-blank line; allocates / scans
before realizing the line can't possibly be the construct. Add a
cheap byte gate: bytes after up to 3 spaces matches the expected
leading byte. Examples that paid off (parser): [ for ref-def +
footnote-def, < for HTML block, : for fenced-div + def-marker,
=/- for setext underline (next line). Skip when the existing
inner check is already byte-cheap (count_blockquote_markers
already has one).String allocation on a no-match path — a
try_parse_* function that returns Option<(String, …)> allocates
the string even when the caller's outer guard rejects it. Change
the signature to return Option<usize> (or Option<&str>) and
have the caller build the String only on confirmed match.Vec::new() in a hot loop — .collect::<Vec<_>>()
inside an inner loop, or fresh Vec per call to a function that's
invoked per range/paragraph/line. Either pool via the scratch
bundle pattern in inline_ir.rs::ScratchBundle or hoist +
clear() + extend() so capacity is reused across iterations.GreenNodeBuilder::new() in detect_prepared to "try a parse and
throw it away" allocates a fresh NodeCache each call. The right
fix is splitting the parser function into a separate validate_*
that doesn't emit, not pooling the discardable builder (the
cache holds Arcs across parses and pooling it across the benchmark
loop creates an unrealistic flatter — each iteration after the
first hits a warm cache that wouldn't exist in real CLI usage).pos += rest[pos..].chars().next()?.len_utf8()
byte-by-byte through plain ASCII. Replace with memchr-style
bytes.iter().position(|&b| b == NEEDLE) (the compiler emits
vectorized memchr). All Pandoc / CommonMark structural bytes are
ASCII, so byte-level scans are losslessness-safe.to_uppercase() / to_lowercase() on ASCII — Unicode
case-folding allocates a fresh String. For ASCII-only checks
(e.g. Roman numeral validation), case-fold a byte at a time via
b & !0x20.crates/panache-formatter/src/formatter/wrapping.rs), inline
emission (inlines.rs), and table layout (tables.rs). Common
shapes: String allocation per inline span, repeated width
recalculation, per-line Vec<String> for column widths. Same
buckets as above, just different files.builder.token() / builder.start_node() call count and to the
size of the resulting green tree. Reducing them means emitting
fewer tokens (e.g. coalescing a per-line TEXT + NEWLINE pair in
raw / code blocks into one TEXT token where the formatter
doesn't need the split). This is invasive — verify CST snapshots
and the formatter round-trip before changing emitter shape. Don't
try to pool the NodeCache across parses; it holds Arc'd green
nodes (memory leak) and warming it across benchmark iterations
creates a misleading result.Rules that have paid off:
BlockQuoteParser::detect_prepared) regressed wall time and were
reverted. The intuition wasn't wrong; the cost model was. Always
measure.taskset -c 0 measurement cycle for each.For every commit:
cargo test --workspace --no-fail-fast
cargo test -p panache-parser --test commonmark commonmark_allowlist
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo fmt -- --checkFor formatter changes also verify the golden-cases suite explicitly:
cargo test --test golden_casesThen a fresh measurement (taskset, 12 runs, median). The commit message should name the bucket and quote the median delta:
perf(parser|formatter): <bucket> on <call site>
<one-paragraph rationale: profile pointed here, what specifically>
<was wasteful, what the fix replaces it with>
Median wall time on `<harness command>` (12 runs):
~X ms → ~Y ms (~Z%).Cite the wall-time number even when it's "in the noise" — that's the honest record, and a reviewer can decide whether to ship a noise-floor change at all.
crates/panache-parser/examples/profile_parse.rs — the harness.crates/panache-parser/src/parser/utils/helpers.rs — byte-level
trim / blank-line helpers; first place to look for an existing
helper before adding a new one.crates/panache-parser/src/parser/inlines/inline_ir.rs —
ScratchEvents / ScratchBundle thread-local pool pattern;
build_full_plans for per-paragraph IR work.crates/panache-parser/src/parser/block_dispatcher.rs — every
block parser's detect_prepared lives here; this is the hot
per-line dispatch site.crates/panache-parser/src/parser/inlines/refdef_map.rs —
document-wide refdef pre-pass, called once per parse.pandoc/MANUAL.txt — 300 KB stress doc.benches/formatting.rs — the bench harness; respects
PANACHE_BENCH_DOC and PANACHE_BENCH_ITERATIONS.benches/documents/ — set of stress docs (small,
medium_quarto, tables, math, large_authoring,
pandoc_manual.md).crates/panache-formatter/src/formatter/ — split by concern
(wrapping, inlines, paragraphs, headings, lists,
tables, …). Match the file to the construct your hotspot
involves.crates/panache-formatter/src/formatter.rs — top-level
orchestration.tests/fixtures/cases/ — formatter goldens (UPDATE_EXPECTED=1
to refresh, but verify diffs carefully — the formatter's
idempotency invariant means a wrong refresh is a silent
regression).split_lines_inclusive LF pre-count regressed parser wall time.
The extra pass over the input cost more than the resize-grow it
saved. Don't try this again unless you change the data structure
(e.g. thread-local pooled Vec<&'static str> via lifetime
transmute) — and even then, prove the win with measurement first.BlockQuoteParser::detect_prepared byte-gate was a noise-level
regression. count_blockquote_markers already has its own
internal byte-cheap check; layering another gate on top added a
tiny cost without saving meaningful work.NodeCache across parses. Holds Arc'd
green nodes (LSP memory leak) and produces misleading benchmark
numbers (warm cache after iter 1).cpu_atom perf samples on a hybrid-core CPU. Read
cpu_core data; atom is too few samples to be reliable.String::new() in a detect_prepared before the
gate. ReferenceDefinitionParser was the canonical example —
the multi-line String::new() + push_str ran on every line; the
byte gate is what unlocked the 15% wall-time jump.When done, report:
taskset -c 0).© jolars, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/perf-investigation of jolars/panache.
Open the folder on GitHubat commit dbf4d6d
Perf Investigation 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 |
|---|---|---|---|---|---|---|
| Perf Investigation this skilljolars/panache | 237 | — | ~3.3k | Automated safety check: Pass | MIT | |
| Minimizing Ty Ecosystem Changesastral-sh/ruff | 50k | — | ~4.6k | Automated safety check: Pass | MIT | |
| Install Anti-Slop Oxlint Rulesdmmulroy/anti-slop | 5.4k | — | ~2.2k | Automated safety check: Pass | MIT | |
| Babysit PR To Pass CIsgl-project/sglang | 37k | 2 repos | ~3k | Automated safety check: Pass | Apache-2.0 | |
| Rust Best Practicesfarm-fe/farm | 5.6k | 3 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Summarise Ecosystem Resultsastral-sh/ruff | 50k | — | ~2.2k | Automated safety check: Pass | MIT |
astral-sh/ruff
A skill your agent uses when a user says "minimize this ty ecosystem change", "reproduce this ecosystem result", "investigate a primer difference", "investigate a mypyprimer difference"…
dmmulroy/anti-slop
Installs, updates or migrates the vendored anti-slop Oxlint plugin in a repository, keeping local rule changes and the plugin's license and provenance files.
sgl-project/sglang
Start and persistently pursue a goal to babysit an SGLang pull request until selected GitHub Actions workflows pass on the latest PR head.
farm-fe/farm
Guide for writing idiomatic Rust code based on Apollo GraphQL's best practices handbook.
astral-sh/ruff
A skill your agent uses when a user says "summarise ecosystem results", "summarize this ty ecosystem report", "what changed in this ecosystem run?", or asks to summarise or summarize ty ecosystem…
chromedp/chromedp
This skill should be used when the user is writing Go code and needs guidance on Go-specific pedantry: error wrapping with fmt.Errorf and %w, interface design (accept interfaces return structs)…
jolars/panache
Add a new block-level or inline-level syntax construct to Panache's parser and formatter — confirm the pandoc-native shape first, add SyntaxKinds for every byte category, gate it behind an extension…
jolars/panache
Grow Panache's CommonMark spec conformance under Flavor::CommonMark by running every spec.txt example through the shared parser, comparing rendered HTML against the spec's expected HTML…
jolars/panache
Work on Panache's delegation of embedded code blocks to third-party formatters and linters (ruff, shfmt, shellcheck, rustfmt, ...) — add or change a preset, fix the offset mapping that translates a…
jolars/panache
Investigate panache's linter (and, secondarily, its parser) against a real-world Quarto/Markdown codebase.
jolars/panache
Implement or debug Panache's TeX math parser and formatter internals, including the lossless CST, semantic model, diagnostics, and Badness parity.
jolars/panache
Add a new built-in lint rule to the Panache linter — wire it into the registry, gate it on the right extension/flavor, add a regression fixture with focused assertions, and document it.
Works with
Categories
Profile-driven performance work on the panache parser or formatter. Perf Investigation is an agent skill from jolars/panache. Profile-driven performance work on the panache parser or formatter.
Perf Investigation fits situations like: tasks that involve Linting and formatting.
Run `npx skills add jolars/panache --skill perf-investigation -a claude-code`. Or copy the skill folder (.agents/skills/perf-investigation in jolars/panache) into .claude/skills/perf-investigation in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jolars/panache --skill perf-investigation -a codex`. Or copy the skill folder (.agents/skills/perf-investigation in jolars/panache) into .agents/skills/perf-investigation 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 jolars/panache --skill perf-investigation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/perf-investigation, .gemini/skills/perf-investigation, .github/skills/perf-investigation and .opencode/skills/perf-investigation in your project.
Going by SKILL.md and its folder, Perf Investigation needs the command-line tools its instructions call (cargo).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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. Review the folder before installing.
Perf Investigation is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k 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 Perf Investigation: Minimizing Ty Ecosystem Changes (astral-sh/ruff, 50k stars), Install Anti-Slop Oxlint Rules (dmmulroy/anti-slop, 5.4k stars), Babysit PR To Pass CI (sgl-project/sglang, 37k stars) and Rust Best Practices (farm-fe/farm, 5.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jolars (a GitHub user) maintains it in jolars/panache, which has 237 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 9, 2026.
Source: jolars/panache on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.