Skip to main content
Glama

Wingman

Wingman 是一个面向编码 Agent 的辅助模型 MCP server。它把大文件、长文本、命令输出和代码 diff 压缩成结构化、可回查的上下文,帮助主 Agent 更快定位重点。

Wingman 不负责最终判断。所有输出均为辅助性结果,调用方在编辑代码、执行命令或作出架构与安全决策前,必须回查原文和源码。

核心定位

主 Agent 负责:理解完整上下文、作出决策、实施与验证
Wingman 负责:压缩输入、提取证据、提出风险假设、暴露不确定性

Wingman 的价值不是替代主模型,而是用独立的辅助模型减少上下文占用,并提供第二视角。

模型优先

Wingman 采用模型优先架构:

模型负责语义理解、归纳、风险判断和压缩
本地代码负责安全、确定性结构、调用预算、证据校验和明确降级

新增语言、测试框架或构建工具通常不应要求新增专用 parser。只有格式稳定、场景高频且能够证明准确率、成本或可靠性收益时,才保留确定性 adapter。

完整决策见 ADR-0001:模型优先架构

Related MCP server: codex-claude-bridge

工具定位

工具

核心意图

适合输入

不承担的职责

aux_summarize_file

建立单个大文件的结构与职责认知

源码、Markdown、测试文件、Swift/多语言

权威符号索引、依赖分析、重构决策;新语言由模型路径承担语义,不新增语言正则

aux_compress_text

压缩通用非结构化文本

长文档、普通日志、错误说明

精确诊断、命令失败统计

aux_compress_command_output

从命令输出提取失败点和 evidence

test/build/lint/compiler/stack trace 等任意命令输出

自动修复、权威根因判断

aux_review_diff

对小型 unified diff 提出有证据的风险假设

小 diff、提交前快速初筛

最终 code review、安全审计、合并决策

aux_review_diff_by_file

显式按文件/hunk 审查大型 diff

多文件大 diff、PR diff

跨仓库影响分析、完整源码语义

aux_report_tool_feedback

收集调用方对工具输出质量的反馈

质量问题报告、字段矛盾、hallucination 报告

自动修复、替代人工校验

aux_tool_stats

查询各工具累计调用次数和 token 消耗

用量观测、成本估算

账单审计、跨进程持久化

工具边界

compress_textcompress_command_output

  • 输入是命令的 stdout/stderr,并且关心失败点、文件、行号、错误码:使用 aux_compress_command_output

  • 输入是普通长文本,只需要摘要和关键事实:使用 aux_compress_text

review_diffreview_diff_by_file

两个工具表达的是同一个用户意图,区别主要在当前的大输入执行策略:

  • 小 diff:使用 aux_review_diff,单次模型调用更直接。

  • 大型多文件 diff:使用 aux_review_diff_by_file,能够记录文件/hunk 的分析与省略状态。

长期方向是将按文件分批变成 aux_review_diff 的内部策略,减少调用方选择成本;当前保留两个入口以兼容现有行为。

选择指南

你的输入

推荐工具

不熟悉的大源码文件

aux_summarize_file

长文档或非命令型日志

aux_compress_text

npm testtsc、ESLint、构建或运行时输出

aux_compress_command_output

小型 diff

aux_review_diff

大型多文件 diff

aux_review_diff_by_file

不建议使用 Wingman 的场景:

  • 小文件或短文本,直接阅读更准确;

  • 精确符号依赖与 blast-radius 分析,应使用代码图谱或语言工具;

  • 最终 code review、架构决策或安全审计;

  • 需要确定性结论但无法回查原始证据的任务。

执行模型

MCP request
  → 输入 schema 校验
  → 安全清理与确定性结构处理
  → 构造模型 payload
  → 小输入单次调用;超预算后才分批
  → 模型返回结构化 JSON
  → schema / evidence 校验
  → 无损聚合与状态计算
  → 非权威结果

模型不可用或调用失败时,工具会进入 heuristic fallback。fallback 返回低置信度结构 signals(heuristic_signals),analysis_statuspartial(有 heuristic 结果)或 incomplete(无结果)。调用方应检查 _meta.fallback_usedanalysis_status 判断结果可靠性。

aux_compress_command_output 会区分 validpartial_validempty、JSON/schema 失败和 transport failure。非零退出且模型响应不可用时,工具最多进行一次受限修复调用;已有稳定 adapter 的格式可进入 deterministic coverage guard,并明确标记 fallback 和分析状态。

共享模型执行、预算、evidence 和状态能力位于 src/model-runtime/。各工具仍处于渐进迁移阶段,具体完成度见全工具模型优先评审与重构计划

接入方式

Wingman 提供两种接入方式,按需选择:

CLI 模式(推荐)

按需运行,用完即退,零常驻 token 占用。

# 直接分析文件
wingman summarize-file --path src/index.ts

# 通过 stdin pipe 传入数据
cat build-output.log | wingman compress-command-output --focus "errors only"

# 审查 diff
git diff | wingman review-diff --focus security

# 查看帮助
wingman --help

MCP 模式(向后兼容)

通过 Claude Code 的 MCP server 接入,工具定义常驻上下文。

{
  "mcpServers": {
    "wingman": {
      "command": "npx",
      "args": ["-y", "@jafish/wingman-mcp", "--mcp"]
    }
  }
}

Claude Code Skill

Wingman 提供 Claude Code skill,可通过 /wingman 调用。安装后包含各工具的使用时机、命令示例和输出解读指南。

# 安装到当前项目(推荐)
wingman install-skill

# 或安装到全局(所有 Claude Code 会话可用)
wingman install-skill --global

可靠性与安全边界

  • 五个分析工具均为只读 MCP 工具;aux_report_tool_feedback 写入本地 JSONL 日志(非破坏性),是唯一可写的工具。

  • 输出中的 is_authoritative 固定为 false

  • openWorldHint 表示输出可能不完整。

  • 模型结论必须尽量携带可回查 evidence;无法验证的结论应降级。

  • 模型未运行、部分失败和完整成功使用 analysis_statuscomplete | partial | incomplete)区分;所有工具已统一使用 modelPathStatus() / fallbackStatus() 计算。

  • aux_summarize_file 的文件访问限制在 AUX_WORKSPACE_ROOT 内,并拒绝绝对路径与路径穿越。

  • Chat client 强制执行 HTTPS(可显式允许本地 loopback HTTP)、SSRF 防护、超时与重试;配置 AUX_MODEL_ALLOWED_HOSTS 后还会执行 host allowlist。

  • Prompt 使用内容分隔、focus 数据隔离、无状态调用、JSON-only 和 schema 校验降低注入风险。

  • 日志写入 stderr 和可选文件,不占用 MCP stdio 的 stdout。

质量反馈

Wingman 提供 aux_report_tool_feedback 工具,供调用方在发现输出质量问题时主动报告。报告内容写入结构化日志文件,支持后续聚合分析。

何时主动反馈:

  • 输出字段自相矛盾(如 first_failure 指向文件 A,但 findings 中对应分析指向文件 B)

  • finding 缺少可回查 evidence,无法验证其正确性

  • 模型产生 hallucination(结论与原文明显不符)

  • fallback 结果过度确定(如将 heuristic signals 表述为确信判断)

  • schema 字段语义误导(如实为 partial 的分析被误标为 complete)

  • summary 低信号,未能有效压缩关键信息

反馈工具用法:

调用 aux_report_tool_feedback,传入 tool_nametrace_idissue_categoryseveritysummaryconfidence,可选 evidenceexpected_behavioractual_behavior,以及可复现性字段 repro_input_refassertion_hintproject_contextoutput_meta(仅 white-listed 字段)。工具返回 recordedfeedback_idlog_file

**主动引导(_meta 反馈提示):**五个分析工具在输出 _meta 中包含 feedback_recommendedfeedback_reason 字段。当触发 fallback、输入被截断、结果为空或证据被拒绝时,feedback_recommended 设为 truefeedback_reason 取值为 fallback_used | input_truncated | partial_analysis | low_confidence | empty_result | evidence_rejected。调用模型无须主动检测这些状况——检查 _meta 即可判断是否应报告反馈。

**工具描述交叉引用:**每个分析工具的 MCP description 末尾均内嵌了提示:当输出 analysis_statuspartial/incompletefallback_usedtrue、或 confidencelow 时,应通过 aux_report_tool_feedback 报告质量问题。这使反馈闭环成为工具契约的一部分,调用模型在每次工具使用中都能看到这一引导。

反馈日志:

  • 默认写入用户目录下的 ~/.wingman/feedback.jsonl(JSON Lines 格式,每行一个 JSON 对象),所有消费项目共享同一个反馈入口

  • 通过 AUX_FEEDBACK_LOG_FILE 环境变量自定义路径,设为 off 则禁用

  • 反馈不包含完整源码、完整 diff 或敏感凭据。超长字段和疑似 token 会在写入前被脱敏

  • 反馈写入失败不影响原 MCP 工具调用

聚合分析:

使用 npx tsx scripts/summarize-feedback.ts 读取反馈 JSONL,输出按工具和类别统计的 Markdown 汇总报告至 ~/.wingman/feedback-reports/。可通过 --output 参数自定义输出目录。

工具调用统计

Wingman 提供 aux_tool_stats 工具,查询各工具的累计调用次数和 token 消耗(持久化到本地文件,server 重启后保留)。

统计指标: 按 MCP tool 名称聚合 callsinput_tokensoutput_tokenstotal_tokens

持久化: 统计数据原子写入 ~/.wingman/tool-stats.json(可通过 AUX_TOOL_STATS_FILE 自定义路径),server 重启后保留。文件损坏时自动从空统计恢复。

重要限制: 统计数据仅供观测,不得作为账单或审计依据。无模型调用(fallback)的工具 token 计数为 0。

默认落盘文件

Wingman 产生的默认本地文件统一放在 ~/.wingman/ 目录下:

文件

默认路径

环境变量/参数覆盖

反馈 JSONL

~/.wingman/feedback.jsonl

AUX_FEEDBACK_LOG_FILE

工具统计 JSON

~/.wingman/tool-stats.json

AUX_TOOL_STATS_FILE

运行日志

~/.wingman/wingman.log

AUX_LOG_FILE

反馈汇总报告

~/.wingman/feedback-reports/

--output (CLI)

所有环境变量覆盖均保留原语义;设为 off 可禁用对应文件的写入。

安装

推荐:npm 全局安装

npm install -g @jafish/wingman-mcp

# 注册并配置环境变量
claude mcp add -s user wingman \
  -e AUX_MODEL_API_KEY=sk-xxx \
  -e AUX_MODEL_BASE_URL=https://api.deepseek.com/v1 \
  -e AUX_MODEL_NAME=deepseek-v4-flash \
  -e AUX_MODEL_PROVIDER=remote \
  -e AUX_MODEL_ALLOWED_HOSTS=api.deepseek.com \
  -- wingman-mcp

本地 OpenAI-compatible 模型也可以直接注册,例如本地 Qwen 服务监听 8080

claude mcp add -s user wingman \
  -e AUX_MODEL_API_KEY=local \
  -e AUX_MODEL_BASE_URL=http://127.0.0.1:8080/v1 \
  -e AUX_MODEL_NAME=/Users/jafish/Documents/models/Qwen3.6-35B-A3B-4bit \
  -e AUX_MODEL_PROVIDER=local \
  -e AUX_MODEL_TIMEOUT_MS=120000 \
  -e AUX_MODEL_ALLOWED_HOSTS=127.0.0.1,localhost \
  -e AUX_ALLOW_INSECURE_LOCAL_HTTP=true \
  -e AUX_MODEL_DISABLE_THINKING=true \
  -- wingman-mcp

或手动编辑配置文件(项目级为项目根目录 .mcp.json,用户级为 ~/.claude.json):

{
  "mcpServers": {
    "wingman": {
      "command": "wingman-mcp",
      "env": {
        "AUX_MODEL_API_KEY": "sk-xxx",
        "AUX_MODEL_BASE_URL": "https://api.deepseek.com/v1",
        "AUX_MODEL_NAME": "deepseek-v4-flash",
        "AUX_MODEL_ALLOWED_HOSTS": "api.deepseek.com"
      }
    }
  }
}

注意npx @jafish/wingman-mcp 在部分环境下存在兼容性问题(sh: wingman-mcp: command not found),推荐使用 npm install -g 全局安装。AUX_WORKSPACE_ROOT 默认为当前工作目录。

本地 build(开发 / 自定义模型配置)

cd /path/to/Wingman
npm install
npm run build
claude mcp add -s project wingman -- node "$(pwd)/dist/index.js"

配置

Wingman 支持云端模型和本地模型两种接入方式。两者都需要提供 OpenAI-compatible /v1/chat/completions 接口;未配置 API key 时会进入 heuristic fallback。

配置默认只读取 MCP 注册时传入的环境变量或 shell 环境变量,不会自动读取当前项目的 .env。如需使用 env 文件,显式设置 AUX_ENV_FILE=/absolute/path/to/.env

云端模型

环境变量示例:

AUX_MODEL_API_KEY=your-api-key
AUX_MODEL_BASE_URL=https://api.deepseek.com/v1
AUX_MODEL_NAME=deepseek-v4-flash
AUX_MODEL_PROVIDER=remote
AUX_MODEL_TIMEOUT_MS=30000
AUX_MODEL_ALLOWED_HOSTS=api.deepseek.com
AUX_MODEL_DISABLE_THINKING=false
AUX_LOG_FILE=~/.wingman/wingman.log

环境变量:

变量

必填

默认值

说明

AUX_MODEL_API_KEY

是*

模型 API key

AUX_MODEL_BASE_URL

https://api.deepseek.com/v1

OpenAI-compatible API 地址

AUX_MODEL_NAME

deepseek-v4-flash

模型名称

AUX_MODEL_PROVIDER

remote

模型来源标签

AUX_MODEL_TIMEOUT_MS

30000

请求超时,单位毫秒

AUX_MODEL_ALLOWED_HOSTS

允许的 API host,逗号分隔

AUX_MODEL_DISABLE_THINKING

false

为 Qwen 等模型附加 chat_template_kwargs.enable_thinking=false

AUX_ENV_FILE

显式加载的 env 文件路径;未设置时不会读取 .env

AUX_WORKSPACE_ROOT

当前进程目录

文件读取根目录

AUX_ALLOW_INSECURE_LOCAL_HTTP

false

仅允许 loopback 的本地 HTTP

AUX_LOG_LEVEL

info

debug/info/warn/error

AUX_LOG_FILE

~/.wingman/wingman.log

设置为 off 禁用文件日志

AUX_FEEDBACK_LOG_FILE

~/.wingman/feedback.jsonl

反馈日志路径,设置为 off 禁用

* 未配置 API key 时进入 heuristic fallback。该模式可用于降级和结构信号提取,但不等同于完整模型分析。

本地模型

本地模型需要显式允许 loopback HTTP。Qwen thinking 模型通常还需要关闭 thinking,确保服务返回标准 choices[0].message.content

例如 Qwen 服务监听 8080

AUX_MODEL_API_KEY=local
AUX_MODEL_BASE_URL=http://127.0.0.1:8080/v1
AUX_MODEL_NAME=/Users/jafish/Documents/models/Qwen3.6-35B-A3B-4bit
AUX_MODEL_PROVIDER=local
AUX_MODEL_TIMEOUT_MS=120000
AUX_MODEL_ALLOWED_HOSTS=127.0.0.1,localhost
AUX_ALLOW_INSECURE_LOCAL_HTTP=true
AUX_MODEL_DISABLE_THINKING=true

验证

claude mcp list

AUX_WORKSPACE_ROOT 默认取启动 Wingman 进程时的当前目录。全局注册时,应确认宿主是否以目标项目目录启动 MCP;需要固定范围时请显式设置该变量。

开发

npm install
npm run build
npm test
npm run smoke
npm run dev

测试包括(共 314 个):

  • workspace 与 schema 安全边界;

  • command output diagnostic、overlay、调用预算、handler 级恢复和真实 fixture;

  • diff chunking 与文件级聚合;

  • 无模型配置下的 smoke fallback;

  • SwiftUI/DSL 误识别红灯测试(summarize_file model-first 迁移);

  • prompt 注入防护、JSON 提取与响应后处理;

  • chat-client SSRF/CIDR/IPv4/IPv6/重试逻辑;

  • 五个工具的模型路径集成测试(需 API key);

  • 行覆盖率 87.8%。

Round 4 真实模型回放连续 3 次均保留 14/14 findings,每次 1 次模型调用且未使用 fallback。脱敏结果见回放证据

项目结构

src/
├── index.ts                 MCP server 与工具注册
├── config.ts                环境变量和 fallback 配置
├── chat-client.ts           OpenAI-compatible client、安全与重试
├── workspace.ts             文件访问边界
├── schema.ts                Zod 输入/输出 schema
├── prompts.ts               无状态 prompt 与响应提取
├── logger.ts                trace 日志
├── model-runtime/           共享模型调用、预算、evidence、状态
├── decoding/                模型响应分层解码与逐 finding 校验
├── diagnostics/             少量确定性 diagnostic adapter
├── chunking/                diff/command-output 结构分块与聚合
├── fallback/                降级结构与 heuristic signals
└── tools/                   六个 MCP handler

scripts/
├── replay-round4.ts         脱敏回放聚合与分析
└── summarize-feedback.ts    反馈日志聚合分析脚本

test/
├── fixtures/                匿名化真实输入与 expectations
├── helpers/                 fixture runner
└── *.test.ts                单元、契约、预算和 smoke tests

当前架构评审

定位正确的部分

  • “辅助模型压缩上下文、主 Agent 最终决策”的总定位正确。

  • 文件摘要、通用文本压缩、命令诊断和 diff review 是四种不同用户意图。

  • 安全边界、schema、真实 fixture 和非权威标记符合辅助工具定位。

  • model-runtime 已开始统一模型调用、预算、evidence 和状态。

需要继续收敛的部分

  • review_diff_by_file 长期应成为 review_diff 的内部大输入策略。

  • review_diffcompress_text fallback 中仍有较多关键词和风险规则,应逐步降级为 validators/signals。

  • 各工具的长输入策略和执行元数据尚未完全统一。

  • src/index.ts 的 MCP JSON schema 与 src/schema.ts 手工重复,存在字段漂移风险。

  • compress_command_output 外的其他工具真实模型成功、部分失败和大输入回归仍需补齐。

文档

文档

内容

计划地图

计划类型、依赖、状态和推荐实施顺序

施工计划模板

不变量、Step 0 红灯测试、migration 和完成定义

ADR-0001

模型优先架构与 adapter 准入原则

全工具模型优先评审

五个工具的定位评审和迁移计划

计划质量评审

7 份设计文档的强项/弱项分析与改进建议

Command Output 模型优先计划

任意命令输出、evidence 和通用分块

输出 Schema 迁移

analysis status、heuristic signals 和 failure 字段迁移

Summarize File 模型优先计划

已完成 — DSL 误识别修复、智能截断、heuristic_signals、Swift/多语言支持

模型响应契约恢复

已完成 — Round 4 分层校验、null 规范化、非零退出恢复

Round 4 回放证据

3 次真实模型回放的脱敏状态、计数和门禁结果

真实场景验证方案

fixtures、契约、模型评测与 Shadow 验证

Phase 2 计划

分块框架与新增工具的原始设计

兼容性

  • Node.js 18+

  • OpenAI-compatible Chat API

  • macOS

License

MIT

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/a526800921/Wingman'

If you have feedback or need assistance with the MCP directory API, please join our Discord server