多生态恶意包检测与供应链安全扫描器
一款生产级安全工具,用于检测 npm、PyPI、Maven、RubyGems、Go 和 Cargo 生态系统中的恶意包与供应链威胁。利用从可信安全来源自动收集的威胁情报,识别项目中受感染的依赖项。
OreWatch 是产品及 PyPI 包名。当前源代码仓库路径仍使用 ore-mal-pkg-inspector。
https://github.com/rapticore/ore-mal-pkg-inspector/issues/2#issue-4215016110
https://github.com/rapticore/ore-mal-pkg-inspector/issues/3#issue-4215017945
https://github.com/rapticore/ore-mal-pkg-inspector/issues/4#issue-4215019385
https://github.com/rapticore/ore-mal-pkg-inspector/issues/5#issue-4215021599
供应链攻击已成为软件入侵的首要威胁向量。 仅 2024 年,就有数千个恶意包被发布到 npm、PyPI 及其他包注册表,通过拼写域名欺骗、依赖混淆以及 Shai-Hulud 等复杂恶意软件活动针对开发者。
挑战: 组织与开发者需要:
缺口: 现有方案通常:
OreWatch 通过以下方式解决这些挑战:
全面的多生态系统覆盖: 单一工具支持 npm、PyPI、Maven、RubyGems、Go 和 Cargo 包
自动化威胁情报: 动态收集并合并来自可信安全研究来源的数据
主动 IoC 检测: 识别 Shai-Hulud 攻击模式及其他恶意代码指标,超越简单的包名匹配
CI/CD 就绪: 设计用于无缝集成到 GitHub Actions、GitLab CI、Jenkins 及其他自动化平台
开源透明: 检测逻辑、数据源和扫描方法完全可见
多生态系统支持 扫描 npm、PyPI、Maven、RubyGems、Go 和 Cargo 包,并根据项目结构自动检测生态系统。
统一威胁情报数据库 根据动态收集的可信安全研究来源的恶意包数据库进行检查。
自动生态系统检测 根据目录结构、文件名智能识别生态系统,并可在单次运行中扫描多个生态系统。
入侵指标(IoC)检测 扫描 Shai-Hulud 攻击模式(原始及 2.0 变种)、恶意钩子、可疑工作流及已知载荷文件。
Shai-Hulud 集成 针对 OreNPMGuard 提供的全面 Shai-Hulud 受影响包列表交叉引用 npm 包。
结构化 JSON 报告 生成机器可读的 JSON 报告,包含显式的威胁数据元数据及 SARIF 风格的文件位置信息。
灵活输入格式 支持标准依赖文件(package.json、requirements.txt 等)及通用包列表(文本、JSON、YAML)。
生产级日志
通过 --verbose 和 --debug 标志可配置详细级别,用于故障排除和审计追踪。
安全且快速 只读操作,不修改代码,针对大型代码库高效扫描进行优化。
对比单一生态系统工具 大多数安全扫描器专注于一个包管理器。OreWatch 为六个主要生态系统提供统一保护,对于现代多语言开发环境至关重要。
对比人工威胁列表 静态恶意包列表会迅速过时。我们的自动收集器每天从多个权威来源获取最新威胁情报。
对比仅包名检测 仅检查包名会遗漏复杂攻击。IoC 检测能够识别尚未列入黑名单的包中的恶意代码模式。
对比人工安全审计 人工依赖项审查耗时且易出错。自动化扫描可在每次构建中实现持续安全验证。
对比商业黑盒工具 专有工具缺乏检测逻辑的透明度。作为开源项目,每条检测规则和数据源均可审计。
诞生故事 OreWatch 源自 OreNPMGuard 的开发,后者是一款专门针对 Shai-Hulud npm 攻击的扫描器。在该项目期间,我们认识到需要更广泛的多生态系统覆盖能力。2025 年 12 月,我们将多生态系统检测能力提取并增强为独立的工具,保留了 OreNPMGuard 对 npm 的关注,同时使 OreWatch 能够服务于所有主要包生态系统的更广泛的开发者社区。
如果你是首次采用 OreWatch,请选择与你的工作流最匹配的最简路径:
大多数开发者推荐的首运行序列:
pip install . 或已发布的包安装 OreWatch。orewatch monitor quickstart /path/to/project --client <你的客户端>。orewatch monitor status 验证守护进程。orewatch monitor menubar 以获取通知和本地界面。如果你想要更短的设置指南及可复制粘贴的命令,请使用 docs/adoption-guide.md。
OreWatch 可通过 pipx(推荐)、Homebrew(macOS)、pip 或 源码 安装。所有方法均生成 orewatch CLI 命令。
pipx 将 OreWatch 安装到其隔离环境中,同时使 orewatch 命令全局可用。这是大多数开发者的最佳选择。```bash
python3.14 -m pip install --user pipx python3.14 -m pipx ensurepath
pipx install --python python3.14 orewatch
orewatch --help
orewatch monitor menubar
如果你已经通过 pipx 安装了 `orewatch`,并且之后想添加 macOS 菜单栏应用,请将 Cocoa 绑定注入到同一个 pipx 环境中:```bash
pipx inject orewatch pyobjc-framework-Cocoa
升级:```bash pipx upgrade orewatch
**卸载:**```bash
pipx uninstall orewatch
对于偏好 Homebrew 管理的安装的 macOS 用户:```bash
brew tap rapticore/tap
brew install rapticore/tap/orewatch
orewatch --help
orewatch monitor menubar
**升级:**```bash
brew update && brew upgrade orewatch
卸载:```bash brew uninstall orewatch brew untap rapticore/tap # optional — removes the tap
> **注意:** Homebrew 配方包含了 `orewatch monitor menubar` 所需的 Cocoa 绑定。如果较旧的 Homebrew 安装报告 `ModuleNotFoundError: No module named 'AppKit'`,请运行 `brew update && brew reinstall rapticore/tap/orewatch`,以便配方重建其隔离的 Python 环境并支持菜单栏。
#### 选项 3 — pip
对于 CI 管道、Docker 镜像或自行管理虚拟环境(virtualenv)的情况,请使用 `pip`:```bash
# Install into an active Python 3.14 virtualenv or user site
python3.14 -m pip install orewatch
# Pin a version for reproducible CI builds
python3.14 -m pip install orewatch==1.3.0
# If you want the macOS menu bar app on a fresh install, use this instead:
# python3.14 -m pip install 'orewatch[mac-menubar]'
# Verify
orewatch --help
升级:```bash python3.14 -m pip install --upgrade orewatch
#### 选项 4 — 源码检出(贡献者)```bash
# Clone the repository
git clone https://github.com/rapticore/ore-mal-pkg-inspector.git
cd ore-mal-pkg-inspector
# Create and activate a Python 3.14 virtual environment (recommended)
python3.14 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install in editable mode for development
python -m pip install -e .
# Verify
orewatch --help
使用任意方法安装后,确认 OreWatch 正在运行:```bash
orewatch --help
orewatch --list-supported-files
orewatch .
#### 平台说明
| 平台 | Python 来源 | 备注 |
|---|---|---|
| **macOS** (Homebrew Python) | `brew install [email protected]` | 推荐 Homebrew 用户使用 |
| **macOS** (pyenv) | `pyenv install 3.14` | 适合多版本管理 |
| **Ubuntu / Debian** | `sudo apt install python3.14` 或 pyenv | 请确认你的发行版提供了 3.14+ |
| **Fedora / RHEL** | `sudo dnf install python3.14` 或 pyenv | — |
| **Windows (WSL)** | pyenv 或系统包 | 原生 Windows 未经测试 |
> **需要 Python 3.14。** OreWatch 使用了 Python 3.14 引入的语言特性。旧版本在导入时会失败。
#### 安装故障排除
| 症状 | 修复方法 |
|---|---|
| `command not found: orewatch` | 确保安装位置在你的 `PATH` 中。对于 pipx:运行 `pipx ensurepath` 并重启 shell。 |
| 导入时出现 `ModuleNotFoundError` | 可能存在多个 Python 版本。确认 `orewatch` 运行环境为 Python 3.14+,并使用对应的解释器重新安装。 |
| pipx 安装因解析器错误失败 | 升级 pipx:`python3.14 -m pip install --upgrade pipx` |
| Homebrew 安装后找不到 `orewatch` | 先运行 `brew tap rapticore/tap`,然后重试安装。 |
| pip 安装时权限被拒绝 | 使用 `pip install --user orewatch` 或在虚拟环境中安装。 |
_注意:如果本地威胁数据缺失或过期,包扫描会暂存一个实时更新候选,并仅在异常检测通过后才将其激活。如果候选数据看起来可疑,OreWatch 会保持最近已知良好的数据集有效。_
_已安装 CLI:_ `orewatch`
_兼容别名:_ `ore-mal-pkg-inspector`
### 首次扫描
**扫描一个项目目录:**```bash
# Auto-detect ecosystem and scan current directory
orewatch .
# Scan specific project path
orewatch /path/to/your/project
# With verbose output to see progress
orewatch /path/to/your/project --verbose
预期输出:``` Detected multiple ecosystems: npm, pypi Scanning all detected ecosystems...
Scanning npm... Found 2 dependency file(s) for npm Parsing: package.json Parsing: package-lock.json
Scanning pypi... Found 1 dependency file(s) for pypi Parsing: requirements.txt
Extracted 45 unique package(s) across 2 ecosystem(s)
Checking 45 package(s) against malicious databases... Checking 30 npm package(s)... Checking 15 pypi package(s)...
Scanning for Indicators of Compromise...
Generating report...
Ecosystem: npm, pypi Total Packages Scanned: 45 Malicious Packages Found: 0 IoCs Found: 0
✅ No malicious packages or IoCs detected
如果你希望 OreWatch 在初次扫描后持续监控该项目,请继续阅读[后台监控](#background-monitoring)或直接跳转到 [docs/adoption-guide.md](https://github.com/rapticore/ore-mal-pkg-inspector/blob/HEAD/docs/adoption-guide.md)。
---
## 使用方法
### 基本命令
**扫描目录(自动检测生态系统):**```bash
# Current directory
orewatch .
# Specific directory
orewatch /home/user/projects/my-app
# With an absolute path
orewatch /home/user/projects/backend-api
扫描特定依赖文件:```bash
orewatch --file package.json orewatch --file requirements.txt orewatch --file pom.xml orewatch --file Gemfile orewatch --file go.mod orewatch --file Cargo.toml
**强制特定生态系统:**```bash
# Override auto-detection
orewatch /path/to/project --ecosystem npm
orewatch /path/to/project --ecosystem pypi
orewatch /path/to/project --ecosystem maven
orewatch /path/to/project --ecosystem rubygems
orewatch /path/to/project --ecosystem go
orewatch /path/to/project --ecosystem cargo
扫描通用包列表:```bash
orewatch --file packages.txt --ecosystem pypi
orewatch --file packages.json --ecosystem npm
orewatch --file packages.yaml --ecosystem npm
### 高级用法
**自定义输出路径:**```bash
# Save to custom location
orewatch /path/to/project --output /tmp/scan_report.json
# Save to specific subdirectory
orewatch /path/to/project --output reports/security/$(date +%Y%m%d).json
IoC 扫描控制:```bash
orewatch /path/to/project
orewatch /path/to/project --no-ioc
orewatch /path/to/project --ioc-only
**静默模式:**```bash
# Generate report without console summary (useful for scripts)
orewatch /path/to/project --no-summary
威胁数据控制:```bash
orewatch /path/to/project --latest-data
orewatch /path/to/project --strict-data
orewatch /path/to/project --latest-data --include-experimental-sources
orewatch --list-supported-files
**批量扫描:**```bash
# Scan multiple projects
for dir in ~/projects/*/; do
echo "Scanning $dir"
orewatch "$dir" --output "reports/$(basename $dir).json"
done
该仓库现在包含一个本地后台监控器,用于保持威胁数据的新鲜度,监视已加入项目的清单和工作流变更,运行延迟扫描,并记录新发现或升级的发现结果。监控器拥有的配置和状态存储在仓库之外的用户自有目录中,因此克隆的仓库无法预植监控器行为。
OreWatch 现在将监控器视为每个用户的单例。一个守护进程可以监视磁盘上任意位置的多个项目,并为多个并发的 Claude Code、Codex、Cursor、VS Code、JetBrains / PyCharm 和 Xcode 客户端提供服务。
1. 安装并引导单例监控器```bash
orewatch monitor quickstart /path/to/project --client claude_code
`monitor quickstart` 是推荐的首运行流程。它将:
- 安装或刷新单例监控服务
- 在需要时启动监控
- 将目标项目添加到监视列表
- 打印所选客户端的引导块
如果您倾向于先安装监控,之后再连接客户端:```bash
orewatch monitor install
orewatch monitor install --ide-bootstrap
orewatch monitor install --service-manager launchd --no-start
2. 验证监控器是否健康```bash orewatch monitor status orewatch monitor connection-info orewatch monitor doctor
用这些命令处理略微不同的任务:
- `monitor status` 显示单例守护进程和 API 是否在运行
- `monitor connection-info` 打印回环 API URL、令牌路径、监视器主目录和支持的引导客户端
- `monitor doctor` 打印确切的配置、状态数据库、日志和共享威胁数据路径
**3. 添加你想要单例监视的每个项目**```bash
orewatch monitor watch add /path/to/project-a
orewatch monitor watch add /path/to/project-b
orewatch monitor watch list
orewatch monitor watch remove /path/to/project-b
一个 OreWatch 守护进程可以同时监控所有这些项目。你不需要为每个仓库或每个 IDE 工作区单独设置监控器。
OreWatch 支持两种集成传输方式:
引导命令会输出以下其中一种格式:```json { "mcpServers": { "orewatch": { "command": "/absolute/path/to/orewatch", "args": [ "monitor", "mcp" ] } } }
当 `orewatch monitor ide-bootstrap --client <client>` 可以解析本地控制台脚本时,现在会输出该绝对路径,而不是裸的 `orewatch`。如果你有旧的 MCP 配置仍然写着 `"command": "orewatch"`,请重新生成并替换旧条目。```json
{
"orewatch": {
"baseUrl": "http://127.0.0.1:48736",
"tokenPath": "/path/to/api.token"
}
}
这些客户端都使用相同的本地 MCP 桥接:```bash orewatch monitor mcp
推荐设置:
1. 运行 `orewatch monitor quickstart /path/to/project --client <cursor|claude_code|codex>` 一次。
2. 将打印出的 MCP 块复制到相应的 MCP 客户端中。
3. 在该客户端中打开一个受监控的项目。
4. 让客户端通过 MCP 调用 OreWatch:
- `orewatch_health`
- `orewatch_check_dependency_add`
- `orewatch_check_manifest`
- `orewatch_override_dependency_add`
- `orewatch_list_active_findings`
- `orewatch_list_notifications`
注意:
- `monitor mcp` 是一个 stdio 服务器。如果你手动启动它,它在等待 MCP 客户端时会显示为空闲状态。
- MCP 桥接在启动时检查本地 API,并且在启用 `auto_start_on_client` 时可以自动启动单例监视器一次。
- 为了可靠的 IDE 启动,请使用 `monitor install` 安装后台监视器一次,这样在 MCP 桥接启动之前守护进程就已经可用。
##### VS Code
VS Code 集成应使用单例 localhost API,而不是 MCP 桥接。
推荐设置:
1. 运行 `orewatch monitor quickstart /path/to/project --client vscode`。
2. 从 `orewatch monitor ide-bootstrap --client vscode` 复制 `baseUrl` 和 `tokenPath`。
3. 将这些值接入你的本地 VS Code 扩展、任务或辅助工具中。
4. 在依赖添加、清单保存和警报刷新事件时调用 API。
VS Code 集成的推荐 API 用法:
- 在包管理器安装/添加流程之前调用 `POST /v1/check/dependency-add`
- 当支持的清单文件被保存或显式重新检查时调用 `POST /v1/check/manifest`
- 轮询 `GET /v1/findings/active` 和 `GET /v1/notifications` 以显示后台检测结果
##### JetBrains / PyCharm
JetBrains 和 PyCharm 使用与 VS Code 相同的 localhost API 约定。
推荐设置:
1. 运行 `orewatch monitor quickstart /path/to/project --client jetbrains`。
2. 从 `orewatch monitor ide-bootstrap --client jetbrains` 复制 API 块。
3. 在 JetBrains 插件、外部工具或本地辅助工具中使用返回的 `baseUrl` 和 `tokenPath`。
4. 在 IDE 中显示同步的依赖决策和存储的后台警报。
JetBrains 集成的推荐 API 用法:
- 使用 `POST /v1/check/dependency-add` 检查依赖添加
- 使用 `POST /v1/check/manifest` 重新检查 `package.json`、`requirements.txt`、`pyproject.toml`、`pom.xml`、`Gemfile`、`go.mod`、`Cargo.toml` 及相关支持的清单文件
- 获取 `GET /v1/findings/active` 和 `GET /v1/notifications` 用于持久警报面板或工具窗口
##### Xcode
Xcode 集成也应使用单例 localhost API,但有一个重要的范围边界:OreWatch 尚不解析原生的 Apple 依赖清单文件,如 `Package.resolved`、`Podfile.lock` 或 `Cartfile`。目前,Xcode 集成最适合用于:
- 在辅助工具、脚本或配套应用中显示后台发现和通知
- 在 Xcode 中打开的多语言仓库,其中也包含支持的清单文件,如 `package.json`、`pyproject.toml` 或 `Cargo.toml`
- 希望在 Xcode 工作时使用 macOS 菜单栏应用和通知中心警报的团队
推荐设置:
1. 运行 `orewatch monitor quickstart /path/to/project --client xcode`。
2. 从 `orewatch monitor ide-bootstrap --client xcode` 复制 API 块。
3. 在构建阶段脚本、辅助进程或自定义 Xcode 集成中使用返回的 `baseUrl` 和 `tokenPath`。
4. 轮询 `GET /v1/findings/active` 和 `GET /v1/notifications` 以获取用户可见的警报。
5. 如果 Xcode 工作区包含支持的非 Apple 清单文件,请在工作流程中调用 `POST /v1/check/manifest` 检查这些文件。
当前集成状态:
- Claude Code、Codex 和 Cursor:本仓库中包含一流的 MCP 桥接
- VS Code:本地 API 约定已有文档,但尚未提供第一方扩展
- JetBrains / PyCharm:本地 API 约定已有文档,但尚未提供第一方插件
- Xcode:本地 API 和菜单栏集成已有文档,但尚未提供第一方 Xcode 扩展,也没有原生的 Apple 清单文件解析器
#### 当 OreWatch 发现异常时
当后台监视器在受监控的项目中检测到受损包或 IoC 时,OreWatch:
- 在单例监视器的 `reports/` 目录下写入由监视器管理的 JSON 和 HTML 报告
- 将当前发现结果存储在监视器状态数据库中
- 存储带有可操作消息的通知条目
- 如果启用了终端通知,则发出终端警告
- 在 macOS 上,优先使用正在运行的单例菜单栏应用作为弹出通道
- 将最新的值得关注的警报固定在菜单栏下拉菜单顶部,以便快速查看
- 否则,如果启用了桌面通知,则回退到尽力而为的直接桌面通知
- 可以为远程或无头环境发送可选的 webhook 通知
使用内置的 CLI 审查界面来检查这些警报:```bash
orewatch monitor findings
orewatch monitor findings --project /path/to/project --min-severity high
orewatch monitor notifications
orewatch monitor notifications --project /path/to/project
orewatch monitor package-updates
orewatch monitor package-updates --check
本地API和MCP桥接为IDE和代理提供相同的数据:
GET /v1/findings/activeGET /v1/notificationsGET /v1/package-updatesPOST /v1/package-updates/checkorewatch_list_active_findingsorewatch_list_notificationsorewatch_list_package_updatesorewatch_check_package_updates这是IDE、MCP客户端和编码代理在原始扫描完成后显示后台检测所支持的路径。
包更新建议仅用于通知。OreWatch为受监控的项目依赖项和OreWatch自身报告更新的版本,但不会修改清单、锁定文件或已安装的包。
OreWatch现在包含一个原生macOS菜单栏应用,适用于希望拥有可视本地界面而不仅仅依赖CLI命令、MCP轮询或尽力而为的通知中心弹窗的用户。
将可选的Cocoa绑定安装到提供orewatch命令的同一运行时中。选择与您的安装方法匹配的命令:```bash
python3.14 -m pip install 'orewatch[mac-menubar]'
pipx inject orewatch pyobjc-framework-Cocoa
brew install rapticore/tap/orewatch
然后启动菜单栏应用:```bash
orewatch monitor menubar
默认情况下,monitor menubar 会在后台重新启动应用并立即返回 shell 提示符。仅当您明确希望将其保持在终端中以便调试时,才使用 orewatch monitor menubar --foreground。
菜单栏应用会附加到同一个单例监视器上。它不会启动第二个监视器实例。如果监视器尚未安装或运行,应用将在首次启动时安装/启动它。
Homebrew 会将 Cocoa 绑定安装到 OreWatch 的隔离 libexec 环境中。如果 orewatch monitor menubar 报告 No module named 'AppKit',请使用 brew update && brew reinstall rapticore/tap/orewatch 刷新公式。对于 pip、pipx 和源码安装,仍需要将可选绑定添加到提供 orewatch 命令的同一个 Python 环境中。
在 macOS 上启用桌面通知时,单例监视器现在会保持一个单例菜单栏应用存活,并将其用作主要的弹窗界面。这避免了仅依赖来自守护进程的分离 osascript 调用,并为您提供持久的原生 UI 来显示新的发现结果。
当前的菜单栏构建以图标为先。旧的 OW 缩写和早期的 OreWatch 图标文字应视为遗留引用;应用现在更倾向于使用捆绑的品牌图标,仅在 macOS 无法渲染图像或需要显示警报计数时才回退到紧凑文本或徽章。
macOS 菜单栏应用为您提供以下功能:
添加工作区文件夹... 操作,用于将项目注册到单例监视器并运行初始快速扫描推荐的 Mac 流程:
orewatch monitor quickstart /path/to/project --client claude_code。orewatch 相同的环境中。orewatch monitor menubar。为便于推广,请使用重点文档,而不是从头到尾阅读完整的 README:
推荐的采用顺序:
monitor quickstart 启用单例监视器。orewatch monitor findings 和 orewatch monitor notifications 中。monitor menubar,以便用户获得持久的审查界面和弹窗传递。常用操作命令:```bash
orewatch monitor start orewatch monitor restart orewatch monitor stop orewatch monitor uninstall
orewatch monitor run
orewatch monitor menubar
orewatch monitor scan-now orewatch monitor scan-now /path/to/project
orewatch monitor findings orewatch monitor notifications
orewatch monitor cleanup orewatch monitor cleanup --keep-backups 5 --staging-max-age-seconds 3600
**手动快照与签名操作:**```bash
# Generate a signing keypair
orewatch monitor snapshot keygen /tmp/ore-keys
# Build and apply local threat-data snapshots
orewatch monitor snapshot build /tmp/ore-snapshot \
--private-key /tmp/ore-keys/snapshot_signing_private.pem \
--public-key /tmp/ore-keys/snapshot_signing_public.pem
orewatch monitor snapshot apply /tmp/ore-snapshot/manifest.json \
--public-key /tmp/ore-keys/snapshot_signing_public.pem
# Publish a hosted snapshot channel
orewatch monitor snapshot publish /tmp/ore-snapshots \
--base-url https://example.com/ore-snapshots \
--channel stable \
--private-key /tmp/ore-keys/snapshot_signing_private.pem \
--public-key /tmp/ore-keys/snapshot_signing_public.pem
监控行为:
~/.config/orewatch/singleton/,状态默认位于~/.local/state/orewatch/singleton/。~/Library/Application Support/OreWatch/singleton/,状态默认位于~/Library/Application Support/OreWatch/State/singleton/。threat-data/final-data/。monitor doctor会打印出单例监控器的确切config_path、state_db、log_file、final_data_dir以及服务模板目录。.ore-monitor.yml中。monitor install现在会在可用时安装用户级的launchd或服务,否则回退到本地后台模式。本地集成界面:
127.0.0.1:48736上暴露一个仅限本地主机的API。api.token中,权限仅为所有者。127.0.0.1:48736的直接请求如果没有Authorization: Bearer <token>将正确返回401 Unauthorized。orewatch monitor connection-info发现监控器,而不是猜测路径,并应在依赖检查请求中发送它们正在操作的project_path。orewatch_health、orewatch_check_dependency_add、orewatch_check_manifest、orewatch_override_dependency_add、orewatch_list_active_findings、orewatch_list_notifications、和。可选的异常门控实时更新配置:```yaml live_updates: enabled: true mode: gated bootstrap_from_live: true block_on_core_source_failure: false max_drop_ratio: 0.40 max_drop_absolute: 200 max_removal_ratio: 0.25 max_removal_absolute: 100 warn_growth_ratio: 5.0 warn_growth_absolute: 2000
关键行为:
- 实时候选数据首先在暂存区构建;它们在收集期间不会覆盖活跃数据库。
- 大规模数据丢失、生态系统回归、空生态系统以及批量移除会阻止推广。
- 核心数据源中断在开源实时刷新中默认仅作为警告;生态系统级的数据丢失和移除仍会阻止不良推广。
- 仅警告的异常会被记录在状态和报告中,但不会阻止推广。
- 当已存在最后已知良好的数据集时,被拒绝的候选数据会保持该数据集活跃。
- 如果至少一个核心数据源成功,并且候选数据产生可用的生态系统数据,则允许首次运行从实时数据源引导。
**可选的通知Webhook配置:**```yaml
notifications:
desktop: true
terminal: true
webhook_url: https://hooks.example.com/orewatch
webhook_format: generic
webhook_timeout_ms: 5000
webhook_headers:
Authorization: Bearer change-me
设置 webhook_format: slack 以针对 Slack 传入 Webhook。在此模式下,OreWatch 发送一个简单的 text 负载。
该项目现在有两个不同的分发面:
它们应分开分发。
开发者最佳默认方案: 将扫描器作为普通 Python 包发布至 PyPI,并推荐使用 pipx 安装。
选择此方案的原因:
pipx 为开发者提供了隔离的用户级安装,不会污染项目的虚拟环境。python3.14 -m pip install orewatch==<版本号> 安装相同版本。推荐的发包形态:
sdist 和通用 wheel 构件发布至 PyPI。orewatch 控制台入口点。ore-mal-pkg-inspector 作为临时兼容别名。pipx install --python python3.14 orewatchpython3.14 -m pip install orewatch==<版本号>可用的辅助渠道: Homebrew tap 现已上线,适用于偏好 Brew 管理安装的 macOS 用户:```bash brew install rapticore/tap/orewatch
Homebrew 依然是已发布的 PyPI 版本的便捷层,而非主要发布工件。
**对贡献者的最佳建议:** 保持当前的源码检出流程:```bash
git clone https://github.com/rapticore/ore-mal-pkg-inspector.git
cd ore-mal-pkg-inspector
python3.14 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
如果你正在通过 Kandji、Jamf Pro、Intune、Munki 或其他 macOS 软件分发系统部署 OreWatch,建议采用的模型与开发者 pipx 路径不同。
当前产品实际情况:
.pkg推荐的企业部署模型:
.pkg,用于安装 OreWatch 运行时和稳定的 orewatch CLI 占位程序mac-menubar 扩展orewatch monitor quickstart /path/to/project --client <client> 或等效的用户上下文引导程序为何这种拆分很重要:
适用于托管 macOS 的推荐包结构:
/Library/Application Support/OreWatch/runtime/usr/local/bin/orewatch特定厂商指南:
.pkg) 的自定义应用.pkg 而非 .dmg 或 .zip,因为运行时并非拖拽式应用.pkg 作为包上传,并通过策略或 Self Service 部署.pkg 的 macOS LOB 应用.pkg,使用 Developer ID Installer 证书签名,并且包必须包含有效载荷.pkg 以及 pkg 元数据,将 OreWatch 视为其他受管理的 macOS 软件一样处理有关更全面的部署手册,请参见 docs/managed-rollout.md。
威胁数据快照不应打包在 Python 包内部。它们的更新节奏不同,且已作为签名的托管制品得到支持。
开源/社区默认值: 通过异常门控的实时更新路径直接使用 openssf 和 osv。
企业默认值: 将版本化的签名快照发布到静态 HTTPS 托管服务,让客户端独立刷新。
推荐的托管目标:
推荐的快照布局:
versions/<version>/manifest.jsonversions/<version>/*.dbchannels/stable.json推荐的信任模型:
对于生产版本,最清晰的设置是:
pipx 本地安装pip 安装默认情况下,扫描器仅显示警告、错误和最终摘要。如需进行故障排除或详细的进度跟踪,请使用日志标志:
查看进度消息和收集统计信息:```bash orewatch /path/to/project --verbose
**输出包括:**
- 生态系统检测结果
- 文件解析进度
- 包提取计数
- 数据库查询详情
- IoC 扫描进度
**示例:**```
INFO: Detected ecosystems: npm, pypi
INFO: Loaded database for npm: 15234 malicious packages
INFO: Loaded database for pypi: 8421 malicious packages
INFO: Extracted 45 packages from 3 files
INFO: Checking 30 npm packages against database...
INFO: Checking 15 pypi packages against database...
INFO: IoC scan complete: 0 indicators found
查看详细的诊断信息以便进行故障排除:```bash orewatch /path/to/project --debug
**Output includes:**
- 所有 INFO 级别消息
- 扫描中的文件路径
- SQL 查询执行详情
- 哈希计算
- 模式匹配结果
- 内部状态信息
**Use cases:**
- 调查为什么未检测到某个包
- 调试生态系统自动检测问题
- 报告带有详细上下文的问题
- 审计扫描器行为
### 收集器的日志记录
威胁情报收集器也支持 verbose 和 debug 模式:```bash
cd collectors
# See collection progress
python3 orchestrator.py --verbose
# Debug data source issues
python3 orchestrator.py --debug
注意: 所有日志输出到 stderr,保持 stdout 清洁以便输出 JSON 报告。这使得可以将扫描结果通过管道传递给其他工具,而不会被日志消息干扰。
报告默认保存在 scan-output/ 目录中(或使用 --output 指定自定义路径)。OreWatch 会写入一个机器可读的 JSON 报告和一个带样式的 HTML 伴生报告,两者具有相同的基本文件名。JSON 产物包含威胁数据可用性元数据,并使用 SARIF 风格的 physicalLocation 对象来描述包发现结果,但这不是一个完整的 SARIF 2.1.0 文档。
示例报告:```json { "scan_timestamp": "2025-12-31T12:00:00Z", "ecosystem": "npm", "scanned_path": "/path/to/project", "total_packages_scanned": 150, "data_status": "complete", "sources_used": ["openssf", "osv"], "experimental_sources_used": [], "missing_ecosystems": [], "malicious_packages_found": 2, "iocs_found": 3, "malicious_packages": [ { "name": "malicious-pkg", "version": "1.0.0", "severity": "critical", "sources": ["threat-intel-db", "research-community"], "description": "Malicious code executes unauthorized operations", "detected_behaviors": ["malicious_code", "data_exfiltration"] } ], "iocs": [ { "type": "malicious_bundle_js", "path": "node_modules/suspect-pkg/bundle.js", "hash": "46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09", "severity": "CRITICAL", "variant": "original", "description": "Known malicious payload file from Shai-Hulud attack" }, { "type": "malicious_postinstall", "path": "package.json", "pattern": "node bundle.js", "severity": "CRITICAL", "variant": "original", "description": "Malicious postinstall hook executes payload" } ] }
**威胁数据字段:**
- `data_status`:`complete`、`partial`、`failed` 或 `not_applicable`
- `sources_used`:为请求的生态系统贡献了可用威胁数据的来源
- `experimental_sources_used`:扫描数据中包含的实验性来源
- `missing_ecosystems`:没有可用包威胁数据库的请求生态系统
- `promotion_decision`:对于现有数据扫描为空,否则为 `promoted`、`bootstrapped` 或 `rejected`
- `kept_last_known_good`:当实时候选被拒绝但先前的活动数据集仍然可用时为 `true`
- `anomalies`:实时刷新尝试期间引发的警告/阻止异常
---
### 理解结果
**严重性级别:**
- **CRITICAL:** 已知的恶意代码,带有活跃的漏洞利用或数据泄露
- **HIGH:** 恶意意图或域名抢注的强烈指标
- **MEDIUM:** 可疑模式或潜在漏洞
- **LOW:** 次要问题或信息性发现
**推荐操作:**
1. **严重/高危发现:** 立即移除受影响的包并调查影响
2. **查看IoC:** 检查恶意代码是否已执行(日志、网络活动)
3. **更新依赖项:** 用合法的替代品替换恶意包
4. **重新扫描:** 通过后续扫描验证修复
5. **报告:** 考虑向包注册表维护者报告
---
## CI/CD 集成
### GitHub Actions
**基本安全扫描:**```yaml
name: Security Scan - Malicious Packages
on: [push, pull_request]
jobs:
malicious-package-scan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.14'
- name: Install OreWatch
run: |
git clone https://github.com/rapticore/ore-mal-pkg-inspector.git scanner
cd scanner
pip install .
- name: Scan for malicious packages
run: |
cd scanner
orewatch ${{ github.workspace }} --latest-data
- name: Upload scan report
uses: actions/upload-artifact@v4
if: always()
with:
name: security-scan-report
path: scanner/scan-output/
高级检测失败模式:```yaml - name: Scan and fail on malicious packages run: | cd scanner orewatch ${{ github.workspace }} --latest-data --output report.json
# Check if malicious packages were found
MALICIOUS_COUNT=$(jq '.malicious_packages_found' report.json)
IOC_COUNT=$(jq '.iocs_found' report.json)
if [ "$MALICIOUS_COUNT" -gt 0 ] || [ "$IOC_COUNT" -gt 0 ]; then
echo "🚨 SECURITY ALERT: Malicious packages or IoCs detected!"
echo "Malicious packages: $MALICIOUS_COUNT"
echo "IoCs found: $IOC_COUNT"
exit 1
fi
### GitLab CI```yaml
malicious-package-scan:
image: python:3.14
stage: security
before_script:
- git clone https://github.com/rapticore/ore-mal-pkg-inspector.git scanner
- cd scanner && pip install .
script:
- orewatch $CI_PROJECT_DIR --latest-data --strict-data --output scan-report.json
artifacts:
paths:
- scan-report.json
when: always
allow_failure: false
pipeline { agent any
stages {
stage('Setup Scanner') {
steps {
sh '''
git clone https://github.com/rapticore/ore-mal-pkg-inspector.git scanner
cd scanner
python3.14 -m pip install .
'''
}
}
stage('Security Scan') {
steps {
sh '''
cd scanner
orewatch ${WORKSPACE} --latest-data
'''
}
}
}
post {
always {
archiveArtifacts artifacts: 'scanner/scan-output/*.json', fingerprint: true
}
}
}
### 预提交钩子
添加到 `.git/hooks/pre-commit`:```bash
#!/bin/bash
echo "Running malicious package scan..."
cd /path/to/ore-mal-pkg-inspector
orewatch $PROJECT_DIR --no-summary
if [ $? -ne 0 ]; then
echo "❌ Malicious packages or IoCs detected! Commit blocked."
echo "Review the scan report in scan-output/"
exit 1
fi
echo "✅ Security scan passed"
症状:``` ERROR: No usable threat data available for requested ecosystems: npm
**原因:** 威胁数据收集失败,元数据不完整,或者请求的生态系统尚无可用的本地数据库。
**解决方案:**```bash
# Force recollection and require a complete result for the requested ecosystems
orewatch /path/to/project --latest-data --strict-data
注意: 如果此问题持续存在,请检查网络连接、文件系统权限,以及您是否故意请求了实验性源。
症状:``` WARNING: No packages detected in /path/to/project
**可能的原因和解决方案:**
1. **错误的目录:** 确保你扫描的是正确的项目目录 ```bash
ls /path/to/project # Verify package.json or requirements.txt exists
症状:``` ERROR: Error downloading npm: <urlopen error [Errno -3] Temporary failure in name resolution>
**解决方案:**
1. **检查互联网连接:** ```bash
ping google.com
collectors/config.yaml: ```yaml
osv:
timeout: 600 # Increase from default 300
症状:``` ERROR: Error creating directory collectors/raw-data: Permission denied
**解决方案:**```bash
# Ensure proper ownership
sudo chown -R $USER:$USER /path/to/ore-mal-pkg-inspector
# Or run from user-writable location
cd ~/
git clone https://github.com/rapticore/ore-mal-pkg-inspector.git
cd ore-mal-pkg-inspector
症状: ~/Library/Application Support/OreWatch(macOS)或
$XDG_STATE_HOME/orewatch(Linux)增长到数十 GB。
原因(1.2.3 之前): 每次实时更新推送都会存档一份完整的威胁数据数据库副本(约 300 MB),且无保留策略。长期运行的监控器会在每个周期累积一份快照,无限增长。
修复: 升级至 1.2.3 或更高版本。备份现在仅为约 1 KB 的 SHA-256 清单,默认保留最近 30 个,并提供显式清理命令:
orewatch clean```bash
orewatch monitor cleanup
orewatch monitor cleanup --keep-backups 5 --staging-max-age-seconds 0
#### 误报
**症状:** 合法软件包被标记为恶意。
**步骤:**
1. **验证发现:** 查看报告详情,包括严重性和描述
2. **检查版本:** 被标记的版本可能特定: ```bash
orewatch /path/to/project --verbose
启用详细日志记录:```bash
orewatch /path/to/project --debug 2> debug.log
cd collectors python3 orchestrator.py --debug 2> collector-debug.log
**审查日志:** 检查 `debug.log` 以获取详细的执行跟踪,包括:
- 扫描的文件路径
- 执行的 SQL 查询
- 模式匹配结果
- 错误堆栈跟踪
---
## 常见问题解答
### 我应该多久更新一次威胁情报?
**建议:**
- **生产/CI 环境:** 每日自动更新
- **开发工作站:** 至少每周更新
- **安全新闻发布后:** 当新威胁被宣布时立即更新
恶意软件包持续发布。每日更新确保最新的防护。
### 如何更新威胁情报数据?
使用 `--latest-data` 标志运行扫描器以强制更新:```bash
orewatch /path/to/project --latest-data
对于在CI/CD中的自动更新,使用--latest-data标志(例如每天)安排定期扫描。仅当您明确希望将Phylum衍生的数据包含在重建中时,才添加--include-experimental-sources。
注: 首次扫描会自动收集数据,因此手动更新仅用于刷新现有数据库。
默认数据库是从项目的核心威胁源构建的:
openssfosv扫描器还可以包含项目的实验性源集:
phylum 配合 --include-experimental-sourcessocketdev 在仓库中作为禁用的占位符存在,不是默认收集路径的一部分。
关于数据源、收集和处理的技术细节,请参见 ARCHITECTURE.md。
不会。 OreWatch执行只读操作。它:
它从不:
采取以下步骤:
部分可以。
离线扫描: ✅ 是的,一旦数据库初始化完成```bash
orewatch /path/to/project
orewatch /path/to/project
**离线更新:** ❌ 否,威胁情报收集需要互联网访问以从安全来源获取数据。
**隔离环境:** 您可以:
1. 在联网机器上下载数据库
2. 将SQLite文件传输到由 `orewatch monitor doctor` 显示的单个 `final_data_dir` 中
3. 使用可能过时的数据离线运行扫描
### 与 npm audit 或 pip-audit 相比如何?
**不同目的:**
**npm audit / pip-audit:**
- 专注于已知的CVE漏洞
- 根据公告数据库检查包版本
- 由包注册表团队维护
**OreWatch:**
- 专注于恶意包(不仅仅是存在漏洞的包)
- 检测域名抢注、恶意软件、供应链攻击
- 跨生态系统的覆盖
- 针对活跃威胁的IoC检测
**最佳实践:** 同时使用**两者**:```bash
# Check for vulnerabilities
npm audit
pip-audit
# Check for malicious packages
orewatch /path/to/project
依赖项扫描: ✅ 是的,扫描器会读取你的依赖文件,无论包来自何处。
威胁情报: ⚠️ 有限。我们的数据库覆盖公共注册表(如 npmjs.com、pypi.org 等)。除非你添加自定义威胁数据,否则私有注册表上的恶意包将不会被检测到。
自定义威胁数据: 你可以使用自己的恶意包列表扩展数据库。请联系我们获取此高级用例的指导。
扫描时间:
影响因素:
--no-ioc 禁用)优化建议:```bash
orewatch --file package.json
---
## 贡献
我们欢迎各类贡献!无论是报告错误、提出功能建议还是贡献代码,您的帮助都能让 OreWatch 变得更好。
**报告错误或请求功能:**
- GitHub Issues:https://github.com/rapticore/ore-mal-pkg-inspector/issues
**贡献代码:**
- 有关开发环境搭建、代码风格、测试及拉取请求流程的详细指南,请参阅 [CONTRIBUTING.md](https://github.com/rapticore/ore-mal-pkg-inspector/blob/HEAD/CONTRIBUTING.md)
**问题或讨论:**
- GitHub Discussions:https://github.com/rapticore/ore-mal-pkg-inspector/discussions
---
## 安全策略
安全是我们的首要任务。OreWatch 是一款安全工具,我们非常重视漏洞。
### 报告安全漏洞
**请勿为安全漏洞公开创建 GitHub Issue。**
请私下报告:
**电子邮件:** [email protected]
**请包含:**
- 漏洞描述
- 复现步骤
- 潜在影响
- 建议修复方案(如适用)
- 您的联系方式以便跟进
### 响应时间线
- **确认:** 48 小时内
- **初步评估:** 7 天内
- **修复时间线:** 视严重性而定
- 严重:7-14 天
- 高:14-30 天
- 中/低:30-60 天
### 安全最佳实践
使用 OreWatch 时:
**应当:**
- ✅ 以最小权限运行(无需 root/管理员)
- ✅ 定期更新威胁情报
- ✅ 及时审查扫描报告
- ✅ 集成到 CI/CD 中以实现持续保护
- ✅ 保持工具更新至最新版本
**不应:**
- ❌ 未经调查就忽略扫描结果
- ❌ 在生产环境中禁用 IoC 扫描
- ❌ 共享来自不受信任源的数据库文件
- ❌ 不必要地使用提升的权限运行
### 漏洞披露
我们遵循协调披露流程:
1. 漏洞私下报告
2. 开发并测试修复方案
3. 发布安全公告
4. 修复方案可用后公开披露
### 安全名人堂
我们感谢负责任披露漏洞的安全研究人员:
*名单将在收到报告后持续维护*
---
### 社区请求
对功能进行投票或提出建议:
- **GitHub Discussions:** https://github.com/rapticore/ore-mal-pkg-inspector/discussions
- **功能请求:** https://github.com/rapticore/ore-mal-pkg-inspector/issues
### 贡献路线图
我们根据以下因素确定功能优先级:
- 安全影响
- 社区需求
- 维护可持续性
- 与项目目标一致
要影响路线图:
1. 提出包含详细用例的功能请求
2. 参与讨论
3. 贡献实现代码(欢迎 PR!)
---
## 路线图
OreWatch 当前可用于:
- 在 npm、PyPI、Maven、RubyGems、Go 及 Cargo 上执行本地 CLI 扫描
- 为多个项目运行一个每用户后台监控器
- 支持 Cursor、Claude Code 和 Codex 的 MCP 集成
- 支持 VS Code、JetBrains / PyCharm 和 Xcode 辅助工具的 localhost API 集成
- macOS 菜单栏审查和弹窗通知
近期优先事项:
- 第一方 VS Code 和 JetBrains / PyCharm 集成示例或轻量插件
- 比本地弹窗更强的面向用户的通知工作流
- 通过 CLI 和 UI 实现更清晰的项目策略管理
- 更丰富的监控器报告和采用文档
中期优先事项:
- 从监控器和 MCP 界面实现更广泛的项目扫描工作流
- 更好的组织级推广指南
- 更稳健的外部告警传递和升级渠道
- 更深入的 IDE 专属用户体验,而非仅提供 API 集成指南
当前已知边界:
- Xcode 集成目前最适合告警可见性和多语言仓库。OreWatch 尚不支持解析 Apple 原生命清单,例如 `Package.resolved`、`Podfile.lock` 或 `Cartfile`。
长期方向:
- 原生 Apple 生态系统清单支持
- 更强的第一方编辑器集成
- 在现有 macOS 菜单栏路径之外,实现更广泛的操作系统用户体验一致性
请参阅 [docs/roadmap.md](https://github.com/rapticore/ore-mal-pkg-inspector/blob/HEAD/docs/roadmap.md) 获取更偏重采用的路线图视图。
---
## 许可证
MIT 许可证
版权所有 (c) 2025 Rapticore
特此免费授予任何获得本软件副本及相关文档文件(以下简称“软件”)的人不受限制地处理本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件副本的权利,并允许获得本软件的人在满足以下条件的情况下这样做:
上述版权声明和本许可声明应包含在本软件的所有副本或实质部分中。
本软件按“原样”提供,不做任何形式的明示或默示保证,包括但不限于对适销性、特定用途的适用性和非侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论这些责任是基于合同、侵权或其他原因,均与本软件或其使用或其他交易有关。
---
## 支持
### 获取帮助
**文档:** 您正在阅读它!大多数问题都可以从这里开始。
**GitHub Discussions:** 用于提问、想法和社区互动:
- https://github.com/rapticore/ore-mal-pkg-inspector/discussions
**GitHub Issues:** 用于错误报告和功能请求:
- https://github.com/rapticore/ore-mal-pkg-inspector/issues
**电子邮件:** 用于安全漏洞和私人咨询:
- [email protected]
### 专业支持
对于需要以下服务的组织:
- 自定义集成
- 基于 SLA 的支持
- 私有部署协助
- 自定义威胁情报源
联系:[email protected]
---
## 致谢
### 项目起源
本项目是从 [OreNPMGuard](https://github.com/rapticore/OreNPMGuard) 仓库中提取出来的,以在扩展能力的同时保持项目聚焦。
**OreNPMGuard**(2025年12月)专注于 Shai-Hulud npm 攻击检测,涵盖 738 多个受影响包及深度 IoC 分析。在其开发过程中,我们认识到需要更广泛的多生态系统保护,因此创建了 OreWatch 作为一个独立工具,为所有主要包生态系统的更广泛开发者社区服务。
### 相关项目
- **[OreNPMGuard](https://github.com/rapticore/OreNPMGuard)** - 专门的 Shai-Hulud npm 扫描器
---
**由 Rapticore 安全研究团队构建**
*保护软件供应链,一次扫描一步。*
| 我想... | 使用此路径 | 从这开始 |
|---|
| 立即扫描一个仓库 | CLI 扫描 | orewatch /path/to/project |
| 在后台保护本地开发 | 单例监控 | orewatch monitor quickstart /path/to/project --client claude_code |
| 从 Cursor、Claude Code 或 Codex 使用 OreWatch | MCP 桥接 | `orewatch monitor quickstart /path/to/project --client <cursor |
| 集成到 VS Code、PyCharm 或 Xcode | 本地主机 API | orewatch monitor quickstart /path/to/project --client vscode |
| 获取可见的 macOS 提醒和原生审查界面 | 菜单栏应用 | orewatch monitor menubar |
| 在 CI 中验证构建 | 一次性 CLI 扫描 | orewatch . --strict-data |
| 选项 | 短选项 | 描述 | 默认值 |
|---|
--file | -f | 要扫描的特定文件路径(跳过目录检测) | 无 |
--ecosystem | -e | 强制指定生态系统:npm、pypi、maven、rubygems、go、cargo | 自动检测 |
--output | -o | 主要 JSON 报告的自定义输出路径;OreWatch 还会写入同名的 HTML 报告 | scan-output/malicious_packages_report_{timestamp}.json |
--no-summary | 跳过将报告摘要打印到控制台 | 否 | |
--no-ioc | 跳过 IoC(折中指标)扫描 | 否 | |
--ioc-only | 仅扫描 IoC,跳过软件包检查 | 否 | |
--latest-data | 在扫描前强制进行分段实时刷新和异常门控升级 | 否 | |
--strict-data | 如果任何请求的生态系统存在部分或缺失的威胁数据,则失败 | 否 | |
--include-experimental-sources | 在威胁数据刷新期间包含实验性收集器 | 否 | |
--list-supported-files | 打印所有支持的依赖清单文件名并退出 | 否 | |
--verbose | -v | 显示 INFO 级别日志(进度消息) | 否 |
--debug | 显示 DEBUG 级别日志(详细诊断信息) | 否 |
| 客户端 | 传输方式 | 引导命令 | 备注 |
|---|
| Claude Code | MCP | orewatch monitor ide-bootstrap --client claude_code | 一级 MCP 桥接 |
| Codex | MCP | orewatch monitor ide-bootstrap --client codex | 一级 MCP 桥接 |
| Cursor | MCP | orewatch monitor ide-bootstrap --client cursor | 一级 MCP 桥接 |
| VS Code | 本地 API | orewatch monitor ide-bootstrap --client vscode | 未捆绑扩展;使用 localhost API |
| JetBrains / PyCharm | 本地 API | orewatch monitor ide-bootstrap --client jetbrains | 未捆绑插件;使用 localhost API |
| Xcode | 本地 API | orewatch monitor ide-bootstrap --client xcode | 最适合发现/通知和多语言仓库 |
systemdmonitor quickstart /path/to/project --client claude_code是本地LLM代理设置中最简单的首次运行流程。--workspace-root /path/to/workspace仍然在一个版本中作为已弃用的兼容别名被接受,但不再改变监控器身份、令牌位置或服务命名。auto模式下,如果原生的launchd或systemd设置失败,OreWatch现在会回退到本地后台模式,而不是中止设置。monitor install --ide-bootstrap会打印出针对Claude Code、Codex、Cursor、VS Code、JetBrains / PyCharm和Xcode的复制粘贴引导代码段。monitor connection-info会打印回环API基础URL、令牌路径、单例监控器作用域/主目录以及守护进程是否已在运行。monitor ide-bootstrap会再次打印当前的MCP/API引导代码段,无需重新安装任何内容。monitor mcp运行一个本地MCP桥接器,将OreWatch依赖检查暴露给Claude Code、Codex和Cursor。monitor findings、monitor notifications和monitor package-updates提供了用于后台检测和更新建议的内置审查界面。monitor menubar启动一个原生的macOS菜单栏应用,由单例监控器和发现存储支持。monitor mcp是一个stdio服务器,因此它会在启动后等待一个MCP客户端。它现在将就绪和自动启动状态写入stderr,而不是stdout。monitor install,这样当客户端启动monitor mcp或调用API时,后台守护进程已经可用。make test-e2e-clients引导合成工作区,并运行跨生态系统的MCP/API客户端矩阵(针对Claude Code、Codex和Cursor)。openssf和osv)进行异常门控的实时更新。候选数据暂存在用户拥有的监控器状态目录中,检查是否有异常下降/删除,然后才被提升到活动数据库中。snapshots.channel_url或snapshots.manifest_url配置的签名通道描述符或清单,监控器使用snapshots.public_key_path验证它们。openssl。orewatch_list_package_updatesorewatch_check_package_updates