Token导航 LogoToken导航

Agent Skill · 研究检索

senior-frontend(高级前端)

用于辅助前端页面、组件、样式和交互逻辑的开发与维护。它适合让 Agent 生成或审查 React、Next.js、Vue、Tailwind、CSS 等相关代码,整理组件结构,或定位布局和性能问题。使用时需要结合项目现有设计系统、路由和构建方式,避免只生成孤立片段;涉及页面改动时,应配合本地预览和构建检查确认视觉效果。

senior-frontend 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为操作浏览器;许可证为 MIT,第三方扫描已通过,按安装量在研究检索类的 73,675 个 Skill 里排第 23,842。

总安装 4,167周安装 179GitHub Stars 103下载 1,461核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:senior-frontend(高级前端)
来源仓库:https://github.com/borghei/claude-skills
仓库路径:skills/senior-frontend
安装命令:
npx skills add https://github.com/borghei/claude-skills --skill senior-frontend
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。不同来源提供的安装方式可能略有差异;本站展示可直接复制的安装命令,安装前请核对来源页面。

skills.shnpx skills
npx skills add https://github.com/borghei/claude-skills --skill senior-frontend

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

用于辅助前端页面、组件、样式和交互逻辑的开发与维护。它适合让 Agent 生成或审查 React、Next.js、Vue、 Tailwind、CSS 等相关代码,整理组件结构,或定位布局和性能问题。

使用时需要结合项目现有设计系统、路由和构建方式,避免只生成孤立片段; 涉及页面改动时,应配合本地预览和构建检查确认视觉效果。

来源仓库内路径:skills/senior-frontend

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/borghei/claude-skills --skill senior-frontend;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要操作浏览器,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

senior-frontend 怎么安装?

在终端执行 npx skills add https://github.com/borghei/claude-skills --skill senior-frontend。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

senior-frontend 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

senior-frontend 需要什么权限?

权限级别是操作浏览器。该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

senior-frontend 是免费的吗?

来源标注的许可证是 MIT。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

senior-frontend 用的人多吗?

公开数据是累计安装 4,167 次,近一周安装 179 次,下载 1,461 次,GitHub 103 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

senior-frontend 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 3 个目录同时收录,说明这个 Skill 流传比较广。
  • 许可证明确为 MIT,商用和分发边界好判断。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。
  • 需要许可证清楚、并且有第三方扫描结果的团队项目。

不太适合

  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
senior-frontend

高级前端 · 本页

4,167103操作浏览器MIT通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Senior Frontend

Frontend development patterns, performance optimization, and automation tools for React/Next.js applications.

Table of Contents


Project Scaffolding

Generate a new Next.js or React project with TypeScript, Tailwind CSS, and best practice configurations.

Workflow: Create New Frontend Project

  1. Run the scaffolder with your project name and template: python scripts/frontend_scaffolder.py my-app --template nextjs
  2. Add optional features (auth, api, forms, testing, storybook): python scripts/frontend_scaffolder.py dashboard --template nextjs --features auth,api
  3. Navigate to the project and install dependencies: cd my-app && npm install
  4. Start the development server: npm run dev

Scaffolder Options

OptionDescription
--template nextjsNext.js 14+ with App Router and Server Components
--template reactReact + Vite with TypeScript
--features authAdd NextAuth.js authentication
--features apiAdd React Query + API client
--features formsAdd React Hook Form + Zod validation
--features testingAdd Vitest + Testing Library
--dry-runPreview files without creating them

Generated Structure (Next.js)

my-app/
├── app/
│   ├── layout.tsx        # Root layout with fonts
│   ├── page.tsx          # Home page
│   ├── globals.css       # Tailwind + CSS variables
│   └── api/health/route.ts
├── components/
│   ├── ui/               # Button, Input, Card
│   └── layout/           # Header, Footer, Sidebar
├── hooks/                # useDebounce, useLocalStorage
├── lib/                  # utils (cn), constants
├── types/                # TypeScript interfaces
├── tailwind.config.ts
├── next.config.js
└── package.json

Component Generation

Generate React components with TypeScript, tests, and Storybook stories.

Workflow: Create a New Component

  1. Generate a client component: python scripts/component_generator.py Button --dir src/components/ui
  2. Generate a server component: python scripts/component_generator.py ProductCard --type server
  3. Generate with test and story files: python scripts/component_generator.py UserProfile --with-test --with-story
  4. Generate a custom hook: python scripts/component_generator.py FormValidation --type hook

Generator Options

OptionDescription
--type clientClient component with 'use client' (default)
--type serverAsync server component
--type hookCustom React hook
--with-testInclude test file
--with-storyInclude Storybook story
--flatCreate in output dir without subdirectory
--dry-runPreview without creating files

Generated Component Example

'use client';

import { useState } from 'react';
import { cn } from '@/lib/utils';

interface ButtonProps {
  className?: string;
  children?: React.ReactNode;
}

export function Button({ className, children }: ButtonProps) {
  return (
    <div className={cn('', className)}>
      {children}
    </div>
  );
}

Bundle Analysis

Analyze package.json and project structure for bundle optimization opportunities.

Workflow: Optimize Bundle Size

  1. Run the analyzer on your project: python scripts/bundle_analyzer.py /path/to/project
  2. Review the health score and issues: Bundle Health Score: 75/100 (C) HEAVY DEPENDENCIES: moment (290KB) Alternative: date-fns (12KB) or dayjs (2KB) lodash (71KB) Alternative: lodash-es with tree-shaking
  3. Apply the recommended fixes by replacing heavy dependencies.
  4. Re-run with verbose mode to check import patterns: python scripts/bundle_analyzer.py. --verbose

Bundle Score Interpretation

ScoreGradeAction
90-100ABundle is well-optimized
80-89BMinor optimizations available
70-79CReplace heavy dependencies
60-69DMultiple issues need attention
0-59FCritical bundle size problems

Heavy Dependencies Detected

The analyzer identifies these common heavy packages:

PackageSizeAlternative
moment290KBdate-fns (12KB) or dayjs (2KB)
lodash71KBlodash-es with tree-shaking
axios14KBNative fetch or ky (3KB)
jquery87KBNative DOM APIs
@mui/materialLargeshadcn/ui or Radix UI

React Patterns

Reference: references/react_patterns.md

Compound Components

Share state between related components:

const Tabs = ({ children }) => {
  const [active, setActive] = useState(0);
  return (
    <TabsContext.Provider value={{ active, setActive }}>
      {children}
    </TabsContext.Provider>
  );
};

Tabs.List = TabList;
Tabs.Panel = TabPanel;

// Usage
<Tabs>
  <Tabs.List>
    <Tabs.Tab>One</Tabs.Tab>
    <Tabs.Tab>Two</Tabs.Tab>
  </Tabs.List>
  <Tabs.Panel>Content 1</Tabs.Panel>
  <Tabs.Panel>Content 2</Tabs.Panel>
</Tabs>

Custom Hooks

Extract reusable logic:

function useDebounce<T>(value: T, delay = 500): T {
  const [debouncedValue, setDebouncedValue] = useState(value);

  useEffect(() => {
    const timer = setTimeout(() => setDebouncedValue(value), delay);
    return () => clearTimeout(timer);
  }, [value, delay]);

  return debouncedValue;
}

// Usage
const debouncedSearch = useDebounce(searchTerm, 300);

Render Props

Share rendering logic:

function DataFetcher({ url, render }) {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetch(url).then(r => r.json()).then(setData).finally(() => setLoading(false));
  }, [url]);

  return render({ data, loading });
}

// Usage
<DataFetcher
  url="/api/users"
  render={({ data, loading }) =>
    loading ? <Spinner /> : <UserList users={data} />
  }
/>

Next.js Optimization

Reference: references/nextjs_optimization_guide.md

Server vs Client Components

Use Server Components by default. Add 'use client' only when you need:

  • Event handlers (onClick, onChange)
  • State (useState, useReducer)
  • Effects (useEffect)
  • Browser APIs
// Server Component (default) - no 'use client'
async function ProductPage({ params }) {
  const product = await getProduct(params.id);  // Server-side fetch

  return (
    <div>
      <h1>{product.name}</h1>
      <AddToCartButton productId={product.id} />  {/* Client component */}
    </div>
  );
}

// Client Component
'use client';
function AddToCartButton({ productId }) {
  const [adding, setAdding] = useState(false);
  return <button onClick={() => addToCart(productId)}>Add</button>;
}

Image Optimization

import Image from 'next/image';

// Above the fold - load immediately
<Image
  src="/hero.jpg"
  alt="Hero"
  width={1200}
  height={600}
  priority
/>

// Responsive image with fill
<div className="relative aspect-video">
  <Image
    src="/product.jpg"
    alt="Product"
    fill
    sizes="(max-width: 768px) 100vw, 50vw"
    className="object-cover"
  />
</div>

Data Fetching Patterns

// Parallel fetching
async function Dashboard() {
  const [user, stats] = await Promise.all([
    getUser(),
    getStats()
  ]);
  return <div>...</div>;
}

// Streaming with Suspense
async function ProductPage({ params }) {
  return (
    <div>
      <ProductDetails id={params.id} />
      <Suspense fallback={<ReviewsSkeleton />}>
        <Reviews productId={params.id} />
      </Suspense>
    </div>
  );
}

Accessibility and Testing

Reference: references/frontend_best_practices.md

Accessibility Checklist

  1. Semantic HTML: Use proper elements (<button>, <nav>, <main>)
  2. Keyboard Navigation: All interactive elements focusable
  3. ARIA Labels: Provide labels for icons and complex widgets
  4. Color Contrast: Minimum 4.5:1 for normal text
  5. Focus Indicators: Visible focus states
// Accessible button
<button
  type="button"
  aria-label="Close dialog"
  onClick={onClose}
  className="focus-visible:ring-2 focus-visible:ring-blue-500"
>
  <XIcon aria-hidden="true" />
</button>

// Skip link for keyboard users
<a href="#main-content" className="sr-only focus:not-sr-only">
  Skip to main content
</a>

Testing Strategy

// Component test with React Testing Library
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';

test('button triggers action on click', async () => {
  const onClick = vi.fn();
  render(<Button onClick={onClick}>Click me</Button>);

  await userEvent.click(screen.getByRole('button'));
  expect(onClick).toHaveBeenCalledTimes(1);
});

// Test accessibility
test('dialog is accessible', async () => {
  render(<Dialog open={true} title="Confirm" />);

  expect(screen.getByRole('dialog')).toBeInTheDocument();
  expect(screen.getByRole('dialog')).toHaveAttribute('aria-labelledby');
});

Quick Reference

Common Next.js Config

// next.config.js
const nextConfig = {
  images: {
    remotePatterns: [{ hostname: 'cdn.example.com' }],
    formats: ['image/avif', 'image/webp'],
  },
  experimental: {
    optimizePackageImports: ['lucide-react', '@heroicons/react'],
  },
};

Tailwind CSS Utilities

// Conditional classes with cn()
import { cn } from '@/lib/utils';

<button className={cn(
  'px-4 py-2 rounded',
  variant === 'primary' && 'bg-blue-500 text-white',
  disabled && 'opacity-50 cursor-not-allowed'
)} />

TypeScript Patterns

// Props with children
interface CardProps {
  className?: string;
  children: React.ReactNode;
}

// Generic component
interface ListProps<T> {
  items: T[];
  renderItem: (item: T) => React.ReactNode;
}

function List<T>({ items, renderItem }: ListProps<T>) {
  return <ul>{items.map(renderItem)}</ul>;
}

Resources

  • React Patterns: references/react_patterns.md
  • Next.js Optimization: references/nextjs_optimization_guide.md
  • Best Practices: references/frontend_best_practices.md

Troubleshooting

ProblemCauseSolution
Scaffolder fails with "Directory already exists"Target project folder already present on diskDelete or rename the existing directory, or choose a different project name
Component generator creates PascalCase name from kebab-case incorrectlyInput contains mixed delimiters (e.g., my_comp-name)Use consistent kebab-case (my-comp-name) or PascalCase (MyCompName) as input
Bundle analyzer reports "No valid package.json found"Script is pointed at a directory without package.json or the file has invalid JSONPass the correct project root directory; validate package.json syntax with python -m json.tool package.json
--dry-run shows files but --features content is listed as TODOFeature file content keys are not mapped in FILE_CONTENTS dictionaryThis is expected for some add-on features; implement the placeholder files manually after scaffolding
Bundle score unexpectedly low despite few dependenciesDev-only packages (TypeScript, ESLint, Tailwind) are listed under dependencies instead of devDependenciesMove build/dev tooling to devDependencies in package.json
Import analysis returns zero files checkedSource code is not in src/, app/, or pages/ directoriesRun with --verbose and ensure your source files live in one of the three expected directories
Generated component missing 'use client' directiveComponent was generated with --type server instead of the default client typeRe-run with --type client or add the 'use client' directive manually at the top of the file

Success Criteria

  • Lighthouse performance score above 90 on the generated project's production build, indicating Server Components and image optimization are configured correctly.
  • Bundle size under 200KB gzipped for the initial JavaScript payload, validated by running the bundle analyzer with a grade of A or B.
  • Zero heavy-dependency warnings from bundle_analyzer.py after applying all recommended replacements.
  • Component generation time under 2 seconds per component, including test and story file creation.
  • All generated TypeScript files pass tsc --noEmit without errors, confirming type-safe scaffolding output.
  • Accessibility audit produces zero critical violations when running axe-core or Lighthouse accessibility checks against generated components.
  • Test coverage above 80% for generated components when the --with-test flag is used and tests are executed with Vitest.

Scope & Limitations

What this skill covers:

  • React and Next.js project scaffolding with TypeScript and Tailwind CSS
  • Component, hook, test, and Storybook story generation following established patterns
  • Static bundle analysis based on package.json dependency inspection and import pattern scanning
  • Frontend-specific best practices for Server Components, image optimization, data fetching, and accessibility

What this skill does NOT cover:

  • Backend API development, database schema design, or server infrastructure -- see senior-backend and senior-fullstack
  • End-to-end testing with Cypress or Playwright -- see senior-qa
  • CI/CD pipeline configuration and Docker deployment -- see senior-devops
  • Security vulnerability scanning and penetration testing -- see senior-secops and senior-security

Integration Points

SkillIntegrationData Flow
senior-fullstackScaffolded frontend projects connect to fullstack project scaffolder for API layer setupFrontend project structure feeds into project_scaffolder.py which adds backend, Docker, and CI/CD layers
senior-backendComponents consuming API data follow patterns defined by backend skill's REST/GraphQL conventionsBackend API response types imported into frontend types/ directory generated by this skill
senior-qaGenerated test files (--with-test) use the same Testing Library conventions that the QA skill's test strategies build uponComponent test files hand off to QA skill for integration and E2E test coverage expansion
senior-devopsBundle analyzer output informs build pipeline optimization decisionsBundle health score and dependency warnings feed into CI quality gates configured by DevOps skill
senior-secopsDependency analysis identifies packages that need security auditHeavy/outdated dependency warnings from bundle_analyzer.py trigger security review workflows
code-reviewerGenerated components follow patterns that the code reviewer skill validatesCode reviewer checks generated components against React/TypeScript best practices defined in this skill's references

Tool Reference

frontend_scaffolder.py

  • Purpose: Scaffold a complete Next.js or React project with TypeScript, Tailwind CSS, and optional feature modules.
  • Usage: python scripts/frontend_scaffolder.py <name> [flags]
  • Flags:
FlagTypeDefaultDescription
namepositional(required)Project name, kebab-case recommended
--dir, -dstring.Output directory where the project folder is created
--template, -tchoicenextjsProject template: nextjs or react
--features, -fstring(none)Comma-separated features: auth, api, forms, testing, storybook
--list-templatesflagoffList available project templates and exit
--list-featuresflagoffList available feature modules and exit
--dry-runflagoffPreview generated file list without writing to disk
--jsonflagoffOutput result as JSON instead of human-readable summary
  • Example: python scripts/frontend_scaffolder.py dashboard --template nextjs --features auth,api --json {"name": "dashboard", "template": "nextjs", "template_name": "Next.js 14+ App Router", "features": ["auth", "api"], "path": "./dashboard", "files_created": 28, "next_steps": ["cd dashboard", "npm install", "npm run dev"]}
  • Output Formats: Human-readable summary (default) or JSON (--json).

component_generator.py

  • Purpose: Generate React/Next.js component files with TypeScript, optional test, and Storybook story.
  • Usage: python scripts/component_generator.py <name> [flags]
  • Flags:
FlagTypeDefaultDescription
namepositional(required)Component name in PascalCase or kebab-case
--dir, -dstringsrc/componentsOutput directory for generated files
--type, -tchoiceclientComponent type: client, server, or hook
--with-testflagoffGenerate a .test.tsx file with Testing Library boilerplate
--with-storyflagoffGenerate a .stories.tsx file for Storybook
--no-indexflagoffSkip generating the index.ts barrel export file
--flatflagoffPlace files directly in output dir without creating a subdirectory
--dry-runflagoffPreview what would be generated without writing files
--verbose, -vflagoffEnable verbose output
  • Example: python scripts/component_generator.py ProductCard --dir src/components/ui --type client --with-test --with-story ================================================== Component Generated: ProductCard ================================================== Type: client Directory: src/components/ui/ProductCard Files created: - src/components/ui/ProductCard/ProductCard.tsx - src/components/ui/ProductCard/ProductCard.test.tsx - src/components/ui/ProductCard/ProductCard.stories.tsx - src/components/ui/ProductCard/index.ts ==================================================
  • Output Formats: Human-readable summary only.

bundle_analyzer.py

  • Purpose: Analyze package.json and project source files for bundle size issues, heavy dependencies, and optimization opportunities.
  • Usage: python scripts/bundle_analyzer.py [project_dir] [flags]
  • Flags:
FlagTypeDefaultDescription
project_dirpositional.Project directory containing package.json
--jsonflagoffOutput full analysis as JSON
--verbose, -vflagoffInclude detailed import pattern analysis across src/, app/, and pages/ directories
  • Example: python scripts/bundle_analyzer.py /path/to/my-app --verbose ============================================================ FRONTEND BUNDLE ANALYSIS REPORT ============================================================ Bundle Health Score: 70/100 (C) Dependencies: 12 production, 18 dev --- HEAVY DEPENDENCIES --- moment (290KB) Reason: Large locale files bundled by default Alternative: date-fns (12KB) or dayjs (2KB) lodash (71KB) Reason: Full library often imported when only few functions needed Alternative: lodash-es with tree-shaking or individual imports (lodash/get) --- IMPORT ISSUES --- - src/utils/date.ts: Consider replacing moment with date-fns or dayjs --- RECOMMENDATIONS --- 1. Replace heavy dependencies with lighter alternatives ============================================================
  • Output Formats: Human-readable report (default) or JSON (--json).

平台分布

Claude Code

29.73%
按下载量换算434

OpenCode

23.88%
按下载量换算349

Gemini CLI

15.78%
按下载量换算231

Antigravity

11.17%
按下载量换算163

Cursor

7.15%
按下载量换算104

windsurf

3.52%
按下载量换算51

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。

继续浏览同类 Skills