Haku-Blue/LokiRed

GitHub: Haku-Blue/LokiRed

LokiRed 是一个本地优先的 CLI 扫描器,用于检测 AI agent 和 MCP 配置文件中的安全风险并生成可操作的修复报告。

Stars: 0 | Forks: 0

# LokiRed [![LokiRed](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/2d07222443232508.svg)](https://github.com/Haku-Blue/LokiRed/actions/workflows/lokired.yml) [![测试](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/d99fae620b232514.svg)](https://github.com/Haku-Blue/LokiRed/actions/workflows/tests.yml) [![许可证](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE) LokiRed 是一个用于 AI-agent 和 MCP 配置风险的 CLI 扫描器。 它可以帮助你解答: LokiRed 专为使用 Codex、Claude Code、Cursor、Windsurf、GitHub Copilot coding agent 以及 MCP 服务器等工具的团队而构建。它会扫描代码仓库或工作区,查找受支持的 agent 配置文件,并报告存在风险的执行模式,包括文件路径、行号、证据、严重程度、置信度、建议的操作和修复指南。 ## 项目状态 LokiRed 社区版 v0.2.1 是一个早期的 CLI 优先版本。该扫描器是确定性的、本地优先的,并且无需托管服务即可使用。 当前的 0.2.x 版本侧重于代码仓库和工作区扫描、CI 强制执行、规范化清单、策略、抑制、基线、SARIF 以及 pull-request 权限差异审查。在项目进入 1.0 版本之前,输出 schema 的详细信息、受支持的生态系统以及规则集可能仍会调整,但其目标是提供稳定、以证据为先的发现结果,并能在 CI 中重复运行。 ## LokiRed 检查内容 LokiRed 目前可检测: - 受支持的 agent 和 MCP 配置文件中硬编码的密钥。 - Agent 指令文件中硬编码的密钥。 - MCP 启动命令中具有破坏性的 shell 或数据库命令。 - Agent 指令文本中具有破坏性的命令。 - 使用不安全的远程 `http://` URL 的 MCP 服务器。 - 配置为自动批准的 MCP 工具或服务器。 - 在生命周期事件中运行的 Claude Code 命令、HTTP 和 prompt hooks。 - 绕过权限提示的 Claude Code 设置。 - 自动启用所有项目 MCP 服务器的 Claude Code 设置。 - 范围过大的 Claude Code 工具允许规则。 - 禁用批准的 Codex 配置。 - 具有完全文件系统访问权限的 Codex 配置。 - 规范化清单中的 Codex 文件系统和网络权限配置语义。 - VS Code 工作区和开发容器(dev-container)的 MCP 服务器。 - 作为静态清单的已提交的 GitHub Copilot 设置工作流命令。 - 受支持配置文件中无效的 JSON 或 TOML。 使用 JSON 输出时,LokiRed 还会生成已发现的 agent 配置文件的清单。JSON 输出包括报告 schema 版本 `1.1`、版本化的规范化清单、权限分类、稳定的发现指纹、策略和抑制元数据、覆盖警告以及可选的基线差异状态。 规则包含一流的置信度和建议的操作元数据。置信度反映了证据的强度(`high`、`medium`、`low` 或 `unknown`)。建议的操作传达了规则库的默认建议(`warn` 或 `block`),而不会更改 CLI `--fail-on` 严重性阈值的行为。 ## 支持的文件 LokiRed 如今可以发现并扫描以下文件: | 生态系统 | 文件 | | --- | --- | | 通用 MCP | `mcp-config.json` | | Claude MCP | `.mcp.json` | | Claude Code 设置 | `.claude/settings.json`, `.claude/settings.local.json` | | Codex | `.codex/config.toml` | | Cursor MCP | `.cursor/mcp.json` | | Cursor 规则 | `.cursorrules`, `.cursor/rules/*.md`, `.cursor/rules/*.mdc` | | VS Code 工作区 MCP | `.vscode/mcp.json` | | VS Code 开发容器 MCP | `.devcontainer/devcontainer.json` (包含 `customizations.vscode.mcp.servers`) | | Windsurf MCP | `mcp_config.json` | | GitHub Copilot 指令 | `.github/copilot-instructions.md`, `.github/instructions/*.instructions.md` | | GitHub Copilot 提示词 | `.github/prompts/*.prompt.md` | | GitHub Copilot 设置工作流 | `.github/workflows/copilot-setup-steps.yml`, `.github/workflows/copilot-setup-steps.yaml` | | 常规 Agent 指令 | `AGENTS.md`, `CLAUDE.md`, `GEMINI.md` | LokiRed 会跳过常见的生成文件或依赖文件夹,例如 `.git`、`node_modules`、`vendor`、`dist`、`build`、`.venv`、`venv`、`.pytest_cache` 和 `__pycache__`。 有关完整的覆盖矩阵以及 LokiRed 在 JSON 和 Markdown 审查输出中如实报告的盲点,请参阅 [docs/coverage.md](docs/coverage.md)。有关可复制的策略模板,请参阅 [docs/policy-templates.md](docs/policy-templates.md)。 ## 环境要求 - Python 3.11 或更高版本。 - 扫描器运行时不需要第三方 Python 包。 - SARIF schema 验证测试使用可选的 `test` 额外依赖。 在 Windows 上,请确保在继续之前 `python --version` 可以正常运行。 ## 为本地开发安装 从仓库根目录开始: ``` python -m pip install -e . ``` 这将以可编辑模式安装 `lokired` 命令,这意味着对源文件的更改会立即生效。 你也可以在不安装的情况下运行 LokiRed: ``` python -m lokired scan . ``` ## 快速开始 扫描当前文件夹: ``` lokired scan . ``` 扫描特定文件夹: ``` lokired scan C:\path\to\your\repo ``` 扫描本仓库的真实测试工作区: ``` lokired scan test-environment ``` 如果 LokiRed 发现问题,默认的文本输出如下所示: ``` LokiRed scan findings ===================== Total issues: 9 Active issues: 9 1. [CRITICAL] UNSAFE_APPROVAL_MODE Title: Agent approvals are disabled Confidence: high Recommended action: block File: .codex\config.toml Config type: Codex configuration Line: 1 Risk: Codex is configured with approval_policy='never', reducing human checkpoints for tool use. Evidence: Setting: approval_policy Value: never Remediation: Use an approval policy that prompts before risky tool use in shared or CI-controlled workspaces. ``` ## 命令参考 主要扫描命令: ``` lokired scan [folder_path] [--format text|json|sarif] [--fail-on low|medium|high|critical|none] [--policy path] [--baseline path] [--write-baseline path] [--verbose] ``` 参数: - `folder_path`:要扫描的文件夹。默认为当前目录。 - `--format`:输出格式。默认为 `text`。 - `--fail-on`:当发现的结果达到或高于所选严重程度时,以退出码 `1` 退出。默认为 `low`。 - `--policy`:可选的显式策略文件路径。如果没有此标志,LokiRed 会在存在时依次发现扫描根目录下的 `.lokired/policy.yml`,接着是旧版的 `.lokired.yml` 或 `.lokired.yaml`。 - `--baseline`:可选的 LokiRed 基线 JSON 文件。发现结果将被分类为 `new`(新增)、`unchanged`(未更改)或 `resolved`(已解决)。 - `--write-baseline`:将本次扫描的活动发现写入版本化的基线 JSON 文件。 - `--verbose`:在文本输出中显示诸如发现指纹等面向机器的详细信息。 严重性选项: - `low` - `medium` - `high` - `critical` - `none` 当你只需要报告但不希望命令执行失败时,请使用 `--fail-on none`。 策略验证: ``` lokired policy validate lokired policy validate --policy .lokired/policy.yml ``` 规则目录检查: ``` lokired rules list lokired rules show INSECURE_REMOTE_MCP ``` ## 输出格式 ### 文本 最适合在终端中阅读结果的用户: ``` lokired scan . --format text ``` 文本输出尽可能使用相对于扫描根目录的路径,将内部配置标识符展开为可读的标签,并将证据格式化为多行显示。如果你希望在终端报告中查看指纹,请使用 `--verbose`: ``` lokired scan . --format text --verbose ``` ### JSON 最适合脚本、仪表盘和清单: ``` lokired scan . --format json ``` JSON 报告包括: - 工具名称和版本。 - 报告 schema 版本 `1.1`。 - 按严重程度统计的摘要。 - 按配置类型统计的摘要。 - 完整的发现详情。 - 已发现的配置文件清单。 - 版本化的规范化清单记录,包括 `clients`、`servers`、`capabilities` 和 `evidence`。 - 权限分类。 - 针对显式扫描根目录之外的用户配置文件、SaaS 管理和仅本地表面的覆盖警告。 - 稳定的发现指纹。 - 发现的置信度、建议的操作(适用时的策略决策)以及基线状态(适用时)。 - 使用策略抑制时的已抑制发现和抑制审查元数据。 - 使用 `--baseline` 时的基线差异状态和权限图变更摘要。 结构示例: ``` { "report_schema_version": "1.1", "tool": { "name": "LokiRed", "version": "0.2.1" }, "summary": { "total": 9, "by_severity": { "critical": 1, "high": 4, "medium": 4 } }, "inventory": { "total_config_files": 8, "normalized": { "schema_version": "1.0", "clients": [], "servers": [], "capabilities": [], "evidence": [], "resources": [], "identities": [], "permissions": [], "bindings": [] } }, "coverage_warnings": [], "classifications": [], "findings": [] } ``` ### SARIF 最适合 GitHub 代码扫描和安全工具: ``` lokired scan . --format sarif ``` 将 SARIF 保存到文件: ``` lokired scan . --format sarif --fail-on none > lokired.sarif ``` SARIF 包含稳定的规则 ID、规则元数据、置信度、建议的操作、已知扫描根目录时的相对文件位置、修复指南、经过脱敏处理的证据,以及用于 GitHub 代码扫描去重的 `lokiredFingerprint/v1` 部分指纹。 默认的 SARIF 针对活动的代码扫描警报进行了优化。被抑制的发现、已解决的基线发现以及原始的权限图差异不会作为普通的 SARIF 结果输出。JSON 是包含清单、抑制、已解决状态和详细图差异的完整本地审计产物。 ## 策略与抑制 LokiRed 的策略文件是本地的、版本化的且可选的。默认情况下,LokiRed 会在扫描根目录中查找 `.lokired/policy.yml`。当缺少标准路径时,旧版的 `.lokired.yml` 和 `.lokired.yaml` 仍受支持。如果存在多个隐式策略文件,LokiRed 将以状态码 `2` 退出,并要求你消除歧义或使用 `--policy` 指定。显式的 `--policy` 路径始终具有最高优先级。 示例: ``` schema_version: 1 access: allow: - resource: workspace warn: - resource: "network:*" block: - category: secret access: read_secret_literal severity: critical reason: Literal secrets are not allowed in agent config. require-review: - resource: "filesystem:/" rules: INSECURE_REMOTE_MCP: severity: high suppressions: - rule_id: HARDCODED_SECRET path: mcp-config.json config_path: mcpServers.github.env.GITHUB_TOKEN reason: Synthetic fixture credential. owner: appsec expires: 2099-01-01 ticket: SEC-123 ``` 受支持的访问操作包括 `allow`、`warn`、`block` 和 `require-review`。旧版的 `access.deny` 被接受为 `access.block` 的别名。如果多个操作匹配同一个分类访问,优先级顺序依次为 `block`、`require-review`、`warn` 和 `allow`。 `block` 和 `require-review` 会创建策略发现结果,并强制 CLI 以非零状态退出(即使使用了 `--fail-on none`)。`warn` 会创建可见的策略发现结果,但本身不会导致失败。`allow` 允许匹配的分类访问,但不会抑制独立的扫描器发现。 未知的访问操作、格式错误的操作列表、模式级别的 `action` 字段、格式错误的 YAML 以及不支持的 schema 版本都会导致程序以状态码 `2` 退出。 抑制条目需要 `rule_id`、非空的 `path`、非空的 `reason`、非空的 `owner` 以及格式为 `YYYY-MM-DD` 的 `expires` 日期。可选的 `fingerprint`、`config_path` 和 `resource` 选择器可以进一步缩小抑制范围,但它们不能替代文件范围。过期、未使用、格式错误、仅限资源或范围过大的抑制将被报告出来,而不是默默地隐藏发现结果。 ## 基线差异扫描 创建基线: ``` lokired scan . --format json --write-baseline .lokired-baseline.json --fail-on none ``` 使用基线: ``` lokired scan . --baseline .lokired-baseline.json --fail-on high ``` 基线文件使用 schema 版本 `2.0`。它们存储发现指纹和包含规范化 `clients`、`servers`、`capabilities` 和 `evidence` 的 `inventory_graph` 快照。在基线模式下,活动发现被标记为 `new` 或 `unchanged`,消失的发现被列为 `resolved`,图的变更被报告为 `added`、`removed`、`changed`、`expanded` 或 `narrowed`。当提供 `--baseline` 时,CI 阈值仅适用于新的活动发现。如果没有基线,阈值行为保持不变。 旧版 schema `1.0` 仅包含发现的基线仍可加载以进行发现差异比对,但在重新生成基线之前,图的差异将被标记为不可用。 ## 可重用的暂存目录扫描器 API 已经获取受支持配置产物的托管 worker 可以重用相同的确定性比较核心,而无需创建 Git 仓库。安装该包,在保留相对路径的同时将 base 和 head 树暂存到一次性目录中,然后调用: ``` from scanner_api import compare_staged_directories comparison = compare_staged_directories( base_path="path/to/staged-base", head_path="path/to/staged-head", base_label="base-sha", head_label="head-sha", fail_on="high", ) safe_payload = comparison["hosted_safe"] ``` `comparison["base_result"]` 和 `comparison["head_result"]` 是用于本地调试的原始临时扫描状态。托管服务应持久化 `comparison["hosted_safe"]`,其中包含相对路径清单、发现结果、权限差异、策略结果、覆盖警告以及清除了暂存根路径的比较元数据。该 API 静态扫描已暂存的文件,不会执行配置的 MCP 服务器、hooks、安装命令或包管理器命令。 ## 在 CI 中使用 LokiRed 刚接触 GitHub Actions 或只想从浏览器测试?请从[仅限浏览器的 PR Action 快速入门](docs/pr-action-quickstart.md)开始。它将引导你完成创建工作流文件、打开测试 pull request、查找摘要,以及在分支保护之前记录成功的检查上下文的全过程。 `--fail-on` 选项控制 LokiRed 是成功退出还是使构建失败。 遇到高或严重发现时失败: ``` lokired scan . --fail-on high ``` 仅在遇到严重发现时失败: ``` lokired scan . --fail-on critical ``` 从不失败,仅报告: ``` lokired scan . --fail-on none ``` 退出码: - `0`:没有达到或超过配置阈值的发现。 - `1`:存在一个或多个达到或超过配置阈值的发现。 - `2`:扫描设置失败,例如格式错误的策略、基线无效的扫描路径。 ### GitHub Action 此仓库包含 `action.yml`,这是一个复合操作,它从 action 的检出中安装 LokiRed 并调用 CLI。在另一个仓库中,请将 LokiRed 固定到某个发布标签。在此仓库内,`uses: ./` 会运行本地检出。 默认的 `mode: scan` 保留了原始的仅扫描行为: ``` - name: Scan agent and MCP config uses: Haku-Blue/LokiRed@v0.2.1 with: scan-path: "." output-format: "text" fail-on: "high" ``` 对于 pull request,使用 `mode: policy-check` 比较 base 和 head 引用,在返回任何失败之前编写 Markdown 权限差异摘要,并可选择保存 JSON 以供日后检查: ``` name: LokiRed PR policy on: pull_request: permissions: contents: read jobs: lokired: name: LokiRed policy check runs-on: ubuntu-latest steps: - name: Check out pull request head uses: actions/checkout@v6 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} - name: Set up Python uses: actions/setup-python@v6 with: python-version: "3.12" - name: Check AI-agent permission changes uses: Haku-Blue/LokiRed@v0.2.1 with: mode: policy-check scan-path: "." base-ref: ${{ github.event.pull_request.base.sha }} head-ref: ${{ github.event.pull_request.head.sha }} output-format: "text" fail-on: "high" markdown-summary-path: "lokired-pr-summary.md" json-report-path: "lokired-pr-report.json" append-step-summary: "true" - name: Upload LokiRed JSON report if: always() uses: actions/upload-artifact@v4 with: name: lokired-pr-report path: lokired-pr-report.json ``` `actions/checkout` 应使用 `fetch-depth: 0` 以进行引用比较。如果在 pull request 上省略 `base-ref`,Action 将使用 `origin/${GITHUB_BASE_REF}`;当该引用不存在或运行不是 pull request 时,请显式配置 `base-ref`。LokiRed 不会发布 PR 评论、请求写权限、上传原始配置,也不需要此工作流使用 GitHub App。 Action 模式: - `scan`:运行 `lokired scan`。支持 `policy-path`、`baseline-path`、`write-baseline`、`output-file` 以及现有的扫描阈值。 - `diff`:运行 `lokired diff`,除非设置失败,否则成功退出。用于仅警告的推行。 - `policy-check`:运行 `lokired policy check`,发布 Markdown 摘要,然后返回原始的强制退出码。 有用的 Action 输出包括 `exit-code`、`mode`、`markdown-summary-path`、`json-report-path` 和 `blocked`。 Markdown 摘要摘录示例: ``` # LokiRed: 已阻止 ## 权限更改 | Decision | Change | Client | Capability | Previous scope | Proposed scope | | --- | --- | --- | --- | --- | --- | | Block | Expanded | VS Code MCP | filesystem write | workspace | / | ``` 为了逐步推行,可以从 `mode: diff` 或使用 `warn` 的策略规则开始,查看摘要以过滤干扰信息,调整策略和需要负责的异常,然后将分支保护设置为仅针对新的高置信度权限扩展要求阻止性的 `policy-check` 作业。仅限浏览器的首次安装指南位于 [docs/pr-action-quickstart.md](docs/pr-action-quickstart.md);可复制粘贴的工作流示例位于 `docs/examples/lokired-pr-policy.yml` 和 `docs/examples/lokired-pr-warn-only.yml`;可复制粘贴的策略模板位于 [docs/policy-templates.md](docs/policy-templates.md)。有关分支保护序列,请参阅 [docs/branch-protection-rollout.md](docs/branch-protection-rollout.md)。 要将 SARIF 上传到 GitHub 代码扫描,请先为仓库启用代码扫描。默认情况下,检入的 SARIF 工作流会跳过上传步骤,以便未启用代码扫描的仓库仍能通过 CI。启用代码扫描后,将仓库变量 `LOKIRED_UPLOAD_CODE_SCANNING` 设置为 `true`。 SARIF 上传工作流示例: ``` name: LokiRed SARIF on: pull_request: push: branches: - main jobs: scan: runs-on: ubuntu-latest permissions: actions: read security-events: write contents: read steps: - name: Check out repository uses: actions/checkout@v6 - name: Set up Python uses: actions/setup-python@v6 with: python-version: "3.12" - name: Install LokiRed run: python -m pip install -e . - name: Generate SARIF run: lokired scan . --format sarif --fail-on none > lokired.sarif - name: Upload SARIF if: vars.LOKIRED_UPLOAD_CODE_SCANNING == 'true' && github.event_name == 'push' uses: github/codeql-action/upload-sarif@v4 with: sarif_file: lokired.sarif - name: Enforce threshold run: lokired scan . --format text --fail-on high ``` ## 如何阅读发现结果 每个发现包括: - `Severity`(严重性):LokiRed 认为该问题的风险程度。 - `Rule ID`(规则 ID):触发规则的稳定标识符。 - `Title`(标题):问题的简短解释。 - `Confidence`(置信度):发现的证据强度。 - `Recommended action`(建议的操作):目录建议,与 CLI 阈值行为分开。 - `File`(文件):包含问题的文件。 - `Config type`(配置类型):检测到的配置生态系统,在文本输出中显示为可读标签。 - `Line`(行号):LokiRed 找到证据的位置。 - `Risk`(风险):该发现为何重要。 - `Evidence`(证据):涉及的确切配置路径、服务器名称、操作或设置。 - `Fingerprint`(指纹):供抑制、基线和 SARIF 使用的稳定发现标识。文本输出仅在带有 `--verbose` 时显示此项;JSON 和 SARIF 始终包含机器可读的指纹。 - `Remediation`(修复):解决问题的实用指南。 示例: ``` [HIGH] HARDCODED_SECRET File: mcp-config.json Line: 10 Evidence: Setting: mcpServers.github.env.GITHUB_TOKEN Key: GITHUB_TOKEN Value: Remediation: Load this value from a secret manager or environment variable reference instead of committing the secret directly. ``` 修复: ``` { "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" } } ``` ## 本地测试工作区 本仓库包含 `test-environment`,这是一个包含安全和风险 agent 配置文件的真实示例工作区。 运行: ``` lokired scan test-environment --format text --fail-on none ``` 预期的当前结果: - 发现 8 个配置文件。 - 9 个发现结果。 - 1 个严重发现。 - 4 个高发现。 - 4 个中等发现。 此测试夹具在更改扫描器行为时非常有用,因为它检查了现实世界中关注的问题: - 一个工作区中的多个 agent 生态系统。 - 安全指令文件与风险配置文件并存。 - 密钥和远程 MCP 设置。 - CI 阈值行为。 - 忽略依赖项和 vendor 文件夹。 在扫描此仓库根目录时,`.lokired.yml` 会抑制这些故意设置的风险测试发现,以便公共 CI 可以检查 LokiRed 而不会因其自身的示例而失败。直接扫描 `test-environment` 仍会报告上述预期的发现。 ## 运行测试 运行测试套件: ``` python -m pip install -e ".[test]" python -m unittest discover -s tests -v ``` 测试涵盖: - MCP 结构规则。 - 安全配置的负面测试用例。 - 文本、JSON 和 SARIF 报告器。 - 真实的混合工作区扫描。 - 支持的生态系统发现。 - 规范化的清单序列化。 - 权限分类。 - 策略操作、旧版拒绝处理、严重性覆盖以及格式错误策略的拒绝。 - 负责任的活动的、过期的、无效的和未使用的抑制。 - 基线生成、发现差异结果、图持久化和图差异。 - 使用位于 `tests/vendor/sarif` 的内置 schema 进行本地 SARIF 2.1.0 schema 验证。 - 每个目录规则的直接负面案例。 - 针对 MCP 启动命令的静态非执行回归测试。 - CI 阈值行为。 - CLI JSON 输出和退出码。 - GitHub Action 元数据。 - 确定性输出顺序。 ## 贡献与安全 有关本地设置、测试夹具期望和 pull request 指南,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 有关负责任的漏洞报告,请参阅 [SECURITY.md](SECURITY.md)。请勿打开包含真实密钥、私有仓库内容或客户配置的公开 Issue。 ## 兼容性包装器 为了保持与早期原型的兼容性,`run_scanner.py` 仍然保留。 以下两者等效: ``` python -m lokired scan test-environment python run_scanner.py test-environment ``` 新用法应首选: ``` lokired scan test-environment ``` 或: ``` python -m lokired scan test-environment ``` ## 当前局限性 在此 MVP 版本中,LokiRed 是有意设计为确定性和本地优先的。 当前局限性: - 它不会调用 LLM 来判断严重性。 - 它不需要云连接。 - 它不上传配置内容。 - 它尚未扫描所有 AI-agent 生态系统。 - 它专注于高价值的配置和指令风险,而不是跨所有文件的完全密钥扫描。 - 其内置的 YAML 解析器支持本仓库中记录的策略子集,而不是完整的 YAML 规范。 - 仓库扫描不会自动覆盖扫描路径之外的本地用户配置文件设置。 - 仓库扫描不会自动覆盖 SaaS 管理的仓库设置。 - 它尚未提供托管的 GitHub App 或团队仪表盘。 - 初始 CLI 不会观察运行时的 MCP 流量或工具调用。 ## 规则文档 详细的规则文档位于 [docs/rules](docs/rules),更广泛的工作流指南位于 [docs/guide.md](docs/guide.md)。另请参阅[威胁模型](docs/threat-model.md)和[隐私模型](docs/privacy-model.md)。每个规则页面都记录了规则 ID、标题、触发条件、严重性、置信度、建议的操作、证据、修复方法、误报注意事项以及抑制指南。 ## 开发说明 项目布局: ``` lokired.py CLI entrypoint and scan orchestration security_file_scanner.py Discovery and deterministic rules inventory.py Versioned normalized inventory schema classification.py Permission classification over inventory policy.py Policy, suppressions, and policy deny findings baseline.py Baseline creation, validation, and diffing fingerprints.py Stable finding fingerprints rule_catalog.py Stable rule metadata reporter.py Text, JSON, and SARIF output action.yml Thin GitHub Action wrapper around the CLI scripts/lokired_action.py Testable GitHub Action orchestration docs/ Workflow and rule documentation run_scanner.py Compatibility wrapper tests/ Unit and pipeline tests mock_configs/ Small MCP fixtures test-environment/ Realistic mixed workspace fixture ``` LokiRed 的 MVP 设计目标是保持以证据为先: - 每个发现都应说明发现了什么。 - 每个发现都应说明在何处发现的。 - 每个发现都应说明其重要性。 - 每个发现都应包含实用的修复指南。 ## 路线图构想 v0.2.1 之后的近期方向: - 继续改进有关基线清单和图差异的 pull request 审查产物。 - 扩大对仓库可见的 agent 和 MCP 配置表面的高价值覆盖。 - 为仅警告模式和强制执行模式保持清晰的 GitHub Action 入门、策略模板和分支保护推行指南。 - 为 AppSec、平台、DevEx 和开发审查人员保持策略、抑制和规则文档的实用性。 长期方向: - 推出 GitHub App 和团队清单视图,实现组织范围的覆盖、策略、异常处理和证据。 - 针对仓库扫描之外的本地用户配置文件 agent 配置,提供可选的 endpoint 可见性。 - 仅在静态治理工作流证明有需求后,再进行运行时 MCP 强制执行或网关开发工作。 ## 许可证 LokiRed 社区版获得 Apache License 2.0 的许可。 有关详细信息,请参阅 `LICENSE`。
标签:AI智能体, GitHub Action, GraphQL安全矩阵, MCP配置安全, StruQ, 安全扫描器, 机密检测, 逆向工具, 错误基检测, 静态代码分析