xfire Security PR Review

通过多智能体对抗辩论机制,自动识别代码中的真实安全漏洞。

已扫描
适合谁
软件开发工程师、安全运维人员
不适合谁
非技术背景用户、仅需代码格式检查者
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
中等(★★☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @har1sh-k/xfire-security-review

Skill 说明

命令、参数、文件名以原文为准

xfire — 多智能体对抗性安全审查

多个智能体。一个结论。零盲区。

xfire 将您的代码独立发送给 3 个 AI 智能体(Claude、Codex、Gemini),随后启动对抗性辩论机制,让它们相互质询彼此的发现。只有在经过指控、辩护和裁判裁定后仍被确认的问题,才会进入最终报告。

适用场景

当用户提出以下任一请求时,请调用 xfire:

  • “对这个 PR 做安全审查”
  • “找出这段代码中的漏洞”
  • “审计这个仓库的安全问题”
  • “运行一次安全扫描”
  • “分析这个变更的潜在安全风险”
  • “检查这个拉取请求是否存在漏洞”
  • “进行代码安全审查”
  • “对代码库做渗透测试”
  • “为这次变更建立威胁模型”

请勿使用 xfire 进行:

  • 一般代码质量或风格审查(请使用代码检查工具)
  • 性能分析
  • 依赖项许可证审计
  • 非安全相关的功能测试

前置条件

  • Python 3.11+
  • 安装命令:pip install xfire
  • 至少配置一个 AI 智能体的 CLI 工具或 API 密钥:
智能体CLI 工具API 密钥环境变量
ClaudeclaudeANTHROPIC_API_KEY
CodexcodexOPENAI_API_KEY
GeminigeminiGOOGLE_API_KEY

配置步骤

# 在当前仓库初始化配置
xfire init

# 测试智能体连接性
xfire test-llm

# 设置智能体凭证
xfire auth login --provider claude
xfire auth login --provider codex
xfire auth login --provider gemini

命令列表

核心分析功能

analyze-pr — 分析 GitHub 拉取请求

xfire analyze-pr --repo owner/repo --pr 123
参数类型默认值环境变量说明
--repostr必填GitHub 仓库格式为 owner/repo
--print必填拉取请求编号
--github-tokenstrGITHUB_TOKENGitHub 访问令牌
--agentsstr逗号分隔的智能体列表(claude,codex,gemini)
--skip-debateboolFalse跳过对抗性辩论阶段
--context-depthstr上下文深度:shallow\
--outputstr输出文件路径
--formatstrmarkdown输出格式:markdown\
--post-commentboolFalse将评审结果作为 GitHub PR 评论发布
--cache-dirstrXFIRE_CACHE_DIR用于保存上下文与意图的缓存目录
--verboseboolFalse启用详细日志输出
--dry-runboolFalse显示将要分析的内容,但不调用智能体
--debateboolFalse在报告后显示对抗性辩论全文
--debugboolFalse将完整调试信息写入 xfire-debug-TIMESTAMP.md
--silentboolFalse抑制所有输出,仅返回退出码(适用于 Git 钩子)

analyze-diff — 分析本地变更或暂存的修改

xfire analyze-diff --staged --repo-dir .
xfire analyze-diff --patch changes.patch --repo-dir .
xfire analyze-diff --commit f1877d3 --repo-dir /path/to/repo
xfire analyze-diff --base main --head feature-branch
xfire analyze-diff --commit f1877d3 --thinking --repo-dir /path/to/repo
参数类型默认值环境变量说明
--patchstrdiff/patch 文件路径
--commitstr要分析的提交 SHA(自动通过 git show 生成 patch)
--repo-dirstr.仓库根目录路径
--stagedboolFalse分析仓库中已暂存的更改
--basestr用于对比的基础分支或提交
--headstr用于对比的目标分支或提交
--agentsstr逗号分隔的智能体列表
--skip-debateboolFalse跳过对抗性辩论阶段
--context-depthstr上下文深度:shallow\
--outputstr输出文件路径
--formatstrmarkdown输出格式:markdown\
--cache-dirstrXFIRE_CACHE_DIR用于保存上下文与意图的缓存目录
--thinkingboolFalse为所有智能体启用扩展思考/推理模式
--verboseboolFalse启用详细日志输出
--dry-runboolFalse显示将要分析的内容,但不调用智能体
--debateboolFalse在报告后显示对抗性辩论全文
--debugboolFalse将完整调试信息写入 xfire-debug-TIMESTAMP.md
--silentboolFalse抑制所有输出,仅返回退出码(适用于 Git 钩子)

code-review — 全代码库安全审计

xfire code-review /path/to/repo
参数类型默认值说明
repo_dir(参数)str.仓库根目录路径
--agentsstr逗号分隔:claude,codex,gemini
--skip-debateboolFalse跳过对抗性辩论阶段
--max-filesint150最多扫描源文件数量
--thinkingboolFalse为所有智能体启用扩展思考/推理模式
--formatstrmarkdown输出格式:markdown\
--outputstr输出文件路径
--verboseboolFalse启用详细日志输出
--dry-runboolFalse显示将要分析的内容,但不调用智能体
--debateboolFalse在报告后显示对抗性辩论全文
--debugboolFalse将完整调试信息写入 xfire-debug-TIMESTAMP.md
--silentboolFalse抑制所有输出,仅返回退出码(适用于 Git 钩子)

scan — 基线感知的增量扫描

xfire scan . --base main --head feature-branch
xfire scan . --since-last-scan
xfire scan . --last 5
xfire scan . --range abc123~1..abc123
xfire scan . --since 2026-01-01
xfire scan . --diff changes.patch

Skill: xfire 安全代码审查

Version: 0.1.2

Chunk: 2/3

标志类型默认值描述
repo_dir (参数)str.仓库根目录路径
--basestrNone基础分支/提交(需与 --head 一起使用)
--headstrNone头部分支/提交(需与 --base 一起使用)
--rangestrNone提交范围,例如 abc123~1..abc123
--diffstrNone.patch 文件路径
--since-last-scanboolFalse扫描自上次扫描以来的所有提交
--sincestrNone自指定日期(YYYY-MM-DD)以来的所有提交
--lastintNone最近 N 个提交
--agentsstrNone用逗号分隔的代理列表:claude,codex,gemini
--skip-debateboolFalse跳过对抗性辩论阶段
--context-depthstrNone上下文深度:shallow\
--formatstrmarkdown输出格式:markdown\
--outputstrNone输出文件路径
--verboseboolFalse启用详细日志记录
--dry-runboolFalse显示将要分析的内容,但不调用代理

baseline — 构建持久化的仓库基线上下文

xfire baseline /path/to/repo
xfire baseline . --force
标志类型默认值描述
repo_dir (参数)str.仓库根目录路径
--forceboolFalse即使已存在基线也重新构建
--verboseboolFalse启用详细日志记录

输出

report — 从保存的 JSON 结果重新生成报告

xfire report --input xfire-results.json --format sarif
标志类型默认值描述
--inputstr*必需*xfire JSON 结果文件路径
--formatstrmarkdown输出格式:markdown\
--outputstrNone输出文件路径

debates — 重播对抗性辩论对话记录

xfire debates --input xfire-results.json
标志类型默认值描述
--inputstr*必需*xfire JSON 结果文件路径

设置与诊断

init — 初始化 xfire 配置

xfire init

在当前目录创建 .xfire/config.yaml。无参数。

config-check — 验证配置

xfire config-check --repo-dir .
标志类型默认值描述
--repo-dirstr.仓库根目录路径

test-llm — 测试代理连接性

xfire test-llm
xfire test-llm --agents claude --mode api
xfire test-llm --thinking --prompt "What is 2+2?"
标志类型默认值描述
--repo-dirstr.仓库根目录路径
--agentsstrNone要测试的代理列表(以逗号分隔,默认为所有启用的代理)
--timeoutint30每个代理的超时时间(秒)
--modestrNone覆盖所有代理的模式:cli 或 api
--promptstrNone发送给每个代理的自定义测试提示
--thinkingboolFalse启用扩展性思考/推理测试

auth login — 设置代理凭证

xfire auth login --provider claude
xfire auth login --provider codex
xfire auth login --provider gemini
标志类型默认值描述
--provider / -pstr*必需*要认证的服务提供商:codex\
--tokenstrNoneClaude 的 setup-token 值(仅适用于 --provider claude)

auth status — 显示凭证状态

xfire auth status

无参数。显示所有服务提供商凭证状态的表格。

演示

demo — 运行固定用例或 UI 演示场景

xfire demo --ui
xfire demo --ui --scenario both_accept
xfire demo --fixture auth_bypass_regression
标志类型默认值描述
--fixturestr""固定用例名称(例如:auth_bypass_regression)
--uiboolFalse运行合成的 UI 演示场景(不调用 LLM)
--scenariostr""运行一个 UI 场景:both_accept\
--formatstrmarkdown输出格式:markdown\
--verboseboolFalse启用详细日志记录

配置

xfire 会在仓库根目录查找 .xfire/config.yaml(可通过 XFIRE_CONFIG_PATH 覆盖)。

优先级顺序:CLI 参数 > 环境变量 > config.yaml > 默认值。

repo:
  purpose: ""                          # 描述你的应用功能
  intended_capabilities: []            # 预期能力
  sensitive_paths:                     # 需要额外审查的路径
    - auth/
    - payments/
    - migrations/

analysis:
  context_depth: deep                  # shallow | medium | deep
  max_related_files: 20
  include_test_files: true

agents:
  claude:
    enabled: true
    mode: cli                          # cli | api
    cli_command: claude
    model: claude-sonnet-4-20250514
    api_key_env: ANTHROPIC_API_KEY
    timeout: 600
  codex:
    enabled: true
    mode: cli
    cli_command: codex
    model: o3-mini
    api_key_env: OPENAI_API_KEY
    timeout: 300
  gemini:
    enabled: true
    mode: cli
    cli_command: gemini
    model: gemini-2.5-pro
    api_key_env: GOOGLE_API_KEY
    timeout: 300

  debate:
    role_assignment: evidence          # evidence | rotate | fixed
    fixed_roles:
      prosecutor: claude
      defense: codex
      judge: gemini
    defense_preference: [codex, claude, gemini]
    judge_preference: [codex, gemini, claude]
    max_rounds: 2
    require_evidence_citations: true
    min_agents_for_debate: 2

  skills:
    code_navigation: true
    data_flow_tracing: true
    git_archeology: true
    config_analysis: true
    dependency_analysis: true
    test_coverage_check: true

severity_gate:
  fail_on: high                        # CI 失败的最低严重级别
  min_confidence: 0.7
  require_debate: true

suppressions: []

fast_model:
  provider: claude
  model: claude-haiku-4-5-20251001
  api_key_env: ANTHROPIC_API_KEY
  cli_command: claude
  cli_args: [--output-format, json]
  timeout: 60

输出格式

格式标志说明
Markdown--format markdown可读性强的报告(默认)
JSON--format json机器可读的结构化数据
SARIF--format sarif静态分析结果交换格式,适用于 CI 工具

CI/CD 集成

GitHub Actions

name: xfire 安全评审
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  security-review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"

      - run: pip install xfire

      - name: 运行 xfire 安全评审
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
        run: |
          xfire analyze-pr \
            --repo ${{ github.repository }} \
            --pr ${{ github.event.pull_request.number }} \
            --format sarif \
            --output results.sarif \
            --silent

      - name: 上传 SARIF
        if: always()
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: results.sarif

工作原理

  1. 上下文构建 — 解析 PR 差异、仓库内容,收集相关文件、Git 历史、配置和依赖信息
  2. 意图推断 — 使用快速模型(Haiku)理解仓库目的、信任边界和安全控制机制
  3. 独立评审 — 将上下文并行发送给每个启用的 AI 代理(Claude、Codex、Gemini)
  4. 发现提取 — 将各代理返回结果统一为结构化发现,包含严重性、置信度和 CWE 编号
  5. 对抗辩论 — 每个发现进入“起诉 → 辩护 → 裁判”流程,代理就其有效性展开辩论
  6. 最终裁决与去重 — 裁判发布最终判定;跨代理发现进行去重与合并
  7. 报告生成 — 输出 Markdown、JSON 或 SARIF 格式的最终报告,并根据严重性设置 CI 失败阈值

环境变量

变量是否必需说明
ANTHROPIC_API_KEY是(使用 Claude API 模式时)Anthropic API 密钥
OPENAI_API_KEY使用 Codex API 模式时OpenAI API 密钥
GOOGLE_API_KEY使用 Gemini API 模式时Google API 密钥
GITHUB_TOKEN使用 analyze-prGitHub 个人访问令牌
XFIRE_CONFIG_PATH覆盖配置文件路径
XFIRE_CACHE_DIR上下文/意图缓存目录,用于跨运行持久化
XFIRE_AUTH_PATH覆盖认证凭据存储路径(auth.json)

局限性

  • 至少需要配置并可达一个 AI 代理(Claude、Codex 或 Gemini)
  • CLI 模式要求对应代理命令行工具已安装且在 PATH 中
  • 不能替代人工渗透测试或正式安全审计
  • 发现结果依赖 AI 模型能力,可能存在误报或遗漏细微漏洞
  • 大型仓库可能超出代理上下文限制;可使用 --max-files 限制范围
  • 不扫描二进制文件、编译产物或容器镜像
  • 对抗辩论质量随代理数量提升;单代理模式跳过对抗阶段
HK
@har1sh-k

已收录 1 个 Skill

相关推荐