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.
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.
$ npx skills add textura-agency/next16-claude-starter --skill optimize-performance -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install textura-agency/next16-claude-starter optimize-performance --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/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-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 "optimize-performance" agent skill from https://github.com/textura-agency/next16-claude-starter/tree/main/.claude/skills/optimize-performance into .claude/skills/optimize-performance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "optimize-performance", 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/textura-agency/next16-claude-starter/tree/main/.claude/skills/optimize-performanceType 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 textura-agency/next16-claude-starter --skill optimize-performance -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install textura-agency/next16-claude-starter optimize-performance --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/textura-agency/next16-claude-starter.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/optimize-performance .agents/skills/optimize-performance && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "optimize-performance" agent skill from https://github.com/textura-agency/next16-claude-starter/tree/main/.claude/skills/optimize-performance into .agents/skills/optimize-performance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "optimize-performance", 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 textura-agency/next16-claude-starter --skill optimize-performance -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install textura-agency/next16-claude-starter optimize-performance --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/textura-agency/next16-claude-starter.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/optimize-performance .cursor/skills/optimize-performance && 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 "optimize-performance" agent skill from https://github.com/textura-agency/next16-claude-starter/tree/main/.claude/skills/optimize-performance into .cursor/skills/optimize-performance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "optimize-performance", 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/textura-agency/next16-claude-starter.git --path .claude/skills/optimize-performance--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 textura-agency/next16-claude-starter --skill optimize-performance -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install textura-agency/next16-claude-starter optimize-performance --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/textura-agency/next16-claude-starter.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/optimize-performance .gemini/skills/optimize-performance && 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 "optimize-performance" agent skill from https://github.com/textura-agency/next16-claude-starter/tree/main/.claude/skills/optimize-performance into .gemini/skills/optimize-performance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "optimize-performance", 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 textura-agency/next16-claude-starter optimize-performanceInstalls 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 textura-agency/next16-claude-starter --skill optimize-performance -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/textura-agency/next16-claude-starter.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/optimize-performance .github/skills/optimize-performance && 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 "optimize-performance" agent skill from https://github.com/textura-agency/next16-claude-starter/tree/main/.claude/skills/optimize-performance into .github/skills/optimize-performance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "optimize-performance", 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 textura-agency/next16-claude-starter --skill optimize-performance -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install textura-agency/next16-claude-starter optimize-performance --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/textura-agency/next16-claude-starter.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/optimize-performance .opencode/skills/optimize-performance && 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 "optimize-performance" agent skill from https://github.com/textura-agency/next16-claude-starter/tree/main/.claude/skills/optimize-performance into .opencode/skills/optimize-performance/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "optimize-performance", 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.
optimize-performanceMake 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. 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.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 6c6edf9. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadGrepGlobEditWriteFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
yarnnodenpxFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Bash, Read, Grep, Glob, Edit, WriteAutomated 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 textura-agency/next16-claude-starter at commit 6c6edf9, republished under its Unlicense licence (© textura-agency). 2,003 words, ~3,723 tokens.
.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.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 (
threeinpackage.json, or a canvas with a render loop) — hard rule 14 sends you tooptimize-3d-scenefirst. Come back here for the page around the scene.
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.
next dev. yarn build && yarn start. Kill the
old server by port first; start the new one only if the build succeeded.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.fetched during a pass is a freeze waiting for
a slower link.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 frameIt 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:
| cause | who owned the frame | look 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 |
script | JS — the LoAF names file, function, invoker (FrameRequestCallback = a rAF loop) | the named loop; per-frame writes §3 |
script: React render | a 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 chunk | a 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:
optimize-3d-scene §5).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.
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).
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.
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.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.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.next/font only, Latin WOFF2 subsets. A late webfont reflows
every text engine at once.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).will-change: opacity on the content keeps it painted (observed).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.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.<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).optimize-3d-scene §6).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.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).src/components/animation/springs/ and
src/hooks/animation/ are #do-not-modify without sign-off (hard rule 2).
Fix the usage first.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.
Re-run the exact baseline command, same config, same runs. Report:
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.
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).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.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
SKILL.md and 2 other files (references) in .claude/skills/optimize-performance of textura-agency/next16-claude-starter.
Open the folder on GitHubat commit 6c6edf9
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Optimize Performance this skilltextura-agency/next16-claude-starter | 133 | — | ~3.7k | Automated safety check: Notes | Unlicense | |
| Threejs Debug Profilermintdotgg/mint-threejs-skills | 114 | — | ~435 | Automated safety check: Pass | MIT | |
| Threejs Debug Profilervalkor-ai/loom | 1.2k | 1 repos | ~602 | Automated safety check: Pass | Apache-2.0 | |
| Vtj Anti PatternshexianWeb/Third-Person-MC | 195 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Image to Three.js Modelimg2threejs/img2threejs | 18k | 1 repos | ~8.2k | Automated safety check: Pass | Apache-2.0 | |
| Web CloneJane-xiaoer/claude-skill-web-clone | 1k | 1 repos | ~2.7k | Automated safety check: Pass | MIT |
mintdotgg/mint-threejs-skills
Diagnose Three.js rendering, loading, animation, resize, audio, physics, input, mobile, and performance problems using reproduction and measured evidence.
valkor-ai/loom
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…
hexianWeb/Third-Person-MC
Prevents common mistakes and prohibited practices in vite-threejs projects.
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.
Jane-xiaoer/claude-skill-web-clone
网站复刻 / 克隆方法论。USE WHEN 用户说 复刻网站、克隆网站、clone website、抄个站、仿站、 照着这个站做一个、reproduce site、还原某个网页效果、把这个站搬下来改成我的、 复刻某个交互/WebGL/Canvas/Three.js 效果。提供「先拿真源码 → 判路径 → 逆向拆解 → 搭工程 → 替换内容」的可移植决策树,覆盖静态站 /…
majidmanzarpour/threejs-game-skills
Entrypoint for building, upgrading, and finishing Three.js browser games.
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.
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)…
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…
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…
textura-agency/next16-claude-starter
Answer Engine Optimisation — make the site citable by ChatGPT, Claude, Perplexity, Gemini and AI Overviews.
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…
Works with
Categories
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.
Optimize Performance fits situations like: the user says its slow; stutters on first scroll; laggy scrolling; optimise performance.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.