资讯详情

DeepSeek Harness 指令文件软链接跟随:`AGENTS.md`/`CLAUDE.md` 解析策略与信任边界设计

📅 2026/9/20 16:50:07 | 华诺云谱 👁 阅读
DeepSeek Harness 指令文件软链接跟随:`AGENTS.md`/`CLAUDE.md` 解析策略与信任边界设计
人工智能AI AgentAgent 框架DeepSeek【免费下载链接】deepseek-harnessDeepSeek Harness: Everything is a Plugin.项目地址https://gitcode.com/gh_mirrors/de/deepseek-harness点击查看免费下载本篇文章基于 DeepSeek Harnessdeepseek-ai/dsh-agent-instructions插件已实现的功能笔记讲解 workspace 指令发现机制如何从「拒绝跟随末段软链接lstatno-follow」演变为「无条件跟随软链接resolvestat」的完整决策过程。读者将掌握$DSH_HOME/AGENTS.md、项目AGENTS.md与CLAUDE.md三类候选文件的真实解析行为、present / absent / unavailable三态探针语义以及该改动引入的信任边界与残余风险的工程权衡思路。背景no-follow 不变量为何成为障碍DeepSeek Harness 的 workspace 上下文机制详见 workspace-context 功能笔记负责把仓库中的AGENTS.md、CLAUDE.md等指令文件注入到会话的有效上下文中使项目约定、构建命令与评审规则无需用户反复粘贴即可到达模型。该能力由packages/context/agent-instructions实现包名为deepseek-ai/dsh-agent-instructions。在早期实现中指令候选的探测逻辑使用ctx.fs.lstat检查路径末段组件并拒绝任何末段为符号链接的候选。这意味着仓库所有者不能通过软链接把指令加载指向 workspace 之外的内容。这个 no-follow 不变量带来了两个实际问题合法的软链接场景被静默忽略用户将$DSH_HOME/AGENTS.md用户级全局指令或某个项目的AGENTS.md软链接到一个位于其他位置的规范指令文件以便在多个工具、多个 home 之间共享同一份「house-style」文件。这类被刻意支持的配置在旧行为下会被静默忽略。镜像文件沦为特殊跳过案例仓库中普遍存在的CLAUDE.md → AGENTS.md镜像后者软链前者被迫作为一种「特殊跳过」情形处理而不是作为普通的内容重复参与去重。仓库所有者因此要求在所有 scope 上无条件跟随软链接指令文件同时接受下方记录的残余信任边界风险。决策探测从lstat改为resolvestat核心变更可以概括为一句指令发现不再用lstat检查末段组件。取而代之的是一套统一的「先解析、再分类」流程每一类候选——用户全局的$DSH_HOME/AGENTS.md、每个基础候选base candidate、每个本地叠加候选local overlay candidate——都被解析resolve随后对解析后的目标执行stat。该流程在**基线组装baseline composition**时执行也在每次tools/post-execute对账reconciliation时执行两条路径行为完全一致。解析结果按以下规则分类软链接目标是普通文件加载该目标的内容解析后的目标是非文件包括链接到目录视为已确认的缺失confirmed absence像缺失文件一样移除该 scoperesolve或stat抛出异常归类为暂时不可用temporarily unavailable绝不移除已经加载的 scope。源码级实现两个 stat 入口在 files.ts 中两条探测路径分别处理宿主文件系统与 provider 文件系统nodeStatFilefiles.ts#L98-L111对宿主路径直接调用stat。源码注释明确说明stat而非lstat会跟随末段符号链接因此指向普通文件的链接会被加载而损坏的链接broken link会以ENOENT浮出被归类为absent。fsStatFilefiles.ts#L113-L135对 provider 路径先调用fileSystem.resolve()跟随末段软链接到目标的稳定身份再对目标调用fileSystem.stat()分类。目标类型不是file即为absent任何异常除信号中止外返回unavailable。两个入口统一收敛到statFilefiles.ts#L137-L143按是否挂载了ctx.fsprovider 自动选择实现。两者都不再调用lstat。三态类型ScopeInstructionProbepresent | absent | unavailable见 files.ts#L74-L77把「确认缺失」与「provider 失败」严格区分是「不可用绝不删 scope」这一不变量的类型级保证。动态对账路径上的probeScopeInstructionfiles.ts#L460-L493使用同样的resolve→stat→ 按info.type ! file判定absent的逻辑注释同样强调「只有 provider 异常才上报为 unavailable」。被跟随的软链接在后续环节中是普通文件一个被成功跟随的软链接对下游所有环节而言就是一个普通文件。最典型的收益体现在内容去重上去重逻辑为按目录的修剪后内容去重trimmed-content dedup详见 instruction-load-all-dedup 功能笔记。具体实现在dedupInstructionFilesByDirectoryfiles.ts#L368-L384同一目录下修剪首尾空白后内容字节相同的候选折叠到发现顺序中最早的一个且保留文件渲染其原始字节。因此一个CLAUDE.md软链接其兄弟文件AGENTS.md的场景现在解析后得到完全一致的内容像任何字节相同的真实重复一样被折叠而不再是特殊的跳过案例。这使内容去重对所有重复来源——真实的字节相同副本与软链接镜像——走完全相同的路径。Scope 键的配合变化由于同一目录下每个候选名现在是独立 scopescope 键编码为directory\u0000candidateNameNUL 分隔符不可能出现在真实路径中。candidateScopeKey/decodeScopeKey负责编解码probeScopeInstruction解码候选名后精确读取该文件。因此目录中AGENTS.md与CLAUDE.md是独立 scope、各自独立对账移除其中一个只对该候选自身 scope 发出remove不触及兄弟 scope。信任边界与残余风险仓库软链接 越界读取跟随仓库所有的软链接会跨越插件的信任边界。需要清醒认识的风险模型是一个被 clone 的不可信仓库可以携带AGENTS.md其软链接目标可以是进程可读的任意文件从而把工作区之外的内容以「工作区指引」的形式呈现给模型。缓解机制是内容定位而非权威这类内容只以低权威的 user-role 前缀进入并被system-reminder框架包裹模型面对的正是system-reminderInstructions from: path/system-reminder这种模式详见 workspace-context 功能笔记它永远不能覆盖system、developer 或直接 user 指令仅被当作数据处理而不是权威来源。真正的边界在文件系统层而非本插件当部署需要加载不可信仓库时用dsh-fs-observation-policy门控或 OS 沙箱约束ctx.fs相关设计见 cross-family fs sandbox 功能笔记。这是一个明确由仓库所有者接受的权衡而非疏忽。信任边界从本插件移出进入文件系统策略与沙箱层因为「读权限边界」本质上属于文件系统策略的职责而非路径解析层的职责。备选方案为何被否决决策笔记记录了三个被拒绝的替代方案理解它们有助于把握设计取向保留lstatno-follow 不变量被否决。它会阻断「软链到规范文件」这一受支持配置并迫使镜像场景成为特殊跳过案例它所近似保护的读权限边界更适合由文件系统策略与沙箱层承载——同一风险可以被更精确地包含。只跟随用户全局$DSH_HOME候选项目文件继续 no-follow被否决。仓库所有者要求所有 scope 行为统一分裂的规则比「一条一致策略 一条文档化边界」更难推理。用户选择打开的项目并不比用户自己的 home 更可信。跟随软链接但拒绝解析到项目根之外的目标被否决。它把部分信任边界放回了错误的层——用路径几何而非读权限——既破坏了合法的$DSH_HOME指向外部场景又重复实现了文件系统策略门控已经拥有的遏制能力。三个备选的共同教训是信任边界应该放在能精确表达「谁有读取权限」的层文件系统策略/沙箱而不是放在路径解析的几何层。验证测试如何锁定新行为实现随附的测试直接印证了决策语义可在 agent-instructions.spec.ts 中查看宿主路径跟随spec.ts#L454-L473在仓库外创建shared.md软链为根目录AGENTS.md断言discoverBaselineInstructionFiles的显示路径包含AGENTS.md且loadBaselineInstructions渲染文本包含shared instruction body。provider 路径跟随spec.ts#L475-L495同一场景经由ctx.fs挂载后断言组合出的基线前缀包含目标内容。链接到目录 确认缺失spec.ts#L3381-L3419先把pkg/AGENTS.md加载为已加载 scope随后删除原文件并把AGENTS.md改为指向目录的软链接再触发一次read工具调用断言对账产生{ action: remove, scope: sk(pkg, AGENTS.md) }并渲染Instructions removed: ...。测试注释特别强调非文件目标是确认缺失而非不可用所以已加载 scope 会被移除若分类为unavailable则不会产生任何变更。配置与实操要点配合该行为插件的关键配置项定义与校验见 config.ts如下配置项默认值说明dshHome$DSH_HOME或~/.dsh存放固定用户全局AGENTS.md的目录不属于候选列表也无本地叠加projectRootMarkers[.git]从会话 cwd 向上行走时的项目根标记.git文件与目录均有效覆盖 linked worktree 与 submodule无标记时以 cwd 为根maxBytes必填单次渲染的基线或对账批次的 UTF-8 字节上限非正数或非有限值会禁用加载maxSourceBytes10485761 MiB单个指令文件的最大读取字节数超限文件不可用instructionFileCandidates[AGENTS.md, CLAUDE.md]基础候选列表按序加载同目录所有存在的文件localInstructionFileCandidates[AGENTS.local.md, CLAUDE.local.md]本地叠加候选基础文件之后加载共享同一按目录去重规则传空数组可禁用叠加候选必须是同目录文件名空条目、./..以及含/或\的条目会被忽略。软链接跟随对以上所有候选统一生效包括用户全局文件。部署侧通过显式的{ maxBytes } | false挂载决定是否启用dsh web使用 65,536 字节预算Host Runtime 的 headless 消费者则禁用。影响与总结本次变更的最终影响软链接指令文件现在像其目标一样被加载与渲染使规范指令文件可以在不同工具与不同 home 之间共享CLAUDE.md → AGENTS.md镜像通过内容去重折叠不再是被跳过的特殊案例插件指令加载不再依赖ctx.fs.lstat解析后为非文件目标即为确认缺失只有 provider 异常才算暂时不可用信任边界移出插件由文件系统策略与沙箱层负责——当部署加载不可信仓库时必须用dsh-fs-observation-policy门控或 OS 沙箱约束ctx.fs。从工程视角看这是一次典型的「行为变更 → 风险重定位 → 分层处置」决策插件层追求一致、可推理的解析语义对所有 scope 无差别跟随把「读取权限」这一真正的信任问题下沉到文件系统策略与沙箱层并用三态探针 按目录内容去重 测试锁定把变更控制在可验证、可回滚的范围内。仓库所有者明确接受了「跟随仓库软链接可能引入 workspace 外部内容」的残余风险但该内容只以低权威 user-role 数据身份进入上下文且系统提示词框架与文件系统边界共同兜底。赞分享人工智能AI AgentAgent 框架DeepSeek【免费下载链接】deepseek-harnessDeepSeek Harness: Everything is a Plugin.项目地址https://gitcode.com/gh_mirrors/de/deepseek-harness点击查看免费下载相关推荐DeepSeek Harness 指令文件加载全面去重AGENTS.md 与 CLAUDE.md 共存的每目录内容级去重方案DeepSeek Harness 指令文件加载全面去重 AGENTS.md 与 CLAUDE.md 共存的每目录内容级去重方案 本篇技术指南讲解 deeps人工智能AI AgentAgent 框架DeepSeekDeepSeek Harness 发起 Agent 作用域设计基于 AsyncLocalStorage 的进程内信任链DeepSeek Harness 发起 Agent 作用域设计基于 AsyncLocalStorage 的进程内信任链 导读 本文剖析 DeepSeek Ha人工智能AI AgentAgent 框架DeepSeekDeepSeek Harness一步一个边界——pre-step 前的 Inbox 原子认领与单点决策设计DeepSeek Harness一步一个边界——pre step 前的 Inbox 原子认领与单点决策设计 在 DeepSeek Harness“Every人工智能AI AgentAgent 框架DeepSeek上一篇前端面试必看3大框架实现小程序/H5/APP一体化开发的终极指南下一篇Python初学者也能懂two-stream-action-recognition数据加载模块源码解读创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。