agents-standards
Standards for authoring SDD plugin agents — frontmatter, self-containment, skill references, and no-user-interaction rules.
MVVM architecture standards for React/TypeScript frontends with TanStack ecosystem, TailwindCSS, and Shadcn UI.
Claude Code
$ npx -y skills add LiorCohen/sdd --skill frontend-standards --agent claude-code
Codex
$ npx skills add LiorCohen/sdd --skill frontend-standards -a codex -y
Cursor
$ npx skills add LiorCohen/sdd --skill frontend-standards -a cursor -y
Gemini CLI
$ npx skills add LiorCohen/sdd --skill frontend-standards -a gemini-cli -y
GitHub Copilot
$ npx skills add LiorCohen/sdd --skill frontend-standards -a github-copilot -y
OpenCode
$ npx skills add LiorCohen/sdd --skill frontend-standards -a opencode -y
Windsurf
$ npx skills add LiorCohen/sdd --skill frontend-standards -a windsurf -y
name: frontend-standards description: MVVM architecture standards for React/TypeScript frontends with TanStack ecosystem, TailwindCSS, and Shadcn UI.
MVVM architecture for React/TypeScript frontends with strict separation between View, ViewModel, and Model layers.
---
View (React Components) → ViewModel (Hooks) → Model (Business Logic)
↓ ↓ ↓
TailwindCSS TanStack Query Services/API
Shadcn UI useReducer+Context| Layer | Knows About | Example | |-------|-------------|---------| | **View** | UI rendering only | "Display user name in a card with blue border" | | **ViewModel** | State and handlers | "Fetch user, track loading, provide edit handler" | | **Model** | Business rules | "Format display name, check edit permissions" |
**Key Principle:** Views never contain business logic. ViewModels connect Views to Models. Models are framework-agnostic.
---
src/ ├── components/ # Shared presentational components │ ├── user_card/ │ │ ├── index.ts # Barrel exports only │ │ ├── user_card.tsx │ │ └── user_card.test.tsx │ └── ui/ # Shadcn UI primitives (see shadcn.md) │ ├── index.ts │ ├── button.tsx │ ├── dialog.tsx │ └── ... ├── hooks/ # Shared hooks (auth, user data, etc.) │ ├── index.ts │ ├── use_auth.ts │ ├── use_user_data.ts │ └── ... ├── lib/ # Pure utilities and helpers │ ├── index.ts │ ├── utils.ts # cn() — clsx + tailwind-merge │ └── ... ├── pages/ # Page components (View + ViewModel + Model) │ ├── home_page/ │ │ ├── index.ts │ │ ├── home_page.tsx │ │ ├── use_home_view_model.ts │ │ ├── home_model.ts │ │ └── home_page.test.tsx │ └── user_profile/ │ ├── index.ts │ ├── user_profile.tsx │ ├── use_user_profile_view_model.ts │ ├── user_profile_model.ts │ └── user_profile.test.tsx ├── routes/ # TanStack Router route definitions │ ├── index.ts │ └── routes.tsx # createAppRouter() factory ├── services/ # API clients and external services (flat) │ ├── index.ts │ ├── users.ts │ ├── auth.ts │ └── ... ├── types/ # App-local type definitions │ ├── index.ts │ └── ... └── index.ts # Entry point (only file with side-effects)
Only the following `src/` subdirectories are permitted:
**No new top-level `src/` directories.** If something doesn't fit, it belongs in one of the above.
---
All `index.ts` files must be **pure barrels** — imports and re-exports only. No logic, no side effects.
// src/hooks/index.ts — GOOD: pure barrel
export { useAuth } from './use_auth';
export { useUserData } from './use_user_data';---
Every subdirectory has an `index.ts` barrel. All imports from outside a directory go through its barrel.
// GOOD: barrel import
import { useAuth } from '@/hooks';
import { cn } from '@/lib';
import { fetchUser } from '@/services';
// BAD: deep import
import { useAuth } from '@/hooks/use_auth';
import { cn } from '@/lib/cn';
import { fetchUser } from '@/services/users';**Inside a module, nothing should ever import from its own `index.ts`.** All imports within a module must use relative paths. The barrel is the module's public API for external consumers only. For nested modules, the same barrel rules apply.
// In components/layout/layout.tsx:
// GOOD: relative path to sibling sub-module barrel
import { Sidebar } from '../sidebar';
import { Button } from '../ui';
// BAD: importing from own module's barrel — circular dependency
import { Sidebar } from '@/components';
import { Sidebar } from '@/components/sidebar';---
Only `src/index.ts` (the app entry point) may have module-level side-effects (CSS import, `ReactDOM.render`, window assignment). All other files must be side-effect free.
// src/index.ts — OK: entry point, side-effects allowed
import './index.css';
import { createRoot } from 'react-dom/client';
import { App } from '@/components';
const root = createRoot(document.getElementById('root')!);
root.render(<App />);
// src/lib/utils.ts — GOOD: no side-effects, exports only
import { clsx, type ClassValue } from 'clsx';
import { twMerge } from 'tailwind-merge';
export const cn = (...inputs: ClassValue[]) => twMerge(clsx(inputs));---
`QueryClient` and router instances must be lazily created via `useState` hooks inside provider components. No direct instantiation at module scope.
// GOOD: lazy creation inside component
import { useState } from 'react';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
export const AppQueryProvider = ({ children }: { readonly children: React.ReactNode }) => {
const [queryClient] = useState(() => new QueryClient({
defaultOptions: { queries: { staleTime: 5 * 60 * 1000 } },
}));
return <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>;
};
// BAD: module-scope instantiation (sidStructure for AI-assisted development AI coding assistants are powerful but chaotic. You prompt, you get code, but then what?
Standards for authoring SDD plugin agents — frontmatter, self-containment, skill references, and no-user-interaction rules.
Standards for authoring SDD plugin commands — frontmatter, user interaction, skill/agent invocation, CLI integration, and output…
Create a commit following repository guidelines with proper versioning and changelog updates.
Two-step self-review at every task lifecycle phase. Step 1 (this skill) runs in-context to gather session signals — files read vs…
D2 diagramming language reference for architecture diagrams, sequence diagrams, grid layouts, SQL tables, and class diagrams.…
Writes and maintains user-facing documentation for the SDD plugin. Proactively detects when docs are out of sync with plugin…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.