ai-infrastructure-hugg…
Hugging Face Inference SDK patterns for TypeScript/Node.js — InferenceClient setup, chat completion, text generation, streaming, embeddings, image generation,…
UI component review patterns. Use when reviewing React components, hooks, props, state, styling, and accessibility. Covers rules of hooks, effect cleanup, render performance, list keys, keyboard and ARIA patterns.
$ npx -y skills add agents-inc/skills --skill meta-reviewing-web-reviewing --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/meta-reviewing-web-reviewingContext preview
The summary Claude sees to decide when to auto-load this skill.
UI component review patterns. Use when reviewing React components, hooks, props, state, styling, and accessibility. Covers rules of hooks, effect cleanup, render performance, list keys, keyboard and ARIA patterns.
name: meta-reviewing-web-reviewing description: UI component review patterns. Use when reviewing React components, hooks, props, state, styling, and accessibility. Covers rules of hooks, effect cleanup, render performance, list keys, keyboard and ARIA patterns.
> **Quick Guide:** When a diff touches UI components, verify hooks obey the rules of hooks with complete dependency arrays, effects clean up what they set up, list keys are stable, and interactive elements the diff adds are reachable by keyboard with accessible names. Judge performance concerns against evidence in the diff, not against a memoize-everything ideal.
---
<critical_requirements>
> **All code must follow project conventions in CLAUDE.md** (kebab-case, named exports, import ordering, `import type`, named constants)
**(You MUST verify hooks are called unconditionally at top level, with dependency arrays that name every value the callback reads)**
**(You MUST verify every effect that subscribes, registers a listener, or starts a timer returns a cleanup function)**
**(You MUST check every interactive element the diff adds for keyboard reachability and an accessible name)**
**(You MUST verify list keys are stable identities, not array indexes on lists that can reorder)**
**(You MUST check memoization against evidence: flag a missing memo only for a demonstrable cost in the diff, and flag speculative memo/useCallback wrapping as churn)**
</critical_requirements>
---
**Auto-detection:** review component, React PR review, hooks review, JSX diff, component code review, accessibility review, a11y check, re-render review
**When to use:**
**When NOT to use:**
**Key patterns covered:**
**Detailed Resources:**
---
<philosophy>
**Review the component the diff builds, not the component you would have built.** React offers many valid shapes for the same UI; flag deviations from the codebase's established patterns and genuine defects, not alternatives.
**When reviewing web code:**
**When NOT to flag:**
**Core principles:**
</philosophy>
---
<patterns>
Hooks must be unconditional and their dependency arrays complete.
## Hooks Review For EACH hook call in the diff: - [ ] Called at top level - not inside conditionals, loops, or early-return paths - [ ] Dependency array names every prop, state value, and function the callback reads - [ ] No dependency silenced with an eslint-disable that lacks a justifying comment - [ ] Functions used as dependencies are stable (defined outside, or wrapped where identity matters)
// Must Fix: stale closure - `filter` is read but not declared
useEffect(() => {
fetchItems(filter).then(setItems);
}, []); // runs once, forever using the first render's filter
// Good: complete dependencies
useEffect(() => {
fetchItems(filter).then(setItems);
}, [filter]);**Why this matters:** An incomplete dependency array pins the callback to stale values. The bug is invisible until the value changes, then the UI silently shows old data.
---
What an effect starts, its cleanup must stop.
## Effect Cleanup Review For EACH effect the diff adds or changes: - [ ] Subscriptions are unsubscribed in the returned cleanup - [ ] Event listeners added to window/document are removed - [ ] Timers (setTimeout/setInterval) are cleared - [ ] In-flight async work is guarded (AbortController or a cancelled flag) before setState
// Must Fix: listener leaks on every unmount/remount
useEffect(() => {
window.addEventListener("resize", onResize);
}, [onResize]);
// Good: symmetric cleanup
useEffect(() => {
window.addEventListener("resize", onResize);
return () => window.removeEventListener("resize", onResize);
}, [onResize]);**
The official skills marketplace for Agents Inc. 150+ skills covering everything from React and Prisma to Redis, ElevenLabs, and infrastructure tooling. Pick the skills that match your stack and install them via Claude Code. Need more control?
Repo: agents-inc/skills
Hugging Face Inference SDK patterns for TypeScript/Node.js — InferenceClient setup, chat completion, text generation, streaming, embeddings, image generation,…
LiteLLM proxy server setup, TypeScript client patterns via OpenAI SDK, model routing, fallbacks, load balancing, spend tracking, virtual keys, and production…
Serverless GPU compute platform for AI model deployment — web endpoints, GPU functions, model serving, and TypeScript client patterns
Local LLM inference with the Ollama JavaScript client -- chat, streaming, tool calling, vision, embeddings, structured output, model management, and…
Replicate SDK patterns for TypeScript/Node.js -- client setup, predictions, streaming, webhooks, file handling, model versioning, deployments, and training
Together AI SDK patterns for TypeScript — client setup, chat completions, streaming, structured output, function calling, embeddings, image generation,…