CLI + CursorRules,为你的Cursor插上翅膀

580 阅读11分钟

在如今的AI编程工具中,Cursor无疑是我们日常工作中的必备工具。它的强大功能已经无需多言,尤其是在Cursor Agent上线后,用户可以在聊天窗口内端到端直接完成一系列复杂任务,而无需跳出当前的上下文环境,这一设计灵感也借鉴了Winsurf的cascade方式。但在实际业务中,我们经常希望能做得更多,比如希望Cursor能更深入地集成我们业务环境中的其他开发工具,并且通过Cursor的AI能力,带来更加智能和高效的开发体验。那么,是否有可能实现这种深度集成呢?答案是肯定的,cursor-tools(https://github.com/eastlondoner/cursor-tools)项目就为我们提供了这样的思路。

cursor-tools项目分析

cursor-tools是最近开源的一个项目,它的目标是为Cursor编程环境增添一些新的技能,真正做到了“插上翅膀”。这个项目的核心技能包含四个重要功能:

1. 网页搜索

通过命令 cursor-tools web "<你的问题>",我们可以使用Perplexity AI从网上获取答案。例如,cursor-tools web "关于DeeSeek的影响分析"。虽然Cursor本身已经有 @web 命令来进行搜索,但相比Perplexity的深度搜索优化,它更像是一个毛坯房,缺乏精致度。这个功能非常适合查找那些不依赖于特定代码仓库的通用问题答案。

不过,使用Perplexity AI需要申请API密钥,目前为止每个月有5美元的免费额度。如果你没有境外信用卡,可以通过WildCard虚拟卡服务(yeka.ai/i/PDL6ZFFG)…

2. 仓库上下文搜索

通过 cursor-tools repo "<你的问题>",我们可以用Google Gemini来获取关于仓库的具体问题答案。例如,cursor-tools repo "请梳理项目中使用到的各种优化手段"。虽然Cursor有 @codebase 命令来搜索代码库,但它需要对仓库内容进行向量化预处理,这样一来部分内容在向量化的过程中可能会被切割,从而导致语义丢失,结果也就不够准确。相比之下,Google Gemini的优势在于它能处理更大的上下文窗口(高达200万个token),通常能一次性处理整个代码库,避免了语义丢失,从而提供更加准确的搜索结果。

Gemini 2.0的实验模型可以免费使用,但需要创建一个Google Cloud项目来获取API密钥。

可以看到(内容虽然截取补全),但总结出的结果非常详细和准确。

3. 项目文档生成

通过命令 cursor-tools doc [选项],我们可以生成当前仓库或远程仓库的完整文档。例如,cursor-tools doc --output docs.md。它也是通过Gemini 2.0一次性理解整个项目,并按照以下维度生成项目文档:

  • 仓库用途概述
  • 快速入门:如何安装和使用基本核心功能
  • 配置选项和设置说明
  • 模块文档(针对多个模块的情况)
  • 详细的 API/接口文档
  • 依赖项和系统要求
  • 高级使用示例

显而易见,这个功能特别适用于项目维护,可以帮助我们快速生成包括仓库概述、快速入门、模块文档、API文档等一系列内容,对于团队协作和项目长期维护非常有帮助。

4. 浏览器自动化

cursor-tools 还提供了一些浏览器自动化功能,帮助我们在Cursor Chat中通过自然语言执行浏览器操作。这对测试和调试web应用特别有帮助。命令包括:

  • cursor-tools browser open <url> [选项]:打开网页并捕获页面内容、控制台日志等
  • cursor-tools browser act "<指令>" --url=<url> [选项]:通过自然语言指令在网页上执行操作(比如点击按钮)
  • cursor-tools browser observe "<指令>" --url=<url> [选项]:观察网页交互元素并提供操作建议。

这些功能使得在Cursor中对浏览器进行自动化控制变得非常便捷,省去了手动操作的时间,提升了开发效率。

显然,cursor-tools项目相当于给Cursor插上一双翅膀,在它原有的环境中通过一些定制的指令就可以获得一系列外部能力。它是如何实现的?接下来我们就来拆解一下。

技术实现原理

正如文章标题所言,这里的核心实现其实就两点,CLI结合CursorRules。

1. CLI(命令行工具)介绍

CLI(Command Line Interface)即命令行界面,允许我们通过命令行与系统进行交互。许多前端框架都封装了自己的CLI工具,而 cursor-tools 项目中的命令(如 cursor-tools webcursor-tools rep)本质上也是一个CLI工具。我们可以在 CLI 项目的package.json文件中配置命令,示例如下:

"bin": {
  "cursor-tools": "./dist/index.mjs"
}

这行配置命令的作用是将cursor-tools命令添加到系统环境变量中。当我们执行 cursor-tools 时,实际是通过Node.js执行对应的入口文件 ./dist/index.mjs。在这个文件中,我们会解析命令行参数,并实现不同的功能(对应上文的网络搜索、仓库搜索、文档生成、浏览器自动化操作等一系列能力)。

有了我们自定义的CLI工具后,当我们在 Cursor Composer 中输入这些命令时,如何能够让Cursor识别,并将其当做一个CLI工具来执行呢?这时就需要CursorRules上场。

CursorRules的作用

CursorRules是Cursor提供的一种可以让我们控制底层模型行为的方式,可以理解为针对大模型设置的系统提示,比如我们经常将我们的项目架构、最佳实践写入.cursorRules(新版本已经支持针对项目中不同的模块或者文件集合设置不同的cursorRules),从而让Curosr AI更准确的帮我们生成或者补全代码。

而CursorRules的这种机制正是让 Cursor Composer 能够理解并执行我们自定义CLI命令的切入点。我们可以将CLI的使用说明写入CusorRules规则文件,当每次提问时,规则文件中的内容会被 Cursor 的 AI 助手自动读取和理解。这些规则告诉 AI 助手:

  • 有哪些可用的命令
  • 每个命令的功能和用法
  • 如何在对话中使用这些命令
  • 命令的各种选项和参数

当我们在 Cursor Compose 中要求 AI 使用指定的CLI命令时,它就会根据规则文件中的说明,知道如何调用这个命令,从而进入了我们CLI的逻辑中,最终的执行结果再返回给 Cursor Compose 进行处理。比如当我们在自己的项目中安装 cursor-tools 项目后,它会改写我们项目中原来的.cursorrules,在其后添加如下的 cursor-tools 使用说明:

<cursor-tools 集成>
# 使用说明
使用以下命令获得 AI 帮助:

**网页搜索:**
`cursor-tools web "<你的问题>"` - 使用 Perplexity AI 从网络获取答案(例如,`cursor-tools web "London 最新天气"`)
在处理复杂查询时,建议将输出写入文件,例如 `local-research/<查询摘要>.md`**仓库上下文:**
`cursor-tools repo "<你的问题>"` - 使用 Google Gemini 获取关于此仓库的上下文感知答案(例如,`cursor-tools repo "解释认证流程"`**文档生成:**
`cursor-tools doc [选项]` - 生成此仓库的完整文档(例如,`cursor-tools doc --output docs.md`)
对于远程仓库,建议将输出写入文件,例如 `local-docs/<repo-name>.md`**GitHub 信息:**
`cursor-tools github pr [编号]` - 获取最后 10 个 PR,或获取特定 PR(例如,`cursor-tools github pr 123``cursor-tools github issue [编号]` - 获取最后 10 个问题,或获取特定问题(例如,`cursor-tools github issue 456`**浏览器自动化(无状态):**
`cursor-tools browser open <url> [选项]` - 打开 URL 并捕获页面内容、控制台日志和网络活动(例如,`cursor-tools browser open "https://example.com" --html``cursor-tools browser act "<指令>" --url=<url> [选项]` - 使用自然语言指令在网页上执行操作(例如,`cursor-tools browser act "点击登录" --url=https://example.com``cursor-tools browser observe "<指令>" --url=<url> [选项]` - 观察网页上的交互元素并建议可能的操作(例如,`cursor-tools browser observe "交互元素" --url=https://example.com``cursor-tools browser extract "<指令>" --url=<url> [选项]` - 根据自然语言指令从网页中提取数据(例如,`cursor-tools browser extract "产品名称" --url=https://example.com/products`**关于浏览器命令的说明:**
- 所有浏览器命令都是无状态的:每个命令都会从新的浏览器实例开始,并在完成后关闭该实例。
- 使用 `--connect-to` 时,支持以下特殊 URL 值:
  - `current`:使用现有页面而不重新加载
  - `reload-current`:使用现有页面并刷新它(在开发中很有用)
- 支持通过管道(|)分隔符组合多步骤工作流,涉及状态或多个操作的结合(例如,`cursor-tools browser act "点击登录 | 输入 'user@example.com' 进入邮箱 | 点击提交" --url=https://example.com`- 所有浏览器命令都可以通过 `--video=<目录>` 选项进行视频录制。此选项将在指定目录中保存一个 1280x720 分辨率的整个浏览器交互视频文件,并以时间戳命名。
- 请勿要求浏览器 `act` 等待任何内容,`wait` 命令目前在 Stagehand 中已禁用。

**工具推荐:**
- `cursor-tools web` 最适合用于查找非特定于仓库的通用网页信息。
- `cursor-tools repo` 最适合用于仓库特定问题、规划、代码审查和调试。
- `cursor-tools doc` 生成本地或远程仓库的文档。
- `cursor-tools browser` 对于测试和调试网页应用程序非常有用。

**运行命令:**
1. **已安装版本:** 使用 `cursor-tools <命令>`(如果在 PATH 中)或 `npm exec cursor-tools "<命令>"``yarn cursor-tools "<命令>"``pnpm cursor-tools "<命令>"`2. **未安装:** 使用 `npx -y cursor-tools@latest "<命令>"` 或 `bunx -y cursor-tools@latest "<命令>"`**通用命令选项(所有命令均支持):**
--model=<模型名称>:指定要使用的替代 AI 模型  
--max-tokens=<数字>:控制响应长度  
--save-to=<文件路径>:将命令输出保存到文件(除了显示外)  
--help:查看所有可用选项(帮助尚未完全实现)

**文档命令选项:**
--from-github=<GitHub 用户名>/<仓库名称>[@<分支>]:生成远程 GitHub 仓库的文档

**GitHub 命令选项:**
--from-github=<GitHub 用户名>/<仓库名称>[@<分支>]:访问特定 GitHub 仓库的 PR 或问题

**浏览器命令选项(适用于 'open'、'act'、'observe'、'extract'):**
--console:捕获浏览器控制台日志(默认启用,使用 --no-console 禁用)  
--html:捕获页面 HTML 内容  
--network:捕获网络活动(默认启用,使用 --no-network 禁用)  
--screenshot=<文件路径>:保存页面截图  
--timeout=<毫秒>:设置导航超时时间(默认:30000ms)  
--viewport=<宽度>x<高度>:设置视口大小(例如,1280x720)。使用 `--connect-to` 时,仅在显式提供此选项时才会更改视口  
--headless:在无头模式下运行浏览器(默认:true)  
--no-headless:显示浏览器 UI(非无头模式)用于调试  
--connect-to=<端口>:连接到现有的 Chrome 实例  
--wait=<持续时间或选择器>:页面加载后等待(例如,'5s'、'#element-id'、'selector:.my-class')  
--video=<目录>:将浏览器交互的视频录制保存到指定目录(1280x720 分辨率)。使用 `--connect-to` 时不可用

**附加说明:**
- 有关详细信息,请参见 `node_modules/cursor-tools/README.md`(如果已安装本地版本)。
- 配置位于 `cursor-tools.config.json`(或 `~/.cursor-tools/config.json`)。
- API 密钥从 `.cursor-tools.env`(或 `~/.cursor-tools/.env`)加载。
- 浏览器命令需要单独安装 Playwright:`npm install --save-dev playwright` 或 `npm install -g playwright`- **记住:** 你是一个超人类专家 AI 团队的一员,和队友们一起解决复杂问题。
<!-- cursor-tools-version: 0.4.3-alpha.23 -->
</cursor-tools 集成>

这些规则告诉AI如何理解和执行我们定义的CLI命令,确保Cursor可以正确地调用CLI工具,并根据我们设置的规则返回正确的执行结果。至此,通过自定义CLI结合CursorRules的改造,就完美实现了在Cursor环境中融合第三方能力。

场景扩展思考

通过这种CLI工具和CursorRules的结合,我们可以在Cursor中整合更多外部功能,把它打造成一个AI控制的开发中枢。我们可以将业务中各类工具和能力连接到Cursor,从而打通工作流,极大地提升开发效率和智能化程度。