Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/patricio0312rev/skillsnpx agentmods add skills/patricio0312rev/skills/react-hook-builderWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/patricio0312rev/skills/react-hook-builder)<a href="https://agentmods.dev/skills/patricio0312rev/skills/react-hook-builder"><img src="https://agentmods.dev/badge/skills/patricio0312rev/skills/react-hook-builder/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/patricio0312rev/skills/react-hook-builder"><img src="https://agentmods.dev/badge/skills/patricio0312rev/skills/react-hook-builder.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00052 | $0.05770 |
| Opus 5 | $0.00026 | $0.02885 |
| Sonnet 5 | $0.00010 | $0.01154 |
| Haiku 4.5 | $0.00005 | $0.00577 |
Grade A, and why
react-hook-builder scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 6d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
const response = await fetch(url, { Copies of this mod
1 near-identical copy found in the catalogue:
- react-hook-builder — 100% identical, 0 lines differ
How it starts
The opening of the file, as written. The whole thing — 912 lines — stays where its author put it; the contents beside it link to each section on GitHub.
React Hook Builder
Build production-ready custom React hooks following best practices and TypeScript patterns.
Core Workflow
- Identify the pattern: Determine what logic to encapsulate
- Design the API: Define inputs, outputs, and options
- Add TypeScript types: Full type safety with generics
- Handle edge cases: Loading, errors, cleanup
- Optimize performance: Memoization where needed
- Write tests: Cover all states and scenarios
Hook Naming Conventions
// Always prefix with "use"
useLocalStorage // ✓
useDebounce // ✓
useFetch // ✓
localStorageHook // ✗
fetchData // ✗
Data Fetching Hooks
useFetch
// hooks/useFetch.ts
import { useState, useEffect, useCallback, useRef } from 'react';
interface UseFetchOptions<T> {
immediate?: boolean;
onSuccess?: (data: T) => void;
onError?: (error: Error) => void;
}
interface UseFetchResult<T> {
data: T | null;
error: Error | null;
isLoading: boolean;
isError: boolean;
isSuccess: boolean;
refetch: () => Promise<void>;
}
export function useFetch<T>(
url: string | null,
options: UseFetchOptions<T> = {}
): UseFetchResult<T> {
const { immediate = true, onSuccess, onError } = options;
const [data, setData] = useState<T | null>(null);
const [error, setError] = useState<Error | null>(null);
const [isLoading, setIsLoading] = useState(false);
const abortControllerRef = useRef<AbortController | null>(null);
const fetchData = useCallback(async () => {
if (!url) return;
// Cancel previous request
abortControllerRef.current?.abort();
abortControllerRef.current = new AbortController();
setIsLoading(true);
setError(null);
try {
const response = await fetch(url, {
signal: abortControllerRef.current.signal,
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const result = await response.json();
setData(result);
onSuccess?.(result);
} catch (err) {
if (err instanceof Error && err.name === 'AbortError') {
return; // Ignore abort errors
}
const error = err instanceof Error ? err : new Error('Unknown error');
setError(error);
onError?.(error);
} finally {
setIsLoading(false);
}
}, [url, onSuccess, onError]);
useEffect(() => {
if (immediate) {
fetchData();
}
return () => {
abortControllerRef.current?.abort();
};
}, [fetchData, immediate]);
return {
data,
error,
isLoading,
isError: !!error,
isSuccess: !!data && !error,
refetch: fetchData,
};
}
// Usage
function UserProfile({ userId }: { userId: string }) {
const { data: user, isLoading, error } = useFetch<User>(
`/api/users/${userId}`
);
if (isLoading) return <Spinner />;
if (error) return <Error message={error.message} />;
return <Profile user={user!} />;
}
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 6d ago First seen · 912 lines · 52 tokens per session scan A e10d4e2f2229
react-hook-builder is a skill published in the GitHub repository patricio0312rev/skills (60 stars, last pushed 8mo ago), licensed MIT. It adds 52 tokens to every session and 5,770 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other skills, from other repositories
component-creation
Step-by-step workflow for creating accessible, tested UI components. Use when the user asks to create a new UI component.
state-management
Workflow for choosing and implementing the right state management approach. Use when the user needs to manage state for a new feature or refactor.
nextjs-react19
Next.js with React 19 App Router patterns.
react-typescript
React with TypeScript best practices.
react-dev
React frontend conventions for this project. Use when building or modifying React components, hooks, state management, styling, or frontend tests.
21st-ui
Find, install, and generate UI with 21st.dev. Use when the user asks for a UI component (pricing table, hero, navbar, dashboard, form, etc.), wants design inspiration, needs a brand logo as an SVG component, or wants to generate new UI from a prompt.