让 DSH 中支持工具调用的父模型,把任务交给本机 Cursor CLI 执行,再接收结果、审查修改并继续工作。
35.7/100
综合分
1
GitHub 星标
1,017
npm 周下载
—/5
用户评分
数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-cursor-devnpm 源 · dsh-cursor-dev 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 10 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-cursor-dev @ 0.12.6
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 08:36:14
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 43 处,展示前 39 条)
- 发起网络请求lib/client.js:244
fetch(url, { - 发起网络请求lib/client.js:360
fetch(STATUS_URL, { headers: { accept: 'application/json' } }) - 读取本地文件lib/resolve-agent.js:21
if (!existsSync(path)) - 读取本地文件lib/resolve-agent.js:51
if (isSpawnableAgent(directNode) && existsSync(directIndex)) { - 读取本地文件lib/resolve-agent.js:55
if (!existsSync(versionsRoot)) - 读取本地文件lib/resolve-agent.js:57
const dirs = readdirSync(versionsRoot, { withFileTypes: true }) - 读取本地文件lib/resolve-agent.js:99
if (existsSync(cmd)) - 读取本地文件lib/resolve-agent.js:160
if (isSpawnableAgent(runtime) && existsSync(entry)) - 读取本地文件lib/attribution.js:74
if (!existsSync(path)) - 读取本地文件lib/attribution.js:76
raw = JSON.parse(readFileSync(path, 'utf8')); - 读取本地文件lib/attribution.js:117
raw = existsSync(path) ? JSON.parse(readFileSync(path, 'utf8')) : { version: 1 }; - 读取本地文件lib/attribution.js:117
raw = existsSync(path) ? JSON.parse(readFileSync(path, 'utf8')) : { version: 1 }; - 写入本地文件lib/attribution.js:139
writeFileSync(temporary, `${JSON.stringify(raw, null, 2)}\n`, 'utf8'); - 写入本地文件lib/attribution.js:140
renameSync(temporary, path); - 读取本地文件lib/conversations.js:41
const raw = await readFile(this.#path, 'utf8'); - 写入本地文件lib/conversations.js:92
await mkdir(dirname(this.#path), { recursive: true }); - 写入本地文件lib/conversations.js:94
await writeFile(temporary, payload, 'utf8'); - 写入本地文件lib/conversations.js:95
await rename(temporary, this.#path); - 执行外部命令来自配置/变量lib/usage.js:123
execFile(executable, ['find-generic-password', '-a', account, '-s', service, '-g'], { timeout, windowsHide: true }, (error, stdout, stderr) => { - 读取本地文件lib/usage.js:194
raw = await readFile(path, 'utf8'); - 发起网络请求lib/usage.js:379
this.#inflight = this.#fetch(options).finally(() => { - 发起网络请求lib/usage.js:385
async #fetch(options) { - 读取本地文件lib/settings.js:170
if (!existsSync(path)) - 读取本地文件lib/settings.js:172
return normalizeSettings(JSON.parse(readFileSync(path, 'utf8'))); - 写入本地文件lib/settings.js:196
mkdirSync(dataDir, { recursive: true }); - 写入本地文件lib/settings.js:199
writeFileSync(temporary, `${JSON.stringify(next, null, 2)}\n`, 'utf8'); - 写入本地文件lib/settings.js:200
renameSync(temporary, path); - 读取本地文件lib/native-provider.js:121
if (typeof cwd !== 'string' || !isAbsolute(cwd) || !(await stat(cwd)).isDirectory()) - 执行外部命令固定命令lib/proxy.js:43
execFile( - 发起网络请求lib/proxy.js:165
const request = http.request({ - 发起网络请求lib/proxy.js:235
const request = http.request({ - 发起网络请求lib/cursor-session.js:403
const init = await agent.request(methods.agent.initialize, { - 发起网络请求lib/cursor-session.js:423
const loaded = await agent.request(methods.agent.session.load, { - 发起网络请求lib/cursor-session.js:447
const session = await agent.request(methods.agent.session.new, { - 发起网络请求lib/cursor-session.js:538
await agent.request('session/set_model', { sessionId: this.#sessionId, modelId: alias }); - 发起网络请求lib/cursor-session.js:562
response = await agent.request(setConfigOption, { sessionId: this.#sessionId, configId: 'model', value }); - 发起网络请求lib/cursor-session.js:591
await this.#agent.request(methods.agent.session.setMode, { sessionId: this.#sessionId, modeId }); - 读取本地文件lib/changes.js:56
entries = await readdir(dir, { withFileTypes: true }); - 读取本地文件lib/changes.js:76
const info = await stat(full);
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 派发编码任务给本机CLI
- 按任务选择模型
- 实时进度与真实diff
把 Cursor 命令行当作 DSH 子编码智能体来跑:按任务选模型、重启后对话不断、实时进度与真实 diff,外加 Cursor 用量/配额面板。
最近更新
在 GitHub 查看全部 →v0.12.102026-11-03
· dsh-cursor-dev 0.12.10
发布日期:2026-11-03(Asia/Shanghai)。开发基线仍为 DSH 0.2.1-rc.5,兼容范围和依赖版本不变。
· 修复
· 子会话工具卡传递真实工具名称、请求参数、文件路径和执行输出,不再只显示 cursor tool、{} 和 completed;完成事件未重复提供参数时保留开始时的信息。
· CLI 无终态、非零退出、进程 Promise 拒绝或取消后,保留已经观察到的工具步骤、部分正文、实际文件改动和可续接会话,不再固定误报 files changed: NONE。
· 成功需要 CLI 明确成功终态及正常进程退出;取消/未确认完成的工具不会被标成成功。
· 无法扫描显示 UNKNOWN,不完整扫描显示 PARTIAL;缺失覆盖不推断新增或删除,已观察到的修改继续保留。
· 缺少 started、只有完成事件的工具也进入父报告时间线。
· 失败信息保留已知退出码、终止信号、stderr 尾部与持久化警告;不是把上游 CLI 的异常当成成功,也不自动重跑可能有副作用的任务。
· 验证
· Windows、DSH 0.2.1-rc.5 开发基线:301 项,291 通过、0 失败、10 跳过。
· 跳过的 10 项为 3 项真实 Cursor/账号冒烟和 7 项不适用 Windows 的认证存储场景,不代表 macOS 已验证。
· 默认 npm test 不启动真实 Cursor 或查询真实账户额度,保留本地 HTTP/协议模拟。只有明确设置 DSH_CURSOR_LIVE_TESTS=1 才启用真实冒烟,届时可能消耗账号额度。
· 包含真实 CLI 解析器到真实子会话镜像的离线接通测试、取消/进程异常、失败后落盘证据、扫描完整性和工具时间线回归。
· 安装与生效
· npm 来源:在 DSH 插件管理中更新 dsh-cursor-dev;需要固定版本时可指定 dsh-cursor-dev@0.12.10。
· Git/市场来源:更新 Dclef/dsh-cursor-dev 仓库来源。
· 固定快照:使用本次发布的 dsh-cursor-dev-0.12.10.tgz。
· 更新当前 profile 实际加载的插件后,重启 DSH 并刷新页面。 只更新另一份源码、只刷新浏览器,不能保证后台代码生效。
· 不改模型偏好、会话配置、兼容范围或旧日志;历史日志里从未保存的工具参数/输出不会凭空补齐。
本次没有自动重启用户当前 DSH,离线回归及安装包检查不等同于当前桌面 GUI 重启后的实机验收。
v0.12.92026-11-03
· 0.12.9
· 验证基线跟进到 DSH 0.2.1-rc.5
· 开发依赖 @deepseek-ai/dsh 从 0.2.1-rc.3 升到 0.2.1-rc.5,与当前桌面版运行时一致。
· 全部 278 个离线用例在 rc.5 上跑通(271 通过、7 跳过、0 失败)。
· rc.3 到 rc.5 之间,宿主的 subagent 契约没有破坏性变更,插件代码不需要改动。
· 兼容范围不变
· engines.dsh 仍是 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || >=0.2.1-rc.2 =0.2.1 <0.3.0 的支持也不变。
· 0.12.7 的能力照旧
模型与档位分离(270 行折叠成 44 行)、ACP/CLI 双通道、档位只在选得到的时候出现、默认 Auto、报告实际运行的档位、模型列表实时读取——全部照旧可用。
· 关于版本号
0.12.8 这个版本号已被 npm 占用:那个版本发布后又被撤下,版本号槽位无法复用,因此本次以 0.12.9 发布,内容与 0.12.8 相同。
· 升级
dsh plugin remove dsh-cursor-dev
dsh plugin add dsh-cursor-dev
安装后重启 DSH 再刷新页面。
v0.12.72026-10-28
· 0.12.7
· 模型与档位分离
· Cursor 对每个模型最多发布五个档位(none/low/medium/high/max),每个档位另有一个快速版。以前面板把这些平铺成 270 行,现在按模型折叠成 44 行,档位收进「档位」下拉里选。
· 档位词不一定在别名末尾:claude-opus-4-7-thinking-low 是 thinking 变体的 low 档,claude-opus-4-7-low-fast 是 low 档的快速版。插件按词逐个剥离,所以两种写法都认得。
· 执行通道
Cursor 的 ACP 模式从它自己的配置文件读取模型、忽略命令行参数,而且每个模型只发布一组固定参数——所以别的档位根本选不了。面板新增「执行通道」下拉:
· ACP(默认):会话常驻、可在会话内换模型,档位受限。
· CLI:每轮启动一个进程,使用 Cursor 自己的档位别名,能真正改动档位——去掉 grok-4.7 的 fast、把 deepseek 调到 max。CLI 的运行同样会出现在「运行中的 CURSOR 会话」里,会话依然可见、可以续聊。
· 档位只在选得到的时候出现
ACP 下档位不可选,面板会说明原因,不再给出选了也不生效的选项。
· 默认 Auto
新安装默认使用 Auto,具体模型由 Cursor 账号决定。
· 报告实际运行的档位
结果里的模型名现在是你实际跑的那个档位,而不是名册折叠后的名字。
· 模型列表实时读取
模型目录按当前网络出口实时获取(不同地区可用的模型不同),并在切换通道后重新读取。
· 升级
dsh plugin remove dsh-cursor-dev
dsh plugin add dsh-cursor-dev
后台代码有更新,安装后需要重启 DSH 再刷新页面。
DSH 兼容性不变:开发依赖 @deepseek-ai/dsh 仍为 0.2.1-rc.3,>=0.2.1-rc.2 =0.2.1 <0.3.0 的支持不变。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-cursor-dev
让 DSH 中支持工具调用的父模型,把任务交给本机 Cursor CLI 执行,再接收结果、审查修改并继续工作。
父模型与 Cursor 使用的模型分别选择:例如父模型用 DeepSeek,Cursor 用 Auto;也可以让其他已接入 DSH 的模型派发同样的任务。
中文 · English · 安装与首次使用
Cursor 面板:额度、模型与会话
工作方式
flowchart LR
U[用户] --> P[DSH 父模型]
P -->|任务、参考文件、验收标准| T[cursor_code]
T -->|ACP| C[本机 Cursor CLI]
C --> W[工作区文件与命令]
C -->|执行报告| T
T -->|答复、步骤、文件变更| P
P -->|审查后的结果| U
- 父模型理解需求、拆解任务、调用工具、审查结果。它的模型服务商和 API 配置由 DSH 管理。
- Cursor CLI使用自己的登录账号和可用模型执行任务,包括读取文件、修改代码、运行命令。
- 插件启动或恢复 Cursor 会话,传入任务,记录执行过程,并把报告返回原来的父代理。cursor_code 的执行过程还会镜像到可点击的 DSH 子会话。
父模型不必是 Cursor 提供的模型。
展开完整文档(README 剩余 1 节)
dsh-cursor-dev
让 DSH 中支持工具调用的父模型,把任务交给本机 Cursor CLI 执行,再接收结果、审查修改并继续工作。
父模型与 Cursor 使用的模型分别选择:例如父模型用 DeepSeek,Cursor 用 Auto;也可以让其他已接入 DSH 的模型派发同样的任务。
中文 · English · 安装与首次使用
Cursor 面板:额度、模型与会话
工作方式
flowchart LR
U[用户] --> P[DSH 父模型]
P -->|任务、参考文件、验收标准| T[cursor_code]
T -->|ACP| C[本机 Cursor CLI]
C --> W[工作区文件与命令]
C -->|执行报告| T
T -->|答复、步骤、文件变更| P
P -->|审查后的结果| U
- 父模型理解需求、拆解任务、调用工具、审查结果。它的模型服务商和 API 配置由 DSH 管理。
- Cursor CLI使用自己的登录账号和可用模型执行任务,包括读取文件、修改代码、运行命令。
- 插件启动或恢复 Cursor 会话,传入任务,记录执行过程,并把报告返回原来的父代理。cursor_code 的执行过程还会镜像到可点击的 DSH 子会话。
父模型不必是 Cursor 提供的模型。前提是它已接入 DSH、支持工具调用,并且当前会话允许使用插件的工具。这里的模型兼容性指 DSH 内的父模型;其他聊天应用需要另行接入,这个包没有提供通用 MCP 服务。
安装
完整步骤、升级说明和排错见 安装与首次使用。
1. 安装当前版 Cursor CLI,运行 agent login,再用 agent status --format json 检查登录。
2. 在 DSH 插件管理中安装本插件。公开仓库的安装来源为:
git+https://github.com/Dclef/dsh-cursor-dev.git
已配置 DSH 命令行的用户也可以在所用配置档下执行:
dsh plugin add "git+https://github.com/Dclef/dsh-cursor-dev.git"
0.11.0 起也已发布到 npm 公共源,可以改用包名安装:
dsh plugin add dsh-cursor-dev
3. 按 DSH 提示完成加载;涉及后台代码更新时重启 DSH,然后刷新页面。在 Cursor 面板中选择模型并保存。
4. 明确告诉父模型使用 cursor_code,或者用下面的斜杠命令派发第一个任务。
版本说明(0.12.5): 本版修掉模型卡片上「选了又被自己打回原样」的一类问题。子代理深度、锁定面板模型、代理输入框、Cursor 署名这四个控件以前只在点「保存」的那一刻从页面读值,而卡片被点标签页、拨模型开关、选模型、点刷新任意一次重绘时都会按存档值重画——于是刚选的深度会变回 2、刚勾的锁定会掉勾、刚输入的代理会消失、刚选的署名会弹回,看起来像面板自己拒绝了这个改动。现在四个控件各自记住未保存的选择(草稿),重绘一律以草稿为准,只有保存成功且服务端回显了同一个值才清掉草稿;被服务端拒掉的值会留在控件里并继续标「有改动未保存」,保存成功也不再无条件写「已保存」把这一提示盖掉。DSH 兼容性方面,开发依赖 @deepseek-ai/dsh 更新为 0.2.1-rc.3,显式支持列表加入 0.2.1-rc.3,>=0.2.1-rc.2 <0.3.0-0 的范围与 >=0.2.1 <0.3.0 的稳定版本支持不变。保留额度耗尽保护:调用 cursor_code 或通过原生子智能体派发之前先检查 Cursor 用量,总、Auto、API 三个额度都到上限时直接拒绝并说明原因,不再把任务派出去后中途失败;用量接口暂时取不到时不拦截调用。cursor_subagent 也会生成可点击的对话子会话,面板里点运行中或已完成的行都能查看过程,不再报「没有可恢复的会话」。插件市场已收录本插件,卡片版本随目录探测更新;npm 包名为 dsh-cursor-dev,实际已发布版本以 npm 的 latest 标签为准。要跟进后续改动请用 Git 来源;.tgz 是某一刻的固定快照。详见安装来源与版本。
运行要求:DSH 0.2.0-rc.1、0.2.0-rc.2、0.2.1-rc.1、0.2.1-rc.2、0.2.1-rc.3 或 >=0.2.1 <0.3.0 的稳定版本(当前桌面版运行时为 0.2.1-rc.3);Node.js ^22.19.0 || >=24.0.0;已登录且可访问服务的 Cursor CLI。原生子智能体功能需要 DSH 的 subagents、agents 服务,后台任务还需要对应任务服务,建议使用当前 DSH 桌面版。CLI 安装方法见 Cursor 官方文档。
三个入口
| 入口 | 用途 | 结果如何回来 |
| cursor_code | 父模型派发完整任务,控制目录、模式、模型、会话与报告 | 工具结果回到调用它的父模型,包含答复、步骤和检测到的文件变更 |
| /cursor-subagent 任务内容 | 用户直接派发一次任务;可选前缀 -m 模型 | 完成或失败后,插件把摘要交给原父代理继续处理 |
| cursor_subagent | 当前源码新增的 DSH 原生一次性子智能体工具,可后台运行 | 使用 DSH 标准结果及后台任务机制;父会话保留一行 External 任务,Cursor 面板里的会话行可直接打开实时镜像子对话 |
例如,在一个空测试工作区发送:
/cursor-subagent 创建 cursor-cli-check.txt,内容为 cursor-cli-ok,然后读取它确认内容。只修改这个文件,最后汇报结果。
或者直接对父模型说:
请使用 cursor_code 修复这个问题。先让 Cursor 读取相关文件,完成后检查返回的修改和测试结果,再向我汇报。
安装工具后,是否自动调用仍由父模型和会话指令决定。希望默认委派开发任务时,可以把下面的内容加入父代理的自定义指令:涉及代码实现、重构、修复或批量修改时,优先使用 cursor_code。
在 task 中说明完整目标,在 contextFiles 中列出需要先读的文件,在 acceptance 中写清约束与验收要求。使用面板默认模型,除非用户要求切换。
收到结果后检查文件变更和验证记录;必要时继续派发修正。
同一任务使用相同 sessionLabel,并以 continueSession:true 续聊。
不同任务或项目使用不同 sessionLabel。没有修改需求的问题可直接回答。
给父模型的调用示例
第一次调用 cursor_code:
{
"task": "修复登录表单的空密码校验,沿用项目现有交互风格。",
"contextFiles": ["src/login.ts", "test/login.test.ts"],
"acceptance": "不改变公开接口;补充有意义的回归用例并运行相关测试。", "sessionLabel": "login-validation", "mode": "agent" }
收到结果后,仍由同一个父代理调用:
{
"task": "继续处理刚才的任务:检查纯空格密码的边界情况,必要时修正并验证。", "sessionLabel": "login-validation", "continueSession": true }
示例中的文件路径需要换成实际项目路径。Cursor 接收任务文本、参考文件提示和其已有的 Cursor 会话历史,不会自动读取整段父对话,所以父模型应把必要背景写进任务。
| 参数 | 说明 |
| task | 必填;完整任务目标 |
| contextFiles / acceptance | 参考文件列表、约束与验收标准 |
| workspaceRoot | 可选绝对路径;默认使用当前 DSH 会话工作区 |
| model | 可选 Cursor 模型;省略时使用面板选择及配置回退;面板锁定可覆盖此参数 |
| mode | agent 执行修改,plan 只读规划,ask 只读问答 |
| sessionLabel | 同一父会话中的任务标签,默认 default;不同任务建议分开命名 |
| continueSession | 复用当前会话执行后续任务;进程已退出时尝试从 Cursor 存储恢复 |
| resetSession | 清除该标签的插件映射并重新开始;不删除 Cursor 自己的历史文件 |
| report | summary(默认)或 detailed |
| timeoutSeconds | 默认 1800 秒,最大 7200 秒 |
结果包括成功状态、答复、会话标识、实际模型、执行步骤、预览和检测到的文件变更。当前源码还返回 modelSource 与 requestedModel,帮助判断模型选择来自面板锁定、调用参数还是默认配置。文件扫描有范围和数量限制,报告不代替父代理对实际工作区的最终检查。
模型选择与会话
- 父模型和 Cursor 模型独立配置。可用的 Cursor 模型由该账号的实时列表决定。
- 默认未锁定时,优先级为:调用的 model → 面板保存的模型 → 插件 model 配置 → CLI 默认值。
- 当前源码增加了「锁定面板模型」:保存后,面板选择优先于调用参数。选 Auto 并锁定,可防止父模型显式传入其他模型覆盖它。auto 和 default[] 表示同一个 Auto 选择。
- 保存的默认值与正在运行的模型分别显示;新选择在后续运行时应用,不会中途切换已经开始的任务。
- 会话按 父代理 ID + sessionLabel 记录。换一个父会话或标签,不会自动接上另一份会话。
- 改模型可能新起 CLI 进程,并尝试重载已保存的 Cursor 对话。continueSession:false 不应被当作清空历史的开关;需要全新上下文时使用新标签或 resetSession:true。
- 重启后的续聊依赖 Cursor 历史及插件映射仍存在;加载失败时会记录原因并回退到新会话。可检查报告中的 reloaded。
- Cursor 的模型选择是 CLI 全局状态,插件串行执行 Cursor 任务。不同标签隔离会话上下文,但不会自动隔离共用工作区的文件。
原生子智能体支持范围
当前源码注册 DSH 后端 cursor。有对应服务时,cursor_code 接入 DSH 的运行开始、结束与取消机制;bundle 同时配置标准工具 cursor_subagent,不修改已有通用 subagent 工具的默认后端。
执行仍由外部 Cursor CLI 完成,DSH 中的子会话负责展示过程。标准入口支持一次性前台或后台任务,后台任务可通过 DSH 的 job_output / job_kill 查看或取消。
目前支持 cursor_code 的显式续聊;尚不支持通过 send_message 向 Cursor 投递持久消息,也没有把 Cursor 接成 Agent Teams 常驻队友。精简 profile 缺少原生子智能体服务时,cursor_code 可以使用原有执行路径;镜像、面板和命令分别依赖对应的宿主服务。
面板、配置和数据
从 DSH 的 Cursor 插件入口打开面板,也可以访问当前 DSH 地址下的 /plugins/dsh-cursor-dev/。例如,DSH 运行在 http://127.0.0.1:19387 时,面板地址为 http://127.0.0.1:19387/plugins/dsh-cursor-dev/;其他用户应使用自己的地址和端口。
面板包含安装/登录状态、账号额度、模型和模式设置、活动与历史会话。点击会话可查看镜像记录。历史会话会一直累积,所以列表默认收在一个限高的滚动框里,点标题即可整段折叠(选择会被记住);每行右侧的 删除 会清掉这次运行的全部痕迹——索引记录、轨迹和镜像子会话,和 resetSession 走同一条链路。删除要连点两次(第一次只是变成「确认删除」),因为删掉之后无法恢复。新版本页面可能与上面的截图不同。
| 插件配置 | 默认值 | 用途 |
| model | 空字符串 | 面板未设置时的 Cursor 模型 |
| maxLiveSessions | 3 | 最多保留的 CLI 进程数,任务仍然串行 |
| sessionIdleMinutes | 15 | 空闲进程回收时间 |
| maxScanFiles | 20000 | 工作区变更扫描的文件数量上限 |
| toolName | cursor_code | 编码工具的注册名 |
| usageUi | true | 是否挂载状态、额度和面板 HTTP 路由 |
| usageBaseUrl | https://api2.cursor.sh | Cursor 额度 API 地址 |
| maxChildDepth | 2 | Cursor 子会话允许达到的深度上限,调用方深度必须小于该值(面板「子代理深度」可覆盖) |
插件自动探测 CLI 的 PATH 和已知安装目录。探测失败时,可在插件配置里设置 command 指向可启动的二进制、安装根目录、agent.cmd,或 "node.exe" "index.js";非空时只使用该路径,不再回退到自动探测。安装排错以指南为准。
代理设置
面板的「子智能体模型」卡片里有代理输入框,未设置时默认为 none(直连)。
| 取值 | 含义 |
| none(默认) | 直连,并从 CLI 子进程环境中移除继承的代理地址变量 |
| 留空 | 自动探测:先看 HTTPS_PROXY 等环境变量,再看 Windows「Internet 选项」里的代理 |
| http://127.0.0.1:7890 | 显式指定代理,优先于环境变量和注册表 |
为什么需要它: Cursor CLI 只读 HTTPS_PROXY / HTTP_PROXY / https_proxy / http_proxy——不读注册表,也不读 ALL_PROXY。所以一台只把代理写在「Internet 选项」里的机器,插件启动的 CLI 子进程会直连 Cursor,而直连只会拿到模型目录里的一小部分:本机实测 agent --list-models 为 31 个(走代理 265 个),ACP 会话清单为 10 个(走代理 46 个)。这就是「有些模型看不到」的全部原因。
需要系统代理时,主动清空输入框并保存;插件会把探测到的地址写进子进程环境(HTTPS_PROXY、HTTP_PROXY 及小写形式),并在模型卡片的「可选模型」那一行末尾显示子进程出口。升级时已保存的空值仍表示自动探测,不会被改成 none。面板保存后对后续启动的子进程生效,不必重启应用;如果填的值解析不了,那一行会直接说明。
模型卡片下方还有可搜索的模型浏览器:点一行设为面板模型,右边的开关决定它是否出现在上方下拉框里。关掉的模型只是藏起来(写入 disabledModels),点「保存」后生效,随时可以再打开——这样在完整目录有上百个模型时也能只留下写业务常用的几条。
maxChildDepth 限制的是谁能启动 Cursor 子会话:深度为 0 的顶层智能体是正常调用方,深度 1 的子智能体再调用就会被拒绝。默认值是 2,即允许父智能体和子智能体都创建 Cursor 子会话——Cursor 是个叶节点(CLI 里没有 DSH 工具,它不可能再往下派),所以 2 就是实际上限,再大的值和 2 完全等价。这个值可以在面板的「子代理深度」里改,面板的选择优先于配置;改完下一次调用生效,不需要重载插件。拒绝发生在创建任何进程或子会话之前,cursor_code 立即返回 sessionKey: "depth-refused",cursor_subagent 抛出同类错误,错误信息里带有当前深度和上限。宿主本身对 subagent / subagent_fork 的深度限制(面板「子智能体 → 运行限制 → 最大递归深度」)仍然生效;cursor provider 声明 depthLimit: false,无法接收数值型 maxDepth,所以这道限制由本插件自己执行。把 maxChildDepth 设为 0 可以完全禁止子会话,设为 2 或更大则允许更深一层。镜像历史(面板里的记录)不受此限制,仍可正常打开查看。
插件设置与会话映射优先写入环境变量 DSH_CURSOR_DEV_DATA 指定的目录;否则使用 %LOCALAPPDATA%/dsh-cursor-dev;没有该环境变量时使用 DSH 提供的 baseDir 下的 .data(再无 baseDir 时回退到进程当前目录)。Cursor 登录和原始会话由 Cursor 自己保存。面板写操作包含同源检查,HTTP 可访问范围由 DSH 的监听配置决定。
Cursor 署名
Cursor 默认会在子智能体做的提交上追加 Co-authored-by: Cursor,在它开的 PR 上署名。这些提交发生在别人的仓库里,而仓库的读者并没有同意这件事,所以面板里默认关掉:模型卡片底部的「Cursor 署名」选择「不加 Cursor 署名」,插件在下一次启动 CLI 前把 Cursor 自己的配置文件改成不署名。
这个开关没有 CLI 参数,也没有环境变量,只存在于 Cursor 的 cli-config.json:
{ "attribution": { "attributeCommitsToAgent": false, "attributePRsToAgent": false } }
文件位置按 Cursor 自己的顺序解析:CURSOR_CONFIG_DIR → XDG_CONFIG_HOME/cursor → ~/.cursor。插件只改 attribution 这两项,权限、模型、登录信息等其他键原样保留,写入走临时文件 + 改名;解析不了的文件不会被覆盖(那是 Cursor 自己的报错,不该由插件掩盖)。面板的三个选项:
| 选项 | 行为 |
| 不加 Cursor 署名(默认) | 把两项都写成 false |
| 保留 Cursor 署名 | 把两项都写成 true |
| 跟随 Cursor 自己的配置 | 插件不碰这个文件,你用自己的 Cursor 设置 |
保存后立即写入,并在每次启动 CLI 前再确认一次——因为 CLI 只在进程启动时读一次配置,已经在跑的会话要等新会话才生效。选择器下面那行「Cursor 当前:…」显示的是配置文件的实际状态,不是你的选择:用了「跟随」或者写入失败时,两者会不一样。团队管理员在服务端禁用署名(attributionControls)时,本地怎么写都不会恢复署名。
开发与验证
npm installsh
node --test --test-force-exit --test-skip-pattern="the child agent really edits a file|a bad model is rejected|the real Cursor account returns live quota data" "test/*/.test.mjs"
完整测试命令为 npm test。上面的命令跳过三个真实 CLI/账号测试,不派发真实编码任务;其余 smoke 测试仍包含只读额度 HTTP 检查,因此并非完全离线。真实编码测试需要 Cursor 登录和网络,执行任务会使用该账号额度。Windows 下的 Keychain 测试因需要 POSIX shell 而跳过,不能据此认定 macOS 已验证;企业证书环境可使用 Node.js 的 --use-system-ca。打包使用 npm pack 或 pnpm pack,发布前按分发检查核对安装包和版本。
把 Cursor CLI 当作执行智能体,供 DSH 中具备工具调用能力的父模型使用。结果回到同一个父模型,由它审阅并跟进。 父模型和 Cursor 的模型各自独立配置。例如,DeepSeek 父模型可以委派给 Cursor Auto;父模型不必是 Cursor 提供的模型。
安装并试用
详细配置与故障排查见安装指南。
1. 安装当前版本的 Cursor CLI,运行 agent login,再用 agent status --format json 检查状态。
2. 通过 DSH 的插件管理器安装插件,地址用 git+https://github.com/Dclef/dsh-cursor-dev.git。先把 DSH 命令行配置到目标配置档,然后执行:
sh
dsh plugin add "git+https://github.com/Dclef/dsh-cursor-dev.git"
从 0.11.0 起,包也发布到公共 npm registry,因此直接用包名即可:
sh
dsh plugin add dsh-cursor-dev
3. 后端变更需要重启时重启 DSH,然后刷新页面。打开 /plugins/dsh-cursor-dev/ 下的 Cursor 面板,选择模型并保存。历史列表每次运行永久保留一行,因此放在限高的滚动框里,点击标题即可折叠(选择会被记住);某行的 Delete 链接会清除该次运行的索引记录、日志和镜像子进程——与 resetSession 用的是同一条链路——并且第一次点击只是预备,第二次点击不可逆,需要你刻意确认。
4. 让父模型调用 cursor_code,或发送 /cursor-subagent 再加一个完整任务。该命令直接派发,并把完成或失败摘要交回原父模型。
版本 0.12.5 修复了模型卡片上「选择项自己弹回去」这一类 bug。子代理深度选择器、锁定复选框、代理输入框和 Cursor 额度开关,过去只在按下 Save 的那一刻读取,而每次重绘(点标签页、切换模型、选模型、刷新)都会用已存的值重画它们——于是新选的深度退回 2,勾上的锁定自己取消,输入的代理消失,选好的额度选项弹回原样,看起来像面板拒绝接受改动。现在这四项各自保留一份未保存草稿,每次重绘都优先用草稿,只有保存成功且服务端回传同一个值时才清掉草稿;写入被拒的值留在控件里,继续显示「未保存」,保存成功也不会再用「已保存」覆盖那一行。DSH 侧,@deepseek-ai/dsh 开发依赖升到 0.2.1-rc.3,显式支持列表加入 0.2.1-rc.3;>=0.2.1-rc.2 <0.3.0-0 范围和稳定版支持 >=0.2.1 <0.3.0 不变。额度耗尽保护保留:cursor_code 或原生子代理调用开始前,插件读取 Cursor 用量,当总量、Auto 和 API 三个桶都到上限时拒绝调用并说明原因,而不是派发一次中途才失败的运行。查不到用量时绝不阻塞调用。cursor_subagent 还会创建可点击的对话记录子项,运行中和已结束的行都能在面板里打开,不再提示没有持久对话。dsh-market 目录已收录本插件,后续探测会更新显示的版本。公开 npm 包是 dsh-cursor-dev,latest 标签标识已发布版本。想跟进后续改动请用 Git 源;.tgz 是固定快照。
要求:DSH 0.2.0-rc.1、0.2.0-rc.2、0.2.1-rc.1、0.2.1-rc.2、0.2.1-rc.3 或稳定版 >=0.2.1 <0.3.0(当前桌面运行时是 0.2.1-rc.3);Node.js ^22.19.0 || >=24.0.0;已认证且有服务访问权限的 Cursor 命令行账号。原生派发还需要 DSH 的 subagents 和 agents 服务,后台运行需要宿主的 job 服务。建议使用当前 DSH 桌面安装。
父到子契约
- cursor_code 接收完整的 task、可选的 contextFiles 和 acceptance、绝对路径 workspaceRoot,以及可选的模型、模式、会话和报告设置。它把最终回复、步骤和检测到的文件改动返回给调用方。
- 子代理收到的是委派的任务和自己的 Cursor 历史,不是整个父会话。需要什么上下文就自己带上。
- 同一父会话的后续调用用同一个 sessionLabel 和 continueSession: true。想从没有旧映射的状态开始,用新标签或 resetSession: true。只写 continueSession: false 不保证持久历史为空。
- 切换模型可能启动另一个命令行进程,并重新加载已保存的 Cursor 会话。能否恢复取决于保存的记录是否仍然可用;加载失败时会回退到新会话。
- Cursor 运行是串行的,因为它的模型选择是全局的。标签只隔离会话上下文,不隔离共享工作区里的文件。
- 父级必须支持工具调用,并且已启用该工具。安装这个插件不会强制每个父级都自动委派。其他聊天应用需要单独集成;这个包不是通用 MCP 服务器。
默认的模型顺序是:调用参数 → 已保存的面板选择 → 插件配置 → 命令行默认值。在当前源码中,锁定面板选择会覆盖每次调用传入的模型参数。Auto 和 default[] 是同一个选择。返回的 modelSource 和 requestedModel 说明了这次选择是怎么来的。
原生执行与限制
当前源码注册了一个名为 cursor 的原生 DSH 服务商,以及一个标准的一次性工具 cursor_subagent。当宿主提供相应服务时,富 cursor_code 调用也会走原生生命周期。原有的通用 subagent 后端保持原样配置。
Cursor 在外部执行。从 DSH 0.2.1 起,宿主会为一次 cursor_subagent 运行写入一条非交互的 External 记录。两个入口还会创建一个真实的 transcript 子项,首轮运行期间 Cursor 面板会打开它。原生服务保留自己的生命周期 id;单独的 transcript 子项不会额外增加一条目录记录。标准后台运行使用 DSH 的任务结果与取消工具。通过 send_message 持续续接邮箱,以及把 Cursor 作为常驻的 Agent Teams 队友,这两项都尚未实现。需要显式跟进时,请用 cursor_code 配合 continueSession。
父级仍然负责审查实际改动和验证证据。文件报告有扫描上限,不能替代最终的工作区检查。Cursor 模型的可用性和用量取决于 Cursor 账号;父级模型使用它自己独立的 DSH 服务商配置。
maxChildDepth(默认 2)限制谁可以启动 Cursor 子会话。深度 0 的顶层智能体才是预期调用方;深度 1 的子代理调用 cursor_code 或 cursor_subagent 时,会在创建任何进程、子会话或重置之前被拒绝——cursor_code 返回 sessionKey: "depth-refused",错误信息同时给出当前深度和上限。之所以需要它,是因为 cursor 服务商声明了 depthLimit: false,无法接受宿主 tool-subagent 传入的数字 maxDepth,所以插件自己执行这个限制。设为 0 完全禁止 Cursor 子会话,设为 1 则只允许顶层智能体委派。默认值 2 允许子代理也启动一个,因为 Cursor 运行是叶子节点——命令行里没有 DSH 工具,它永远无法继续委派,所以任何大于 2 的值行为都和 2 完全一样。设置面板的 Subagent depth 选择器写入同一个值,并优先于这份配置;改动在下次调用时生效,无需重载插件。宿主对 subagent / subagent_fork 自己的委派限制(面板 → Subagents → Run limits → maximum recursion depth)仍然独立生效。在面板中打开镜像的子会话只是只读记录,不受影响。
代理
子智能体模型 卡片带一个 proxy 输入框,默认为空。
| 值 | 含义 |
| 空(默认) | 自动检测:先看 HTTPS_PROXY 等变量,再看 Windows Internet Settings 代理 |
| none | 从不走代理 |
| http://127.0.0.1:7890 | 使用该代理,优先于上面两种 |
为什么需要它:Cursor 命令行只读 HTTPS_PROXY / HTTP_PROXY / https_proxy / http_proxy,别的都不读——不读 Windows 注册表,也不读 ALL_PROXY。如果一台机器上唯一的代理只存在于 Internet Settings 里,命令行子进程就会直连 Cursor,而直连只发布目录中的一小部分:在本机实测,agent --list-models 直连返回 31 个模型,走代理返回 265 个,而选择器实际使用的 ACP 名单从 10 变成 46。这就是「有些模型不见了」症状的全部原因。
把输入框留空就已经修好了,所以通常不需要配置:插件会解析路由,把 HTTPS_PROXY/HTTP_PROXY(以及小写拼写)写入它启动的每个子进程,并把结果显示在 available models 行末尾的 子进程出口 处。保存后下次启动子进程即生效,而不是下次重启;无法解析的值会显示在同一行,而不是被静默忽略。
Cursor 归属 Cursor 会在智能体提交的 commit 里追加 Co-authored-by: Cursor,还会在自己发起的 pull request 上署名。这些 commit 会进入仓库,而仓库的读者从未同意过这种做法,所以面板默认把它关掉:模型卡片底部的 Cursor credit 选择器会让命令行自己的设置文件保持「不署名」,插件会在下一个命令行进程启动前应用这项设置。
这件事没有 flag,也没有环境变量——唯一的开关是 Cursor 的 cli-config.json: json { "attribution": { "attributeCommitsToAgent": false, "attributePRsToAgent": false } }
文件放在 Cursor 查找的位置:CURSOR_CONFIG_DIR,否则 XDG_CONFIG_HOME/cursor,否则 ~/.cursor。插件只写这两个键——权限、模型和认证信息逐字节保留——先写临时文件再重命名,无法解析的文件原样不动,不会替换(那是 Cursor 该报的错)。三个选项:
| 选项 | 效果 |
| No Cursor credit(默认) | 把两个标志都写成 false |
| Credit Cursor | 把两个标志都写成 true |
| Leave Cursor own setting alone | 插件从不碰这个文件 |
保存立即生效,每次启动进程都会重新检查文件,因为命令行只在启动时读一次配置——已经在跑的会话会保留旧值,直到新会话开始。选择器下方的 Cursor now: 一行报告的是文件状态,不是你的选择:选「leave alone」或写入失败后,两者并不一致。团队管理员在服务端禁用署名(attributionControls)时,任何本地设置都无法重新打开。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Dclef/dsh-cursor-dev
让 DSH 中支持工具调用的父模型,把任务交给本机 Cursor CLI 执行,再接收结果、审查修改并继续工作。
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,344已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,045已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,202已汉化DSH
71.1
这是你的仓库?认领条目