Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/ggombee/code-forge/zustand-tanstacknpx skills add ggombee/code-forge --skill zustand-tanstackgit clone --depth 1 https://github.com/ggombee/code-forgeWhat 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 | $0.00035 | $0.01647 |
| Opus 5 | $0.00017 | $0.00823 |
| Sonnet 5 | $0.00007 | $0.00329 |
| Haiku 4.5 | $0.00003 | $0.00165 |
Grade A, and why
zustand-tanstack scanned grade A with 0 findings 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 2d 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.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 259 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Zustand + TanStack Query 상태 관리 컨벤션
상태 분리 원칙
| 상태 유형 | 도구 | 예시 |
|---|---|---|
| 서버 상태 | TanStack Query | 주문 목록, 사용자 정보 |
| 전역 클라이언트 상태 | Zustand | 선택된 탭, 사이드바 열림 여부 |
| 폼 상태 | React Hook Form | 입력값, 유효성 검사 |
| 로컬 UI 상태 | useState | 모달 열림/닫힘 |
디렉토리 구조
store/
├── useAuthStore.ts # 인증 상태
├── useUIStore.ts # UI 전역 상태
└── useFilterStore.ts # 필터/검색 상태
queries/
├── order/
│ ├── index.ts # useOrderQuery, useOrderMutation
│ └── queryKeys.ts # 쿼리 키 팩토리
└── user/
├── index.ts
└── queryKeys.ts
Zustand Store 생성
기본 패턴
// store/useAuthStore.ts
import { create } from 'zustand';
import { devtools, persist } from 'zustand/middleware';
interface User {
id: string;
name: string;
email: string;
}
interface AuthState {
user: User | null;
isAuthenticated: boolean;
// Actions
login: (user: User) => void;
logout: () => void;
}
export const useAuthStore = create<AuthState>()(
devtools(
persist(
(set) => ({
user: null,
isAuthenticated: false,
login: (user) => set({ user, isAuthenticated: true }, false, 'login'),
logout: () => set({ user: null, isAuthenticated: false }, false, 'logout'),
}),
{
name: 'auth-storage', // localStorage key
partialize: (state) => ({ user: state.user }), // 저장할 필드만 선택
},
),
{ name: 'AuthStore' }, // DevTools 이름
),
);
UI 상태 store
// store/useUIStore.ts
import { create } from 'zustand';
import { devtools } from 'zustand/middleware';
interface UIState {
isSidebarOpen: boolean;
activeTab: string;
// Actions
toggleSidebar: () => void;
setActiveTab: (tab: string) => void;
}
export const useUIStore = create<UIState>()(
devtools(
(set) => ({
isSidebarOpen: true,
activeTab: 'overview',
toggleSidebar: () =>
set((state) => ({ isSidebarOpen: !state.isSidebarOpen }), false, 'toggleSidebar'),
setActiveTab: (tab) =>
set({ activeTab: tab }, false, 'setActiveTab'),
}),
{ name: 'UIStore' },
),
);
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.
- 2d ago First seen · 259 lines · 35 tokens per session scan A 8d361e32da04
zustand-tanstack is a skill published in the GitHub repository ggombee/code-forge (13 stars, last pushed 2mo ago), licensed MIT. It adds 35 tokens to every session and 1,647 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
systematic-debugging
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes.
next-cache-components-adoption
Turn on Cache Components in a Next.js app and resolve the blocking routes it surfaces. Use when the user wants to enable, adopt, or migrate to Cache Components, flip the cacheComponents flag, work through a flood of blocking-prerender / instant validation errors, run the cache-components-instant-false codemod, or…
babysit-pr
Babysit a GitHub pull request after creation by continuously polling review comments, CI checks/workflow runs, and mergeability state until the PR is merged/closed or user help is required. Diagnose failures, retry likely flaky failures up to 3 times, auto-fix/push branch-related issues when appropriate, and keep…
imagegen
Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output…
cpu-profile-analysis
Analyze V8/Chrome CPU profiles (.cpuprofile) and DevTools trace files (Trace-.json). Use when: profiling performance, investigating slow functions, comparing code paths, finding bottlenecks, analyzing timeToRequest, understanding call trees from sampling profiler data, analyzing layout/paint/rendering, investigating…
next-cache-components-optimizer
Drive a Next.js route to instant navigation by setting up an agentic loop, under Cache Components / PPR, on initial load (hard navigation) and client-side navigation (soft navigation). Encode the goal as a failing @next/playwright instant() e2e and work it to green, one verified route at a time; the shipped test then…