<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Maple！</title>
    <description>The latest articles on Forem by Maple！ (@mapleeeeeeeeeee).</description>
    <link>https://forem.com/mapleeeeeeeeeee</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3740309%2Fd0116d36-4959-4a67-a294-b7fde1cc59e8.jpeg</url>
      <title>Forem: Maple！</title>
      <link>https://forem.com/mapleeeeeeeeeee</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mapleeeeeeeeeee"/>
    <language>en</language>
    <item>
      <title>Repo maintenance is boring. So I turned it into an RPG with GitHub Copilot CLI.</title>
      <dc:creator>Maple！</dc:creator>
      <pubDate>Wed, 11 Feb 2026 16:33:21 +0000</pubDate>
      <link>https://forem.com/mapleeeeeeeeeee/repo-maintenance-is-boring-so-i-turned-it-into-an-rpg-with-github-copilot-cli-3hih</link>
      <guid>https://forem.com/mapleeeeeeeeeee/repo-maintenance-is-boring-so-i-turned-it-into-an-rpg-with-github-copilot-cli-3hih</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;git-quest&lt;/strong&gt; (&lt;code&gt;@maplekuo/git-quest&lt;/code&gt;) is an MCP (Model Context Protocol) server that integrates directly into GitHub Copilot CLI's tool system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎮 &lt;strong&gt;5 MCP tools&lt;/strong&gt;: &lt;code&gt;scan_quests&lt;/code&gt;, &lt;code&gt;accept_quest&lt;/code&gt;, &lt;code&gt;verify_quest&lt;/code&gt;, &lt;code&gt;player_stats&lt;/code&gt;, &lt;code&gt;quest_log&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;📜 &lt;strong&gt;3 scanners&lt;/strong&gt;: missing-docs (★☆☆), todo-hunter (★★☆), missing-tests (★★★)&lt;/li&gt;
&lt;li&gt;🐉 &lt;strong&gt;Boss Quests&lt;/strong&gt;: multi-issue files that require comprehensive cleanup&lt;/li&gt;
&lt;li&gt;⚔️ &lt;strong&gt;6 levels&lt;/strong&gt;: Novice → Apprentice → Journeyman → Expert → Master → Legend&lt;/li&gt;
&lt;li&gt;🏅 &lt;strong&gt;6 badges&lt;/strong&gt;: First Blood, Scribe, Exterminator, Guardian, Dragon Slayer, Perfectionist&lt;/li&gt;
&lt;li&gt;💾 &lt;strong&gt;Persistent progress&lt;/strong&gt; via &lt;code&gt;.git-quest.json&lt;/code&gt; in your repo&lt;/li&gt;
&lt;li&gt;🔧 &lt;strong&gt;One-command setup&lt;/strong&gt;: &lt;code&gt;npx @maplekuo/git-quest setup&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tech Stack:&lt;/strong&gt; TypeScript, Node.js, @modelcontextprotocol/sdk (stdio transport). Zero external dependencies beyond the MCP SDK.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/cC6gfI4Spac"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;Here's what it looks like in action. I pointed git-quest at a demo repository with intentionally messy code — missing JSDoc, scattered TODOs, hack workarounds, and untested utilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Scan for Quests
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqa1g6yi73j9l9k59fbie.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqa1g6yi73j9l9k59fbie.png" alt="MCP connection and quest board scan showing 16 quests discovered"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One command. Copilot CLI connects to the git-quest MCP server and scans the repo. &lt;strong&gt;16 quests found&lt;/strong&gt; — each with a name, difficulty rating, type, and location. The quest board reads like a dungeon map: "The Undocumented AuthManager" (★☆☆), "The Cursed Workaround" (★★☆), "Purify utils.ts" (★★★★ Boss).&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Accept a Quest
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dy69v1sqb6a4io6ou14.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dy69v1sqb6a4io6ou14.png" alt="Accepting The Undocumented AuthManager quest"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Accept quest 1" — and you're locked in. The quest objective is clear: add JSDoc documentation to the &lt;code&gt;AuthManager&lt;/code&gt; class in &lt;code&gt;src/auth.ts&lt;/code&gt;. Difficulty: ★☆☆. Reward: 10 XP. Simple enough for a first quest.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Let Copilot CLI Solve It
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4sukuozq5ioqgc70e1uc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4sukuozq5ioqgc70e1uc.png" alt="Copilot CLI thinking and completing the quest with +10 XP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzkb616vs6i0yvbygm3ap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzkb616vs6i0yvbygm3ap.png" alt="Copilot CLI verifying quest completion with +10 XP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's where it gets interesting. I just said "complete this quest" — and Copilot CLI took over. It read the source file, analyzed the class structure, wrote proper JSDoc for every method, edited the file, and called &lt;code&gt;verify_quest&lt;/code&gt; to check its own work. &lt;strong&gt;✅ QUEST COMPLETE. +10 XP.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No copy-pasting. No tab-switching. The AI read the quest, understood the objective, fixed the code, and verified the result — all in one agentic loop.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: A Harder Quest — Fixing a HACK
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fywoamkvobmmgtvaoiyni.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fywoamkvobmmgtvaoiyni.png" alt="Accepting The Cursed Workaround HACK quest"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Time to raise the stakes. Quest 7: "The Cursed Workaround" — a HACK comment buried in the authentication module at line 32. This isn't just adding docs; it requires understanding &lt;em&gt;why&lt;/em&gt; the hack exists and replacing it with a proper implementation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Copilot's Deep Reasoning 🔥
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flssgxi5qv74dsl3k04gl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flssgxi5qv74dsl3k04gl.png" alt="Copilot CLI deep reasoning about session management architecture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This screenshot is my favorite. Watch what Copilot CLI does when asked to fix the HACK:&lt;/p&gt;

&lt;p&gt;It doesn't just delete the comment. It &lt;em&gt;reasons about session management architecture&lt;/em&gt;. It considers multiple approaches — HMAC-based tokens, session maps, token expiry strategies — and then makes an architectural decision before writing a single line of code. This is Copilot CLI acting as a senior engineer, not a code completion tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Level Up! 🎉
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgbwydmcfhy1qv1g36f1w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgbwydmcfhy1qv1g36f1w.png" alt="Quest complete with +15 XP and level up to Apprentice"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The HACK quest is done. &lt;code&gt;src/auth.ts&lt;/code&gt; gains 46 new lines of proper session management code, replacing 2 lines of hack. &lt;strong&gt;+15 XP. Leveled up to Apprentice.&lt;/strong&gt; The dopamine hit is real.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7: Player Stats
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0szdek7u4jxiugwfaznn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0szdek7u4jxiugwfaznn.png" alt="Final player stats showing Level Apprentice, 25 XP, 2 quests, First Blood badge"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two quests down. Level: Apprentice. XP: 25. Quests completed: 2. Badge earned: &lt;strong&gt;First Blood&lt;/strong&gt; 🩸. The stat card makes you want to keep going — there are 14 quests left and 5 more levels to climb.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 8: Boss Quest 🐉
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0n5m7cmfeyk2b8qvqlva.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0n5m7cmfeyk2b8qvqlva.png" alt="Boss Quest Purify utils.ts with multi-step planning"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then there's the Boss Quest. "🐉 Purify utils.ts" (★★★★) — a file with multiple issues that all need fixing: missing JSDoc, broken parsing logic, scattered TODOs, and no tests.&lt;/p&gt;

&lt;p&gt;Copilot CLI plans a multi-step attack: add documentation, fix the parser, remove TODOs, create a test file. It reads &lt;code&gt;utils.ts&lt;/code&gt;, edits it (+48 lines, -9 lines), creates &lt;code&gt;utils.test.ts&lt;/code&gt; from scratch (+30 lines), and calls &lt;code&gt;verify_quest&lt;/code&gt;. The boss doesn't go down easy — verification catches remaining issues, and Copilot reports back honestly: "tell me which specific checks to target, or I can re-scan and iterate."&lt;/p&gt;

&lt;p&gt;That's the beauty of the verification system. It's not a rubber stamp. The boss fight &lt;em&gt;actually requires multiple rounds&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Building git-quest: The One-Shot Story
&lt;/h3&gt;

&lt;p&gt;I built git-quest almost entirely in a single Copilot CLI session. I wrote one comprehensive prompt — essentially a PRD covering the full project structure, all 5 MCP tools, 3 scanners, the game system, setup CLI, and demo repo — and Copilot CLI built it in one pass:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10 TypeScript source files&lt;/li&gt;
&lt;li&gt;Clean build with zero TypeScript errors&lt;/li&gt;
&lt;li&gt;363-line &lt;code&gt;index.ts&lt;/code&gt; with all tool handlers&lt;/li&gt;
&lt;li&gt;Setup CLI, demo repo, and &lt;code&gt;package.json&lt;/code&gt; all wired up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It wasn't &lt;em&gt;completely&lt;/em&gt; hands-free. I hit a few bumps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP config path&lt;/strong&gt;: Copilot CLI's setup generated a config at &lt;code&gt;~/.config/github-copilot/mcp.json&lt;/code&gt;, but the correct path is &lt;code&gt;~/.copilot/mcp-config.json&lt;/code&gt;. This isn't well-documented and took trial-and-error to figure out.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build output mismatch&lt;/strong&gt;: The config pointed to &lt;code&gt;dist/index.js&lt;/code&gt; but TypeScript compiled to &lt;code&gt;dist/src/index.js&lt;/code&gt;. A small path bug, but it meant the MCP server silently failed to load.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The "why isn't it working" phase&lt;/strong&gt;: My first scan attempt failed because Copilot CLI read the README instead of calling the MCP tool. Turns out the MCP server wasn't actually connected. Debugging MCP server loading is still rough — there's no clear error message when it fails.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Verification edge cases&lt;/strong&gt;: The initial JSDoc verification searched too narrow a window (±5 lines from the function). After a few false negatives, I expanded the search window to ±10/±15 lines, which fixed the issue.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;But the core development story is real: one prompt, one session, one functional MCP server. The iteration was all in the details — config paths, verification logic, npm publishing quirks.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Surprised Me
&lt;/h3&gt;

&lt;p&gt;The biggest surprise was watching Copilot CLI use git-quest's tools &lt;em&gt;autonomously&lt;/em&gt;. I expected to manually orchestrate each step (scan → accept → edit → verify). Instead, Copilot CLI figured out the workflow on its own. It called &lt;code&gt;accept_quest&lt;/code&gt;, read the relevant file, made edits, called &lt;code&gt;verify_quest&lt;/code&gt;, and when verification failed, it re-edited and retried — all without me telling it to.&lt;/p&gt;

&lt;p&gt;This is the MCP protocol at work. By exposing structured tools with clear descriptions, Copilot CLI knows exactly when to call them and what the expected workflow is. git-quest isn't just a project built &lt;em&gt;with&lt;/em&gt; Copilot CLI — it's a project that makes Copilot CLI &lt;em&gt;better at its job&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Dual Role of Copilot CLI
&lt;/h3&gt;

&lt;p&gt;There's a meta quality to this project that I find compelling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Copilot CLI as developer tool&lt;/strong&gt;: I used it to build git-quest itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copilot CLI as quest solver&lt;/strong&gt;: Users use it to complete quests that git-quest generates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copilot CLI as MCP client&lt;/strong&gt;: It calls git-quest's tools to scan, accept, and verify.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's Copilot CLI all the way down. The tool I used to build the project is the same tool that runs it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install and set up (auto-configures MCP for Copilot CLI)&lt;/span&gt;
npx @maplekuo/git-quest setup

&lt;span class="c"&gt;# Start Copilot CLI&lt;/span&gt;
copilot

&lt;span class="c"&gt;# Scan your repo for quests&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; use the git-quest scan_quests tool to scan this repo

&lt;span class="c"&gt;# Accept and complete a quest&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; accept quest 1
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;complete &lt;/span&gt;this quest

&lt;span class="c"&gt;# Check your progress&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; show my player stats
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Works with any repo. The messier the codebase, the more quests you'll find. 🎮&lt;/p&gt;

&lt;p&gt;Repo maintenance is boring. But leveling up never gets old.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚔️ Go quest.&lt;/strong&gt; → &lt;a href="https://github.com/Mapleeeeeeeeeee/git-quest" rel="noopener noreferrer"&gt;github.com/Mapleeeeeeeeeee/git-quest&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
  </channel>
</rss>
