GitHub Copilot Chat Modes Explained (with Personality) 🎭

Banner image for GitHub Copilot Chat Modes Explained (with Personality) 🎭

Published: 2025-10-01T14:11:00Z

Tags: #githubcopilot #ai #tutorial #productivity

The third way to shape how GitHub Copilot responds: chat modes. Not in GitHub’s docs, but they’re real, they’re in the awesome-copilot repo, and they work. Here’s how to write your own with personality.

<blockquote> <p>🦄 I’ve been writing these weekly Copilot posts since June and it’s been great… but (of course there has to be a “but”) I feel like I've hit a wall on topics. Maybe I could poke at the new CLI (seems unimpressive so far), maybe I’d wait out the rate limits and finally wrestle with Codex, I might even take a week or two off. Then someone asked a new question and I realized—nope. None of that is happening, at least not yet. </p> <p>I’ve covered pretty much every major Copilot angle except this one: chat modes. I’ve been dropping random asides about them for weeks while studiously avoiding a full post. Well, I guess time’s up. Chat modes are the last trick in the set—the third and final way to shape Copilot without breaking it. At least, <em>I’m gonna try</em> to explain my thought process in a way that makes sense to someone who isn’t already living inside my head.</p> <p>And while we’re here, current me is once again making promises that future me will probably regret—next week I’ll show you how to put your shiny new chat mode to work. Spoiler: you’ll want VS Code (or Insiders) installed before then.</p> </blockquote> <p><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%2Fqzzhmrykwxgzn1ew0nux.png%3Fv%3D2025"><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%2Fqzzhmrykwxgzn1ew0nux.png%3Fv%3D2025" alt="Human-Crafted, AI-Edited badge"></a></p> &lt;hr&gt; <h2> <a href="#what-are-chat-modes"> </a> What are Chat Modes? 🤔 </h2> <p>You can thank my friends at work for asking me this question directly, or I might’ve successfully dodged this post entirely. I don’t think I even answered in the moment—I spun into a whirlwind of deep thought and then sprinted back to whatever I was <em>supposed</em> to be doing after some undetermined amount of time I spent over-thinking Copilot. 😆</p> <p>I’ve thought about writing this up several times, but after a couple of false starts I started actively avoiding it. One—it’s highly specific. Two—it’s the hardest of my Copilot approaches to explain in a way that doesn’t sound made up. Which… is fair, because I did make a lot of it up for my own workflows.</p> <p>Before we dig into my thought process, let’s take inventory of the <a href="https://docs.github.com/en/copilot/concepts/prompting/response-customization">“official” GitHub story</a>.</p> <p><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%2Fe8p7xi0p6urphzqsb7qi.png%3Fv%3D2025"><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%2Fe8p7xi0p6urphzqsb7qi.png%3Fv%3D2025" alt="Screenshot GitHub docs regarding Copilot customization"></a></p> <p>Conveniently, GitHub doesn’t mention <strong>chat modes</strong> at all (at least not anywhere I could find). <em>Why?</em> No clue! They do exist, though, and they’re a visible part of GitHub’s own <a href="https://github.com/github/awesome-copilot">awesome-copilot</a> repo. After some digging, I landed on <a href="https://code.visualstudio.com/docs/copilot/customization/custom-chat-modes">VS Code’s explanation</a>—which at least proves they’re real:</p> <p><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%2F1l3nua5lu12h6g69ufup.png%3Fv%3D2025"><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%2F1l3nua5lu12h6g69ufup.png%3Fv%3D2025" alt="Screenshot VS Code docs regarding Copilot customization"></a></p> &lt;hr&gt; <h2> <a href="#how-i-explain-it-instead"> </a> How I Explain It, Instead 🎭 </h2> <p>There are three unique ways to shape how Copilot behaves, and I’ve already written whole series on the first two:</p> <ul> <li><p><strong>Instructions</strong> — These are your foundation. They ground Copilot in a methodology or approach, almost like a README for AI that explains <strong>how to behave</strong>. If you want to see the full breakdown, check out my <a href="https://dev.to/anchildress1/everything-i-know-about-github-copilot-instructions-from-zero-to-onboarded-for-real-4nb0">Everything I Know About GitHub Copilot Instructions</a> series. </p></li> <li><p><strong>Reusable prompts</strong> — These are your recipes, a full printout of <strong>step-by-step directions</strong> that break a complex task into smaller manageable pieces. They’re the “do these parts in this order to reach a specific goal” instructions I covered in my <a href="https://dev.to/anchildress1/github-copilot-everything-you-wanted-to-know-about-reusable-and-experimental-prompts-part-1-iff">Everything You Wanted to Know About Reusable (and Experimental) Prompts</a> series. </p></li> <li><p><strong>Chat modes</strong> — These are your characters. It’s <strong>the agent’s state of being</strong>, and it can combine both instructions and reusable prompts into a larger directive. Give the same task to two different characters and you’ll get two very different results—both technically correct, but not even remotely the same. </p></li> </ul> <blockquote> <p>🦄 Nobody expects House to solve a problem like Daenerys Targaryen. If you hand them the same problem, you’ll get two wildly different outcomes—both accurate and valid, neither boring.</p> </blockquote> &lt;hr&gt; <h2> <a href="#build-from-scratch"> </a> Build From Scratch 🛠️ </h2> <p>I mostly follow my <strong>PRIOR</strong> model for these, the exact same one I use for all prompts in general. The order doesn’t matter nearly as much as keeping things logical and cutting anything that doesn’t apply.</p> <p>Also, don’t misunderstand. I’m not saying order <em>never</em> matters—because sometimes it absolutely does. What I’m trying to say is worry less about how the steps look on the page and more about the substance you’re feeding into them. As long as it makes sense to you, then it will most likely make sense to Copilot, too.</p> <blockquote> <p>🦄 You can paint like Picasso or carve like Michelangelo—both masterpieces, completely different processes. The point isn’t which steps you followed, it’s whether what you built holds up as art.</p> </blockquote> &lt;hr&gt; <h2> <a href="#frontmatter"> </a> Frontmatter 🔖 </h2> <p>Remember that a chat mode is essentially a character sheet for Copilot to use every time it completes a task with that costume on. The YAML frontmatter helps define exactly what that task looks like and identifies all the tools your agent will be able to access in that mode.<br> </p> &lt;div class="highlight js-code-highlight"&gt; <pre><code>&lt;span class="nn"&gt;---&lt;/span&gt; &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt; &lt;span class="s"&gt;Automates secure, structured, and centralized logging implementation and reviews across your codebase, wielding JSON like a switchblade and enforcing structured readability like a made man.&lt;/span&gt; &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;claude-sonnet-4&lt;/span&gt; &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;search&lt;/span&gt; &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;editFiles&lt;/span&gt; &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;readFiles&lt;/span&gt; &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;runInTerminal&lt;/span&gt; &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;runTests&lt;/span&gt; &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;findTestFiles&lt;/span&gt; &lt;span class="nn"&gt;---&lt;/span&gt; </code></pre> &lt;div class="highlight__panel js-actions-panel"&gt; &lt;div class="highlight__panel-action js-fullscreen-code-action"&gt; &lt;svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-on"&gt;&lt;title&gt;Enter fullscreen mode&lt;/title&gt; &lt;path d="M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z"&gt;&lt;/path&gt; &lt;/svg&gt; &lt;svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-off"&gt;&lt;title&gt;Exit fullscreen mode&lt;/title&gt; &lt;path d="M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z"&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; <blockquote> <p>💡 <strong>ProTip:</strong> If you leave the <code>model</code> definition out of the frontmatter, then the model selected in the user's dropdown will be the default selection. A lot of people will leave these blank intentionally so the user can pick, but other times it's beneficial to limit this to a very specific model instead.</p> </blockquote> &lt;hr&gt; <h2> <a href="#persona"> </a> Persona 🎭 </h2> <p>This is your chance to really have some fun with Copilot. Want a sleek vampire voice or iZombie-style debugging? Go for it! Some people complain that personas waste context space or distract from the goal. My counter: you can define a character in under fifty tokens, you can absolutely make this a logical part of the goal, and honestly—nobody wants a boring Copilot.</p> <blockquote> <p>🦄 Well, I don’t want a boring Copilot! Even my “pragmatist” mode has dry wit baked in—and it’s supposed to be the quiet one.</p> </blockquote> <p>A persona should define everything about a character, including moods, style, and a reason to exist. If you only tell it how to respond then you’ll end up with a simple tone. But if you tell it why it exists and give it a driving force, you’ll see the real usefulness. Tone becomes a quick addition to steer the dialog.</p> <blockquote> <p>🪄 Voila! Suddenly your Copilot isn’t just wearing a costume—it knows why it walked on stage in the first place.<br> </p> </blockquote> &lt;div class="highlight js-code-highlight"&gt; <pre><code>&lt;span class="p"&gt;-&lt;/span&gt; You are &lt;span class="gs"&gt;**The Logfather**&lt;/span&gt; — the quiet but commanding force of logging order. &lt;span class="p"&gt;-&lt;/span&gt; You're confident, unshakeable, and precise. &lt;span class="p"&gt;-&lt;/span&gt; You enforce structure, security, and clarity without touching business logic. &lt;span class="p"&gt;-&lt;/span&gt; Every log has a place, every level a purpose. &lt;span class="p"&gt;-&lt;/span&gt; Your job is to clean up logging across the codebase without rewriting the soul of the app. &lt;span class="p"&gt;-&lt;/span&gt; You like your logs structured, injected, and environment-aware. &lt;span class="p"&gt;-&lt;/span&gt; And if someone tries to sneak in an unstructured debug print? Fuhgeddaboudit. </code></pre> &lt;div class="highlight__panel js-actions-panel"&gt; &lt;div class="highlight__panel-action js-fullscreen-code-action"&gt; &lt;svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-on"&gt;&lt;title&gt;Enter fullscreen mode&lt;/title&gt; &lt;path d="M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z"&gt;&lt;/path&gt; &lt;/svg&gt; &lt;svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-off"&gt;&lt;title&gt;Exit fullscreen mode&lt;/title&gt; &lt;path d="M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z"&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; <blockquote> <p>💡 <strong>ProTip:</strong> Skip all the over-inflated titles (“expert,” “experienced,” “10x,” etc.). They do nothing to change the model’s training—but they absolutely shape the confidence level of every response you get.</p> </blockquote> &lt;hr&gt; <h2> <a href="#requirements"> </a> Requirements 📌 </h2> <p>This is your <strong>definition of done.</strong> How does the actor know when the job is finished? Maybe it’s once a specific output appears; maybe it’s an ongoing mission. Either way, spell it out.</p> <p>For the Logfather, the job is to help with <strong>enterprise-ready structured logs</strong> in any language—and even scaffold centralized logging if your repo hasn’t adopted that practice yet.<br> </p> &lt;div class="highlight js-code-highlight"&gt; <pre><code>Your goals include: &lt;span class="p"&gt; -&lt;/span&gt; Detect and fix poor logging practices (e.g., wrong levels, missing logs, noisy debug prints) &lt;span class="p"&gt;-&lt;/span&gt; Insert or upgrade structured logging using appropriate libraries per language &lt;span class="p"&gt;-&lt;/span&gt; Ensure logging setup is centralized and DI-compliant (if possible) &lt;span class="p"&gt;-&lt;/span&gt; Verify that logging levels are configurable via environment, not static config &lt;span class="p"&gt;-&lt;/span&gt; Provide a clear, concise summary of the changes </code></pre> &lt;div class="highlight__panel js-actions-panel"&gt; &lt;div class="highlight__panel-action js-fullscreen-code-action"&gt; &lt;svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-on"&gt;&lt;title&gt;Enter fullscreen mode&lt;/title&gt; &lt;path d="M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z"&gt;&lt;/path&gt; &lt;/svg&gt; &lt;svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-off"&gt;&lt;title&gt;Exit fullscreen mode&lt;/title&gt; &lt;path d="M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z"&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;hr&gt; <h2> <a href="#impediments"> </a> Impediments ⛔ </h2> <p>This is where you call out what will trip Copilot up or drag results off-course. For the Logfather, that means zero changes to business logic—its one job has nothing to do with rewriting code or tests.</p> <p>Guidance like RFC 2119 (MAY / SHOULD / MUST, and all their bossy friends) is controversial. My advice is to <strong>use it carefully</strong>. Don’t flood your instructions with absolutes unless you’ve thoroughly tested how Copilot reacts. Sometimes they save you; other times they back you into a corner you never meant to be in. Use them when they truly add value, be strategic, and remember that flexibility often delivers better, more consistent results.<br> </p> &lt;div class="highlight js-code-highlight"&gt; <pre><code>&lt;span class="p"&gt;-&lt;/span&gt; NEVER alter or refactor application logic outside of logging concerns &lt;span class="p"&gt;-&lt;/span&gt; AVOID inserting logs globally unless explicitly told to &lt;span class="p"&gt;-&lt;/span&gt; MUST respect the user’s scoped intent (default to most valuable module or path, if unclear) &lt;span class="p"&gt;-&lt;/span&gt; MUST maintain compatibility with existing test suites (update mocks as needed but AVOID logic changes) </code></pre> &lt;div class="highlight__panel js-actions-panel"&gt; &lt;div class="highlight__panel-action js-fullscreen-code-action"&gt; &lt;svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-on"&gt;&lt;title&gt;Enter fullscreen mode&lt;/title&gt; &lt;path d="M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z"&gt;&lt;/path&gt; &lt;/svg&gt; &lt;svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-off"&gt;&lt;title&gt;Exit fullscreen mode&lt;/title&gt; &lt;path d="M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z"&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; <blockquote> <p>🦄 I’m using them here because, in this limited context, it made sense and test results were good. Also know, it once took me three days to realize <code>EXCEPT</code> does not always do what you think it does. If an agent misbehaves, do yourself a favor and stop for a minute. <em>Ask it why.</em> A decent model can explain its reasoning and then jump right back into the work once the instructions align with the goal again.</p> </blockquote> &lt;hr&gt; <h2> <a href="#outcomes"> </a> Outcomes 🎯 </h2> <p>This is the part I see people skip the most—it might as well be the Terms &amp; Conditions screen you scroll past when installing a new app. But half of the chat modes’ magic lives right here. If you want structure in your results, this is the place to define it.</p> <p>Outcomes are the <strong>acceptance criteria and style guardrails</strong> for your mode—think pre-flight checklist, not a grading rubric.<br> </p> &lt;div class="highlight js-code-highlight"&gt; <pre><code>Each response should: &lt;span class="p"&gt; -&lt;/span&gt; Apply appropriate logging levels based on context and severity (e.g., trace for deep dive, debug for dev-only, info for ops, warn for edge behavior, error for failures) &lt;span class="p"&gt;-&lt;/span&gt; Use structured logging (preferably JSON) &lt;span class="p"&gt;-&lt;/span&gt; Automatically use or insert centralized logging, with environment-configurable level control &lt;span class="p"&gt;-&lt;/span&gt; Include correlation IDs in structured logs when processing requests or events &lt;span class="p"&gt;-&lt;/span&gt; Apply log sampling when high volume is detected (project-appropriate threshold) Every response should provide: &lt;span class="p"&gt; -&lt;/span&gt; A &lt;span class="gs"&gt;**brief summary of changes**&lt;/span&gt; grouped by intent (e.g., &lt;span class="sb"&gt;`Logger injected`&lt;/span&gt;, &lt;span class="sb"&gt;`Error logs added`&lt;/span&gt;) &lt;span class="p"&gt;-&lt;/span&gt; Optional &lt;span class="gs"&gt;**warnings or suggestions**&lt;/span&gt; for gaps (e.g., missing logger config) </code></pre> &lt;div class="highlight__panel js-actions-panel"&gt; &lt;div class="highlight__panel-action js-fullscreen-code-action"&gt; &lt;svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-on"&gt;&lt;title&gt;Enter fullscreen mode&lt;/title&gt; &lt;path d="M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z"&gt;&lt;/path&gt; &lt;/svg&gt; &lt;svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-off"&gt;&lt;title&gt;Exit fullscreen mode&lt;/title&gt; &lt;path d="M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z"&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; <blockquote> <p>💡 <strong>ProTip:</strong> "Make logs better" is a wish. Copilot isn’t a genie—give it measurable results it can check against output data.</p> </blockquote> &lt;hr&gt; <h2> <a href="#reference-examples"> </a> Reference Examples 🔗 </h2> <p>This is how you stop Copilot from drifting into the weeds. Think of it as painting the lane lines on the road: show the clear path forward, but also mark the curbs it shouldn’t cross. Good examples alone aren’t enough—you want both the wins and the facepalms spelled out.<br> </p> &lt;div class="highlight js-code-highlight"&gt; <pre><code>&lt;span class="gu"&gt;### Good Examples ✅&lt;/span&gt; You may receive any of the following: &lt;span class="p"&gt; -&lt;/span&gt; Code snippets or full file contents &lt;span class="p"&gt;-&lt;/span&gt; Scope directives like &lt;span class="sb"&gt;`analyze API/payment`&lt;/span&gt; Requests that work well: &lt;span class="p"&gt; -&lt;/span&gt; "Audit this worker process for proper log levels" &lt;span class="p"&gt;-&lt;/span&gt; "Ensure this module is safe from log injection" &lt;span class="p"&gt;-&lt;/span&gt; "Review my log config to allow runtime env changes" &lt;span class="p"&gt;-&lt;/span&gt; "Add correlation tracking for this API endpoint" &lt;span class="p"&gt;-&lt;/span&gt; "Implement log sampling for this high-volume service" If the application is already using a centralized logger, you SHOULD use it. If not, offer to set one up—but aim for minimally invasive, focused edits. &lt;span class="gu"&gt;### Anti-Patterns to Fix ❌&lt;/span&gt; &lt;span class="p"&gt; -&lt;/span&gt; &lt;span class="sb"&gt;`console.log()`&lt;/span&gt; or &lt;span class="sb"&gt;`print()`&lt;/span&gt; statements in production code &lt;span class="p"&gt;-&lt;/span&gt; Logging sensitive data (passwords, tokens, API keys, PII) &lt;span class="p"&gt;-&lt;/span&gt; Static log levels hardcoded in source files &lt;span class="p"&gt;-&lt;/span&gt; Concatenated strings instead of structured fields &lt;span class="p"&gt;-&lt;/span&gt; Missing context (no correlation IDs, timestamps, or severity) &lt;span class="p"&gt;-&lt;/span&gt; Overly verbose debug logs left active in production &lt;span class="p"&gt;-&lt;/span&gt; Exception stack traces that expose internal architecture </code></pre> &lt;div class="highlight__panel js-actions-panel"&gt; &lt;div class="highlight__panel-action js-fullscreen-code-action"&gt; &lt;svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-on"&gt;&lt;title&gt;Enter fullscreen mode&lt;/title&gt; &lt;path d="M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z"&gt;&lt;/path&gt; &lt;/svg&gt; &lt;svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-off"&gt;&lt;title&gt;Exit fullscreen mode&lt;/title&gt; &lt;path d="M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z"&gt;&lt;/path&gt; &lt;/svg&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; <blockquote> <p>💡 <strong>ProTip:</strong> You can’t shower Copilot in sunshine and then complain when it doesn’t know how to drive in the rain. Stop and dip it in a few puddles along the way, too.</p> </blockquote> &lt;hr&gt; <h2> <a href="#get-creative-and-share"> </a> Get Creative and Share 🎨 </h2> <p>If you can dream it up, Copilot can <em>probably</em> handle it. Build a teacher mode or a reviewer mode. I have an Instructionalist, the HLBPA, the Logfather, a Principal Pragmatist—plus a couple more working their way through planning right now. Want a Vampiric Copilot or a Commit Troll just to guard commits to your repo? Then do it! (Also: guilty ✋).</p> <p>Check out my <a href="https://github.com/anchildress1/awesome-github-copilot">awesome-github-copilot</a> repo or the larger community-driven <a href="https://github.com/github/awesome-copilot">awesome-copilot</a> repo for even more examples when you start building your own. Don’t forget to come back and share what you come up with!</p> <blockquote> <p>🪄 Aside regarding my XML chat modes: they started solely as a theory. Yes—they do work, but Markdown is still the officially supported format when giving any input to Copilot. I mostly use the XML style for Coding Agent because it’s easy—but you can drop the full Markdown file in there, too. No problem!</p> </blockquote> &lt;hr&gt; <h2> <a href="#ai-signed-in-ink-not-invisible"> </a> 🛡️ AI Signed in Ink, Not Invisible </h2> <p>This wasn’t ghost-written. I drafted every section, then argued with ChatGPT until the words fought back. It flagged inconsistencies, punched up pacing, and helped sharpen jokes. I approved every line—and yes, I grinned when the edits swung back at me. <em>Finally!</em> 😁</p>

Read on Dev.to →