Repo 维护很无聊,所以我把它变成了一个 RPG,使用 GitHub Copilot CLI。
Source: Dev.to
这是对GitHub Copilot CLI Challenge的提交
我构建的
git‑quest (@maplekuo/git-quest) 是一个 MCP(Model Context Protocol)服务器,直接集成到 GitHub Copilot CLI 工具系统中。
关键特性
- 🎮 5 MCP 工具 –
scan_quests,accept_quest,verify_quest,player_stats,quest_log - 📜 3 个扫描器 –
missing‑docs(★☆☆),todo‑hunter(★★☆),missing‑tests(★★★) - 🐉 Boss 任务 – 需要全面清理的多 issue 文件
- ⚔️ 6 个等级 – Novice → Apprentice → Journeyman → Expert → Master → Legend
- 🏅 6 个徽章 – First Blood, Scribe, Exterminator, Guardian, Dragon Slayer, Perfectionist
- 💾 持久进度 通过仓库中的
.git‑quest.json实现 - 🔧 单命令设置 –
npx @maplekuo/git-quest setup
技术栈: TypeScript, Node.js, @modelcontextprotocol/sdk(stdio 传输)。除 MCP SDK 外零外部依赖。
演示
以下是对一个刻意混乱的演示仓库(缺少 JSDoc、散落的 TODO、临时变通方案以及未测试的工具函数)进行 git‑quest 操作的完整演练。
步骤 1:扫描任务
一条命令。Copilot CLI 连接到 git‑quest MCP 服务器并扫描仓库。发现 16 条任务——每条都有名称、难度评级、类型和位置。任务板看起来像地下城地图:
- “未记录的 AuthManager”(★☆☆)
- “被诅咒的变通方案”(★★☆)
- “净化 utils.ts”(★★★★ Boss)
步骤 2:接受任务
accept_quest 1 – 你已锁定任务。目标:为 src/auth.ts 中的 AuthManager 类添加 JSDoc 文档。难度:★☆☆。奖励:10 XP。
步骤 3:让 Copilot CLI 完成任务
我说“完成此任务”,Copilot CLI 接管了。它:
- 读取源文件。
- 分析类结构。
- 为每个方法编写完整的 JSDoc。
- 编辑文件。
- 调用
verify_quest检查结果。
✅ 任务完成。+10 XP – 无需复制粘贴,无需切换标签页。
步骤 4:更难的任务 — 修复 HACK
任务 7:“被诅咒的变通方案”——在第 32 行的认证模块中埋了一个 HACK 注释。这不仅仅是添加文档;它需要理解 为什么 会出现该变通方案,并用合适的实现替代它。
步骤 5:Copilot 的深度推理 🔥
在被要求修复 HACK 时,Copilot CLI:
- 对会话管理架构进行推理。
- 考虑了多种方案(基于 HMAC 的令牌、会话映射、令牌过期策略)。
- 在写下任何代码之前就做出了架构决策。
它的表现更像是一名资深工程师,而不是单纯的代码补全工具。
步骤 6:升级! 🎉
完成 Boss 任务后,我获得 15 XP,并从 Novice 升级到 Apprentice。进度保存在 .git‑quest.json 中,下次运行 scan_quests 时会看到新的挑战在等待。
亲自尝试
# 安装并设置
npx @maplekuo/git-quest setup
# 扫描当前仓库的任务
npx @maplekuo/git-quest scan_quests
# 接受任务(将 <id> 替换为任务编号)
npx @maplekuo/git-quest accept_quest <id>
# 让 Copilot CLI 完成任务
npx @maplekuo/git-quest complete_quest
# 验证进度
npx @maplekuo/git-quest player_stats
祝你冒险愉快! 🚀
任务进度
HACK 任务已完成。src/auth.ts 新增了 46 行正确的会话管理代码,取代了原来的 2 行 hack 代码。+15 XP。升级为 Apprentice(学徒)。 多巴胺的刺激是真实的。
第 7 步:玩家属性
- 等级: Apprentice(学徒)
- XP: 25
- 已完成任务数: 2
- 获得徽章: First Blood 🩸
属性卡让人想继续前进——还有 14 个任务未完成,需再爬升 5 个等级。
第 8 步:Boss 任务 🐉
Boss 任务: “🐉 净化 utils.ts” (★★★★) — 一个存在多项问题的文件,需要全部修复:
- 缺少 JSDoc
- 解析逻辑损坏
- 分散的 TODO
- 没有测试
Copilot CLI 计划了一个多步骤攻击:
- 添加文档
- 修复解析器
- 删除 TODO
- 创建测试文件
它读取 utils.ts,编辑了它(+48 行,‑9 行),从零创建了 utils.test.ts(+30 行),并调用 verify_quest。Boss 并不轻易倒下——验证阶段捕获了剩余问题,Copilot 诚实地反馈:
“告诉我需要针对的具体检查项,或者我可以重新扫描并迭代。”
这就是验证系统的魅力。它不是一个橡皮图章;Boss 战真的需要多轮。
Source: …
我的 GitHub Copilot CLI 使用体验
构建 git‑quest:一次性故事
我几乎在一次 Copilot CLI 会话中完成了 git‑quest 的构建。只写了一个完整的提示——本质上是一个覆盖全部项目结构、5 个 MCP 工具、3 个扫描器、游戏系统、setup CLI 和示例仓库的 PRD——Copilot CLI 一次性生成了全部代码:
- 10 个 TypeScript 源文件
- 零 TypeScript 错误的干净构建
- 包含所有工具处理器的 363 行
index.ts - 已连通的 setup CLI、示例仓库以及
package.json
它并非 完全 免手动。过程中我遇到了一些小障碍:
- MCP 配置路径 – Copilot CLI 在
~/.config/github-copilot/mcp.json生成了配置,但正确路径应为~/.copilot/mcp-config.json。这点文档不够明确,我通过反复尝试才发现。 - 构建输出不匹配 – 配置指向
dist/index.js,而 TypeScript 实际编译到dist/src/index.js。一个小路径错误,却导致 MCP 服务器静默加载失败。 - “为什么不工作?”阶段 – 我第一次扫描时失败,因为 Copilot CLI 读取了 README,而不是调用 MCP 工具。原来 MCP 服务器根本没有连接。调试 MCP 服务器加载仍然很粗糙——失败时没有明确的错误信息。
- 验证边缘情况 – 最初的 JSDoc 验证搜索窗口太窄(函数前后 ±5 行)。出现了几次误报后,我把搜索窗口扩大到 ±10/±15 行,问题得以解决。
核心开发过程是真实的:一次提示、一次会话、一个可运行的 MCP 服务器。迭代全部体现在细节上——配置路径、验证逻辑、npm 发布的怪癖。
让我惊讶的地方
最大的惊喜是看到 Copilot CLI 自主 使用 git‑quest 的工具。我原本以为需要手动编排每一步(scan → accept → edit → verify),结果 Copilot CLI 自己理清了工作流。它调用 accept_quest,读取相应文件,进行编辑,调用 verify_quest,当验证失败时再次编辑并重试——全程无需我显式指示。
这正是 MCP 协议的体现。通过公开结构化工具并提供清晰描述,Copilot CLI 能准确判断何时调用它们以及预期的工作流是什么。git‑quest 不仅是一个 使用 Copilot CLI 构建的项目——它还是一个让 Copilot CLI 更好完成任务 的项目。
Copilot CLI 的双重角色
该项目具有一种我觉得很有意思的元质量:
| 角色 | 描述 |
|---|---|
| Copilot CLI 作为开发者工具 | 用来构建 git‑quest 本身。 |
| Copilot CLI 作为任务求解器 | 用户使用它来完成 git‑quest 生成的任务。 |
| Copilot CLI 作为 MCP 客户端 | 调用 git‑quest 的工具进行扫描、接受和验证。 |
它始终是 Copilot CLI 在发挥作用。我用来构建项目的工具,就是运行项目的同一个工具。
Try It Yourself
# Install and set up (auto‑configures MCP for Copilot CLI)
npx @maplekuo/git-quest setup
# Start Copilot CLI
copilot
# Scan your repo for quests
# > use the git-quest scan_quests tool to scan this repo
# Accept and complete a quest
# > accept quest 1
# > complete this quest
# Check your progress
# > show my player stats
适用于任何仓库。代码库越混乱,找到的任务就越多。 🎮
仓库维护很枯燥,但升级打怪永远不会腻。
⚔️ 去完成任务吧。









