Local MCP Server
在Termux中运行本地MCP服务器,支持Ollama模型的文件读取与命令执行。
下载 312
通过多智能体对抗辩论机制,自动识别代码中的真实安全漏洞。
openclaw skills install @har1sh-k/xfire-security-review命令、参数、文件名以原文为准
多个智能体。一个结论。零盲区。
xfire 将您的代码独立发送给 3 个 AI 智能体(Claude、Codex、Gemini),随后启动对抗性辩论机制,让它们相互质询彼此的发现。只有在经过指控、辩护和裁判裁定后仍被确认的问题,才会进入最终报告。
当用户提出以下任一请求时,请调用 xfire:
请勿使用 xfire 进行:
pip install xfire| 智能体 | CLI 工具 | API 密钥环境变量 |
|---|---|---|
| Claude | claude | ANTHROPIC_API_KEY |
| Codex | codex | OPENAI_API_KEY |
| Gemini | gemini | GOOGLE_API_KEY |
# 在当前仓库初始化配置
xfire init
# 测试智能体连接性
xfire test-llm
# 设置智能体凭证
xfire auth login --provider claude
xfire auth login --provider codex
xfire auth login --provider geminianalyze-pr — 分析 GitHub 拉取请求xfire analyze-pr --repo owner/repo --pr 123| 参数 | 类型 | 默认值 | 环境变量 | 说明 |
|---|---|---|---|---|
--repo | str | 必填 | — | GitHub 仓库格式为 owner/repo |
--pr | int | 必填 | — | 拉取请求编号 |
--github-token | str | 无 | GITHUB_TOKEN | GitHub 访问令牌 |
--agents | str | 无 | — | 逗号分隔的智能体列表(claude,codex,gemini) |
--skip-debate | bool | False | — | 跳过对抗性辩论阶段 |
--context-depth | str | 无 | — | 上下文深度:shallow\ |
--output | str | 无 | — | 输出文件路径 |
--format | str | markdown | — | 输出格式:markdown\ |
--post-comment | bool | False | — | 将评审结果作为 GitHub PR 评论发布 |
--cache-dir | str | 无 | XFIRE_CACHE_DIR | 用于保存上下文与意图的缓存目录 |
--verbose | bool | False | — | 启用详细日志输出 |
--dry-run | bool | False | — | 显示将要分析的内容,但不调用智能体 |
--debate | bool | False | — | 在报告后显示对抗性辩论全文 |
--debug | bool | False | — | 将完整调试信息写入 xfire-debug-TIMESTAMP.md |
--silent | bool | False | — | 抑制所有输出,仅返回退出码(适用于 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| 参数 | 类型 | 默认值 | 环境变量 | 说明 |
|---|---|---|---|---|
--patch | str | 无 | — | diff/patch 文件路径 |
--commit | str | 无 | — | 要分析的提交 SHA(自动通过 git show 生成 patch) |
--repo-dir | str | . | — | 仓库根目录路径 |
--staged | bool | False | — | 分析仓库中已暂存的更改 |
--base | str | 无 | — | 用于对比的基础分支或提交 |
--head | str | 无 | — | 用于对比的目标分支或提交 |
--agents | str | 无 | — | 逗号分隔的智能体列表 |
--skip-debate | bool | False | — | 跳过对抗性辩论阶段 |
--context-depth | str | 无 | — | 上下文深度:shallow\ |
--output | str | 无 | — | 输出文件路径 |
--format | str | markdown | — | 输出格式:markdown\ |
--cache-dir | str | 无 | XFIRE_CACHE_DIR | 用于保存上下文与意图的缓存目录 |
--thinking | bool | False | — | 为所有智能体启用扩展思考/推理模式 |
--verbose | bool | False | — | 启用详细日志输出 |
--dry-run | bool | False | — | 显示将要分析的内容,但不调用智能体 |
--debate | bool | False | — | 在报告后显示对抗性辩论全文 |
--debug | bool | False | — | 将完整调试信息写入 xfire-debug-TIMESTAMP.md |
--silent | bool | False | — | 抑制所有输出,仅返回退出码(适用于 Git 钩子) |
code-review — 全代码库安全审计xfire code-review /path/to/repo| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
repo_dir(参数) | str | . | 仓库根目录路径 |
--agents | str | 无 | 逗号分隔:claude,codex,gemini |
--skip-debate | bool | False | 跳过对抗性辩论阶段 |
--max-files | int | 150 | 最多扫描源文件数量 |
--thinking | bool | False | 为所有智能体启用扩展思考/推理模式 |
--format | str | markdown | 输出格式:markdown\ |
--output | str | 无 | 输出文件路径 |
--verbose | bool | False | 启用详细日志输出 |
--dry-run | bool | False | 显示将要分析的内容,但不调用智能体 |
--debate | bool | False | 在报告后显示对抗性辩论全文 |
--debug | bool | False | 将完整调试信息写入 xfire-debug-TIMESTAMP.md |
--silent | bool | False | 抑制所有输出,仅返回退出码(适用于 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.patchSkill: xfire 安全代码审查
Version: 0.1.2
Chunk: 2/3
| 标志 | 类型 | 默认值 | 描述 |
|---|---|---|---|
repo_dir (参数) | str | . | 仓库根目录路径 |
--base | str | None | 基础分支/提交(需与 --head 一起使用) |
--head | str | None | 头部分支/提交(需与 --base 一起使用) |
--range | str | None | 提交范围,例如 abc123~1..abc123 |
--diff | str | None | .patch 文件路径 |
--since-last-scan | bool | False | 扫描自上次扫描以来的所有提交 |
--since | str | None | 自指定日期(YYYY-MM-DD)以来的所有提交 |
--last | int | None | 最近 N 个提交 |
--agents | str | None | 用逗号分隔的代理列表:claude,codex,gemini |
--skip-debate | bool | False | 跳过对抗性辩论阶段 |
--context-depth | str | None | 上下文深度:shallow\ |
--format | str | markdown | 输出格式:markdown\ |
--output | str | None | 输出文件路径 |
--verbose | bool | False | 启用详细日志记录 |
--dry-run | bool | False | 显示将要分析的内容,但不调用代理 |
baseline — 构建持久化的仓库基线上下文xfire baseline /path/to/repo
xfire baseline . --force| 标志 | 类型 | 默认值 | 描述 |
|---|---|---|---|
repo_dir (参数) | str | . | 仓库根目录路径 |
--force | bool | False | 即使已存在基线也重新构建 |
--verbose | bool | False | 启用详细日志记录 |
report — 从保存的 JSON 结果重新生成报告xfire report --input xfire-results.json --format sarif| 标志 | 类型 | 默认值 | 描述 |
|---|---|---|---|
--input | str | *必需* | xfire JSON 结果文件路径 |
--format | str | markdown | 输出格式:markdown\ |
--output | str | None | 输出文件路径 |
debates — 重播对抗性辩论对话记录xfire debates --input xfire-results.json| 标志 | 类型 | 默认值 | 描述 |
|---|---|---|---|
--input | str | *必需* | xfire JSON 结果文件路径 |
init — 初始化 xfire 配置xfire init在当前目录创建 .xfire/config.yaml。无参数。
config-check — 验证配置xfire config-check --repo-dir .| 标志 | 类型 | 默认值 | 描述 |
|---|---|---|---|
--repo-dir | str | . | 仓库根目录路径 |
test-llm — 测试代理连接性xfire test-llm
xfire test-llm --agents claude --mode api
xfire test-llm --thinking --prompt "What is 2+2?"| 标志 | 类型 | 默认值 | 描述 |
|---|---|---|---|
--repo-dir | str | . | 仓库根目录路径 |
--agents | str | None | 要测试的代理列表(以逗号分隔,默认为所有启用的代理) |
--timeout | int | 30 | 每个代理的超时时间(秒) |
--mode | str | None | 覆盖所有代理的模式:cli 或 api |
--prompt | str | None | 发送给每个代理的自定义测试提示 |
--thinking | bool | False | 启用扩展性思考/推理测试 |
auth login — 设置代理凭证xfire auth login --provider claude
xfire auth login --provider codex
xfire auth login --provider gemini| 标志 | 类型 | 默认值 | 描述 |
|---|---|---|---|
--provider / -p | str | *必需* | 要认证的服务提供商:codex\ |
--token | str | None | Claude 的 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| 标志 | 类型 | 默认值 | 描述 |
|---|---|---|---|
--fixture | str | "" | 固定用例名称(例如:auth_bypass_regression) |
--ui | bool | False | 运行合成的 UI 演示场景(不调用 LLM) |
--scenario | str | "" | 运行一个 UI 场景:both_accept\ |
--format | str | markdown | 输出格式:markdown\ |
--verbose | bool | False | 启用详细日志记录 |
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 工具 |
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| 变量 | 是否必需 | 说明 |
|---|---|---|
ANTHROPIC_API_KEY | 是(使用 Claude API 模式时) | Anthropic API 密钥 |
OPENAI_API_KEY | 使用 Codex API 模式时 | OpenAI API 密钥 |
GOOGLE_API_KEY | 使用 Gemini API 模式时 | Google API 密钥 |
GITHUB_TOKEN | 使用 analyze-pr 时 | GitHub 个人访问令牌 |
XFIRE_CONFIG_PATH | 否 | 覆盖配置文件路径 |
XFIRE_CACHE_DIR | 否 | 上下文/意图缓存目录,用于跨运行持久化 |
XFIRE_AUTH_PATH | 否 | 覆盖认证凭据存储路径(auth.json) |
--max-files 限制范围已收录 1 个 Skill