TorpedoD/claude-sentinel
GitHub: TorpedoD/claude-sentinel
一款为 Claude Code 提供并行安全审计与隔离防护的外置命令工具。
Stars: 2 | Forks: 0
# claude-sentinel



专为 Claude Code 设计的 12 工具安全审计 skill。只需一个斜杠命令即可并行运行 trivy、gitleaks、semgrep、osv-scanner、npm audit、pip-audit、syft、grype、snyk-agent-scan、skill-scanner 和 tirith —— 内置严格的只读沙箱机制和防 prompt 注入防护。
## 安装
```
npx skill add TorpedoD/claude-sentinel
```
这会将 `security-scan` skill 安装到 `~/.claude/skills/security-scan/`。
## 用法
**claude-sentinel 必须在*被审计的* repo 之外运行。** 创建一个项目文件夹,在其中克隆目标 repo,然后从该项目文件夹中打开 Claude —— 而不是从克隆的目录内部打开:
```
mkdir ~/audits/acme-audit && cd ~/audits/acme-audit
git clone https://github.com/acme/api-server.git
claude
```
然后在 Claude 中:
```
/security-scan
```
该命令会自动检测唯一的 `.git` 子目录(在此例中为 `api-server/`)作为扫描目标。如果当前目录本身就是一个 git repo,它将拒绝运行 —— 因为这会使 Claude 的 shell 处于*被审计的*代码内部,而这正是隔离模型所要阻止的情况。
**为什么要在克隆之外运行?** 扫描工具会将目标视为数据。如果 Claude 的 shell 位于目标内部,任何被篡改的文件(hook、pre-commit、dotfile、深藏在 README 中的脚本)只需一条额外的命令就可能被执行。将 shell 保留在一个干净的外部文件夹中,意味着目标 repo 永远不会成为 Claude 的 CWD —— 它只会作为路径参数传递给受信任的扫描程序二进制文件。
**扫描多个 repo:** 每次扫描使用一个全新的项目文件夹,每个文件夹只包含一个克隆。如果自动检测程序发现零个或多个 `.git` 子目录,将会报错。
## 必需的二进制文件
在运行之前安装扫描工具:
```
# Core
brew install trivy gitleaks semgrep osv-scanner syft grype
# Python dep auditing
pip install pip-audit # or: pipx install pip-audit
# 可选 — AI agent / MCP 安全(需要 SNYK_TOKEN env var)
# brew install snyk/tap/snyk-agent-scan
# 可选 — Claude Code skill 安全(Cisco AI Defense)
# 按照它们各自的 docs 安装 skill-scanner 和 tirith
```
## 扫描内容
| # | 工具 | 类别 |
|---|------|----------|
| 1 | [trivy fs](https://github.com/aquasecurity/trivy) | CVE 漏洞 (高危/严重) |
| 2 | [gitleaks](https://github.com/gitleaks/gitleaks) | 文件及 git 历史记录中的机密信息与凭证 |
| 3 | [semgrep](https://github.com/semgrep/semgrep) | SAST — 代码级安全问题 |
| 4 | [osv-scanner](https://github.com/google/osv-scanner) | 开源依赖漏洞 (OSV DB) |
| 5 | [npm audit](https://docs.npmjs.com/cli/v10/commands/npm-audit) | Node.js 依赖漏洞 |
| 6 | [pip-audit](https://github.com/pypa/pip-audit) | Python 依赖漏洞 |
| 7 | [syft](https://github.com/anchore/syft) | SBOM 生成 |
| 8 | [grype](https://github.com/anchore/grype) | SBOM 漏洞扫描 (第二阶段,在 syft 之后运行) |
| 9 | [trivy config](https://github.com/aquasecurity/trivy) | IaC / 基础设施配置错误 |
| 10 | [snyk-agent-scan](https://github.com/snyk/agent-scan) | AI agent / MCP 服务器安全 |
| 11 | [skill-scanner](https://github.com/cisco-ai-defense/skill-scanner) | Claude Code skill 包安全性 (Cisco AI Defense) |
| 12 | [tirith](https://github.com/sheeki03/tirith) | 隐藏内容、双向覆盖、配置投毒 |
## 安全模型
claude-sentinel 强制执行三重隔离边界:
1. **Shell 边界** —— Claude 的工作目录始终保留在外部项目文件夹中。扫描程序永远不会 `cd` 进入克隆的 repo。带有路径参数的工具会将 `$SCAN_TARGET` 作为显式参数传入;没有路径参数的工具(npm audit、pip-audit、snyk-agent-scan)会在限定的 `bash -c "cd && tool"` 子 shell 中运行,因此只有该子进程才会触及 repo。
2. **执行边界** —— 受信任的扫描程序二进制文件会在启动时通过 `command -v` 解析为绝对路径。扫描程序将 repo 文件作为数据读取,并将 JSON 输出写入一个全新的临时目录(`/tmp/security-scan-/`)。Bash 代码块绝不会运行 `npm install`,不会执行来自 repo 的脚本,也不会遵循 repo 文件中发现的指令。
3. **解释边界** —— Claude 仅读取临时目录中的扫描程序 JSON 输出。Repo 文件内容永远不会被作为上下文引入对话中,因此被审计代码内部的任何内容都无法通过 prompt 注入来操控 Claude 的行为。
## 报告输出
扫描会将单一的 Markdown 报告写入**项目文件夹**(位于克隆目录的上一级):
```
/security-report--.md
```
根据设计,报告位于克隆的 repo 之外 —— 无需修改 `.gitignore`,并且重新克隆目标也绝不会覆盖或泄露审计历史记录。扫描完成后,摘要表格也会立即打印在 Claude 的回复中。
## 卸载
删除该 skill 目录:
```
rm -rf ~/.claude/skills/security-scan
```
## 许可证
MIT — © 2026 TorpedoD
标签:AI安全, Chat Copilot, SCA, SOC Prime, 安全审计, 密钥检测, 开发工具, 自定义脚本, 错误基检测, 静态代码分析