后台代理(Background Agent)
借助后台代理,您可以启动异步代理,这些代理能够在远程环境中编辑和运行代码。您可以随时查看其状态、发送后续指令或接管操作。
使用方法
-
按下
Ctrl+E
打开后台代理控制面板,该面板支持列出已有代理、创建新代理以及查看代理状态。 -
提交提示词后,从列表中选择代理即可查看其状态,并进入代理正在运行的机器环境。
后台代理功能需要保留数日量级的数据才能正常运行。
反馈渠道
欢迎通过以下方式直接反馈:
请向我们提交错误报告、功能请求或改进建议。
运行环境
后台代理默认运行在基于 Ubuntu 的隔离机器镜像中。该代理具有互联网访问权限,可安装运行应用程序所需的软件包。
GitHub 连接
当前后台代理会从 GitHub 克隆您的代码仓库。这些代理会在独立分支上完成工作,并将修改推送至您的仓库,方便您后续接管他们的工作。
这意味着您需要为代码仓库(以及所有依赖仓库或子模块)授予读写权限。未来我们也将支持其他代码托管平台(GitLab、BitBucket 等)。
基础环境配置
对于更高级的用例,您可以自行配置开发环境。您将获得一个连接至远程机器的 IDE 实例。请先完成机器配置并 安装开发工具和软件包,待所有设置就绪后创建环境快照。接下来配置运行时设置:
- 安装命令会在代理启动前执行,用于安装运行时依赖。通常需要执行
npm install
或bazel build
等命令 - 终端允许您在代理运行期间执行后台进程,例如启动 Web 服务器或编译 protobuf 文件
对于最复杂的场景,您还可以使用 Dockerfile 进行机器配置。通过 Dockerfile 可以声明式地配置系统级依赖:安装特定版本的编译器、调试器,甚至完全替换基础操作系统镜像。请注意 Dockerfile 不应使用 COPY
复制整个项目——我们会管理工作区并检出正确的提交版本。与基于快照的配置类似,您仍需在安装脚本中处理依赖项的安装。
如需为开发环境配置必要密钥,这些凭证将以静态加密(使用 KMS)形式存储在我们的数据库中,并在后台代理环境中自动提供。
机器配置信息存储在 .cursor/environment.json
文件中,该文件可以提交至代码仓库(推荐做法)或设置为用户私有配置。我们的配置流程将引导您创建正确的 environment.json
文件。
// 示例环境配置文件
{
"runtime": {
"installCommand": "npm install && pip install -r requirements.txt"
},
"dockerfile": "./Dockerfile",
"terminals": [
{
"name": "web_server",
"command": "python app.py"
}
]
}
- 使用 Dockerfile 时建议选择轻量级基础镜像(如 Alpine Linux)
- 定期更新环境快照可确保团队成员保持一致的开发环境
- 密钥管理可通过 cursor.com/settings 控制面板进行配置
维护命令
当为新后台代理配置新机器时,我们从基础环境开始,然后运行您在 environment.json
文件中配置的 install
命令。该命令可以理解为开发者在切换代码分支时需要运行的命令。特别需要注意的是,它应该安装所有可能新增的依赖项。
对于大多数用户而言,install
命令通常是类似 npm install
或 bazel build
的操作。
为了确保机器启动速度,我们会在运行 install
命令后缓存磁盘状态。这意味着该命令需要设计为可重复多次执行。只有通过 install
命令产生的磁盘状态会被持久化,因此当代理启动时,在此阶段启动的任何进程都不会保持运行状态。
启动命令
执行 install
命令完成环境初始化后,系统将启动并自动运行 start
命令,随后开启所有配置的 terminals
终端。这种机制可确保在代理程序运行时维持必要的进程存活。
通常可以省略 start
命令。一个典型使用场景是当开发环境依赖 Docker 时,您需要将 sudo service docker start
配置在 start
命令中。
terminals
终端专为应用程序代码设计。这些终端会在 tmux
会话中运行,该会话对开发者和 AI 代理均可见。例如,大多数网站代码库会将 npm run watch
配置为终端命令之一。
environment.json 规范说明
非正式情况下,environment.json
文件可能如下所示:
{
"snapshot": "POPULATED_FROM_SETTINGS",
"install": "npm install",
"terminals": [
{
"name": "Run Next.js",
"command": "npm run dev"
}
]
}
正式规范定义请参见此处