按预设勾选接管 AGENTS.md 的四层扫描注入
27.7/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add sidleo/agent-instructions-plus该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · skill
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 38 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/16) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 26 处,展示前 26 条)
- 发起网络请求src/client/index.ts:150
fetch('/api/agent-instructions-plus/config').then(function (r) { return r.json() }) - 发起网络请求src/client/index.ts:156
fetch('/api/agent-instructions-plus/presets').then(function (r) { return r.json() }) - 发起网络请求src/client/index.ts:170
fetch('/api/agent-instructions-plus/config', { - 发起网络请求src/client/index.ts:187
fetch(path, { - 发起网络请求src/client/index.ts:196
return fetch('/api/agent-instructions-plus/presets').then(function (r) { return r.json() }) - 读取本地文件src/composition.ts:59
const manifest = JSON.parse(await readFile(join(profile.dir, name), 'utf8')) as { - 读取本地文件src/composition.ts:88
const manifest = JSON.parse(await readFile(manifestPath, 'utf8')) as { - 读取本地文件src/composition.ts:270
text = await readFile(patchFile, 'utf8') - 读取本地文件src/composition.ts:301
text = await readFile(patchFile, 'utf8') - 读取本地文件src/discovery.ts:33
const info = statSync(path, { throwIfNoEntry: false }) - 读取本地文件src/discovery.ts:42
const info = statSync(path, { throwIfNoEntry: false }) - 读取本地文件src/discovery.ts:45
return readFileSync(path, 'utf8') - 读取本地文件src/discovery.ts:56
const info = statSync(join(path, marker), { throwIfNoEntry: false }) - 读取本地文件src/files.ts:60
const info = await stat(path) - 读取本地文件src/files.ts:129
await stat(path) - 读取本地文件src/files.ts:225
const stream = createReadStream(path, { encoding: 'utf8', signal }) - 读取本地文件src/index.ts:82
const raw = readFileSync(configPath(dshHome), 'utf8') - 写入本地文件src/index.ts:92
writeFileSync(configPath(home), JSON.stringify(config, null, 2), 'utf8') - 读取本地文件src/wizard.ts:158
await readFile(backupPath(patchPath), 'utf8') - 读取本地文件src/wizard.ts:164
text = await readFile(patchPath, 'utf8') - 读取本地文件src/wizard.ts:386
text = await readFile(patchPath, 'utf8') - 写入本地文件src/wizard.ts:393
await mkdir(dirname(backupPath(patchPath)), { recursive: true }) - 写入本地文件src/wizard.ts:394
await writeFile(backupPath(patchPath), text, 'utf8') - 写入本地文件src/wizard.ts:434
await writeFile(patchPath, edited, 'utf8') - 读取本地文件src/wizard.ts:468
text = await readFile(patchPath, 'utf8') - 写入本地文件src/wizard.ts:488
await writeFile(patchPath, restored, 'utf8')
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成@sidleo3/agent-instructions-plus
按 preset 选择性接管 DSH 的 AGENTS.md 指令注入。用可配置的四层扫描(cwd / 项目 / 上级遍历 / 全局)替代内置 dsh-agent-instructions 的固定发现逻辑 —— 但只在用户显式勾选的 preset 中生效。
核心设计
- 安装零改动:插件安装后不做任何事,不写任何 preset 覆盖,内置 agent-instructions 照常工作
- 用户决定生效范围:在 Web GUI(侧边栏 Plugins → 本插件配置页)里勾选要接管的 preset(多选)
- 完全替代:勾选某个 preset 后,向该 profile 的 cordis.patch.yml 写入 preset-<id> 覆盖行 —— 内置 agent-instructions 行被 disabled: true,并追加本插件的注入管线行
- 取消即恢复:取消勾选行级移除自己那段覆盖行,其他插件的 patch 段逐字节不变,agent-instructions 恢复工作
- 不生效的 preset 不受影响:未勾选的 preset 完全保持内置行为
与内置 agent-instructions 的区别
展开完整文档(README 剩余 1 节)
@sidleo3/agent-instructions-plus
按 preset 选择性接管 DSH 的 AGENTS.md 指令注入。用可配置的四层扫描(cwd / 项目 / 上级遍历 / 全局)替代内置 dsh-agent-instructions 的固定发现逻辑 —— 但只在用户显式勾选的 preset 中生效。
核心设计
- 安装零改动:插件安装后不做任何事,不写任何 preset 覆盖,内置 agent-instructions 照常工作
- 用户决定生效范围:在 Web GUI(侧边栏 Plugins → 本插件配置页)里勾选要接管的 preset(多选)
- 完全替代:勾选某个 preset 后,向该 profile 的 cordis.patch.yml 写入 preset-<id> 覆盖行 —— 内置 agent-instructions 行被 disabled: true,并追加本插件的注入管线行
- 取消即恢复:取消勾选行级移除自己那段覆盖行,其他插件的 patch 段逐字节不变,agent-instructions 恢复工作
- 不生效的 preset 不受影响:未勾选的 preset 完全保持内置行为
与内置 agent-instructions 的区别
两者运行时骨架同源:同一套「首个 pre-step 合成 baseline → tools/result 的 read/write/edit 冒泡 touches → 增量 reconcile → digest 去重」机制,配置字段也基本一一对应。真正的分歧只有一处 —— 向上扫描在哪里停。
| 维度 | agent-instructions(内置) | agent-instructions-plus(本插件) |
| 生效范围 | 所有 preset 无条件生效 | 仅用户勾选的 preset,其余完全保持内置行为 |
| 向上扫描 | 只到 project root(.git 标记的祖先)为止 | scanProject(同内置)或 scanParents(一路到 /),二选一 |
| cwd 自身 | 含在 root→cwd 链里 | scanCwd 独立开关 |
| 全局层 | $DSH_HOME/AGENTS.md 固定加载 | scanGlobal 独立开关 |
| 候选文件名 / 项目根标记 / 字节预算 | instructionFileCandidates、localInstructionFileCandidates、projectRootMarkers、maxBytes、maxSourceBytes | 同名同义 |
| 刷新触发 / 去重 / baseline 身份 | tools/result → 增量 reconcile;SHA-1 digest + 逐目录去重 | 同机制(管线是对内置语义的复刻) |
| 配置入口 | preset 行的 config | Web GUI 配置页(写 cordis.patch.yml 覆盖行) |
scanParents 解决什么
设仓库在 /Users/me/Project/repo,而 /Users/me/AGENTS.md 也写了规则:
- 内置:在 repo/.git 找到项目根就停 → /Users/me/AGENTS.md 读不到
- scanParents:一路扫到 / → 每一层的 AGENTS.md 都能读到
内置的取舍是有意为之:root 探测只在确认标记缺失时才继续向上,遇到权限/IO 错误会停止并报错,而不是改选另一个祖先当根 —— 避免把 / 或 $HOME 误判成项目根、注入无关内容。本插件只是把这个选择权交给你(详见 @deepseek-ai/dsh-agent-instructions 的 README「Root discovery」段)。
什么时候不需要本插件
如果只想要改候选名或 maxBytes,内置的 config 已经支持,直接写 preset 行即可 —— 不必引入本插件:
- id: agent-instructions
name: '@deepseek-ai/dsh-agent-instructions'
config:
maxBytes: 65536
instructionFileCandidates: [AGENTS.md, CLAUDE.md, CODEBUDDY.md]
只有需要 scanParents(跨 git 仓库向上读)或 scanCwd / scanGlobal 的独立开关时,本插件才不可替代。
⚠️ 代价:本插件的注入管线是对内置语义的复刻而非复用。DSH 修改内置机制时本插件不会自动跟上,需要人工同步(参见 AGENTS.md 坑点 7/8/9 —— 那两个真 bug 就是复刻漂移的结果)。
Features
- Four scanning layers: cwd (highest) → project/parents (mutually exclusive) → global (lowest)
- scanParents mode: Walk every ancestor from cwd upward to filesystem root — no depth limit
- Custom candidates: Add/remove base instruction file names and local overlay names
- Custom project-root markers: Configure which files/dirs identify a project root
- Web GUI page: 侧边栏 Plugins → 本插件 → 配置页(preset 多选 + 四层扫描配置)
- Provider interface: Exposes the discovery provider on context for consumers
兼容性
| DSH 版本 | 状态 |
| 0.1.7-alpha.2 及以后 | ✅ 支持(配置页在侧边栏 Plugins;接管写 profile patch) |
| 0.1.6 及更早 | ❌ 不支持 —— 旧版的 settings.plugin.item 槽位与 ~/.dsh/.agent-presets/ 文件式 preset 在 0.1.7 已被移除 |
安装
From npm
dsh plugin --profile web add @sidleo3/agent-instructions-plus
From local checkout
dsh plugin --profile web add link:/path/to/agent-instructions-plus
安装后重启 DSH。无需任何额外操作——插件不会改动任何 preset,内置 agent-instructions 继续工作。
使用:在 GUI 中按 preset 启用
1. 打开侧边栏 Plugins → 找到本插件的卡片 → 进入其配置页
2. 在「生效的预设」列表里勾选要接管的 preset(多选,仅列出含 agent-instructions 行的内置预设)
3. 勾选后立即写入该 profile 的 cordis.patch.yml:新增 - id: preset-<id> 覆盖行,其中内置 agent-instructions 行被 disabled: true,并追加本插件的注入管线行
4. 新会话选择该 preset 时,使用本插件的四层扫描注入 AGENTS.md
5. 取消勾选 = 移除该覆盖行,其余配置逐字节不变(新建会话生效)
已运行中的会话不受勾选/取消影响(preset 组合在会话创建时固定);改动对之后新建的会话生效,通常需重启 DSH 让 profile patch 重新合成。
配置
interface InstructionScanConfig {
scanCwd: boolean // default: true
scanProject: boolean // default: false (mutually exclusive with scanParents)
scanParents: boolean // default: true (mutually exclusive with scanProject)
scanGlobal: boolean // default: true
instructionFileCandidates: string[] // default: ['AGENTS.md', 'CLAUDE.md']
localInstructionFileCandidates: string[] // default: ['AGENTS.local.md', 'CLAUDE.local.md']
projectRootMarkers: string[] // default: ['.git']
dshHome: string // default: '~/.dsh'
}
配置页遵循 DSH 的页面契约:编辑只停留在本地草稿,点「保存」才写入;离开页面丢弃草稿。
工作原理
1. 安装 = 空操作:host 入口只注册 provider 与 GUI RPC,不碰任何 preset
2. 用户勾选 preset:GUI 调 /api/agent-instructions-plus/presets/apply,host 在 profile 的 cordis.patch.yml 追加 preset-<id> 覆盖行 —— 复制该预设的 shipped 组合、把内置 agent-instructions 行改为 disabled: true、追加 /preset 注入管线行
3. 注入:被覆盖的 preset 中 /preset 行按四层扫描发现并注入 AGENTS.md,完全替代内置发现
4. 移除:GUI 调 /api/agent-instructions-plus/presets/remove 行级移除自己那段覆盖行,其他插件的 patch 段逐字节不变
为什么写 profile patch 而不是 preset 文件
DSH 0.1.7 起,@deepseek-ai/dsh-agent-preset-registry 不再扫描 ~/.dsh/.agent-presets/ 目录,也不接受 preset 路径:preset 现在是声明式的 @deepseek-ai/dsh-agent-preset Loader 行,覆盖已发布的 preset 只能通过 bundle patch。agentPresets.list()/resolve() 也只返回展示元数据,没有组合路径、没有读/写组合的能力。因此旧版「复制 preset 目录再改文件」的模型已无落点。
开发
pnpm install --ignore-scripts # 无特殊 flag
pnpm build # tsdown → lib/index.js + lib/preset.js + lib/client.js
pnpm typecheck # 期望 0 错误
@deepseek-ai/dsh-* 与 @deepseek-ai/cordis 只存在于 DSH 安装里(npm 上只有过期的 rc),因此本项目不把它们写进依赖声明 —— 写了会让 pnpm install / npm install 去 registry 拉不存在的版本而失败。类型改由 scripts/resolve-dsh-types.mjs 从运行中的 DSH 解析(pnpm typecheck 会自动先跑它);换 DSH 安装后 pnpm resolve-types 重跑即可。
注意事项
- provider 字面值保持 instruction-scan,兼容旧 bundle 已持久化的消息;插件标识/路由/包名已全部改为 agent-instructions-plus
- 覆盖行的 plugins 是整表替换(patch 语义是 replace 而非 merge):DSH 升级若改动了 shipped preset,已写入的覆盖会固化旧组合,需要在 GUI 里取消再勾选以基于新版重建
- 写入必须做到行级:patch 和复制的 preset 行都带 !!js 自定义标签(例如 disabled: !!js process.platform === 'win32'),一旦全量 parse→re-serialize,标签会被求值成普通字符串,disabled 就变成 truthy,shell 工具随之静默失效
- ~/.dsh/.agent-presets/ 是 DSH 0.1.6 及更早版本的文件式 preset 目录,0.1.7 起不再加载;里面残留的 .aip-backup/ 属于历史产物,不能当作恢复源预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
sidleo/agent-instructions-plus
按预设勾选接管 AGENTS.md 的四层扫描注入
相关插件 · 技能 / 提示词
人设统管ZiChuanLan/agent-purge
一份系统提示词,喂给多个 coding…
★ 931已汉化DSH
73.8
人物画像蒸馏titanwings/distilly
Distilly — 把他们的思考方式提炼成可复用的技能,供任何智能体或机器人使用。原名 Colleague Skill(原同事 Skill)。
★ 25,659已汉化DSH
71.3
推理工作空间套件Tiger3807861189/J-Space-Cognition-Suite
J-Space 是面向复杂推理、大型仓库工程、子代理协作与授权安全分析的推理时工作空间和控制套件。
★ 2,957已汉化DSH
70.5
两阶段工具锚定预设xiaobright/dsh-anchored-standard
实验性 DeepSeek Harness agent preset…
★ 3,742已汉化DSH
70.1
智能体工作流编排nrslib/takt
不再日夜盯着 AI 编码智能体。
★ 1,402已汉化DSH
70
Agent 运行时手册Electricitysheep/dsh-handbook
DeepSeek Harness dsh 从 0 到 1 深度手册:安装/插件开发/性能调优/实测案例/同模型多…
★ 827已汉化DSH
68.7