拦截 shell 读文件搜内容,引导改用专用工具
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Steven-Qiang/dsh-pwsh-guard该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · security
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/21) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
扫描于 2026/11/1(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-pwsh-guard
DeepSeek Harness 插件,把一条约定变成硬约束:读文件用 read、搜内容用 grep、找文件用 glob,不要用 shell 文本命令。
插件用 ctx.tools.guard 注册全局守卫,覆盖 pwsh、bash、ops_bash。命令一旦在用 shell 做文件文本 I/O,就会在执行前被拒绝,拒绝原因里写明该换哪个工具。拒绝文案跟随宿主语言(中文或英文)。
规则
| id | 分组 | 拦截 | 改用 |
| search.Select-String、search.sls | textSearch | Select-String、sls | grep |
| search.findstr、search.grep、search.rg | textSearch | findstr、grep、rg | grep |
| read.Get-Content、read.gc、read.cat、read.type | textRead | Get-Content 及其别名 | read |
| read.more、read.head、read.tail | textRead | more、head、tail | read |
展开完整文档(README 剩余 1 节)
dsh-pwsh-guard
DeepSeek Harness 插件,把一条约定变成硬约束:读文件用 read、搜内容用 grep、找文件用 glob,不要用 shell 文本命令。
插件用 ctx.tools.guard 注册全局守卫,覆盖 pwsh、bash、ops_bash。命令一旦在用 shell 做文件文本 I/O,就会在执行前被拒绝,拒绝原因里写明该换哪个工具。拒绝文案跟随宿主语言(中文或英文)。
规则
| id | 分组 | 拦截 | 改用 |
| search.Select-String、search.sls | textSearch | Select-String、sls | grep |
| search.findstr、search.grep、search.rg | textSearch | findstr、grep、rg | grep |
| read.Get-Content、read.gc、read.cat、read.type | textRead | Get-Content 及其别名 | read |
| read.more、read.head、read.tail | textRead | more、head、tail | read |
| bypass.node-eval、bypass.python-c、bypass.php-r、bypass.dotnet-io | runtimeBypass | 脚本里读文件的 node -e、python -c、php -r、[IO.File]::ReadAllText | read、grep |
| wait.Start-Sleep、wait.sleep | sleep | Start-Sleep、sleep | job_output 的 wait、schedule_create |
| pipeline.stderr-merge | stderrMerge | 2>&1 之后又接管道 | $LASTEXITCODE、2>err.txt |
两条判定规则用来压低误报:
- 短别名只在命令位置判定(^、;、|、&、(、{、$(),所以 Get-ChildItem -Type f、 git gc、git log --grep=x 都会放行。
- 引号内的文字不参与判定,所以 git commit -m "stop using Select-String" 会放行;检查脚本内容的规则(node -e ...)看原文。
配置
所有字段都可省略。
- id: pwsh-guard
name: 'dsh-pwsh-guard'
config:
enabled: true
language: auto # zh | en | auto
tools: [pwsh, bash, ops_bash]
disabledGroups: [] # textSearch | textRead | runtimeBypass | sleep | stderrMerge
allowPatterns: [] # 正则,命中则整体放行
rules: [] # 追加自定义规则,排在内置规则之前
language: auto 依次看 DSH_LOCALE、宿主 locale、LANG / LC_ALL。
rules:
- id: no-force-push
pattern: 'git\s+push\s+--force'
title: '禁止强推' hint: '改用 --force-with-lease'
安装
从 npm:
plugin_manager action: install_bundle target: dsh-pwsh-guard
从 GitHub:
plugin_manager action: install_bundle target: https://github.com/Steven-Qiang/dsh-pwsh-guard
从本地 clone(link: 安装,方便改代码):
git clone https://github.com/Steven-Qiang/dsh-pwsh-guard
plugin_manager action: install_bundle target: /path/to/dsh-pwsh-guard
改完代码或配置,重载即可,不用重启:
plugin_manager action: set_plugin target: include:pwsh-guard enabled: false
plugin_manager action: set_plugin target: include:pwsh-guard enabled: true
卸载:plugin_manager action: remove_bundle target: dsh-pwsh-guard。
如果 install_bundle 报 failedAt: registry,失败来自 profile 里别的依赖;此时包链接、 package.json 条目和 cordis.yml 里的行通常已经写好了。重试前先确认 node_modules/dsh-pwsh-guard/index.js 与 id: pwsh-guard 那一行是否存在。
已知缺口
- 引号包住的命令名(& "Select-String"、powershell -Command "Get-Content x")检测不到。
- -EncodedCommand 不解码。
- ops_bash --script_path 只看路径,不看脚本体。
- 目录列举(Get-ChildItem、ls、dir)不在管辖范围。
- 不是沙箱。防破坏性命令与密钥访问请另配专门的 guard(例如 cc-safety-net);它的规则模型表达不了「任何一次使用都拦」,所以才有这个插件。
开发
npm test
先用 tsdown 构建,再跑 36 条命令用例和 11 条配置断言。
发布
版本由 CI 决定,不要手改 version。推送到 main 会跑 .github/workflows/release.yml:
| 提交 | 版本 |
| fix: | patch |
| feat: | minor |
| feat!: 或 BREAKING CHANGE: | major |
| 其它 | 不发版 |
发布走 npm Trusted Publishing(OIDC),仓库里不存 NPM_TOKEN。要求:permissions.id-token: write (已配)、Node ≥ 22.14 且 npm CLI ≥ 11.5.1(工作流用 Node 24 并 npm install -g npm@latest)、 repository.url 与仓库一致。
Trusted Publisher 在 npmjs.com 上按 Steven-Qiang / dsh-pwsh-guard / release.yml 配置。新包必须先手动发布一次才能配置;新建的 Trusted Publisher 必须在 2 天内完成一次成功发布,否则过期。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Steven-Qiang/dsh-pwsh-guard
拦截 shell 读文件搜内容,引导改用专用工具
相关插件 · 安全 / 权限
智能体逆向工程morluto/rea
用智能体逆向工程任何东西,从应用行为到原生二进制。
★ 415,267已汉化DSH
73.3
智能体集群框架ruvnet/ruflo
面向 Claude Code 与 Codex 的智能体元基座meta-harness。
★ 80,414已汉化MCP
71.9
WorkBuddy 模型接入corrinehu/dsh-workbuddy-connect
2026 年 10 月 20 日起,WorkBuddy…
★ 1,604已汉化DSH
71.7
破甲一键通z91772524-ai/pojia-next
十五个 AI…
★ 967已汉化DSH
71.6
AI 代理虚拟终端strukto-ai/mirage
Mirage 是给 AI 智能体用的虚拟终端:一层 shell,统管数据、命令行和运行时。Unix…
★ 3,756已汉化DSH
70.8
Agent 操作层agentic-os-org/ANOLISA
ANOLISA(Agentic Nexus Operating Layer & Interface System Architecture)|智能体操作系统,带运行时、安全、可观测性,以及 Tokenless 响应压缩,降低 token 用量与成本。
★ 649已汉化DSH
70.7