在 Cursor 中打造你的专属前端“AI 助手”:Agent Skills 实战指南 什么是 Agent Skills?

在 Cursor 中打造你的专属前端“AI 助手”:Agent Skills 实战指南 什么是 Agent Skills?

文章目录


一、什么是 Agent Skills?

简单来说,Agent Skills 是一种标准化的方式,用来封装特定任务的知识和工作流。
如果说 MCP (Model Context Protocol) 是给 AI 装上了“手”(让它能连接数据库、Github),那么 Skills 就是给 AI 的“操作说明书”(告诉它怎么用这双手去搬砖)。
它和 .cursorrules 的区别在于:.cursorrules (全局规则): 就像公司的“员工手册”,是 AI 必须时刻记住的(Always on),适合放通用的代码风格(比如“永远使用 TypeScript”)。Agent Skills (技能): 就像“特定的任务SOP”,AI 只有在需要的时候(Context Relevant)才会去加载它,或者通过 / 命令手动触发。这大大节省了 Token,也让 AI 更专注。

二、使用步骤

1.下载官方提供的agent-skills文档

链接:github:https://github.com/anthropics/skills

在这里插入图片描述

2.cursor中使用

在cursor中新建.cursor目录加skills目录,把从Github上下载的skills拷贝到该目录下。上

在这里插入图片描述


在这里插入图片描述

这是参考frontend-design这个skills来设计的网站,会发现精美许多。

在这里插入图片描述


在这里插入图片描述

三、如何设计自己的skills

通过别人提供好的skils文档来生成

在这里插入图片描述


在cursor中输入提示词,cursor会自动扫描你文件下的skill.md文档进行生成。

在这里插入图片描述

四、实战:打造一个“生成标准 React 组件”的 Skill

假设我们团队有一个严格的组件开发规范:

  1. 组件必须是 Function Component。
  2. 必须使用 CSS Modules。
  3. 必须包含一个 interface 定义 Props。
  4. 文件结构必须是文件夹形式。

我们来写一个 Skill 教会 Cursor 怎么做。

第一步:创建目录

在你的项目根目录下(或者全局 ~/.cursor/skills),创建一个存放技能的文件夹:

.cursor/ skills/ react-component-gen/ <-- 技能名称文件夹 SKILL.md <-- 核心定义文件 

第二步:编写 SKILL.md

这是核心部分。SKILL.md 包含两部分:Frontmatter (元数据)Markdown 正文 (指令)

.cursor/skills/react-component-gen/SKILL.md 中写入:

--- name: react-component-gen description: Generate a new React functional component with CSS Modules and TypeScript interfaces following team standards. disable-model-invocation: false --- # React Component Generator Use this skill when the user asks to create a new UI component, page, or widget. ## [...](asc_slot://start-slot-9)Instructions 1. **Analyze the Request**: Identify the component name and props required. 2. **Directory Structure**: - Create a folder named exactly as the component (PascalCase). - Inside, create `index.tsx` and `styles.module.scss`. 3. **Code Standards**: - **index.tsx**: - Use `FC` type from 'react'. - Import styles as `import styles from './styles.module.scss'`. - Define an interface `[ComponentName]Props`. - Export the component as default. - **styles.module.scss**: - Create a root class `.container`. - Use BEM naming convention for inner elements if needed. ## [...](asc_slot://start-slot-11)Template Example If the user asks for a "Button", generate: ```tsx // Button/index.tsx import React, { FC } from 'react'; import styles from './styles.module.scss'; export interface ButtonProps { label: string; onClick: () => void; } const Button: FC<ButtonProps> = ({ label, onClick }) => { return ( <button className={styles.container} onClick={onClick}> {label} </button> ); }; export default Button; 
### [...](asc_slot://start-slot-13)第三步:启用并使用 1. **启用**:确保你的 Cursor 是较新版本(部分功能可能在 Beta/Nightly 通道)。打开设置 -> `Rules` 或 `Features`,确保 Agent Skills 相关的开关已打开。 2. **自动触发**: * 打开 Cursor 的 Agent 聊天框(CMD+L 或 CMD+K)。 * 输入:“帮我写一个 UserCard 组件,包含头像和名字。” * 你会发现 Agent 会自动识别意图,加载 `react-component-gen` 技能,并严格按照你的模板生成代码! 3. **手动触发**: * 输入 `/`,你应该能看到 `react-component-gen` 出现在命令列表中。 ## [...](asc_slot://start-slot-15)进阶玩法:带脚本的 Skill (自动化重构) 前端经常需要做一些批量重构,比如“找出所有硬编码的颜色并替换为 Tailwind 类名”。我们可以给 Skill 配上脚本。 

.cursor/skills/refactor-color/
SKILL.md
scripts/
find-hex.js <-- 一个扫描文件的脚本

**SKILL.md**: ```markdown --- name: refactor-color description: Refactor hardcoded hex colors to Tailwind utility classes. --- # Color Refactoring ## [...](asc_slot://start-slot-17)Instructions 1. Run the script `scripts/find-hex.js` to locate hex codes in the current file. 2. For each hex code found, map it to the closest Tailwind color (e.g., `#ef4444` -> `text-red-500`). 3. Rewrite the code. 

这样,AI 就不只是在“瞎猜”,而是真正执行了你写的工具脚本来辅助它工作。

总结:为什么你应该开始用 Skills?

  1. 团队规范统一:把这个 .cursor 文件夹提交到 Git 仓库,新入职的同事 git pull 下来,他的 AI 助手立刻学会了全套团队规范,不用手把手教。
  2. 减少上下文污染:只在写组件时加载组件规范,写测试时加载测试规范,让 AI 的脑子更清醒。
  3. 沉淀最佳实践:把那些你每次都要重复敲的 Prompt,固化成代码资产。

💡 个人心得
不要试图把所有东西都塞进 .cursorrules。把 .cursorrules 当作宪法(不可动摇的原则),把 Agent Skills 当作SOP 手册(针对具体任务的流程)。

快去试试在你的项目里加一个 Skill 吧!如果你有更好玩的 Skill 创意(比如自动写 Code Review 意见),欢迎在评论区分享!👇

Read more

Flutter 组件 graphql 的适配 鸿蒙Harmony 实战 - 驾驭标准化分布式图形协议、实现鸿蒙端实时订阅与高性能交互网关方案

Flutter 组件 graphql 的适配 鸿蒙Harmony 实战 - 驾驭标准化分布式图形协议、实现鸿蒙端实时订阅与高性能交互网关方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 graphql 的适配 鸿蒙Harmony 实战 - 驾驭标准化分布式图形协议、实现鸿蒙端实时订阅与高性能交互网关方案 前言 在鸿蒙(OpenHarmony)生态的万物互联、极繁交互中台、以及对数据获取灵活性有极致要求的现代应用研发中,“高效的数据检索协议”是应用响应速度的灵魂。面对复杂的社交网络关系查询、实时的行情推送、或是海量状态信息的聚合。如果仅仅依靠传统的 RESTful 接口,那么不仅会导致因为 Over-fetching(获取多余数据)导致的带宽浪费,更会因为频繁的 API 版本演进引入严重的跨端兼容性碎片化问题。 我们需要一种“按需检索、逻辑解耦”的交互艺术。 graphql 是一套专为 Flutter 设计的标准 GraphQL 客户端套件。它通过构建规范的规范化缓存(Normalized Cache)与极其灵活的连接链路(Links)

By Ne0inhk

HTML静态页面生成:利用大模型自动编写前端代码

HTML静态页面生成:利用大模型自动编写前端代码 在现代Web开发中,一个常见的痛点是——明明只是想快速搭建一个简单的展示页,却不得不花上几个小时写HTML结构、调CSS样式、查Bootstrap类名。尤其是当产品经理说“先做个原型看看效果”时,前端工程师的内心往往是崩溃的。 但今天,这一切正在被改变。借助大语言模型(LLM),我们已经可以做到:输入一句自然语言描述,几秒钟内输出一段语义正确、结构规范、甚至带有响应式设计的完整HTML代码。这不再是科幻场景,而是基于现有技术栈完全可实现的工作流。 而在这个过程中,像 ms-swift 这样的开源框架正扮演着关键角色。它不仅让大模型的训练与部署变得轻量化,更使得“用AI写前端代码”从实验室走向了生产环境。 从“写代码”到“说需求”:前端开发的新范式 传统前端开发依赖开发者对HTML标签体系、CSS布局机制和JavaScript交互逻辑的熟练掌握。即使是经验丰富的工程师,在面对重复性页面(如登录页、介绍页、表单页)时也难免感到枯燥。而对于非技术人员来说,哪怕只是修改一行<div>的位置,

By Ne0inhk
Web 开发安全与最佳实践:MVC、会话管理与常见攻击防御

Web 开发安全与最佳实践:MVC、会话管理与常见攻击防御

MVC模式 MVC(Model-View-Controller)是一种广泛使用的软件设计模式,用于简化应用程序的开发过程。它通过分离数据访问、用户界面和业务逻辑,使得应用程序的结构更加清晰。 MVC的组成部分 1. Model(模型) * 定义:代表应用程序的数据和业务逻辑。 * 职责: * 与数据库进行交互 * 处理数据的逻辑操作 * 在JavaWeb中的实现: * 使用POJO(Plain Old Java Object)类,通常与数据库表一一对应 * DAO(Data Access Object)负责数据库交互 * Service层实现业务逻辑 * 可使用ORM(Object-Relational Mapping)框架如Hibernate来简化数据库操作 2. View(视图) * 定义:负责将模型的数据呈现给用户。 * 职责:展示数据,提供用户界面。 * 在JavaWeb中的实现: * 常用JSP(JavaServer Pages) * 也可使用现代模板引擎如Thymeleaf 3. Controlle

By Ne0inhk

Vue3 Webview 转 Android 虚拟导航栏遮挡问题记录

问题描述 在 Android 设备上运行 Capacitor 打包的 Vue 3 应用时,遇到虚拟导航栏(底部返回键、主页键等)和状态栏遮挡应用内容的问题。 问题表现 * 底部 Tab 导航栏被虚拟导航栏遮挡一部分 * 顶部内容被状态栏遮挡 * 页面底部内容贴近虚拟导航栏,没有安全间距 问题根源分析 初始状态 应用使用了沉浸式布局,在 MainActivity.java 中设置了: WindowCompat.setDecorFitsSystemWindows(getWindow(),false);getWindow().setStatusBarColor(Color.TRANSPARENT);getWindow().setNavigationBarColor(Color.TRANSPARENT); 这使得 WebView 内容延伸到状态栏和导航栏后面,实现了全屏显示。 错误的假设 最初尝试使用 CSS 的环境变量来解决: padding-top:env(safe-area-inset-top,

By Ne0inhk