Install Anti-Slop Oxlint Rules
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.
Apply when a performance-guard check (network baseline, bundle baseline, DB query count, loader-prefetch lint, RC bailouts) fails or when touching a hot route/endpoint.
$ npx skills add stella/stella --skill conventions-perf -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install stella/stella conventions-perf --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/stella/stella.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/conventions-perf .claude/skills/conventions-perf && 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 "conventions-perf" agent skill from https://github.com/stella/stella/tree/main/.agents/skills/conventions-perf into .claude/skills/conventions-perf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-perf", 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/stella/stella/tree/main/.agents/skills/conventions-perfType 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 stella/stella --skill conventions-perf -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install stella/stella conventions-perf --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/stella/stella.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/conventions-perf .agents/skills/conventions-perf && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "conventions-perf" agent skill from https://github.com/stella/stella/tree/main/.agents/skills/conventions-perf into .agents/skills/conventions-perf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-perf", 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 stella/stella --skill conventions-perf -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install stella/stella conventions-perf --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/stella/stella.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/conventions-perf .cursor/skills/conventions-perf && 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 "conventions-perf" agent skill from https://github.com/stella/stella/tree/main/.agents/skills/conventions-perf into .cursor/skills/conventions-perf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-perf", 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/stella/stella.git --path .agents/skills/conventions-perf--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 stella/stella --skill conventions-perf -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install stella/stella conventions-perf --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/stella/stella.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/conventions-perf .gemini/skills/conventions-perf && 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 "conventions-perf" agent skill from https://github.com/stella/stella/tree/main/.agents/skills/conventions-perf into .gemini/skills/conventions-perf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-perf", 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 stella/stella conventions-perfInstalls 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 stella/stella --skill conventions-perf -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/stella/stella.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/conventions-perf .github/skills/conventions-perf && 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 "conventions-perf" agent skill from https://github.com/stella/stella/tree/main/.agents/skills/conventions-perf into .github/skills/conventions-perf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-perf", 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 stella/stella --skill conventions-perf -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install stella/stella conventions-perf --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/stella/stella.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/conventions-perf .opencode/skills/conventions-perf && 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 "conventions-perf" agent skill from https://github.com/stella/stella/tree/main/.agents/skills/conventions-perf into .opencode/skills/conventions-perf/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-perf", 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.
conventions-perfApply when a performance-guard check (network baseline, bundle baseline, DB query count, loader-prefetch lint, RC bailouts) fails or when touching a hot route/endpoint.
Conventions Perf is an agent skill from stella/stella. Apply when a performance-guard check (network baseline, bundle baseline, DB query count, loader-prefetch lint, RC bailouts) fails or when touching a hot route/endpoint.
Its SKILL.md is about 2.9k 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. The repository describes itself as: Open-source legal workspace. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit 269655d. 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:
bunFrom 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.
Conventions Perf loads about 2.9k tokens when it runs. Until then it costs about 46 tokens; SKILL.md has 1,612 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 stella/stella at commit 269655d, republished under its Apache-2.0 licence (© stella). 1,612 words, ~2,902 tokens.
.claude/skills/conventions-perf/SKILL.md (or your agent's skills folder).Apply when a performance-guard check fails in CI, or when touching a route or
endpoint flagged by the live bun scripts/perf-hotspots.ts report.
Stella guards performance with recorded budgets, diffed on every run. A regression either fails CI outright or shows up as a reviewable diff in the PR. Six guards exist today:
apps/web/e2e/network-baseline.json, checked by
apps/web/e2e/helpers/network.ts from apps/web/e2e/specs/route-smoke.spec.ts):
per-route request manifest, waterfall depth, per-request repeat budget, and
per-request DB query budget.scripts/bundle-baseline.ts +
scripts/bundle-baseline.json): gzipped size per vendor/entry/route chunk
group, wired into the web-build CI job via --check.scripts/rc-bailouts.ts +
scripts/react-compiler-bailouts.json): tracks every component the compiler
cannot memoize, so a bailout losing its manual useMemo/useCallback fails
CI instead of silently reintroducing an infinite-update-loop risk.apps/api/src/lib/db-query-counter.ts): the runtime
half of the network baseline's DB-query budget. Dev/test only.require-loader-prefetch oxlint rule
(.oxlint-plugins/require-loader-prefetch.ts): static, not baseline-based;
flags the waterfall pattern the network baseline would otherwise only catch
after the fact.scripts/db-await-in-loop.ts (type-aware,
CI) flags a database call awaited once per loop iteration (the N+1),
recognizing handles by type rather than name and suppressed with
// db-await-in-loop: <reason>. A single DB hit in a constant-sized
batch round (canonical chunked or an array slice-step loop, size >= 2),
a fixed set of at most 16 elements, or a nonnegative constant-start counter
(constant bound <= 16) is accepted when no enclosing loop or fan-out exists.
Multiple hits, nested per-row work, variable sizes, mutated counters and
keyset walks still require batching or an explicit reason.
no-network-await-in-loop flags
an HTTP request, AWS SDK command dispatch, or API-client method awaited the
same way (iterations x RTT). Both are static and both name the owner, so
the fix is concrete: batch the calls, or record in the suppression reason
why the sequence is required. There is no generic await-in-loop rule; a
sequential await with no I/O behind it costs nothing to guard.Fix the regression first. A red guard means the change made something slower, heavier, or chattier than before. Reseeding the baseline to make CI green is not a mechanical step; it is a product decision that the regression is acceptable, and it must be justified in the PR description (why the extra request, the deeper wait, or the bigger chunk is worth it).
Main owns network recordings. The main-only recorder runs after route/runtime
merges and nightly; the delivery workflow validates and publishes a baseline
artifact keyed by the recorded commit. PR and merge-queue checks load the
newest published recording at or before their merge base (or the committed
file at that same base when recording is unavailable). They never edit the shared JSON or request a
baseline:record delivery.
New and removed routes are scoped from changed route sources and reported in
the job summary. Existing routes retain every allowance, including routes
whose source changed. An intentional increase requires a reviewed JSON file
in apps/web/e2e/network-budgets/<change>.json with route, a nonempty
reason, and a complete budget entry (depth, requests, and applicable
requestCounts, dbQueries, responseSizes). Only declarations added or
modified since the merge base apply; inherited declarations cannot repeatedly
widen future checks. Use one file per change, so unrelated changes do not
share a generated baseline conflict.
E2E_NETWORK_BASELINE=write and rewrite remain local measurement modes;
main recording defaults to write; dispatch with mode=rewrite after a
performance fix to tighten it. Do not commit measurement output on a PR.
The bundle baseline mirrors this with --write-baseline (regenerate) and a
RATCHET_DOWN prompt (not a failure) when a chunk shrinks by more than 3%,
so a real win gets locked in rather than silently drifting back up. The RC
bailout guard and the query counter follow the same "commit the smaller
number, don't just silence the check" norm.
network.ts reports New API request(s) on <route>. The route now
calls an endpoint it did not before. If intentional, declare the reviewed budget. If
not, find what changed (a new hook mount, a widened select, an added
useQuery) and remove the call.
Request waterfall got deeper on <route>: N -> M. Each extra level is one
more sequential network round the user waits through. The fix is almost
always to start the query in the route loader instead of the component:
prefetch it with ensureRouteQueryData (blocking, critical data) or
prefetchRouteQuery (non-blocking warmup) from apps/web/src/lib/react-query.ts,
so the fetch starts during navigation in parallel with code-split chunk
loading, and the component's useSuspenseQuery consumes an already-warm
cache instead of opening a new round. require-loader-prefetch catches the
same pattern statically before it ever reaches the baseline: it flags
useSuspenseQuery(factory(...)) when the route has no loader, or has one
that never references factory.
API request repeated on <route>: <key> ran N -> M times. Baseline budgets
per-request-key repeat counts (default 1 unless the committed
requestCounts says otherwise). Duplicate firing usually comes from
duplicate component mounts, normalized UUID fan-out (multiple ids hitting the
same :id-normalized key), or a refetch policy that lets the same endpoint
fire twice. Reuse the in-flight query instead of issuing a second one.
DB queries per request grew on <route>: <key> ran N -> M queries. The
classic cause is an N+1: a per-row query inside a loop, or a lazy relation
loaded once per item instead of preloaded. Batch it (joins, IN lists,
Drizzle relation preloading); see /conventions-db for indexing and batching
patterns. The allowance (dbQueryAllowance, budget + max(2, 15%)) already
absorbs normal noise (auth session-refresh piggybacks, cache variance); a
failure here is a real regression, not jitter.
If instead the check reports DB query count missing on <route>, the
response stopped exposing the dev/test x-db-queries header — restore the
query counter wiring before trusting the route's N+1 budget again.
The bundle baseline fails when a named group (entry, a vendor-* chunk, or
routes/largest-route) exceeds its committed gzip size by more than 3% (or
1 KiB, whichever is larger, per HEADROOM/HEADROOM_FLOOR_BYTES). Two
specific failure shapes:
manualChunks bucket and landed in entry
(paid on every cold visit) instead of a lazy route chunk or vendor-*
group. Dynamic-import() it, or fix the manualChunks rule in
apps/web/vite.config.ts.vendor-anonymize-data or wasm-vendor show up nonzero. These are
tracked at 0 because they should only ever load inside a web worker, never
the main client bundle. A nonzero value means a worker-only dependency
leaked into the client graph; keep it worker-only instead of widening the
baseline.require-loader-prefetch lint failureSame underlying problem as "waterfall got deeper," caught statically instead
of at e2e time: a route component calls useSuspenseQuery(factory(...)) but
the route's loader either doesn't exist or never references factory.
Prefetch factory(...) in the loader via ensureRouteQueryData or
prefetchRouteQuery.
waterfallDepth (apps/web/e2e/helpers/network.ts) counts the most
consecutive busy blocks in any one observation sequence: a busy block is a
maximal run of requests whose intervals overlap, and a launch gap over
REQUEST_SEQUENCE_GAP_MS (500) starts a new sequence so an idle prefetch is
not read as another route-load round. Two requests in flight at the same
instant are never two levels, so the number is a lower bound on true causal
depth: a dependent request hiding behind an unrelated slow one is invisible
to it.
Reading launch times rather than the gap since the previous response ended is what buys monotonicity, and it costs sensitivity: a dependent request whose parent ran longer than 500ms opens a new sequence instead of counting a level. The three properties are not simultaneously satisfiable, because separating a dependent request from an idle prefetch requires the parent's duration, and any rule reading response ends lets a response growing under load close a gap it used to exceed. Under-counting is the safer error for a guard compared only upward.
The metric is load-monotone: neither a slower response nor a uniformly stretched timeline can raise it. Sequence boundaries read launch times only, so a longer response cannot move one; coverage is a running max that is never rewound at a boundary, so a split can only lower the count.
One residual remains, and it is what the +1 DEPTH_JITTER_ALLOWANCE in
assertNetworkBaseline covers: two requests issued from different ticks may
overlap on one run and not the next, shifting a route by exactly one block. No
launch-time metric can tell that apart from a real added round. The allowance
is capped at one level and must stay there, because the metric can no longer
carry a count across an observation boundary: a route reporting two extra
levels has genuinely grown one, so investigate the request graph rather than
re-running. Only write/rewrite when the route's behavior actually changed.
Do not embed a dated hotspot snapshot in instructions; it becomes false while remaining authoritative-looking. Before touching a hot route or endpoint, run:
bun scripts/perf-hotspots.tsTreat the reported budgets as recorded debt, not acceptable targets. Capture the relevant before value, fix or avoid worsening the access path, then run the same command and affected guard again. When a real improvement lowers a baseline, commit the tighter value. When an intentional product capability raises one, document the measured tradeoff in the PR rather than hiding it in a generic baseline refresh.
For database changes, pair the route/query counter with the actual query plan and cardinality. A lower request count can still conceal a slower scan, and a fast development database does not validate a production-size access path.
/conventions-scale — pagination and tenant-scoped queries; a query that
ignores these will also blow the DB-query budget./conventions-db — indexes, batching, relation preloading; the concrete
fix for most N+1 failures above./conventions-ux — GPU-friendly animation and skeleton conventions; a
waterfall fix that adds a loading state should use a real structural
skeleton, not a spinner.© stella, 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
Just SKILL.md in .agents/skills/conventions-perf of stella/stella.
Open the folder on GitHubat commit 269655d
Conventions Perf 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 |
|---|---|---|---|---|---|---|
| Conventions Perf this skillstella/stella | 258 | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| Install Anti-Slop Oxlint Rulesdmmulroy/anti-slop | 5.3k | 1 repos | ~2.2k | Automated safety check: Pass | MIT | |
| Summarise Ecosystem Resultsastral-sh/ruff | 50k | 1 repos | ~2.2k | Automated safety check: Pass | MIT | |
| Minimizing Ty Ecosystem Changesastral-sh/ruff | 50k | — | ~4.6k | 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 |
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.
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…
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"…
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.
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)…
stella/stella
Create a concise, evidence-backed implementation plan in the repository planning area when the user explicitly asks for a plan.
stella/stella
Answers data-protection (GDPR) questions grounded in the regulation and supervisory guidance, with a citation for every claim.
stella/stella
Reviews a non-disclosure agreement against the firm's NDA checklist and reports findings with citations.
stella/stella
Collects the facts of an unpaid invoice, then drafts a payment demand letter.
stella/stella
Apply when writing or reviewing React effects in apps/web. An agent skill from stella/stella.
stella/stella
Start, drive and measure the local stack. An agent skill from stella/stella.
Categories
Apply when a performance-guard check (network baseline, bundle baseline, DB query count, loader-prefetch lint, RC bailouts) fails or when touching a hot route/endpoint. Conventions Perf is an agent skill from stella/stella. Apply when a performance-guard check (network baseline, bundle baseline, DB query count, loader-prefetch lint, RC bailouts) fails or when touching a hot route/endpoint.
Conventions Perf fits situations like: tasks that involve Linting and formatting.
Run `npx skills add stella/stella --skill conventions-perf -a claude-code`. Or copy the skill folder (.agents/skills/conventions-perf in stella/stella) into .claude/skills/conventions-perf in your project. Claude Code loads it when a task matches its description.
Run `npx skills add stella/stella --skill conventions-perf -a codex`. Or copy the skill folder (.agents/skills/conventions-perf in stella/stella) into .agents/skills/conventions-perf 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 stella/stella --skill conventions-perf -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/conventions-perf, .gemini/skills/conventions-perf, .github/skills/conventions-perf and .opencode/skills/conventions-perf in your project.
Going by SKILL.md and its folder, Conventions Perf needs the command-line tools its instructions call (bun).
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.
Conventions Perf 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.9k tokens (SKILL.md is roughly 12k 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 Conventions Perf: Install Anti-Slop Oxlint Rules (dmmulroy/anti-slop, 5.3k stars), Summarise Ecosystem Results (astral-sh/ruff, 50k stars), Minimizing Ty Ecosystem Changes (astral-sh/ruff, 50k stars) and Babysit PR To Pass CI (sgl-project/sglang, 37k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
stella (a GitHub organization) maintains it in stella/stella, which has 258 GitHub stars. The repository holds 24 skills in this directory. The repository was last updated on October 8, 2026.
Source: stella/stella on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.