Agent skill

Conventions Perf

by stella in 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.

Apache-2.0Auto-check passedDevelopment

Install Conventions Perf

skills CLI
$ npx skills add stella/stella --skill conventions-perf -a claude-code

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

GitHub CLI
$ gh skill install stella/stella conventions-perf --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/stella/stella.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/conventions-perf .claude/skills/conventions-perf && 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
conventions-perf
GitHub stars
258
Token cost
~2.9k tokens
SKILL.md length
1,612 words
Files
1
Skills in repo
24
Repo updated
First seen
Licence
Apache-2.0

At a glance

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.

  • Tasks that involve Linting and formatting
  • SKILL.md covers Overview, The Core Norm, Failure Playbook and How Depth Is Measured, plus 2 more sections
  • Calls bun

What it does

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.

When your agent uses it

  • Tasks that involve Linting and formatting

Example prompts

  • “/conventions-perf”

What it can do on your machine

Read from SKILL.md and the folder at commit 269655d. 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:

    • bun

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

  • Network

    No URLs in SKILL.md.

    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

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.

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

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 passed

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.

SKILL.md

The full file from stella/stella at commit 269655d, republished under its Apache-2.0 licence (© stella). 1,612 words, ~2,902 tokens.

Download SKILL.mdSave it as .claude/skills/conventions-perf/SKILL.md (or your agent's skills folder).
name
conventions-perf
description
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.

Performance Guard Conventions

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.

Overview

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:

  • Network baseline (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.
  • Bundle baseline (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.
  • React Compiler bailout guard (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.
  • DB query counter (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.
  • Per-iteration I/O checks: 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.

The Core Norm

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.

Failure Playbook

New request on route

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

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.

Request repeated more than budgeted

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 query count grew

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.

Show full SKILL.md (661 more words)Show less
Bundle group over budget

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:

  • A dependency escaped its 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 failure

Same 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.

How Depth Is Measured

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.

Live Hotspot Burn-Down

Do not embed a dated hotspot snapshot in instructions; it becomes false while remaining authoritative-looking. Before touching a hot route or endpoint, run:

bash
bun scripts/perf-hotspots.ts

Treat 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

Files

Just SKILL.md in .agents/skills/conventions-perf of stella/stella.

Open the folder on GitHubat commit 269655d

Compare with similar skills

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.

Conventions Perf compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Conventions Perf this skillstella/stella258—~2.9kAutomated safety check: PassApache-2.0
Install Anti-Slop Oxlint Rulesdmmulroy/anti-slop5.3k1 repos~2.2kAutomated safety check: PassMIT
Summarise Ecosystem Resultsastral-sh/ruff50k1 repos~2.2kAutomated safety check: PassMIT
Minimizing Ty Ecosystem Changesastral-sh/ruff50k—~4.6kAutomated safety check: PassMIT
Babysit PR To Pass CIsgl-project/sglang37k2 repos~3kAutomated safety check: PassApache-2.0
Rust Best Practicesfarm-fe/farm5.6k3 repos~1.1kAutomated safety check: PassMIT

Similar skills

  • 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.

    5.3k GitHub starsUsed in 1 repo~2.2k tokens
    DevelopmentAuto-check passed
  • Official

    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…

    50k GitHub starsUsed in 1 repo~2.2k tokens
    DevelopmentAuto-check passed
  • Official

    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"…

    50k GitHub stars~4.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Babysit PR To Pass CI

    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.

    37k GitHub starsUsed in 2 repos~3k tokens
    DevelopmentAuto-check passed
  • Guide for writing idiomatic Rust code based on Apollo GraphQL's best practices handbook.

    5.6k GitHub starsUsed in 3 repos~1.1k tokens
    DevelopmentAuto-check passed
  • Go Pedantry

    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)…

    13k GitHub stars~3.7k tokensUpdated 2 days ago
    DevelopmentAuto-check passed

More from stella/stella

All 24 skills in this repo
  • Plan

    stella/stella

    Create a concise, evidence-backed implementation plan in the repository planning area when the user explicitly asks for a plan.

    258 GitHub stars~917 tokensUpdated today
    Auto-check passed
  • Answer From Sources

    stella/stella

    Answers data-protection (GDPR) questions grounded in the regulation and supervisory guidance, with a citation for every claim.

    258 GitHub stars~735 tokensUpdated today
    Auto-check passed
  • Check Against Rules

    stella/stella

    Reviews a non-disclosure agreement against the firm's NDA checklist and reports findings with citations.

    258 GitHub stars~856 tokensUpdated today
    Auto-check passed
  • Intake To Draft

    stella/stella

    Collects the facts of an unpaid invoice, then drafts a payment demand letter.

    258 GitHub stars~537 tokensUpdated today
    Auto-check passed
  • Apply when writing or reviewing React effects in apps/web. An agent skill from stella/stella.

    258 GitHub stars~2.8k tokensUpdated today
    Auto-check passed
  • Dev

    stella/stella

    Start, drive and measure the local stack. An agent skill from stella/stella.

    258 GitHub stars~1.4k tokensUpdated today
    Auto-check passed

Categories

Questions about Conventions Perf

What does Conventions Perf do?

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.

When should I use Conventions Perf?

Conventions Perf fits situations like: tasks that involve Linting and formatting.

How do I install Conventions Perf in Claude Code?

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.

How do I install Conventions Perf in Codex?

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.

Can I use Conventions Perf 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 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.

What does Conventions Perf need to run?

Going by SKILL.md and its folder, Conventions Perf needs the command-line tools its instructions call (bun).

Does Conventions Perf access the network?

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.

Is Conventions Perf safe to install?

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.

What licence does Conventions Perf use?

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.

How many tokens does Conventions Perf use?

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.

What are the alternatives to Conventions Perf?

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.

Who maintains Conventions Perf?

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.