🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

规则文件编辑器 Ytibu/dsh-agents-md

DeepSeek Harness
Ytibu30 天前有提交已提供中文文档扫描:含敏感能力

在设置面板里编辑并生成 AGENTS.md 规则文件

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Ytibu/dsh-agents-md
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · skill
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 30 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 44 处,展示前 35 条)
  • 读取本地文件
    lib/index.js:72
    return { exists: true, content: await readFile(file, 'utf8') }
  • 写入本地文件
    lib/index.js:89
    await copyFile(file, candidate, constants.COPYFILE_EXCL)
  • 写入本地文件
    lib/index.js:105
    await mkdir(dirname(file), { recursive: true })
  • 写入本地文件
    lib/index.js:106
    await writeFile(file, content, 'utf8')
  • 发起网络请求
    lib/client.js:169
    fetch("/api/agents-md/global", { cache: "no-store" })
  • 发起网络请求
    lib/client.js:189
    fetch("/api/agents-md/global", {
  • 发起网络请求
    lib/client.js:253
    fetch("/api/agents-md/project?workspace=" + encodeURIComponent(selectedId), { cache: "no-store" })
  • 发起网络请求
    lib/client.js:277
    fetch("/api/agents-md/project?workspace=" + encodeURIComponent(selectedId), {
  • 发起网络请求
    lib/client.js:345
    fetch("/api/agents-md/models", { cache: "no-store" })
  • 发起网络请求
    lib/client.js:391
    fetch("/api/agents-md/compose", {
  • 读取本地文件
    check-contracts.mjs:44
    if (existsSync(candidate)) return candidate
  • 读取本地文件
    check-contracts.mjs:52
    const fd = readFileSync(file)
  • 读取本地文件
    check-contracts.mjs:150
    console.log(`文件大小: ${(statSync(asarPath).size / 1024 / 1024).toFixed(1)} MiB\n`)
  • 读取本地文件
    check-contracts.mjs:195
    if (existsSync(manifestPath)) {
  • 读取本地文件
    check-contracts.mjs:196
    const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'))
  • 读取本地文件
    check-live.mjs:27
    const manifest = JSON.parse(readFileSync(join(here, 'package.json'), 'utf8'))
  • 发起网络请求
    check-live.mjs:40
    const response = await fetch(baseUrl + path, { signal: AbortSignal.timeout(10_000) })
  • 读取本地文件
    check-live.mjs:66
    const stats = statSync(file)
  • 读取本地文件
    check-live.mjs:111
    const onDisk = readFileSync(clientFile, 'utf8')
  • 发起网络请求
    check-live.mjs:118
    const response = await fetch(bundleUrl, { signal: AbortSignal.timeout(10_000) })
  • 读取本地文件
    test-client-contract.mjs:21
    const hostSource = readFileSync(join(here, 'lib/index.js'), 'utf8')
  • 读取本地文件
    test-client-contract.mjs:22
    const clientSource = readFileSync(join(here, 'lib/client.js'), 'utf8')
  • 读取本地文件
    test-client-contract.mjs:23
    const manifest = JSON.parse(readFileSync(join(here, 'package.json'), 'utf8'))
  • 读取本地文件
    test-client-contract.mjs:92
    const patchFile = readFileSync(join(here, 'cordis.patch.yml'), 'utf8')
  • 发起网络请求
    test-smoke.mjs:108
    return route.fetch(request)
  • 写入本地文件
    test-smoke.mjs:127
    await mkdir(workspace.path, { recursive: true })
  • 读取本地文件
    test-smoke.mjs:177
    check('全局 POST 真的落盘', (await readFile(globalFile, 'utf8')).includes('中文注释'))
  • 读取本地文件
    test-smoke.mjs:213
    check('项目 POST 落盘', (await readFile(join(workspace.path, 'AGENTS.md'), 'utf8')).includes('v1'))
  • 读取本地文件
    test-smoke.mjs:222
    check('备份内容是旧版本', (await readFile(backupPath, 'utf8')).includes('v1'))
  • 读取本地文件
    test-smoke.mjs:223
    check('当前文件是新版本', (await readFile(join(workspace.path, 'AGENTS.md'), 'utf8')).includes('v2'))
  • 读取本地文件
    test-smoke.mjs:238
    const sameMsBackups = (await readdir(workspace.path)).filter((entry) => entry.startsWith('AGENTS.md.bak-1700000000000'))
  • 读取本地文件
    test-smoke.mjs:242
    sameMsContents.push((await readFile(join(workspace.path, entry), 'utf8')).trim())
  • 写入本地文件
    test-smoke.mjs:349
    await mkdir(blankHome, { recursive: true })
  • 写入本地文件
    test-smoke.mjs:350
    await writeFile(join(blankHome, 'AGENTS.md'), ' \n', 'utf8')
  • 删除本地文件递归
    test-smoke.mjs:458
    await rm(root, { recursive: true, force: true })
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 编辑全局规则
  • 编辑项目规则
  • 生成项目级规则

在 DeepSeek Harness 设置面板里编辑与生成 AGENTS.md:改全局规则、改项目规则、按「合并全局规则」或「直接覆盖」生成项目级规则。仅适用于 DSH 0.2.0-rc.2。

README

由 DeepSeek 最新模型翻译生成
dsh-agents-md 给 DeepSeek Harness 加一个 AGENTS.md 的可视化编辑器。 不用再手动找文件、手动复制粘贴——在设置面板里点几下,就能编辑和生成 AGENTS.md。 适用版本:DSH 0.2.0-rc.2(详见文末兼容性) 它解决什么问题 DSH 会读取 AGENTS.md 里的规则来决定怎么干活。但手动管理这些文件很麻烦: | 你可能遇到的麻烦 | 这个插件怎么办 | | 找不到全局规则文件在哪,路径记不住 | 设置里直接打开编辑,页面会显示解析到的真实路径 | | 换个项目就要再找一遍项目规则文件 | 下拉选工作区,直接编辑该项目的 AGENTS.md | | 想让项目规则「整体继承全局规则,再加上项目特有的要求」,只能手动复制粘贴 | 选「合并全局规则」,AI 帮你融合成一份完整规则 | | 不小心把已有规则覆盖没了 | 写入前自动备份成 AGENTS.md.bak-<时间戳>,同一毫秒内的多次保存也不会互相覆盖 | 插件不改变 DSH 的任何行为,只是给这些文件加了一个好用的编辑界面。 三个功能 1. 编辑全局规则 读写全局规则文件——它对所有项目生效。
展开完整文档(README 剩余 1 节)
dsh-agents-md

给 DeepSeek Harness 加一个 AGENTS.md 的可视化编辑器。

不用再手动找文件、手动复制粘贴——在设置面板里点几下,就能编辑和生成 AGENTS.md。

适用版本:DSH 0.2.0-rc.2(详见文末兼容性)

它解决什么问题

DSH 会读取 AGENTS.md 里的规则来决定怎么干活。但手动管理这些文件很麻烦:

| 你可能遇到的麻烦 | 这个插件怎么办 |
| 找不到全局规则文件在哪,路径记不住 | 设置里直接打开编辑,页面会显示解析到的真实路径 |
| 换个项目就要再找一遍项目规则文件 | 下拉选工作区,直接编辑该项目的 AGENTS.md |
| 想让项目规则「整体继承全局规则,再加上项目特有的要求」,只能手动复制粘贴 | 选「合并全局规则」,AI 帮你融合成一份完整规则 |
| 不小心把已有规则覆盖没了 | 写入前自动备份成 AGENTS.md.bak-<时间戳>,同一毫秒内的多次保存也不会互相覆盖 |

插件不改变 DSH 的任何行为,只是给这些文件加了一个好用的编辑界面。

三个功能

1. 编辑全局规则

读写全局规则文件——它对所有项目生效。

- 路径解析与 DSH 完全一致:优先 $DSH_HOME/AGENTS.md,没设置就用 ~/.dsh/AGENTS.md
- 文件不存在时,保存会自动创建

2. 编辑项目规则

读写指定项目根目录下的 AGENTS.md。

- 从下拉列表选工作区,编辑它根目录的 AGENTS.md
- 同样支持自动创建与自动备份

3. 生成项目规则(这是最省事的一个)

你只需要用大白话写下你想要的规则,插件帮你生成规范的 AGENTS.md:

1. 选一个工作区
2. 写下你的要求,比如:

这个项目必须用 pnpm,不要用 npm 提交信息用中文改数据库前先写迁移脚本

3. 选一种生成方式(见下表)
4. 先预览,确认后才写入——在你点「确认写入」之前,磁盘上不会有任何改动

| 生成方式 | 做什么 | 什么时候用 |
| 合并全局规则 | 调 AI 把你的输入和全局 AGENTS.md 融合成一份完整规则:保留全局里仍然有效的要求,重复的合并,冲突时以你的项目规则为准 | 想让项目既遵守全局约定,又有自己的额外要求 |
| 直接覆盖 | 直接用你的输入生成,不参考全局规则 | 这个项目完全独立,不需要继承全局 |

全局规则文件不存在或为空时,「合并全局规则」会直接使用你输入的内容,不会报错。

生效时机

保存后:

- 新会话:立即生效
- 当前会话:在下一次文件操作后感知到新规则

(由 DSH 内置的动态检测机制负责,插件本身不做热重载。)

安装

以下内容面向愿意动手的使用者。

装进任意 DSH profile(目录形如 $DSH_HOME/profiles/<名字>)需要两步。

第一步:在 profile 的 package.json 里加上依赖,然后在 profile 目录执行 pnpm install:

"dsh-agents-md": "file:/绝对路径/to/dsh-agents-md"

当前 DSH 0.2.0-rc.2 没有随附 dsh CLI,所以上面这种 profile 手动安装是唯一可用的方式。
等 CLI 随版本发布后,也可以直接用 dsh plugin --profile web add Ytibu/dsh-agents-md——本插件的 package.json 已按该约定声明 dsh.bundle.patch 与 dsh.client,无需改动。

第二步:在同一个 package.json 的 dsh.profile.bundles 数组里加上插件名:

"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-agents-md"
]
}
}

只加 dependencies 不会让插件装载——必须同时加进 bundles。

最后重启 dsh web,打开 设置 → 「AGENTS.md 管理」。

本地开发时怎么让改动生效

file: 依赖在 pnpm 的 hoisted linker 下是硬链接,因此:

- 原地编辑已有文件会自动同步,不用重装
- 新增/重命名文件,或用「写临时文件再 rename」的原子保存(会断硬链接)时,需要重新 pnpm install

想彻底避开这类不确定性,可以把 profile 里的目录换成指向源码的联接:

Remove-Item "<profile>\node_modules\dsh-agents-md" -Recurse -Force
New-Item -ItemType Junction -Path "<profile>\node_modules\dsh-agents-md" -Target "<源码目录>"

另外:同步的只是文件,插件模块要重启 dsh web 才会重新加载(Client 半边随页面刷新更新,Host 半边不会)。

兼容性

仅适用于 DSH 0.2.0-rc.2

| 项 | 值 |
| 开发与测试所依据的 DSH 版本 | 0.2.0-rc.2 |
| 对应应用包 | @deepseek-ai/dsh-desktop / @deepseek-ai/dsh-desktop-runtime 0.2.0-rc.2 |
| 分发渠道 | nightly |

本插件用的是 DSH 内部契约,不是稳定的公开 API。 版本一变,下列接口可能改名或消失,插件会随之失效(通常表现为设置页入口消失,或路由 404): ctx.connection.fetch.register · ctx.workspaceRegistry · ctx.llm.stream · ctx.agentDefaultModel.currentSelection · slots 服务与 settings.section 槽位 · window.__ModuleLoader__.load

换 DSH 版本后请先跑一次自检:

node check-contracts.mjs

它直接读你本机安装的 DSH 源码,打印你的版本并逐项核对上述契约;退出码 0 表示兼容。你的版本与 0.2.0-rc.2 不一致时,这个脚本的结论比本文档更可信。

常见问题

设置里看不到「AGENTS.md 管理」入口? 最常见的原因是只加了 dependencies、没加进 dsh.profile.bundles(两步缺一不可),然后需要重启 dsh web 并刷新页面。

页面提示 401 / 会话未通过鉴权? 这是预期行为——接口受 DSH 鉴权保护,非浏览器会话访问会被拒绝。刷新页面重新登录即可。

改了源码但没生效? 分两层:文件同步(file: 依赖是硬链接,原地编辑自动跟随,新增文件需重装)与模块加载(Host 半边必须重启 dsh web)。

更多症状(合并失败、降级提示、备份文件、EBUSY、换版本后失效)见 TROUBLESHOOTING.md。

给开发者

工作原理与自检脚本

Host(lib/index.js)用 ctx.connection.fetch.register 注册 5 条 Fetch 路由,挂在 Connection 的 /api 通道上——因此自动落进 Host/Origin 栅栏与浏览器鉴权:

| 路由 | 方法 | 作用 |
| /api/agents-md/global | GET / POST | 读 / 写全局 AGENTS.md |
| /api/agents-md/project?workspace=<id> | GET / POST | 读 / 写 <工作区>/AGENTS.md |
| /api/agents-md/compose | POST | 生成内容,不落盘 |
| /api/agents-md/workspaces | GET | 工作区列表 |
| /api/agents-md/models | GET | 模型目录 |

必须走 connection.fetch:若改用 ctx.webServer.register 注册 kind:'exact' 的 /api/... 路由,会遮蔽 Connection 的 /api 前缀栅栏(webServer 的路由匹配是「先查 exact 表,未命中再最长前缀」),使只读接口失去鉴权。

Client(lib/client.js)是手写 __ModuleLoader__.load bundle,注册 settings.section 槽位,零构建。

自检脚本

node test-smoke.mjs # 离线冒烟测试(65 项断言,不需要运行中的 DSH)
node test-client-contract.mjs # 客户端契约测试(19 项断言,锁住 host/client 接口一致)
node check-contracts.mjs # 兼容性自检:核对本机 DSH 是否满足所依赖的契约
node check-live.mjs # 运行态自检:栅栏是否生效 + client bundle 是否注入

目录结构

dsh-agents-md/
├── cordis.patch.yml # bundle patch:插入插件层 ├── package.json # 含 dsh.compat(记录测试版本与依赖契约) ├── lib/ │ ├── index.js # Host:5 条 connection.fetch 路由 │ └── client.js # Client:手写 __ModuleLoader__ bundle ├── test-smoke.mjs # 离线冒烟测试 ├── test-client-contract.mjs # 客户端契约测试 ├── check-contracts.mjs # 兼容性自检 ├── check-live.mjs # 运行态自检 ├── CHANGELOG.md # 更新日志 └── TROUBLESHOOTING.md # 故障排查

参与贡献

欢迎贡献。提 issue 请务必附上你的 DSH 版本和 node check-contracts.mjs 的完整输出——这两样能直接区分「版本不兼容」还是「代码有问题」。仓库里有问题模板会提醒你填。

改动代码前请读一下 CONTRIBUTING.md,重点只有一条:新增对 DSH 内部契约的依赖时,要同步更新 check-contracts.mjs 和本文档的兼容性表格——这是插件最容易在 DSH 升级时静默失效的地方。

License

MIT
预览分享卡片长什么样 ↓Ytibu/dsh-agents-md
分享 · DeepSeek Harness Hub
Ytibu/dsh-agents-md

在设置面板里编辑并生成 AGENTS.md 规则文件

回到顶部