dsh-hooks-pack
已验证dsh-hooks-pack · v0.1.0 · MIT
One-click Claude Code & Codex hooks for DeepSeek Harness: auto-discovers your existing hooks config and runs it on the harness interception points via the official bridge plugins
安装
dsh plugin add dsh-hooks-pack 用 dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南。
源码
标签
作者
说明文档
dsh-hooks-pack
DeepSeek Harness 的一键 Claude Code / Codex hooks 整合包。
已经有 Claude Code 或 Codex 的 hooks.json?装上这个包,那些 hooks 直接在 DSH 里生效 —— 不用写代码、不用改配置。还没有 hooks?复制自带的示例包,一分钟获得「危险命令拦截 + 全量工具调用审计日志」。
重活由官方桥插件完成(@deepseek-ai/dsh-hooks-claude-code、@deepseek-ai/dsh-hooks-codex、共享协议 @deepseek-ai/dsh-hook-protocol),本包补上手动安装缺的三块:
- 自动发现 —— 自动探测标准位置下的现有 hooks 配置。
- 一行装配 —— 单个 bundle 行把两种方言挂到宿主平面。
- 空闲安全 —— 任何配置都不存在时不注册任何东西;安装本身绝不改变 agent 行为。
安装
在插件市场界面搜索 dsh-hooks-pack → 安装。
或用命令行:
dsh plugin --profile web add github:REPLACE_ME/dsh-hooks-pack
# npm 发布后也可以:
dsh plugin --profile web add dsh-hooks-pack
安装后重启 profile(或刷新 Web 界面)。
会发现什么
| 方言 | 探测位置(命中即停) |
|---|---|
| Claude Code | $CLAUDE_CONFIG_DIR/hooks.json → ~/.claude/hooks.json → ~/.claude/settings.json(仅当含 hooks 键) |
| Codex | $CODEX_HOME/hooks.json → ~/.codex/hooks.json |
显式路径优先于自动发现:
# 你 profile 的 cordis.patch.yml
- id: hooks-pack
name: dsh-hooks-pack
config:
claude:
configPath: D:/my-hooks/claude-hooks.json
codex:
configPath: D:/my-hooks/codex-hooks.json
支持的钩子点
经官方桥(仅 command 类型 hook):
- Claude Code 方言:
SessionStart、UserPromptSubmit、PreToolUse、PostToolUse、Stop、SubagentStart、SubagentStop - Codex 方言:
PreToolUse、PostToolUse、SessionStart、UserPromptSubmit、Stop
deny / ask 决策、阻断反馈、additionalContext 上下文注入均可用;每个事件的 stdin 载荷与 stdout 决议格式见各桥 README。
Hook 输出格式
决策必须使用 Claude Code 的结构化格式 —— 顶层的 permissionDecision 会被忽略:
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "blocked by policy X"
}
}
hookEventName 必须与触发事件同名(PreToolUse、SessionStart…),否则事件级字段被丢弃。退出码 2 同样会阻断,以 stderr 作为原因。
示例包
examples/claude-hooks.example.json 自带两个开箱即用的 hook:
- guard-dangerous(shell 工具的
PreToolUse):拦截rm -rf、force push、Remove-Item -Recurse -Force、格式化磁盘、fork 炸弹等 - audit-log(所有工具的
PostToolUse):把每次工具调用追加到~/.dsh-hooks-audit.jsonl
启用方法:
# 1. 把 examples 复制到一个稳定位置
xcopy /E /I <profile-node-modules>\dsh-hooks-pack\examples %USERPROFILE%\dsh-hooks-examples\
# 2. 复制示例配置为你的 hooks 文件
copy %USERPROFILE%\dsh-hooks-examples\claude-hooks.example.json %USERPROFILE%\.claude\hooks.json
# 3. 编辑该文件,把 <ABS-PATH> 替换为 %USERPROFILE%\dsh-hooks-examples
配置项
| 键 | 类型 | 默认 | 说明 |
|---|---|---|---|
autoDiscover |
boolean | true |
无显式路径时探测标准位置 |
claude.configPath |
string | 自动发现 | 显式指定 Claude Code 配置文件 |
claude.pluginRoot |
string | — | 替换命令中的 ${CLAUDE_PLUGIN_ROOT} |
claude.projectDir |
string | 会话 cwd | 替换 ${CLAUDE_PROJECT_DIR} 并导出该环境变量 |
claude.defaultTimeoutMs |
number | 600000 | hook 未设置超时时的默认值 |
codex.configPath |
string | 自动发现 | 显式指定 Codex 配置文件 |
codex.model |
string | — | Codex 载荷中的 model 字段 |
已知限制
继承自官方桥:仅运行 shell 型 command hook(http / mcp_tool / prompt 型会告警跳过);配置在进程加载时读取一次,暂不支持按会话发现项目级 hooks.json;部分 Claude Code 新事件未映射。完整清单见各桥 README。
兼容性
在 DeepSeek Harness 0.1.0-rc.7 + 桥包 0.1.0-rc.7 上测试通过。依赖范围同时接受 0.1.1-rc.1 以支持更新的部署。
许可
MIT