Agent skill

Optimize Performance

by textura-agency in textura-agency/next16-claude-starter

Make a page in this starter actually smooth — build it, scroll it in real Chrome on PC and on an emulated phone, fix what the measurement blames, re-measure to prove it.

UnlicenseAuto-check: notesGame Development

Install Optimize Performance

skills CLI
$ npx skills add textura-agency/next16-claude-starter --skill optimize-performance -a claude-code

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

GitHub CLI
$ gh skill install textura-agency/next16-claude-starter optimize-performance --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/textura-agency/next16-claude-starter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/optimize-performance .claude/skills/optimize-performance && 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
optimize-performance
GitHub stars
133
Token cost
~3.7k tokens
SKILL.md length
2,003 words
Files
3 (incl. references)
Skills in repo
16
Repo updated
First seen
Licence
Unlicense

At a glance

Make a page in this starter actually smooth — build it, scroll it in real Chrome on PC and on an emulated phone, fix what the measurement blames, re-measure to prove it.

  • Works in 7 steps: Rules of measurement → The scroll test — run this before… → First-visit work — the usual culprit → …
  • The user says its slow
  • SKILL.md covers The bar, 0. Rules of measurement, 1. The scroll test — run this… and 2. First-visit work — the…, plus 5 more sections
  • Calls yarn, node and npx

What it does

Optimize Performance is an agent skill from textura-agency/next16-claude-starter. Make a page in this starter actually smooth — build it, scroll it in real Chrome on PC and on an emulated phone, fix what the measurement blames, re-measure to prove it. Covers first-scroll jank and micro-freezes, dropped frames during scroll-driven animation, blur/filter and layer-promotion cost, per-frame style writes, lazy media decoding mid-reveal, hydration and lazy chunks landing mid-scroll, the first scroll after a loader, image sequences, INP and bundle cost. Use when the user says "it's slow", "janky"…

Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/fixes.md` and `references/measuring.md`).

It sits in Game Development, covering 3D graphics and WebGL and Performance optimization. It works with Three.js. The repository describes itself as: AI-first Next.js 16 starter for animation-heavy sites, wired with an Obsidian vault & Claude Code hooks. The licence is Unlicense.

When your agent uses it

  • The user says its slow
  • Stutters on first scroll
  • Laggy scrolling
  • Optimise performance

Example prompts

  • “s slow”
  • “micro freezes”
  • “stutters on first scroll”
  • “/optimize-performance”

Requirements

  • Pre-approved tools (allowed-tools): Bash, Read, Grep, Glob, Edit, Write

Workflow steps

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

  1. Rules of measurement
  2. The scroll test — run this before anything else
  3. First-visit work — the usual culprit
  4. Steady-state scroll cost
  5. Load cost
  6. Prove it, then report it
  7. Then close the loop

What it can do on your machine

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

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • Read
    • Grep
    • Glob
    • Edit
    • Write

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • yarn
    • node
    • npx

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

  • Network

    No URLs in SKILL.md. Its commands use yarn and npx, which can reach the network depending on how they are called.

    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

Optimize Performance loads about 3.7k tokens when it runs, and up to ~7.7k if it reads all its reference files. Until then it costs about 226 tokens; SKILL.md has 2,003 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~226
When it runs · the whole SKILL.md, loaded when a task matches
~3.7k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~7.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

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

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash, Read, Grep, Glob, Edit, Write

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 textura-agency/next16-claude-starter at commit 6c6edf9, republished under its Unlicense licence (© textura-agency). 2,003 words, ~3,723 tokens.

Download SKILL.mdSave it as .claude/skills/optimize-performance/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
optimize-performance
description
Make a page in this starter actually smooth — build it, scroll it in real Chrome on PC and on an emulated phone, fix what the measurement blames, re-measure to prove it. Covers first-scroll jank and micro-freezes, dropped frames during scroll-driven animation, blur/filter and layer-promotion cost, per-frame style writes, lazy media decoding mid-reveal, hydration and lazy chunks landing mid-scroll, the first scroll after a loader, image sequences, INP and bundle cost. Use when the user says "it's slow", "janky", "micro freezes", "stutters on first scroll", "laggy scrolling", "optimise performance", "measure performance", or before shipping any animation-heavy page. For a three.js/WebGL scene use `optimize-3d-scene` first — that skill owns the GPU scene; this one owns the page around it. For load scores use `optimize-load`; for real-phone behaviour use `mobile-device-qa`.
allowed-tools
Bash, Read, Grep, Glob, Edit, Write

Optimise page performance

This starter is built for animation-heavy marketing sites: springs on scroll, text engines, Lenis smooth scroll, full-bleed imagery, often a WebGL scene. That combination has characteristic failures, and they are not the ones people go looking for. This skill was rewritten from scroll passes on ~50 production sites built from this starter; each lever says whether it is a rule (held on ≥ 3 sites) or observed (1–2). Read obsidian/knowledge/fix-catalog.md and obsidian/knowledge/pitfalls.md before fixing.

The loop is the skill. Build → measure → attribute → fix one thing → re-measure. Never skip to the fix; never report a win you did not measure.

If the project renders a three.js / WebGL scene (three in package.json, or a canvas with a render loop) — hard rule 14 sends you to optimize-3d-scene first. Come back here for the page around the scene.

The bar

ideal on PC and mobile, cold and warm: no frame over 50 ms, ≤ 1 % dropped frames, p99 ≤ 33 ms (budgets against 60 Hz even on a 120 Hz panel). smooth is no frame > 100 ms and ≤ 3 % dropped; anything else is janky. A 50 ms frame is three dropped frames at 60 Hz — where a hitch stops being subliminal.

0. Rules of measurement

  1. Measure the build, never next dev. yarn build && yarn start. Kill the old server by port first; start the new one only if the build succeeded.
  2. Baseline before you touch anything.
  3. 3 runs, medians; a 1/3 freeze may be noise — re-run before fixing. A result near the 1 % line is a draw: A/B the two builds back to back (interleaved, ≥ 2 rounds) and compare per-frame work, not one record.
  4. Throttle the CPU (4×) on the phone pass, and emulate 4G — localhost hides lazy-load freezes; any fetched during a pass is a freeze waiting for a slower link.
  5. Change one thing at a time, same config before and after.
  6. Tracing perturbs what it measures. Use a trace or profile to explain a freeze, never to measure one.
  7. A busy machine fakes regressions. Above a load average of ~15 a scroll verdict is unreliable (GPU contention reads as janky) — re-run, don't act. Probes use a plain Chrome UA (the default puppeteer UA gets the robot form).

1. The scroll test — run this before anything else

sh
node tools/qa/scroll-test.mjs --url http://localhost:3000/     # PC wheel + mobile touch (4× CPU), cold then warm
node tools/qa/scroll-test.mjs --url … --devices mobile --runs 1 # chase one freeze
node tools/qa/scroll-test.mjs --url … --first-scroll            # + a scroll from the loader's unlock frame

It opens a visible Chrome (headless GPU behaviour differs), waits until the page can actually scroll (Lenis running, no overflow: hidden), scrolls top → bottom like a person — wheel bursts on PC, touch flings on mobile — jumps back, and scrolls again warm. Every frame over 50 ms is reported with its section, cause and reproducibility:

causewho owned the framelook at
decode (media fetched just before)an image/video decoded in the revealing frame§2 lazy media
gpu / raster (main thread idle)the GPU process: first paint of a big layer, a blur, a texture upload, a compile§3 blur, layers, fill; optimize-3d-scene
scriptJS — the LoAF names file, function, invoker (FrameRequestCallback = a rAF loop)the named loop; per-frame writes §3
script: React rendera render/commit mid-scroll (state set on scroll/in-view, a big subtree)§2 hydration, §3 flags at the leaf
script: React mounting a lazy chunka dynamic() chunk loading inside the scroll§2
render (style / layout / paint)style/layout — or, with 2–8 ms render inside a 200–900 ms frame, a GPU wait§3 blur, per-frame styles

Plus the worst sections by dropped frames — a page-wide 4 % was one section at 29 %. Read it as a diagnosis:

  • Cold bad, warm clean → first-visit work inside animating frames — the most common shape in this starter. §2.
  • Both bad → a steady per-frame cost. §3.
  • Desktop drops steadily with the main thread idle on a WebGL page → the 120 Hz panel: cap the scene's draw at 60 fps (optimize-3d-scene §5).
  • Both clean → the complaint is about load (optimize-load) or about the real phone (mobile-device-qa).

Lighthouse never scrolls; you won't find this by hand either, because by the time you scroll your own site you've warmed it. references/measuring.md has a bench for tracing a freeze the tool already located; tools/qa/profile.mjs --url … --scroll-to "<selector>" names the code.

The test's first scroll starts ~1 s after the page unlocks — a person's starts the instant the loader lets go. Work landing in that second (a scene build, section hydration) passed the test and was a reviewer's first impression on one site. Probe that moment: scroll-test.mjs --first-scroll wheels from the unlock frame — §2.

What it can't tell you: a phone's GPU (throttling slows the CPU, nothing slows the Mac's GPU — use the counted checks in optimize-3d-scene), a real network, iOS Safari. That's mobile-device-qa.

2. First-visit work — the usual culprit

Lazy media decoding mid-reveal

next/image marks anything below the fold loading="lazy"; on a first visit the fetch, decode and first paint land in the frame a reveal starts. The tell: frames drop, the longest main-thread task is ~20 ms — the stall is in raster/decode, not JS. The fix: decode the page's media up front — behind the opening loader if there is one — warming the next/image candidate, not the source file (references/fixes.md has the implementation and its four traps). Warm in idle time well after first interaction or under the loader, never "600 ms after the entrance" — that put a model decode on the first scroll (~700 ms stalls, observed).

Image sequences scrubbed by scroll (phones)

Each drawImage decodes synchronously on the main thread (3.3 s of decode in a 3,000 px scroll, observed). Ship a centre-cropped portrait set for portrait phones (~⅓ the bytes), size the canvas to the frame, decode ahead with createImageBitmap / img.decode() off the scroll path, request nearest-first a few per task (all 150 at once made a ~150 ms frame). Observed (2): janky → ideal hosted.

Hydration, lazy chunks and scene builds inside the scroll
  • A dynamic() chunk that loads on scroll lands its fetch, parse and mount in the revealing frame. Preload it after load, mount below-fold scenes on idle after load rather than on proximity, or stop making it dynamic.
  • Below-fold hydration (HydrateNear, RobotText lazy) trades TBT for a hydration frame mid-scroll. One site's on-approach hydration made mobile scroll janky every run (75–100 ms frames); one block per idle moment after load kept it smooth — rule (optimize-load §4). Check the scroll test either way.
  • The first scroll after a loader. Build the scene and hydrate the sections under the loader, not at its lift; split the curtain-lift's entrances into their own tasks (rule: a 54–73 ms lift frame gone). Stop Lenis while the loader is up — a preloader's overflow: hidden doesn't stop it: a wheel flick under one loader landed the page 1,643 px down. Details: mobile-device-qa §first scroll.
  • One bad frame at the loader's lift is not a scroll problem — it's the entrance; fix it there, don't chase it here.
Other first-visit costs
  1. Fonts — next/font only, Latin WOFF2 subsets. A late webfont reflows every text engine at once.
  2. First paint of a large composited layer — a full-bleed image, a backdrop-filter, a big filter: blur(). Pre-promote reveal layers: before blaming a blur or glass, render the reveals at rest — if the drops vanish, it's each block's first-frame layer promotion → will-change: opacity, transform from load until the reveal ends. Rule (3 sites — the glass was innocent each time).
  3. A panel fading in from opacity 0 isn't painted while transparent, so it all rasterises in its first visible frame (40–90 ms, main idle): will-change: opacity on the content keeps it painted (observed).
  4. Canvases gated by a scroll flag compile on their first draw — prewarm one hidden frame at mount (observed).
Show full SKILL.md (746 more words)Show less

3. Steady-state scroll cost

  • Blur once per line, never per letter or word. Every letter animating its own filter: blur() is a separate filtered layer re-rasterised per frame — desktop scroll janky with the main thread idle. Keep the per-letter opacity/transform stagger; put one blur on the line (or paragraph) that sharpens over the wave and is removed at rest. Rule (5+ sites: 5–6 % → < 1 % dropped; 575–925 ms freezes → none; body copy too — per-word blur on card paragraphs was 880 ms frames). Don't toggle the filter per letter mid-reveal (re-creates layers); exclude the LCP title (a blurred line-box became one site's LCP at 7 s). Use the line-reveal pattern the project sanctions (an ADR) — the engine is protected.
  • No permanent will-change on per-character spans. It makes every character a layer for the whole visit (~970 ms frames with a text-shadow halo, observed). Promote a character only while it moves; waiting = opacity: 0, settled = transform/filter: none.
  • One clock per text effect, latched — never restart on re-entry, or every title replays on the way back (warm 0.1 → 9.9 % dropped, observed).
  • Write per-frame styles only when they change, on the smallest element. Cache the last written value and skip equal writes; never write a CSS variable on <html> per frame (571 elements restyled per frame); never write pointer-driven variables during touch scroll. Rule (mobile 9 % → ~1 %; desktop 1.0 → 0 %, 117–130 restyles/frame gone).
  • Read scroll flags at the leaf. A flag that flips mid-scroll, read by card components, rebuilt every per-letter binding (150–240 ms React render, observed): subscribe only the canvas/video that needs it.
  • Never let a canvas buffer follow a scroll-scrubbed box — hold the buffer at the final size and stretch with CSS (optimize-3d-scene §6).
  • Everything per-frame goes through the shared ticker (src/lib/animation/ticker.ts). A component with its own rAF is a bug — and a duplicate loop also doubles motion speed (§5 of optimize-3d-scene).
  • getBoundingClientRect per frame per component. <SpringTrigger> / <ProgressTrigger> read layout every frame — hoist one measurement, gate on in-view, raise frameInterval.
  • Compositor-only properties. transform and opacity are free; filter, backdrop-filter, clip-path, width/height/top/left are not. Masks on glass repaint every frame (250–490 ms, observed twice).
  • background-attachment: fixed repaints on scroll — but profile the section before blaming the most suspicious CSS (profile.mjs --scroll-to); one site's fixed layers moved 53 → 50 dropped frames, the real cost was a per-frame CSS variable.
  • <Image fill> inside rounded, 3D-transformed tiles halved one phone's frame rate (observed).
  • <model-viewer> swallows touch scrolling — touch-action="pan-y" on it (observed).
  • Respect the engine's protection. src/components/animation/springs/ and src/hooks/animation/ are #do-not-modify without sign-off (hard rule 2). Fix the usage first.

4. Load cost

Owned by optimize-load (Lighthouse, people + robot). The page-side basics: hero image priority, everything else sized and lazy; next/font/local, no font-CDN <link>; Server Components by default; yarn build's First Load JS per route — a marketing route above ~120 KB gz deserves an explanation; grep -l ZodError .next/static/chunks/*.js prints nothing.

5. Prove it, then report it

Re-run the exact baseline command, same config, same runs. Report:

  • the numbers before and after (verdict, dropped %, worst frame, per device and pass) and the config/load they were taken under;
  • what you changed and why the measurement blamed it;
  • what you did not fix and why, and what you reverted;
  • anything you could not measure (a real phone's GPU, iOS).

Never report a fix you did not re-measure. "Should be faster" is not a result. Never change the design to win frames — a visual-weight trade (fewer particles, lighter blur) is the client's call: screenshot before/after and ask.

6. Then close the loop

  • yarn lint, npx tsc --noEmit -p ., yarn build, .claude/scripts/verify.sh — zero FAILs (hard rule 11).
  • qa-verify if any UI changed — a perf fix that breaks a reveal is not a win. Check the animations still play: warming a page by pre-scrolling it consumes every mode="once" reveal before anyone sees it.
  • node tools/qa/check-motion.mjs --url … — reduced motion and the robot form still answer (a looping spring under skipAnimation hangs the page).
  • Retro. Before closing, read your own notes once more: a fix with a measured before/after that the next project could reuse → obsidian/knowledge/fix-catalog.md (symptom, fix, evidence, rule/observed — a second site confirming an entry bumps its count; three makes it a rule); a hypothesis or tool reading that misled you → obsidian/knowledge/pitfalls.md; a skill that was wrong or silent → edit it now, and log it in obsidian/meta/changelog.md.
  • Update the vault in the same turn: obsidian/meta/changelog.md with the measured numbers, an ADR in obsidian/meta/decisions-log.md if the fix changed how the project works.

[[optimize-performance]] · [[optimize-3d-scene]] · [[optimize-load]] · [[mobile-device-qa]] · [[qa-verification]] · [[testing-pipeline]] · [[ship]]

© textura-agency, Unlicense. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (references) in .claude/skills/optimize-performance of textura-agency/next16-claude-starter.

  • SKILL.md
  • references/fixes.md
  • references/measuring.md

Open the folder on GitHubat commit 6c6edf9

Compare with similar skills

Optimize Performance 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.

Optimize Performance compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Optimize Performance this skilltextura-agency/next16-claude-starter133—~3.7kAutomated safety check: NotesUnlicense
Threejs Debug Profilermintdotgg/mint-threejs-skills114—~435Automated safety check: PassMIT
Threejs Debug Profilervalkor-ai/loom1.2k1 repos~602Automated safety check: PassApache-2.0
Vtj Anti PatternshexianWeb/Third-Person-MC195—~1.5kAutomated safety check: PassMIT
Image to Three.js Modelimg2threejs/img2threejs18k1 repos~8.2kAutomated safety check: PassApache-2.0
Web CloneJane-xiaoer/claude-skill-web-clone1k1 repos~2.7kAutomated safety check: PassMIT

Similar skills

  • Threejs Debug Profiler

    mintdotgg/mint-threejs-skills

    Diagnose Three.js rendering, loading, animation, resize, audio, physics, input, mobile, and performance problems using reproduction and measured evidence.

    114 GitHub stars~435 tokensUpdated 2 mo ago
    Game DevelopmentAuto-check passed
  • Debug and profile Three.js browser games: blank canvases, render and runtime bugs, asset and audio loading, animation, resize, mobile input, plus performance profiling of draw calls, triangles…

    1.2k GitHub starsUsed in 1 repo~602 tokens
    Game DevelopmentAuto-check passed
  • Vtj Anti Patterns

    hexianWeb/Third-Person-MC

    Prevents common mistakes and prohibited practices in vite-threejs projects.

    195 GitHub stars~1.5k tokensUpdated 2 mo ago
    Game DevelopmentAuto-check passed
  • Image to Three.js Model

    img2threejs/img2threejs

    Rebuilds the object in a reference image as a procedural, animation-ready Three.js model written entirely in code, using staged sculpting with quality checks.

    18k GitHub starsUsed in 1 repo~8.2k tokens
    Game DevelopmentAuto-check passed
  • Web Clone

    Jane-xiaoer/claude-skill-web-clone

    网站复刻 / 克隆方法论。USE WHEN 用户说 复刻网站、克隆网站、clone website、抄个站、仿站、 照着这个站做一个、reproduce site、还原某个网页效果、把这个站搬下来改成我的、 复刻某个交互/WebGL/Canvas/Three.js 效果。提供「先拿真源码 → 判路径 → 逆向拆解 → 搭工程 → 替换内容」的可移植决策树,覆盖静态站 /…

    1k GitHub starsUsed in 1 repo~2.7k tokens
    Game DevelopmentAuto-check passed
  • Threejs Game Director

    majidmanzarpour/threejs-game-skills

    Entrypoint for building, upgrading, and finishing Three.js browser games.

    2.5k GitHub stars~2.2k tokensUpdated 11 days ago
    Game DevelopmentAuto-check passed

More from textura-agency/next16-claude-starter

All 16 skills in this repo
  • Mobile Device QA

    textura-agency/next16-claude-starter

    Make a site behave on real phones — the defects no Lighthouse run or headless scroll test sees, learned from site owners reviewing production sites on an iPhone.

    133 GitHub stars~5k tokensUpdated 2 days ago
    Auto-check: notes
  • Optimize Load

    textura-agency/next16-claude-starter

    Get a page into Lighthouse's green zone on desktop and mobile, for people AND for the robot form crawlers get — build it, audit all four categories (Performance, Accessibility, Best Practices, SEO)…

    133 GitHub stars~4.6k tokensUpdated 2 days ago
    Auto-check: notes
  • Payload Admin

    textura-agency/next16-claude-starter

    Make a Payload admin feel like part of the site and explain itself — the skin re-tinted from the site's own tokens (calm, light, no added motion), the site's wordmark and favicon, a dashboard…

    133 GitHub stars~1.5k tokensUpdated 2 days ago
    Auto-check passed
  • Payload Cms

    textura-agency/next16-claude-starter

    Put a Payload CMS admin on a site built from this starter — every visible string and content photo editable, derived from the site's own content objects with the code's copy as the fallback, a…

    133 GitHub stars~3.7k tokensUpdated 2 days ago
    Auto-check: notes
  • Aeo Visibility

    textura-agency/next16-claude-starter

    Answer Engine Optimisation — make the site citable by ChatGPT, Claude, Perplexity, Gemini and AI Overviews.

    133 GitHub stars~1.4k tokensUpdated 2 days ago
    Auto-check: notes
  • Figma To Section

    textura-agency/next16-claude-starter

    Turn a Figma frame or node into components in this starter — the MCP call order, recording node IDs so later passes can re-fetch, downloading and verifying assets, mapping design values onto the…

    133 GitHub stars~1.4k tokensUpdated 2 days ago
    Auto-check: notes

Works with

Questions about Optimize Performance

What does Optimize Performance do?

Make a page in this starter actually smooth — build it, scroll it in real Chrome on PC and on an emulated phone, fix what the measurement blames, re-measure to prove it. Optimize Performance is an agent skill from textura-agency/next16-claude-starter. Make a page in this starter actually smooth — build it, scroll it in real Chrome on PC and on an emulated phone, fix what the measurement blames, re-measure to prove it.

When should I use Optimize Performance?

Optimize Performance fits situations like: the user says its slow; stutters on first scroll; laggy scrolling; optimise performance.

How do I install Optimize Performance in Claude Code?

Run `npx skills add textura-agency/next16-claude-starter --skill optimize-performance -a claude-code`. Or copy the skill folder (.claude/skills/optimize-performance in textura-agency/next16-claude-starter) into .claude/skills/optimize-performance in your project. Claude Code loads it when a task matches its description.

How do I install Optimize Performance in Codex?

Run `npx skills add textura-agency/next16-claude-starter --skill optimize-performance -a codex`. Or copy the skill folder (.claude/skills/optimize-performance in textura-agency/next16-claude-starter) into .agents/skills/optimize-performance in your project. Codex loads it when a task matches its description.

Can I use Optimize Performance 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 textura-agency/next16-claude-starter --skill optimize-performance -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/optimize-performance, .gemini/skills/optimize-performance, .github/skills/optimize-performance and .opencode/skills/optimize-performance in your project.

What does Optimize Performance need to run?

Going by SKILL.md and its folder, Optimize Performance needs the command-line tools its instructions call (yarn, node and npx). Its frontmatter pre-approves these tools: Bash, Read, Grep, Glob, Edit, Write.

Does Optimize Performance access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Optimize Performance safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Optimize Performance use?

Optimize Performance is published under the Unlicense licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Optimize Performance use?

About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.9k tokens, read only when the agent opens those files.

What are the alternatives to Optimize Performance?

Skills that share tags, products or a category with Optimize Performance: Threejs Debug Profiler (mintdotgg/mint-threejs-skills, 114 stars), Threejs Debug Profiler (valkor-ai/loom, 1.2k stars), Vtj Anti Patterns (hexianWeb/Third-Person-MC, 195 stars) and Image to Three.js Model (img2threejs/img2threejs, 18k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Optimize Performance?

textura-agency (a GitHub organization) maintains it in textura-agency/next16-claude-starter, which has 133 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on October 7, 2026.

Source: textura-agency/next16-claude-starter on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.