斯考尔
MCP服务器,并行向多个AI模型发送提示。内置Rust 克劳德代码.
为什么有多种型号
没有一个模型能找到一切。不同的模型有不同的优势、不同的盲点和不同的故障模式。当你向五个模型发送相同的评论时,你会得到一个附加信号——一个捕获并发错误,另一个发现身份验证差距,第三个发现错误处理中的边缘情况。
重叠带来了信心。分歧提供了覆盖范围。一种模型持续发现资源泄漏,而另一种模型则捕捉到配置缺口,两者都无法单独发现。裁员不是浪费,这才是重点。
Squall跟踪每个模型的性能——延迟、成功率、失败模式——Claude使用这些指标为每次审查选择最佳的集成。一个不计时的模型会被基准测试。当身份验证文件更改时,会选择一个在安全敏感代码上发光的模型。选择会随着时间的推移而调整。
Squall被用来构建和验证自己——大约10k行Rust和大约13k行测试,在几天的时间里编写和审查,每一步都有持续的多模型反馈。
快速启动
先决条件
安装
git clone https://github.com/DSado88/squall.git
cd squall
cp .env.example .env
# Fill in your API keys — see .env.example for signup links
./install.sh安装脚本:
- 检查一下
.env存在并且至少有一个API密钥 - 生成发布二进制文件并将其复制到
~/.local/bin/squall - 将Squall注册为全局MCP服务器
~/.claude.json(注入API密钥) - 将技能(斜线命令)安装到
~/.claude/skills/
重新启动Claude代码(或运行 /mcp)拿起新服务器。
API密钥
填写你所拥有的,跳过你没有的。模型只有在设置了密钥时才会加载。
| 变量 | 解锁 | 注册 |
|---|---|---|
TOGETHER_API_KEY | Kimi K2.5,DeepSeek V3.1,Qwen 3.5,Qwen3编码器 | 一起.xyz |
XAI_API_KEY | Grok | console.x.ai |
OPENROUTER_API_KEY | GLM-5 | openrouter.ai |
DEEPSEEK_API_KEY DeepSeek R1。 platform.depeseek.com | ||
MISTRAL_API_KEY | 西北风大 | 安慰.米斯特拉尔.ai |
OPENAI_API_KEY | o3深度研究、o4迷你深度研究 | platform.openai.com |
GOOGLE_API_KEY | 深度研究专业 | aistudio.google.com |
验证
询问克劳德代码: *“列出可用的风暴模型”*。如果Squall已连接,它将呼叫 listmodels 并显示可用的内容。
更新中
拉取新更改后:
./install.sh # rebuild + reinstall
./install.sh --skills # skills only (skip build)
./install.sh --build # build only (skip skills)工具
Squall向Claude Code公开了七个工具。
审查
旗舰工具。并行向多个模型扇出提示。每个模型都可以通过以下方式获得不同的专业镜头 per_model_system_prompts --一个关注安全性,另一个关注正确性,还有一个关注架构。
当所有模型完成或离散截断触发时返回(默认180秒)。未及时完成的模型会返回部分结果。结果持续到 .squall/reviews/ 因此,它们在上下文压缩中幸存下来——如果克劳德的上下文窗口重置 results_file 这条路仍然有效。
关键参数:
models--要查询哪些模型(如果省略,则默认为config)per_model_system_prompts--模型名称到专业镜头的映射deep: true--将超时时间提高到600秒,推理努力提高到很高,最大令牌数提高到16384diff--在提示中包含统一的差异文本file_paths+working_directory--作为上下文注入的源文件
成功率低于70%(超过5+条评论)的模型将被硬门自动排除在外。这可以防止已知的损坏模型浪费调度槽。
聊天
通过HTTP(与OpenAI兼容的API)查询单个模型。通过 file_paths 和 working_directory 将源文件作为上下文注入。适用于针对特定模型的一次性问题。
叮当声
将单个CLI模型(gemini、codex)作为子流程进行查询。该模型通过其本机CLI访问文件系统——它可以直接读取您的代码。当你需要一个可以看到整个项目的模型时,而不仅仅是你传递的文件,这很有用。
列表模型
列出所有可用的模型及其元数据:提供者、后端、速度层、精度层、优势和劣势。之前叫这个 review 看看有什么可用的。
记住
将学习保存到持久记忆中。三类:
- 模式 --在评论中反复出现的发现(例如,“中止后的JoinError会悄无声息地引发恐慌”)
- 战术 --有效的快速策略(例如,“Kimi需要一个安全镜头来发现真正的漏洞”)
- 推荐 --模型推荐(例如,“deepseek-v3.1是Rust评论中最快的”)
重复模式会自动与证据计数合并。达到5次出现的模式将获得确认状态。作用域为分支或代码库,从git上下文中自动检测。
记忆
读取持久内存。返回模型性能统计数据、重复模式、经过验证的即时策略或具有最近加权置信度的模型推荐。在评论之前调用此功能,以告知型号选择和镜头分配。
冲洗
PR合并后清理分支范围的内存。将高证据模式转换为代码库范围,存档其余内容,并修剪超过30天的模型事件。
模型
三个调度后端: 超文本传输协议 (OpenAI兼容), 命令行界面 (子流程,OAuth),以及 异步轮询 (深入研究,发起民意调查)。
| 型号 | 提供商 | 后端 | 速度 | 最适合 |
|---|---|---|---|---|
grok | xAI | HTTP | 快速 | 快速分流,覆盖范围广 |
gemini | 谷歌 | 命令行界面(OAuth) | 中等 | 系统级错误,并发性 |
codex | OpenAI | CLI(OAuth) | 中等 | 最高精度,零误报 |
kimi-k2.5 | 共同 | HTTP | 中等 | 边缘情况,对抗性场景 |
deepseek-v3.1 | 一起 | HTTP | 中等 | 强大的编码器,发现真正的错误 |
deepseek-r1 | DeepSeek | HTTP | 中等 | 深度推理,逻辑分析 |
qwen-3.5 | 一起 | HTTP | 媒体 | 模式匹配,多语言 |
qwen3-coder | 共同 | HTTP | 媒介 | 专为代码审查而构建 |
z-ai/glm-5 | OpenRouter | HTTP | 媒体 | 架构框架 |
mistral-large | Mistral | HTTP | 快速 | 高效、多语言 |
o3-deep-research | OpenAI | 异步轮询 | 分钟 | 深度网络研究 |
o4-mini-deep-research | OpenAI | 异步轮询 | 分钟 | 更快的深度研究 |
deep-research-pro | 谷歌 | 异步民意调查 | 分钟数 | 谷歌推动的深度研究 |
所有型号均可通过TOML进行配置。添加自己的模型、交换提供者或覆盖默认值。
配置
Squall使用三层TOML配置系统。后面的图层会覆盖前面的图层:
- 内置默认值 --13个型号,5个供应商,随二进制文件一起提供
- 用户配置 (
~/.config/squall/config.toml)--个人优先权 - 项目配置 (
.squall/config.toml)--项目特定设置
添加自定义模型
[providers.custom]
base_url = "https://my-api.example.com/v1/chat/completions"
api_key_env = "CUSTOM_API_KEY"
[models.my-model]
provider = "custom"
backend = "http"
description = "My custom model"
speed_tier = "fast"
strengths = ["domain expertise"]查看默认值
当 models 省略了a review call,Squall分派到这些默认值:
[review]
default_models = ["gemini", "codex", "grok"]在用户或项目配置中重写以更改默认集成。
记忆
Squall从每次审查中学习,并利用所学知识做出更好的决定。
三个文件 .squall/memory/:
- 型号.md --每种型号的性能统计数据(延迟、成功率、常见故障)。每次审核后自动更新。Claude在每次评论之前都会阅读这篇文章来挑选模型,Squall的硬门会使用它来自动排除成功率低于70%的模型。
- patterns.md --在证据统计的审查中反复出现的发现。多个模型在多个评论中发现的模式得到了确认。自动修剪最多50个条目。
- 战术.md --经过验证的系统提示和型号+镜头组合。Claude阅读此文是为了为每个模型分配正确的专业知识镜头——例如,“Kimi在Rust代码上以安全为重点的镜头表现最佳。”
学习循环
- 评审前 --克劳德打电话来
memory检查哪些型号性能良好,哪些镜头工作,以及哪些模式不断重复出现。这会推动型号选择和提示分配。 - 审核后 --克劳德打电话来
memorize记录什么有效:哪个模型发现了什么,哪个镜头有效,哪个模型遗漏了明显的东西。 - PR合并后 --呼叫
flush带有分支名称。毕业生高证据模式到代码库范围,其余部分存档。
结果:评论会随着时间的推移而变得更好。持续失败的模型被排除在外。产生良好效果的镜头分配可以重复使用。该系统无需手动调整即可适应。
全局内存
当与 global-memory Squall还维护了一个DuckDB数据库,位于 ~/.local/share/squall/global.duckdb。这跟踪所有项目的模型性能:
- 跨项目情报 --延迟百分位数、成功率和令牌成本汇总在您使用Squall的每个项目中。一个对Python审查快速但对Rust审查缓慢的模型将显示每个项目的不同统计数据。
- 自动记录 --每一个
chat,clink,以及review调用记录模型事件(延迟、令牌、成功/失败、项目上下文)。无需手动操作。 - 全球建议 —
memory与类别recommend返回由所有项目(而不仅仅是当前项目)通知的近因加权模型建议。 - 本地优先 --数据库位于您的计算机上。没有任何东西被发送到任何地方。
禁用:使用构建 --no-default-features.基于文件的内存(.squall/memory/)独立工作,随时可用。
技能
用壁球船 Claude代码技能 --提示模板,教Claude如何编排工具。您可以使用自然语言或斜线命令触发它们:
| 你说 | 技能 | 会发生什么 |
|---|---|---|
| “审查”、“审查此差异”、“代码审查” | squall-unified-review | 自动深度代码审查——Claude对差异进行评分并选择正确的深度 |
| “深入审查”、“彻底审查” | squall-unified-review | 强制深入-全面调查+更多型号+更长超时时间 |
| “群体评审”、“团队评审” | squall-unified-review | 部队SWARM深度——3个独立代理团队(安全、正确性、架构) |
| “快速查看”、“快速检查” | squall-unified-review | 力量快速深度——单一快速模式,即时分诊 |
| “研究\[主题\]” | squall-research | 团队群——多个代理并行调查不同的向量 |
| “深入研究\[问题\]” | squall-deep-research | 通过Codex和Gemini深度研究进行网络来源的研究 |
自动深度审查
Claude会根据更改的内容自动选择正确的审核强度:
| 深度 | 时间 | 型号 | 有什么不同 |
|---|---|---|---|
| 快速 | 小的非关键变化 | 1(grok) | 快速分流,无并行调度 |
| 标准 | 正常PR | 5(3个核心+2个根据记忆统计数据选择) | 每个型号的镜头,Claude代理进行局部调查 |
| 深 | 安全、身份验证、关键基础设施 | 5+模型、深度模式 | Claude首先进行调查,形成假设,然后并行验证模型+代理 |
| 群集 | 大型+安全+内存模式 | 3个代理×每个3个模型 | 3个独立的调查代理(安全、正确性、架构),每个都有本地shell访问+自己的Squall审查调度 |
对于STANDARD和DEEP,Claude在外部模型调度的同时创建了一个后台代理。外部模型只看到提示中的内容——代理可以完全访问您的代码库。它读取更改的文件,跟踪调用者,检查测试覆盖率,运行 git blame,并使用greps查找相关模式。这是静态文本分析无法提供的视角:跨文件交互、测试间隙和git历史上下文。
对于SWARM,Claude通过代理团队培养了3个独立的代理——每个代理都有不同的视角(安全性、正确性、架构)。每个代理都会进行自己的本地调查,并通过3个模型发送自己的Squall评论。团队负责人使用交叉引用矩阵对所有代理进行综合。如果代理团队不可用,SWARM会优雅地降级为DEEP。
克劳德读 memory 在每次审查之前,检查模型成功率、经过验证的战术和重复出现的模式,然后为这个特定的差异选择最佳的组合。你总是可以覆盖:“深度审查”强制deep,“快速审查”强制quick,“群体审查”强制swarm。
技能是markdown文件 .claude/skills/。他们教克劳德如何使用这些工具——他们不会改变服务器。
SWARM审查和研究集群需要Claude Code的实验代理团队具备以下特征:
{
"env": {
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
}
}否则,SWARM自动降级为DEEP。研究群体根本不起作用。
运作原理
Claude Code (orchestrator)
|
+-- review -----> fan out to N models in parallel
| |-- HTTP models get file content injected as context
| |-- CLI models get filesystem access via subprocess
| +-- straggler cutoff returns partial results for slow models
|
+-- memory/memorize/flush --> .squall/memory/ (per-project learning)
| \-> ~/.local/share/squall/global.duckdb (cross-project stats)
|
+-- chat/clink --> single model query
|
+-- listmodels --> model discovery with metadata克劳德是个聪明人。壁球是运输+记忆。Claude决定询问什么,查询哪些模型,以及如何综合结果。Squall处理经过身份验证的分派、文件上下文注入、并行扇出和持久学习——包括每个项目(markdown文件)和跨项目(DuckDB)。
安全
- 路径沙盒 --拒绝绝对路径,
..遍历和符号链接转义 - 无外壳 --CLI调度使用带有离散参数的直接exec,没有shell插值
- 进程组终止 --超时会通过以下方式杀死整个进程树
kill(-pgid)不仅仅是领导者 - 五层超时 --每个模型(可配置)、离散器截止、MCP截止日期、HTTP客户端超时、进程组终止
- 封顶阅读 --HTTP响应:2MB。CLI输出:上限。文件上下文:通过元数据预先检查
- 并发限制 --信号量:8个HTTP、4个CLI、4个异步轮询。防止并行扇出时资源耗尽
- 无级联错误 --MCP结果从未设置
is_error: true,防止Claude Code兄弟工具故障 - 错误清理 --面向用户的消息永远不会泄露内部URL或凭据
- 输入净化 --所有用户输入(内容、标签、元数据、范围)都针对内存文件中的换行注入进行了清理
贡献
设置
cargo build
cargo test
cargo clippy --all-targets -- -D warnings所有测试必须通过。零剪贴警告。回形针 all 林惇被拒绝了。
预承诺
在推送之前,请在本地运行完整的检查套件:
./scripts/pre-commit.sh这运行: rustfmt --check、clippy(默认+无默认功能)、测试(默认+没有默认功能)。在CI中,每次推送和PR都会运行相同的检查。
添加模型
为内置默认值 --添加a [models.name] 进入 BUILTIN_DEFAULTS 在 src/config.rsHTTP模型需要一个提供程序 base_url 和 api_key_env.CLI模型需要一个解析器 src/dispatch/cli.rs.
个人使用 --添加到 ~/.config/squall/config.toml相同的TOML格式,无需更改代码。
拉取请求
- 每个PR一个功能
- 新行为测试
./scripts/pre-commit.sh提交前清洁
