dsh-dotclaude:在 DeepSeek Harness 中复用 Claude Code 的 `.claude/` 命令与权限

前言

在 DeepSeek Harness(DSH)里做智能体开发时,项目根目录下的 CLAUDE.md 已被宿主读取;官方桥接也覆盖了 Claude Code 的 hooks 与 plugin mods。但若你已经在 Claude Code 项目里维护 .claude/commands 和 permissions.deny,仍缺少一块:命令展开与 deny 规则如何在 DSH 侧生效,而不改宿主、也不在缺文件时静默加载无关内容。

下面介绍社区插件 dsh-dotclaude(维护者 RUI-debug769),它把 Claude Code 项目 .claude/ 目录里「命令与权限」这一半接到 DSH 上运行。

这是什么

dsh-dotclaude 是 DSH 生态中的工作流类插件(npm 包名 dsh-dotclaude,当前版本 0.1.0,MIT 许可证)。定位一句话:在 DSH 内运行 Claude Code 项目的 .claude/ 资源——项目斜杠命令支持参数展开,并对宿主工具调用执行 permissions.deny 规则;不补丁宿主,宿主或项目缺少对应文件时不会加载。

插件目录页:skillhub.cn/plugins/RUI-debug769/dsh-dotclaude。源码与说明:github.com/RUI-debug769/dsh-dotclaude。

核心功能

命令来源与调用方式

.claude/ 来源 在 DSH 中的效果
项目 .claude/commands/**/*.md /claude run <name> [args];在支持 agent 作用域注册的宿主上,新 agent 还会得到同名斜杠命令(如 /review)
用户 ~/.claude/commands/**/*.md 同上;同名时项目命令覆盖用户命令
项目 .claude/settings.json → permissions.deny 在工具实际执行前拒绝匹配的宿主工具调用
.claude/settings.local.json → permissions.deny 同上,在项目配置之后合并
permissions.allow / ask 仅报告,不用于放宽用户必须批准的边界

命令正文支持 Claude Code 侧常用的替换(不经过 shell):

  • $ARGUMENTS:命令名之后的原始文本
  • $1 … $9:按引号规则拆分的位置参数
  • @path:内联文件内容(有大小上限;文件缺失时保留字面量并由诊断报告)

Front matter 会读取 description、argument-hint;allowed-tools 与 model 会被忽略并标记为不支持。

内置 /claude 子命令

/claude                # 列出已解析命令及来源
/claude list           # 同上
/claude run <name> [args]
/claude doctor         # 来源、deny 规则及读取过程中的问题
/claude reload         # 丢弃读取缓存并重新解析

在支持命令注册表的宿主上,每个解析出的命令还会注册为独立斜杠命令;/claude run <name> 在所有宿主上可用。若宿主提供 system-prompt 段落注册表,会加入稳定段落列出可用命令;若存在 dsh-tui 状态行接口,聚合命令数会显示为 claude N cmd。

权限规则

规则语法与 Claude Code 一致:Tool 或 Tool(specifier),工具名会映射到宿主工具(例如 Bash→bash、Read→read、WebFetch→web_fetch、Task→subagent)。仅 deny 会强制执行;allow 不会绕过宿主自身的批准策略。无法解析或未知工具名由 /claude doctor 报告,且不会因此拒绝调用。

settings 文件不可读或格式错误时,deny 行为为 fail-open(不静默拦截),问题同样由 /claude doctor 暴露。若你需要 fail-closed,不应单独依赖本插件作为唯一边界。

刻意不覆盖的范围

不读取 .claude/agents/*.md、.claude/skills/、.mcp.json;命令体内不支持 ! bash 执行;hooks 与 plugin mods 请用官方 @deepseek-ai/dsh-hooks-claude-code 与 @deepseek-ai/dsh-experimental-claude-code-mods;不读写任何 .claude/ 文件。

安装与启用

通过 DSH 插件配置安装(资料原文命令):

dsh plugin --profile web add dsh-dotclaude

安装后重启宿主。bundle 会挂载一行插件 id:dotclaude。

若从本地检出目录安装:

dsh plugin --profile web add link:/path/to/dsh-dotclaude

package.json 中声明的 DSH 引擎要求为 >=0.1.7,依赖 Cordis 4;README 记载的兼容性包括 DSH 0.2.1-rc.2(Web profile)与 dsh-tui 0.16.1 组合启动等,详见仓库 scripts/host-smoke.sh(DOTCLAUDE_MATRIX=1)。

配置

默认即可用,config: {} 即完整配置。可通过 profile patch 覆盖,例如关闭 system-prompt 中的命令列表段落:

- id: dotclaude
  config:
    promptSection: false
键 默认值 含义
projectCommands true 从 Session 工作目录对应项目根读取 .claude/commands
userCommands true 读取 ~/.claude/commands
enforceDeny true 执行 permissions.deny
inlineFiles true 内联 @path
registerCommands true 在新 agent 上注册独立斜杠命令
promptSection true 在 system prompt 中加入命令列表段落
statusLine true 在 dsh-tui 状态行显示命令数(若接口存在)
maxCommandBytes 65536 超过则跳过命令文件
maxInlineBytes 65536 超过则跳过内联文件
extraRoots [] 预留,暂无额外扫描根

promptSection 与 statusLine 有可见成本:前者增加每次请求的 token,后者占用一条 dsh-tui 状态槽。

项目根判定

项目根为向上最近包含 .git 的目录;若无 .git 则为当前工作目录。若 home 目录带有 .claude,仅作用户级根,不会与项目扫描重复。

典型用法

  1. 在 Claude Code 项目中照常维护 .claude/commands/*.md 与 settings.json 中的 permissions.deny。
  2. 安装插件并重启 DSH 后,在新会话中执行 /claude 确认命令来源。
  3. 用 /claude run <name> [args] 或已注册的 /name 触发命令;需要排查 deny 或读取问题时运行 /claude doctor。
  4. 修改 .claude/ 后可用 /claude reload 刷新缓存。

适用场景与注意

适合已在 Claude Code 工作流中沉淀项目命令与 deny 规则、又希望在 DSH Web profile(或配套 dsh-tui)中继续使用的团队或个人。插件只读 .claude/,但以当前 dsh 进程权限运行;内联的 @path 会把文件内容送入模型,命令文件若引用密钥会泄露,只应运行你信任的命令文件。

安装前建议查看 GitHub 仓库 源码与 MIT 许可证。社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系,属「一切皆插件」生态中的独立收录站点。

结尾

dsh-dotclaude 补上了 DSH 与 Claude Code 项目资产之间「命令 + permissions.deny」的缺口:不改宿主、缺件不加载,用 /claude 系列命令即可列出、运行与自检。进一步说明与 issue 见 GitHub,目录入口见 SkillHub 插件页。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜