SkillAtlasSkill 详情

react-dev

Opinionated skills shared by @leonardocouy for improving daily work efficiency with Claude Code.

审核状态:已审核Quality 80Security 88

复制安装命令

用 Codex 或 Claude 安装复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它先审查 Skill 页面再帮你安装。

复制前请先查看来源、License 和安全提示。

项目 README

来源文件:README.md

抓取于 2026年8月15日

Softaworks Agent Skills

Opinionated skills shared by @leonardocouy for improving daily work efficiency with Claude Code. Skills are packaged instructions and scripts that extend agent capabilities across development, documentation, planning, and professional workflows.

Skills follow the Agent Skills format.


🧭 Quick Navigation

🚀 Installation • 📚 Available Skills • 🤖 Agents & Commands • 📖 Skill Structure • 🤝 Contributing • 📄 License • 🔗 Links


🚀 Installation

Quick Install (Recommended)

npx skills add softaworks/agent-toolkit

This method works with multiple AI coding agents (Claude Code, Codex, Cursor, AdaL, etc.)

Register as Plugin Marketplace

Run the following commands in Claude Code:

/plugin marketplace add softaworks/agent-toolkit
/plugin

Install Plugins

Option 1: Via Browse UI

  1. Switch to Marketplaces tab (use arrow keys or Tab)
  2. Select agent-toolkit, press Enter
  3. Browse and select the plugin(s) you want to install
  4. Select Install now

Option 2: Direct Install

# Install specific skill
/plugin install codex@agent-toolkit
/plugin install humanizer@agent-toolkit

# Install specific agent
/plugin install agent-codebase-pattern-finder@agent-toolkit

# Install specific command
/plugin install command-codex-plan@agent-toolkit

Option 3: Ask the Agent

Simply tell Claude Code:

Please install Skills from github.com/softaworks/agent-toolkit

Available Plugins

Each skill, agent, and command is an individual plugin that can be installed separately:

  • Skills → See Available Skills for the full list
  • Agents → See Agents (install as agent-<name>@agent-toolkit)
  • Commands → See Slash Commands (install as command-<name>@agent-toolkit)

Update Plugins

To update plugins to the latest version:

  1. Run /plugin in Claude Code
  2. Switch to Marketplaces tab
  3. Select agent-toolkit
  4. Choose Update marketplace

You can also Enable auto-update to get the latest versions automatically.

Manual Installation

For Claude Code (Manual) — Skills only

cp -r skills/<skill-name> ~/.claude/skills/

For claude.ai — Skills only

Add skills to project knowledge or paste SKILL.md contents into the conversation.


📚 Available Skills

CategorySkillDescription
🤖 AI ToolscodexAdvanced code analysis with GPT-5.2
🤖 AI ToolsgeminiLarge-scale review (200k+ context)
🤖 AI ToolsperplexityWeb search & research
🔮 Metaagent-md-refactorRefactor bloated agent instruction files
🔮 Metacommand-creatorCreate Claude Code slash commands
🔮 Metaplugin-forgeBuild Claude Code plugins & manifests
🔮 Metaskill-judgeEvaluate skill design quality
📝 Documentationbackend-to-frontend-handoff-docsAPI handoff docs for frontend
📝 Documentationc4-architectureC4 architecture diagrams with Mermaid
📝 Documentationcrafting-effective-readmesWrite effective README files
📝 Documentationdraw-ioCreate & edit draw.io diagrams
📝 DocumentationexcalidrawWork with Excalidraw diagrams
📝 Documentationfrontend-to-backend-requirementsDocument API requirements
📝 Documentationmarp-slideProfessional presentation slides
📝 Documentationmermaid-diagramsSoftware diagrams with Mermaid
📝 Documentationwriting-clearly-and-conciselyClear, professional writing
🎨 Design & Frontenddesign-system-starterCreate design systems
🎨 Design & FrontendmuiMaterial-UI v7 patterns
🎨 Design & Frontendopenapi-to-typescriptConvert OpenAPI to TypeScript
🎨 Design & Frontendreact-devType-safe React 18-19 with TypeScript
🎨 Design & Frontendreact-useeffectReact useEffect best practices
🛠️ Developmentdatabase-schema-designerDesign robust database schemas
🛠️ Developmentdependency-updaterSmart dependency management
🛠️ Developmentnaming-analyzerSuggest better variable/function names
🛠️ Developmentlesson-learnedExtract SE lessons from recent code changes
🛠️ Developmentreducing-entropyMinimize codebase size
🛠️ Developmentsession-handoffSeamless AI session transfers
🎯 Planninggame-changing-featuresFind 10x product opportunities
🎯 PlanninggepettoDetailed implementation planning
🎯 Planningrequirements-clarityClarify requirements before coding
🎯 Planningship-learn-nextTurn learning into actionable reps
👔 Professionaldaily-meeting-updateInteractive daily standup generator
👔 Professionaldifficult-workplace-conversationsNavigate difficult conversations
👔 Professionalfeedback-masteryDeliver constructive feedback
👔 Professionalprofessional-communicationTechnical communication guide
🧪 Testingqa-test-plannerComprehensive QA test planning
📦 Gitcommit-workHigh-quality git commits
🔧 Utilitiesdatadog-cliDebug with Datadog logs & metrics
🔧 Utilitiesdomain-name-brainstormerGenerate & check domain names
🔧 UtilitieshumanizerRemove AI writing patterns
🔧 Utilitiesmeme-factoryGenerate memes with API
🔧 UtilitiesjiraNatural language Jira interaction
🔧 Utilitiesweb-to-markdownConvert webpages to Markdown

🤖 Agents & Commands

Requires Claude Code CLI — These agents and commands are exclusive to Claude Code users.

For full access, add the marketplace and install plugins:

/plugin marketplace add softaworks/agent-toolkit
/plugin install codex@agent-toolkit

Agents

Specialized sub-agents that Claude Code can delegate tasks to:

AgentDescription
ascii-ui-mockup-generatorVisualize UI concepts through ASCII mockups
codebase-pattern-finderFind similar implementations and patterns
communication-excellence-coachEmail refinement, tone calibration, roleplay
general-purposeDefault agent for complex multi-step tasks
mermaid-diagram-specialistCreate flowcharts, sequence diagrams, ERDs
ui-ux-designerResearch-backed UI/UX design feedback

Slash Commands

Reusable workflows invoked with /command-name:

CommandDescription
/codex-planCreate implementation plans using Codex 5.2
/compose-emailDraft professional emails
/explain-changes-mental-modelBuild mental model of code changes
/explain-pr-changesGenerate PR summaries
/sync-branchSync feature branch with main
/sync-skills-readmeUpdate README skills table
/viral-tweetOptimize tweet ideas for X engagement

📖 Skill Structure

Each skill contains:

  • SKILL.md - Detailed instructions for the agent (with YAML frontmatter)
  • README.md - User-friendly documentation with examples
  • scripts/ - Helper scripts for automation (optional)
  • references/ - Supporting documentation (optional)

🤝 Contributing

Contributions are welcome! When adding new skills:

  1. Follow the Agent Skills format
  2. Include both SKILL.md (for agents) and README.md (for users)
  3. Add YAML frontmatter to SKILL.md with name: and description: fields
  4. Update this README.md with a link to your skill

📄 License

MIT


🔗 Links

开发与工程Agent / MCP / Skill 创作

中风险

  • 来源需自行核对维护者身份。
  • 未检测到明显脚本安装指令。
  • 未检测到明显外部权限要求。
  • 未检测到高风险命令。
  • 扫描发现:1 条。

Codex — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/softaworks/agent-toolkit.git
  3. 将 "skills/react-dev" 文件夹复制到 Codex 的 skills 目录中。
  4. 重启 Codex 让新的 skill 生效。

Codex — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Codex 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Codex 让新的 skill 生效。

Claude Code — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/softaworks/agent-toolkit.git
  3. 将 "skills/react-dev" 文件夹复制到 Claude Code 的 skills 目录中。
  4. 重启 Claude Code 让新的 skill 生效。

Claude Code — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Claude Code 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Claude Code 让新的 skill 生效。

Cursor — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/softaworks/agent-toolkit.git
  3. 将 "skills/react-dev" 文件夹复制到 Cursor 的 skills 目录中。
  4. 重启 Cursor 让新的 skill 生效。

Cursor — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Cursor 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Cursor 让新的 skill 生效。

GitHub Copilot — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/softaworks/agent-toolkit.git
  3. 将 "skills/react-dev" 文件夹复制到 GitHub Copilot 的 skills 目录中。
  4. 重启 GitHub Copilot 让新的 skill 生效。

GitHub Copilot — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 GitHub Copilot 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 GitHub Copilot 让新的 skill 生效。

Windsurf — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/softaworks/agent-toolkit.git
  3. 将 "skills/react-dev" 文件夹复制到 Windsurf 的 skills 目录中。
  4. 重启 Windsurf 让新的 skill 生效。

Windsurf — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Windsurf 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Windsurf 让新的 skill 生效。
查看 SKILL.md 原文
name: react-dev
version: 1.0.0
description: This skill should be used when building React components with TypeScript, typing hooks, handling events, or when React TypeScript, React 19, Server Components are mentioned. Covers type-safe patterns for React 18-19 including generic components, proper event typing, and routing integration (TanStack Router, React Router).

React TypeScript

Type-safe React = compile-time guarantees = confident refactoring.

<when_to_use>

  • Building typed React components
  • Implementing generic components
  • Typing event handlers, forms, refs
  • Using React 19 features (Actions, Server Components, use())
  • Router integration (TanStack Router, React Router)
  • Custom hooks with proper typing

NOT for: non-React TypeScript, vanilla JS React

</when_to_use>

<react_19_changes>

React 19 breaking changes require migration. Key patterns:

ref as prop - forwardRef deprecated:

// React 19 - ref as regular prop
type ButtonProps = {
  ref?: React.Ref<HTMLButtonElement>;
} & React.ComponentPropsWithoutRef<'button'>;

function Button({ ref, children, ...props }: ButtonProps) {
  return <button ref={ref} {...props}>{children}</button>;
}

useActionState - replaces useFormState:

import { useActionState } from 'react';

type FormState = { errors?: string[]; success?: boolean };

function Form() {
  const [state, formAction, isPending] = useActionState(submitAction, {});
  return <form action={formAction}>...</form>;
}

use() - unwraps promises/context:

function UserProfile({ userPromise }: { userPromise: Promise<User> }) {
  const user = use(userPromise); // Suspends until resolved
  return <div>{user.name}</div>;
}

See react-19-patterns.md for useOptimistic, useTransition, migration checklist.

</react_19_changes>

<component_patterns>

Props - extend native elements:

type ButtonProps = {
  variant: 'primary' | 'secondary';
} & React.ComponentPropsWithoutRef<'button'>;

function Button({ variant, children, ...props }: ButtonProps) {
  return <button className={variant} {...props}>{children}</button>;
}

Children typing:

type Props = {
  children: React.ReactNode;          // Anything renderable
  icon: React.ReactElement;           // Single element
  render: (data: T) => React.ReactNode;  // Render prop
};

Discriminated unions for variant props:

type ButtonProps =
  | { variant: 'link'; href: string }
  | { variant: 'button'; onClick: () => void };

function Button(props: ButtonProps) {
  if (props.variant === 'link') {
    return <a href={props.href}>Link</a>;
  }
  return <button onClick={props.onClick}>Button</button>;
}

</component_patterns>

<event_handlers>

Use specific event types for accurate target typing:

// Mouse
function handleClick(e: React.MouseEvent<HTMLButtonElement>) {
  e.currentTarget.disabled = true;
}

// Form
function handleSubmit(e: React.FormEvent<HTMLFormElement>) {
  e.preventDefault();
  const formData = new FormData(e.currentTarget);
}

// Input
function handleChange(e: React.ChangeEvent<HTMLInputElement>) {
  console.log(e.target.value);
}

// Keyboard
function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {
  if (e.key === 'Enter') e.currentTarget.blur();
}

See event-handlers.md for focus, drag, clipboard, touch, wheel events.

</event_handlers>

<hooks_typing>

useState - explicit for unions/null:

const [user, setUser] = useState<User | null>(null);
const [status, setStatus] = useState<'idle' | 'loading'>('idle');

useRef - null for DOM, value for mutable:

const inputRef = useRef<HTMLInputElement>(null);  // DOM - use ?.
const countRef = useRef<number>(0);               // Mutable - direct access

useReducer - discriminated unions for actions:

type Action =
  | { type: 'increment' }
  | { type: 'set'; payload: number };

function reducer(state: State, action: Action): State {
  switch (action.type) {
    case 'set': return { ...state, count: action.payload };
    default: return state;
  }
}

Custom hooks - tuple returns with as const:

function useToggle(initial = false) {
  const [value, setValue] = useState(initial);
  const toggle = () => setValue(v => !v);
  return [value, toggle] as const;
}

useContext - null guard pattern:

const UserContext = createContext<User | null>(null);

function useUser() {
  const user = useContext(UserContext);
  if (!user) throw new Error('useUser outside UserProvider');
  return user;
}

See hooks.md for useCallback, useMemo, useImperativeHandle, useSyncExternalStore.

</hooks_typing>

<generic_components>

Generic components infer types from props - no manual annotations at call site.

Pattern - keyof T for column keys, render props for custom rendering:

type Column<T> = {
  key: keyof T;
  header: string;
  render?: (value: T[keyof T], item: T) => React.ReactNode;
};

type TableProps<T> = {
  data: T[];
  columns: Column<T>[];
  keyExtractor: (item: T) => string | number;
};

function Table<T>({ data, columns, keyExtractor }: TableProps<T>) {
  return (
    <table>
      <thead>
        <tr>{columns.map(col => <th key={String(col.key)}>{col.header}</th>)}</tr>
      </thead>
      <tbody>
        {data.map(item => (
          <tr key={keyExtractor(item)}>
            {columns.map(col => (
              <td key={String(col.key)}>
                {col.render ? col.render(item[col.key], item) : String(item[col.key])}
              </td>
            ))}
          </tr>
        ))}
      </tbody>
    </table>
  );
}

Constrained generics for required properties:

type HasId = { id: string | number };

function List<T extends HasId>({ items }: { items: T[] }) {
  return <ul>{items.map(item => <li key={item.id}>...</li>)}</ul>;
}

See generic-components.md for Select, List, Modal, FormField patterns.

</generic_components>

<server_components>

React 19 Server Components run on server, can be async.

Async data fetching:

export default async function UserPage({ params }: { params: { id: string } }) {
  const user = await fetchUser(params.id);
  return <div>{user.name}</div>;
}

Server Actions - 'use server' for mutations:

'use server';

export async function updateUser(userId: string, formData: FormData) {
  await db.user.update({ where: { id: userId }, data: { ... } });
  revalidatePath(`/users/${userId}`);
}

Client + Server Action:

'use client';

import { useActionState } from 'react';
import { updateUser } from '@/actions/user';

function UserForm({ userId }: { userId: string }) {
  const [state, formAction, isPending] = useActionState(
    (prev, formData) => updateUser(userId, formData), {}
  );
  return <form action={formAction}>...</form>;
}

use() for promise handoff:

// Server: pass promise without await
async function Page() {
  const userPromise = fetchUser('123');
  return <UserProfile userPromise={userPromise} />;
}

// Client: unwrap with use()
'use client';
function UserProfile({ userPromise }: { userPromise: Promise<User> }) {
  const user = use(userPromise);
  return <div>{user.name}</div>;
}

See server-components.md for parallel fetching, streaming, error boundaries.

</server_components>

Both TanStack Router and React Router v7 provide type-safe routing solutions.

TanStack Router - Compile-time type safety with Zod validation:

import { createRoute } from '@tanstack/react-router';
import { z } from 'zod';

const userRoute = createRoute({
  path: '/users/$userId',
  component: UserPage,
  loader: async ({ params }) => ({ user: await fetchUser(params.userId) }),
  validateSearch: z.object({
    tab: z.enum(['profile', 'settings']).optional(),
    page: z.number().int().positive().default(1),
  }),
});

function UserPage() {
  const { user } = useLoaderData({ from: userRoute.id });
  const { tab, page } = useSearch({ from: userRoute.id });
  const { userId } = useParams({ from: userRoute.id });
}

React Router v7 - Automatic type generation with Framework Mode:

import type { Route } from "./+types/user";

export async function loader({ params }: Route.LoaderArgs) {
  return { user: await fetchUser(params.userId) };
}

export default function UserPage({ loaderData }: Route.ComponentProps) {
  const { user } = loaderData; // Typed from loader
  return <h1>{user.name}</h1>;
}

See tanstack-router.md for TanStack patterns and react-router.md for React Router patterns.

ALWAYS:

  • Specific event types (MouseEvent, ChangeEvent, etc)
  • Explicit useState for unions/null
  • ComponentPropsWithoutRef for native element extension
  • Discriminated unions for variant props
  • as const for tuple returns
  • ref as prop in React 19 (no forwardRef)
  • useActionState for form actions
  • Type-safe routing patterns (see routing section)

NEVER:

  • any for event handlers
  • JSX.Element for children (use ReactNode)
  • forwardRef in React 19+
  • useFormState (deprecated)
  • Forget null handling for DOM refs
  • Mix Server/Client components in same file
  • Await promises when passing to use()

发现问题?提交给管理员复核

评分:

评论 (0)

暂无评论,成为第一个评论者吧!