Cursor客户端解剖(六)工具循环:终端、MCP、Rules、Skills
工具不是提示词里的口头约定
学习材料依据包内 agent.v1.*ToolCall protobuf:工具是强类型消息,不是「请你自己注意要用工具」这种软约束。
循环骨架:
1 | 模型(服务端或 Private Inference)输出 ToolCall |
协议上还能看到钩子:PreToolUse / PostToolUse / BeforeSubmitPrompt——执行前后、提交前可拦截。
本地工具清单(节选)
仓库只读
| 工具 | 作用 |
|---|---|
ReadToolCall |
读文件(path/offset/limit) |
GrepToolCall |
精确搜索 |
GlobToolCall / LsToolCall |
找文件 / 列目录 |
SemSearchToolCall |
语义检索 |
ReadLintsToolCall |
读诊断 |
改代码 / 改环境(常需审批)
| 工具 | 作用 |
|---|---|
EditToolCall / Write 族 / DeleteToolCall |
改删文件 |
ApplyAgentDiffToolCall |
应用 Agent diff |
ShellToolCall |
跑命令(含 sandbox_policy、timeout、后台等) |
AwaitToolCall / WriteShellStdinToolCall |
后台任务协作 |
与用户交互 / 规划
AskQuestionToolCall · UpdateTodosToolCall · CreatePlanToolCall · SwitchModeToolCall · TaskToolCall · ReflectToolCall …
外部世界
| 工具 | 更可能在哪 |
|---|---|
WebSearchToolCall |
服务端编排 |
McpToolCall / GetMcpToolsToolCall |
本地 MCP 进程 |
ComputerUseToolCall |
本地/云桌面 |
| PR / SCM 族 | 混合 |
MCP:工具变成可插拔服务
包内落点:
- 扩展
cursor-mcp(workspace,onStartupFinished+onUri) - Utility:
mcpProcess cursor-browser-automation:通过 MCP Provider 暴露浏览器自动化- 依赖锁定
@modelcontextprotocol/sdk(版本钉死)
精髓:
IDE 内工具 ≠ 写死在 Agent 代码里的 if/else。
MCP 把工具变成可插拔服务;浏览器自动化也套同一形态,心智统一。
Rules / Skills:进 prompt 的积木
本地收集、塞进 RunRequest 的约束类积木包括:
- Rules 类型:
Global/FileGlobs/ManuallyAttached/AgentFetched
文件:.cursor/rules/**/*.mdc、AGENTS.md、CLAUDE.md、.cursorrules - Skills(
AgentSkill) custom_system_prompt字段
包内优先级文案大意:
系统提示 > AGENTS.md / rules / skills > 普通用户偏好(冲突时听 system)
Rules 偏常驻宪法;Skills 偏情境手册。和「工具强类型」一样,它们是产品化上下文,不是聊天里临时说一句。
权限与隔离:副作用管线
两层值得分开看:
执行时审批 / sandbox
Shell 等工具带策略字段;Exec 描述强调 permissions & approvals。落盘隔离
cursor-shadow-workspace:registerShadow*Providercursor-worktree-textmate:给.cursor/worktreesTextMate 高亮,不激活语言服务器
精髓:Agent 写代码的危险不在「会不会写」,在「写到哪」。影子世界 + 弱语言服务 = 可实验、少干扰、可控回滚。
另有文件化契约:
.cursor/environment.json.cursor/permissions.json(由cursor-always-local等贡献 schema)
可进仓库、可审查、可同步——和 ignore 规则同一哲学。
可观测性不是事后补丁
- 大量
cursorTracing cursor-ndjson-ingest:本地 HTTP 吃 NDJSON →.cursor/debug.logcursor-socket提供失败注入类开发者命令
Agent 系统难测;从第一天就留 日志摄入 + 故障注入 口子。
小结
工具循环在包内的三句话:
- ToolCall 强类型 + 双向流,模型想、本地做
- MCP 把扩展工具标准化
- Rules/Skills/permissions/ignore 把边界文件化
下一篇把这些模块串成一次完整任务时序。