<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged githubcopilot</title>
<link>https://coderlegion.com/tag/githubcopilot</link>
<description>Powered by Question2Answer</description>
<item>
<title>Ask Your Snowflake Account Anything — Build an AI Admin Agent with Cortex + GitHub Copilot ( Part 1 )</title>
<link>https://coderlegion.com/26370/ask-your-snowflake-account-anything-build-an-admin-agent-with-cortex-github-copilot-part</link>
<description>&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — Spin up a Snowflake Cortex Agent that can answer admin questions like &lt;em&gt;&quot;Which warehouses burned the most credits last month?&quot;&lt;/em&gt; or &lt;em&gt;&quot;Who are my top 5 spenders?&quot;&lt;/em&gt; — all from a natural-language prompt inside GitHub Copilot Chat.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-problem&quot;&gt;The Problem&lt;/h3&gt;
&lt;p&gt;Snowflake &lt;code&gt;ACCOUNT_USAGE&lt;/code&gt; contains everything you need to understand spend, performance, and security. The catch? You have to know the right table, the right join, and write it correctly every time.&lt;/p&gt;
&lt;p&gt;What if you could just ask?&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-you-ll-build&quot;&gt;What You'll Build&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;GitHub Copilot Chat
      │  (natural language)
      ▼
MCP Server (Python, local)
      │  ask_admin tool
      ▼
Snowflake Cortex Agent
      │  routes to the right semantic view
      ▼
SNOWFLAKE.ACCOUNT_USAGE (+ optional ORGANIZATION_USAGE)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;By the end you'll be able to type questions like these into Copilot Chat and get back answers with real numbers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;What are total compute credits by warehouse in the last 30 days?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Which users consumed the most credits this month?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;How many failed logins occurred in the last 7 days?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;What are serverless credits by service type?&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Requirement &lt;/th&gt;&lt;th&gt;Notes&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Snowflake account (any paid edition) &lt;/td&gt;&lt;td&gt;&lt;code&gt;ACCOUNTADMIN&lt;/code&gt; or a role with &lt;code&gt;ACCOUNT_USAGE&lt;/code&gt; access&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Python 3.9+ &lt;/td&gt;&lt;td&gt;For the MCP bridge&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;VS Code + GitHub Copilot Chat &lt;/td&gt;&lt;td&gt;Agent mode enabled&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Git &lt;/td&gt;&lt;td&gt;To clone the template&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id=&quot;step-1-clone-the-template&quot;&gt;Step 1 — Clone the Template&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/LALITHASWAROOPK/agent_snowflake_admin_assistant.git
cd agent_snowflake_admin_assistant/agent_snowflake_admin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Open the folder in VS Code:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;code .
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;step-2-deploy-the-sql-objects-5-scripts-5-minutes-&quot;&gt;Step 2 — Deploy the SQL Objects (5 scripts, ~5 minutes)&lt;/h3&gt;
&lt;p&gt;All SQL is in the &lt;code&gt;sql/&lt;/code&gt; folder. Replace the four placeholders before running:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Placeholder &lt;/th&gt;&lt;th&gt;What to set&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;lt;APP_DB&amp;gt;&lt;/code&gt; &lt;/td&gt;&lt;td&gt;A database to hold your views/agent&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;lt;APP_SCHEMA&amp;gt;&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Schema inside that database&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;lt;ADMIN_ROLE&amp;gt;&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Role that owns the objects&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;lt;DEVELOPER_ROLE&amp;gt;&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Role that will query the agent&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&amp;lt;EXEC_WAREHOUSE&amp;gt;&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Warehouse the agent will use at runtime&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Run them in order in a Snowflake worksheet or SnowSQL:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;@sql/01_create_views.sql        -- Base views over ACCOUNT_USAGE
@sql/02_create_semantic_views.sql  -- Semantic layer (natural-language metadata)
@sql/03_create_agent.sql        -- Cortex Agent wired to those views
@sql/04_create_budget.sql       -- Optional: spending guardrails
@sql/05_grants.sql              -- RBAC grants
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;what-the-views-cover&quot;&gt;What the Views Cover&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;01_create_views.sql&lt;/code&gt; builds seven base views, all sourced exclusively from &lt;code&gt;SNOWFLAKE.ACCOUNT_USAGE&lt;/code&gt; — no custom tables, no proprietary schemas:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;View &lt;/th&gt;&lt;th&gt;Source&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;V_WAREHOUSE_COST_BY_TAG&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;WAREHOUSE_METERING_HISTORY&lt;/code&gt; + &lt;code&gt;TAG_REFERENCES&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;V_QUERY_PERFORMANCE&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;QUERY_HISTORY&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;V_USER_SPEND&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;QUERY_ATTRIBUTION_HISTORY&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;V_SERVERLESS_COSTS&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Tasks, pipes, clustering, search, MV refresh&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;V_STORAGE_USAGE&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;STORAGE_USAGE&lt;/code&gt; + &lt;code&gt;DATABASE_STORAGE_USAGE_HISTORY&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;V_LOGIN_HISTORY&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;LOGIN_HISTORY&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;V_DATA_TRANSFER&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;DATA_TRANSFER_HISTORY&lt;/code&gt; + &lt;code&gt;REPLICATION_USAGE_HISTORY&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;02_create_semantic_views.sql&lt;/code&gt; wraps each base view with a &lt;code&gt;COMMENT&lt;/code&gt; block that tells the Cortex Agent what the view is for — this is how the agent knows which view to query for any given question.&lt;/p&gt;
&lt;h4 id=&quot;why-semantic-views-&quot;&gt;Why Semantic Views?&lt;/h4&gt;
&lt;p&gt;Snowflake Cortex Agents use &lt;strong&gt;semantic views&lt;/strong&gt; as tool definitions. A semantic view is just a standard view with a &lt;code&gt;COMMENT&lt;/code&gt; that describes its purpose in natural language. The agent reads those comments at inference time to decide which tool (view) answers the user's question.&lt;/p&gt;
&lt;p&gt;No prompt engineering required on your end.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;step-3-start-the-mcp-bridge&quot;&gt;Step 3 — Start the MCP Bridge&lt;/h3&gt;
&lt;p&gt;The MCP (Model Context Protocol) server is a lightweight Python HTTP server that exposes one tool — &lt;code&gt;ask_admin&lt;/code&gt; — which Copilot Chat can call.&lt;/p&gt;
&lt;h4 id=&quot;install-dependencies&quot;&gt;Install dependencies&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install -r mcp/requirements.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;configure-your-environment&quot;&gt;Configure your environment&lt;/h4&gt;
&lt;p&gt;Create a &lt;code&gt;.env&lt;/code&gt; file in the repo root (never commit this):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-env&quot;&gt;SNOWFLAKE_ACCOUNT=&amp;lt;your_account&amp;gt;
SNOWFLAKE_USER=&amp;lt;your_user&amp;gt;
SNOWFLAKE_AUTHENTICATOR=externalbrowser
SNOWFLAKE_ROLE=&amp;lt;DEVELOPER_ROLE&amp;gt;
SNOWFLAKE_WAREHOUSE=&amp;lt;EXEC_WAREHOUSE&amp;gt;
SNOWFLAKE_AGENT_FQN=&amp;lt;APP_DB&amp;gt;.&amp;lt;APP_SCHEMA&amp;gt;.&amp;lt;AGENT_NAME&amp;gt;
MCP_PORT=3000
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;&lt;p&gt;Supports &lt;code&gt;externalbrowser&lt;/code&gt; (SSO), &lt;code&gt;snowflake&lt;/code&gt; (password), and OAuth — set &lt;code&gt;SNOWFLAKE_AUTHENTICATOR&lt;/code&gt; and the matching credential variable.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;launch-the-server&quot;&gt;Launch the server&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;./scripts/start-mcp.ps1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or directly:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;python mcp/server.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify it's up:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;Invoke-RestMethod -Uri http://127.0.0.1:3000/health -Method Get
# → {&quot;status&quot;:&quot;ok&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;step-4-connect-copilot-chat&quot;&gt;Step 4 — Connect Copilot Chat&lt;/h3&gt;
&lt;p&gt;The repo ships a pre-configured &lt;code&gt;.vscode/mcp.json&lt;/code&gt; that wires the local MCP server into VS Code:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;mcpServers&quot;: {
    &quot;snowflake-admin&quot;: {
      &quot;url&quot;: &quot;http://127.0.0.1:3000&quot;
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;VS Code picks this up automatically when you open the workspace. You'll see the &lt;code&gt;ask_admin&lt;/code&gt; tool listed inside Copilot Chat's tool picker.&lt;/p&gt;
&lt;p&gt;There's also a GitHub Copilot instruction file at &lt;code&gt;.github/instructions/admin.instructions.md&lt;/code&gt; which gives Copilot context about the agent's scope so it routes questions there automatically.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;step-5-ask-it-questions&quot;&gt;Step 5 — Ask It Questions&lt;/h3&gt;
&lt;p&gt;Switch Copilot Chat to &lt;strong&gt;Agent mode&lt;/strong&gt; and try:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;What are my top 5 warehouses by compute credits in the last 30 days?
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;Which users have spent the most credits this month?
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;Show me failed logins by user in the last 7 days.
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;What serverless services are costing me the most right now?
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;What's my current storage usage broken down by database?
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The agent selects the right semantic view, runs the query, and returns a plain-English answer with the numbers inline — no SQL, no context switching.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;optional-budget-guardrails&quot;&gt;Optional: Budget Guardrails&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;04_create_budget.sql&lt;/code&gt; sets up a Snowflake Budget object so you can enforce credit limits at the agent level. Handy for keeping a shared admin agent from running runaway queries:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CALL &amp;lt;APP_DB&amp;gt;.&amp;lt;APP_SCHEMA&amp;gt;.&amp;lt;BUDGET_NAME&amp;gt;!SET_SPENDING_LIMIT(100);
CALL &amp;lt;APP_DB&amp;gt;.&amp;lt;APP_SCHEMA&amp;gt;.&amp;lt;BUDGET_NAME&amp;gt;!GET_SPENDING_HISTORY();
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;architecture-recap&quot;&gt;Architecture Recap&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;┌─────────────────────────────────────┐
│         GitHub Copilot Chat         │
│      (Agent mode + ask_admin tool)  │
└────────────────┬────────────────────┘
                 │ HTTP / MCP
┌────────────────▼────────────────────┐
│      MCP Bridge  (mcp/server.py)    │
│  Exposes: /mcp/tools/list           │
│           /mcp/tools/call           │
│           /health                   │
└────────────────┬────────────────────┘
                 │ snowflake-connector-python
┌────────────────▼────────────────────┐
│   SNOWFLAKE.CORTEX.DATA_AGENT_RUN   │
│   ← Cortex Agent (semantic router)  │
└────────────────┬────────────────────┘
                 │ picks the right tool
┌────────────────▼────────────────────┐
│     Semantic Views (SV_*)           │
│     Base Views    (V_*)             │
│     ↑ SNOWFLAKE.ACCOUNT_USAGE       │
└─────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;key-things-to-know&quot;&gt;Key Things to Know&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Account Usage latency&lt;/strong&gt;: &lt;code&gt;SNOWFLAKE.ACCOUNT_USAGE&lt;/code&gt; is typically delayed by up to a few hours — not real-time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rate sheet&lt;/strong&gt;: &lt;code&gt;ORGANIZATION_USAGE.RATE_SHEET_DAILY&lt;/code&gt; is optional and depends on your edition/region.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auth flexibility&lt;/strong&gt;: The MCP server supports SSO (&lt;code&gt;externalbrowser&lt;/code&gt;), OAuth, and password auth — configure once in &lt;code&gt;.env&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;get-the-code&quot;&gt;Get the Code&lt;/h3&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/LALITHASWAROOPK/agent_snowflake_admin&quot;&gt;github.com/LALITHASWAROOPK/agent_snowflake_admin_assistant&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;PRs and issues welcome. If you build on top of this, tag me — I'd love to see what you add.&lt;/p&gt;
&lt;hr&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/26370/ask-your-snowflake-account-anything-build-an-admin-agent-with-cortex-github-copilot-part</guid>
<pubDate>Mon, 07 Sep 2026 05:46:43 +0000</pubDate>
</item>
<item>
<title>Developer Weekly Briefing — September 4, 2026</title>
<link>https://coderlegion.com/26204/developer-weekly-briefing-september-4-2026</link>
<description>&lt;p&gt;A strong week with two hard deadlines attached. GitHub Copilot's billing and governance changes start landing September 1 — one of them already hit. Developers and platform teams have until September 28 before the next wave takes effect. Here's everything that mattered.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;github-copilot-s-billing-and-governance-rules-are-changing-this-fall-dates-matter&quot;&gt;GitHub Copilot's billing and governance rules are changing this fall — dates matter&lt;/h3&gt;
&lt;p&gt;Three separate changes are rolling out across Copilot Business and Enterprise between now and late September, and all three have calendar implications.&lt;/p&gt;
&lt;p&gt;The first already took effect September 1: new seat assignments now require upfront payment before a user gets access. Existing customers have until October 1. The mechanics shift meaningfully — organizations are charged at the start of each billing cycle, with additional charges for usage that runs past what's included. Admins used to adding and removing seats on the fly will need to rethink that process, especially at billing cycle boundaries.&lt;/p&gt;
&lt;p&gt;The second change is the one compliance teams should flag immediately. No earlier than September 28, GitHub is merging Copilot Cloud Agent, the github.com chat experience, and GitHub Mobile Chat into one unified experience. Buried in that consolidation: chat data retention changes from 28 days to the lifetime of the account. Any organization with data retention policies, audit requirements, or contractual obligations around AI-generated conversations needs to review its settings before that date, not after.&lt;/p&gt;
&lt;p&gt;The third change, also September 28: the default code review effort level shifts from &quot;Lite&quot; to &quot;Balanced&quot; across all repositories and organizations. Teams that want to keep the lighter behavior need to explicitly select Lite before the switch. Under token-based billing, deeper reviews mean more tokens consumed per pull request — which means higher costs if nobody notices the default changed.&lt;/p&gt;
&lt;p&gt;As Futurum Group's Mitch Ashley put it: &quot;Engineering leaders should assign an owner to those defaults now, before the invoice makes the decision for them.&quot;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/github-tightens-copilots-billing-and-governance-rules-ahead-of-a-busy-fall/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;copilot-can-now-approve-pull-requests-not-just-review-them&quot;&gt;Copilot can now approve pull requests — not just review them&lt;/h3&gt;
&lt;p&gt;GitHub moved Copilot from advisory to authoritative in code review this week. Copilot's sign-off can now count toward a repository's required-approvals rule, the same way a teammate's would.&lt;/p&gt;
&lt;p&gt;The guardrails are more careful than the headline suggests. Approvals are off by default. Admins opt in at the enterprise, organization, or repository level. Repository admins can restrict which file paths Copilot is allowed to approve at all — letting teams scope it to documentation and test fixtures while keeping authentication and payment logic strictly human-reviewed. Push a new commit after approval and the approval is dismissed automatically, same as a human reviewer.&lt;/p&gt;
&lt;p&gt;The governance question worth sitting with, from Futurum Group's Mitch Ashley: &quot;Approval is where code review stops being advice and becomes authority, and GitHub just moved Copilot across that line. An automated reviewer earns that trust the same way a person does — through outcomes you can point to. Engineering leaders should turn this on and instrument it to measure the effectiveness of approvals.&quot;&lt;/p&gt;
&lt;p&gt;That instrumentation doesn't come built in. If Copilot's approvals count the same as a human's, someone needs to build dashboards showing how often it approves correctly, how often a human catches something after the fact, and whether speed is coming at the cost of depth. Teams that skip that step and flip approvals on everywhere at once are trading a review bottleneck for a governance gap.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/github-puts-copilot-in-the-approval-seat-for-pull-requests/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;vs-code-1-135-adds-rubber-duck-a-second-ai-model-to-critique-the-first-one&quot;&gt;VS Code 1.135 adds Rubber Duck — a second AI model to critique the first one&lt;/h3&gt;
&lt;p&gt;The headline addition in VS Code 1.135 is Rubber Duck, an experimental feature that puts a different model to work reviewing the primary coding agent's plans, code, and tests before anything ships. Type &lt;code&gt;/rubber-duck&lt;/code&gt; in a Copilot agent session and a complementary model looks for gaps the first one missed.&lt;/p&gt;
&lt;p&gt;The same release introduces the Agent Host Protocol — a dedicated process for running agent harnesses that lets developers connect to the same session from multiple VS Code windows. Sessions now show agent work started in other applications, including Claude or Copilot sessions outside VS Code, so context doesn't get lost when you switch windows. Per-model token tracking in the chat footer gives teams a clearer read on what each model costs per turn.&lt;/p&gt;
&lt;p&gt;Mitch Ashley's useful caveat: &quot;Rubber Duck answers verification pressure with more generation, and that only goes so far.&quot; A second model catching more edge cases is still generation, not independent verification. Worth keeping that distinction in mind before treating Rubber Duck's output as a stamp of correctness.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/vs-code-1-135-gives-ai-coding-agents-a-second-opinion/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;microsoft-opens-up-its-agent-framework-with-channels-one-agent-every-surface&quot;&gt;Microsoft opens up its Agent Framework with Channels — one agent, every surface&lt;/h3&gt;
&lt;p&gt;Microsoft's Agent Framework team published Channels this week — open-source Python packages that let a single agent connect to multiple communication platforms and protocols without a separate implementation for each. Launch integrations cover OpenAI's Responses API, Telegram, the Agent2Agent (A2A) protocol, and MCP.&lt;/p&gt;
&lt;p&gt;The architecture is notable for what it leaves out of scope: identity mapping, authentication, authorization, and session storage are still the application's responsibility. Microsoft made that explicit rather than abstracting it away, which keeps Channels auditable but also means teams can't treat it as a governance shortcut.&lt;/p&gt;
&lt;p&gt;Mitch Ashley's read: &quot;Microsoft is acknowledging something important: no single vendor owns the enterprise agent estate, so the channel layer has to speak protocols it does not control. Building on A2A and MCP instead of a Microsoft-only path matches what enterprises want.&quot;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://techstrong.ai/features/one-agent-every-channel-microsoft-opens-up-its-agent-framework/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;debian-s-ai-vote-accountability-instead-of-a-ban&quot;&gt;Debian's AI vote: accountability instead of a ban&lt;/h3&gt;
&lt;p&gt;Debian developers voted on AI policy this week after a two-week community ballot with eight separate proposals, including an outright ban that would have required a supermajority to pass. It didn't come close. The policy that won neither endorses nor prohibits generative AI — it holds contributors to the same standard regardless of how code got written: you reviewed it, you tested it, and nothing sensitive left the building to get it.&lt;/p&gt;
&lt;p&gt;Disclosure is encouraged, not mandated. Three specific guardrails came with it: no confidential material or credentials to third-party AI services without explicit authorization, no bulk automated contributions without prior discussion, and the copyright question is explicitly punted downstream.&lt;/p&gt;
&lt;p&gt;The insight worth carrying into enterprise AI policy discussions: Debian didn't try to regulate the tool. It regulated the behavior around the tool, which is considerably easier to enforce. You can't reliably detect LLM-generated code. You can hold the person who submitted it accountable for what it does.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/debians-ai-vote-bets-on-accountability-instead-of-a-ban/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;a-simple-website-summary-task-exposed-the-limits-of-ai-coding-guardrails&quot;&gt;A simple website summary task exposed the limits of AI coding guardrails&lt;/h3&gt;
&lt;p&gt;A researcher assigned an AI coding agent a task so basic it barely registers as a task: summarize a website. The agent found an edge case that required executing external code to complete the job, did so, and the guardrails didn't catch it. The post is a useful reminder that guardrails are tested against anticipated misuse, not every combination of legitimate task plus unexpected environment. The agent wasn't trying to do anything wrong. It was trying to finish the job.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://devops.com/a-simple-website-summary-just-exposed-the-limits-of-ai-coding-guardrails/&quot;&gt;Read more&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;also-from-coder-legion-this-week&quot;&gt;Also from Coder Legion this week&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CrowdStrike Fal.Con 2026: Falcon Guardian, SafeMind, and the end of &quot;breakout time.&quot;&lt;/strong&gt; George Kurtz retired the metric and made the case that attacks now happen at inference speed. Falcon Guardian goes GA, SafeMind pairs an offensive and defensive model built on NVIDIA Nemotron, and Jensen Huang, Lip-Bu Tan, and Greg Brockman all had things worth hearing. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/26023/crowdstrikes-fal-con-2026-falcon-guardian-safemind-and-the-end-of-breakout-time&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cycode's AI scanner found 38 bugs in MLflow. The press release only mentioned one.&lt;/strong&gt; When we pushed on the benchmark methodology, the CTO's written follow-up had more detail — and a few numbers that didn't match the press release. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/26085/cycodes-ai-scanner-found-38-bugs-in-mlflow-the-press-release-only-mentioned-one&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;F5's AI WAF caught 15 zero-days before a human ever saw them&lt;/strong&gt; — built on a custom neural network rather than a fine-tuned LLM, for reasons that come down to latency and data path. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/26103/f5s-ai-waf-caught-15-zero-days-before-a-human-ever-saw-them&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Act Security's Amphi shrinks a 30,000-character AWS IAM policy down to 7,000&lt;/strong&gt; — live demo, same permissions, a quarter of the size, free and open source. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/26162/act-securitys-amphi-shrinks-a-30-000-character-aws-policy-down-to-7-000&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;76% of enterprises with HA/DR still went down this year.&lt;/strong&gt; The top blocker isn't cost — it's configuration complexity, at 44%. Only 7% test DR monthly. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/26078/76-of-enterprises-with-ha-dr-still-went-down-this-year&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jazz's Roi Vanunu: &quot;agentic&quot; should describe what a security tool finishes, not what it is.&lt;/strong&gt; A precise and useful reframe of how to evaluate AI security vendor claims. &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/25937/jazzs-roi-vanunu-agentic-should-describe-what-a-security-tool-finishes-not-what-it-is&quot;&gt;Read more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;The through-line this week: governance is catching up with capability across the board — Copilot billing controls, PR approval authority, Debian's accountability-over-ban model, and Channels leaving identity to the application. The tooling is maturing. The question in every case is whether the governance catches up before the default decides for you.&lt;/p&gt;
&lt;p&gt;September 28 is the next hard date. Put it on the calendar now.&lt;/p&gt;
&lt;p&gt;See you next Friday.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Developer Weekly Briefing is published every Friday on &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com&quot;&gt;Coder Legion&lt;/a&gt;. Written by &lt;a rel=&quot;nofollow&quot; href=&quot;https://coderlegion.com/user/Tom+Smith&quot;&gt;Tom Smith&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/26204/developer-weekly-briefing-september-4-2026</guid>
<pubDate>Fri, 04 Sep 2026 12:35:46 +0000</pubDate>
</item>
<item>
<title>From Prototype to Production: Finishing Moonsu Link, a Chat-Native Agricultural Marketplace for Cameroon</title>
<link>https://coderlegion.com/21862/from-prototype-production-finishing-moonsu-native-agricultural-marketplace-cameroon</link>
<description>&lt;p&gt;&lt;em&gt;This is a submission for the GitHub Finish-Up-A-Thon Challenge&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;What We Built&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Moonsu Link is a chat-native agricultural marketplace built for farmers and buyers in Cameroon.&lt;/p&gt;
&lt;p&gt;In Cameroon, agriculture is central to daily life, but the way products are bought and sold is still fragmented. In many towns, roadside markets and middlemen control access to buyers. In rural areas, farmers often depend on word of mouth, informal contacts, or market days to move their goods.&lt;/p&gt;
&lt;p&gt;That creates real friction.&lt;/p&gt;
&lt;p&gt;A farmer in Bamenda, Bafoussam, Douala, or Yaoundé may have produce ready, but still struggle to find a buyer quickly, get a fair price, or know where demand is strongest. At the same time, many people already use WhatsApp and Telegram every day, while mobile data costs, app installs, and complicated onboarding can get in the way. Language matters too. Cameroon is bilingual, and any useful product has to feel natural in both English and French while staying simple enough for users with different levels of digital comfort.&lt;/p&gt;
&lt;p&gt;Moonsu Link was built to close that gap by bringing the marketplace into the chat apps people already use. The goal is to reduce friction and make trade feel more direct, local, and trustworthy.&lt;/p&gt;
&lt;p&gt;The idea is simple:&lt;br&gt;
help farmers list produce easily, help buyers search in plain language, and let both sides trade without needing a separate app.&lt;/p&gt;
&lt;p&gt;Instead of pushing users into a dashboard-first experience, Moonsu Link works through WhatsApp and Telegram, the platforms people already know.&lt;/p&gt;
&lt;p&gt;With Moonsu Link, a farmer can list produce with location, price, quantity, and optional photos. Buyers can search naturally, compare listings, check market prices, and express interest. The platform also supports farmer verification, community reports, farming advice, voice messages, and cross-platform use across WhatsApp and Telegram.&lt;/p&gt;
&lt;p&gt;What began as an unfinished idea is now a real product with a clear user flow, a polished web presence, and a backend that connects messaging, AI, search, verification, and notifications into one system.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Demo&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Live app: &lt;a rel=&quot;nofollow&quot; href=&quot;https://moonsulink.vercel.app&quot;&gt;https://moonsulink.vercel.app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub repository:&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/yvesdylane/Moonsun-Link-api&quot;&gt;https://github.com/yvesdylane/Moonsun-Link-api&lt;/a&gt; , &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/yvesdylane/MoonsuLinkFrontend&quot;&gt;https://github.com/yvesdylane/MoonsuLinkFrontend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Video walkthrough: &lt;a rel=&quot;nofollow&quot; href=&quot;https://youtu.be/6skq9w_mw-s?si=c5YCVunZ3RC5Qfqs&quot;&gt;https://youtu.be/6skq9w_mw-s?si=c5YCVunZ3RC5Qfqs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Screenshots:!Moonsu Telegram Bot(&lt;a rel=&quot;nofollow&quot; href=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b1ewivz77iwyli4gh01a.jpeg&quot;&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b1ewivz77iwyli4gh01a.jpeg&lt;/a&gt;) , &lt;br&gt;
!Moonsu Whatsapp (&lt;a rel=&quot;nofollow&quot; href=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/op3lmh99vio6zbxu4bcl.jpg&quot;&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/op3lmh99vio6zbxu4bcl.jpg&lt;/a&gt;) , &lt;br&gt;
!Moonsu Admin Dahboard(&lt;a rel=&quot;nofollow&quot; href=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cit70l8bc84pijmworrj.jpg&quot;&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cit70l8bc84pijmworrj.jpg&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;The Comeback Story&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;!Moonsu website before finishathon(&lt;a rel=&quot;nofollow&quot; href=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2nlqiwperncglto84re2.png&quot;&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2nlqiwperncglto84re2.png&lt;/a&gt;)&lt;br&gt;
Moonsu Link did not start as a finished product. It began as a prototype built around a real problem, but like many hackathon projects, it never fully crossed the finish line.&lt;/p&gt;
&lt;p&gt;The idea was strong, but the product needed more structure, cleaner UX, better flow, and real end-to-end functionality before it could genuinely help users.&lt;/p&gt;
&lt;p&gt;For this challenge, We came back to it with a different mindset. We treated it like a real product, not just a demo.&lt;/p&gt;
&lt;p&gt;That meant focusing on the things that matter most:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;making the experience feel unified across WhatsApp, Telegram, and the web&lt;/li&gt;
&lt;li&gt;refining the landing page so the product story is clear immediately&lt;/li&gt;
&lt;li&gt;building a visual identity that reflects a Cameroon-first agricultural context&lt;/li&gt;
&lt;li&gt;improving backend flows for messaging, listings, verification, search, and notifications&lt;/li&gt;
&lt;li&gt;making the product feel trustworthy, usable, and ready to present to real users&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The biggest difference is that the project is no longer just an idea. It now has a clear user journey, a stronger brand, and real functionality that shows what the product is supposed to do.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Our Experience with GitHub Copilot&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;GitHub Copilot helped me move faster and finish with more confidence.&lt;/p&gt;
&lt;p&gt;It was especially useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;building repetitive frontend sections faster&lt;/li&gt;
&lt;li&gt;cleaning up component structure&lt;/li&gt;
&lt;li&gt;speeding up backend boilerplate and integrations&lt;/li&gt;
&lt;li&gt;iterating on UI copy and layout&lt;/li&gt;
&lt;li&gt;reducing friction while refactoring and finishing incomplete parts of the project&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What mattered most was not just speed, but momentum.&lt;/p&gt;
&lt;p&gt;Copilot helped us keep the project moving when we needed to turn unfinished ideas into working features and a coherent product experience.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Why This Project Matters&lt;/em&gt;&lt;br&gt;
 Agriculture is one of the most important parts of everyday life in Cameroon, but many farmers still struggle with discovery, pricing, trust, and access to buyers.&lt;/p&gt;
&lt;p&gt;Moonsu Link tries to solve that with one simple idea:&lt;/p&gt;
&lt;p&gt;Meet users where they already are.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No app install&lt;/li&gt;
&lt;li&gt;No complicated onboarding&lt;/li&gt;
&lt;li&gt;No unfamiliar workflow&lt;/li&gt;
&lt;li&gt;Just a practical marketplace inside the chat platforms people already use&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is why this project felt worth finishing. It is not just a technical build. It is a tool that could genuinely reduce friction for farmers and buyers.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The Stack&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Frontend:&lt;br&gt;
Next.js 16, React 19, TypeScript, Tailwind CSS v4, Framer Motion&lt;/p&gt;
&lt;p&gt;Backend:&lt;br&gt;
FastAPI, PostgreSQL, Telegram Bot API, WhatsApp integration, AI-powered message handling, translation, voice transcription, image upload, and admin APIs&lt;/p&gt;
&lt;p&gt;&lt;em&gt;What Changed During the Comeback&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The project went from unfinished to presentable by focusing on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a clearer product story&lt;/li&gt;
&lt;li&gt;a stronger landing page&lt;/li&gt;
&lt;li&gt;better visual consistency&lt;/li&gt;
&lt;li&gt;real cross-platform marketplace flows&lt;/li&gt;
&lt;li&gt;verification and trust features&lt;/li&gt;
&lt;li&gt;AI-assisted handling of user messages&lt;/li&gt;
&lt;li&gt;more polished communication for farmers and buyers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Authors&lt;/strong&gt;&lt;br&gt;
Main Author: &lt;em&gt;Yves Dylane @yveane &lt;/em&gt;&lt;br&gt;
Co-Author: _Chestly Amahndong @chestly&lt;em&gt;ace&lt;/em&gt;&lt;br&gt;
Co-Author: &lt;em&gt;Kanjo Elkamira @alchemycodes&lt;br&gt;
&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/21862/from-prototype-production-finishing-moonsu-native-agricultural-marketplace-cameroon</guid>
<pubDate>Sat, 04 Jul 2026 02:30:59 +0000</pubDate>
</item>
<item>
<title>GitHub Copilot for Engineers: Getting Better Results</title>
<link>https://coderlegion.com/19468/github-copilot-for-engineers-getting-better-results</link>
<description>&lt;blockquote&gt;&lt;p&gt;Original post: &lt;a rel=&quot;nofollow&quot; href=&quot;https://sourcier.uk/blog/github-copilot-for-engineers&quot;&gt;GitHub Copilot for Engineers: Getting Better Results&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;GitHub Copilot moved to usage-based billing in June 2026, dropping the flat subscription model that made monthly costs predictable. For teams using it heavily across multiple projects, that shift puts a premium on being deliberate: reaching for the right model, keeping prompts focused, and building a configuration that produces good results without a lot of back-and-forth iteration.&lt;/p&gt;
&lt;p&gt;Many of us install the extension, start with the defaults, and only tune settings later. The defaults are a reasonable starting point, but they are not a full configuration. A small investment in setup changes how much you get out of every request on an ordinary working day, and that matters more now that each request has a cost attached.&lt;/p&gt;
&lt;p&gt;This guide covers the full path: getting the tooling in place, choosing models with cost in mind, layering global and project-level rules, and building out instructions, agents, and skills that make Copilot predictable across different kinds of work.&lt;/p&gt;
&lt;h3 id=&quot;architecture-overview&quot;&gt;Architecture overview&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://mermaid.ink/img/Zmxvd2NoYXJ0IFRECiAgQVtQcm9tcHRzIGluIFZTIENvZGUgb3IgQ0xJXSAtLT4gQltJbnN0cnVjdGlvbnMgbGF5ZXJdCiAgQiAtLT4gQ1tBZ2VudCBzZWxlY3Rpb24gYW5kIG1vZGVsXQogIEMgLS0-IERbU2tpbGxzIHdvcmtmbG93XQogIEQgLS0-IEVbVG9vbHM6IENMSSBmaXJzdCwgTUNQIHdoZW4gbmVlZGVkXQogIEUgLS0-IEZbUmV2aWV3IGFuZCB2YWxpZGF0ZSBvdXRwdXRd&quot; alt=&quot;Mermaid diagram&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Diagram fallback for Dev.to. View the canonical article for the full version: &lt;a rel=&quot;nofollow&quot; href=&quot;https://sourcier.uk/blog/github-copilot-for-engineers&quot;&gt;https://sourcier.uk/blog/github-copilot-for-engineers&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;before-you-start&quot;&gt;Before you start&lt;/h3&gt;
&lt;h4 id=&quot;subscription-and-vs-code-extension&quot;&gt;Subscription and VS Code extension&lt;/h4&gt;
&lt;p&gt;You need an active GitHub Copilot subscription. Plans are available at individual, business, and enterprise tiers at &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/features/copilot&quot;&gt;github.com/features/copilot&lt;/a&gt;. Once active, all tools use your GitHub account credentials.&lt;/p&gt;
&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; href=&quot;https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&quot;&gt;GitHub Copilot extension for VS Code&lt;/a&gt; is the primary day-to-day interface. Install it from the Extensions panel or via the CLI:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;code --install-extension GitHub.copilot
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The extension provides inline completions as you type, Copilot Chat in the sidebar, inline chat on any selection via &lt;code&gt;Cmd+I&lt;/code&gt; / &lt;code&gt;Ctrl+I&lt;/code&gt;, agent mode for multi-step tasks, and multi-file edits with a single review step.&lt;/p&gt;
&lt;p&gt;Defaults keep improving, so avoid cargo-culting old setting lists. Focus on non-default tweaks that improve signal quality and control usage:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Setting &lt;/th&gt;&lt;th&gt;Value &lt;/th&gt;&lt;th&gt;Effect&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;github.copilot.nextEditSuggestions.enabled&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;true&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Surfaces likely next edits proactively during implementation&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;github.copilot.chat.codesearch.enabled&lt;/code&gt; &lt;/td&gt;&lt;td&gt;&lt;code&gt;true&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Improves answers on larger repos by pulling semantic code context&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&quot;copilot-cli&quot;&gt;Copilot CLI&lt;/h4&gt;
&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.github.com/en/copilot/concepts/agents/copilot-cli/about-copilot-cli&quot;&gt;GitHub Copilot CLI&lt;/a&gt; is a standalone AI agent for the terminal.&lt;/p&gt;
&lt;p&gt;Install via Homebrew:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;brew install copilot-cli
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or via pnpm, if you prefer Node.js tooling:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;pnpm add -g @github/copilot
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On first launch, authenticate with your GitHub account by following the &lt;code&gt;/login&lt;/code&gt; prompt. The CLI has two modes: an interactive session where you have a back-and-forth conversation while Copilot reads and modifies files in the current directory, and a programmatic mode where you pass a single prompt with &lt;code&gt;-p&lt;/code&gt; and the CLI executes and exits.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# Start an interactive session
copilot

# One-shot task with explicit tool approval
copilot -p &quot;Show me this week's commits and summarise them&quot; --allow-tool='shell(git)'

# Open a PR with the changes
copilot -p &quot;Refactor the auth module to use async/await and open a PR&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;awesome-copilot&quot;&gt;awesome-copilot&lt;/h4&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/github/awesome-copilot&quot;&gt;github.com/github/awesome-copilot&lt;/a&gt; is the official community-curated repository of Copilot instructions, agents, skills, and prompts. Before writing any configuration from scratch, check here first. It is far faster to adapt a battle-tested instruction file than to start from a blank page. The catalogue covers common engineering workflows: security review, frontend, documentation, and more.&lt;/p&gt;
&lt;h3 id=&quot;choose-models-by-task&quot;&gt;Choose models by task&lt;/h3&gt;
&lt;p&gt;Model choice should match task shape. GitHub Copilot subscriptions give you access to a range of models. Here is how to map them to real work:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Task &lt;/th&gt;&lt;th&gt;Recommended model &lt;/th&gt;&lt;th&gt;Why&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Quick edits and inline completions &lt;/td&gt;&lt;td&gt;GPT-5.4 &lt;/td&gt;&lt;td&gt;Strong quality at lower effort per prompt, reducing rework&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;General feature work and refactoring &lt;/td&gt;&lt;td&gt;GPT-5.4 or Claude Sonnet 4.5 &lt;/td&gt;&lt;td&gt;Strong reasoning with a good speed and cost balance&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Complex architecture and deep analysis &lt;/td&gt;&lt;td&gt;Claude Sonnet 4.5 &lt;/td&gt;&lt;td&gt;Extended reasoning and long context without premium pricing&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Security review &lt;/td&gt;&lt;td&gt;Claude Sonnet 4.5 &lt;/td&gt;&lt;td&gt;Strong policy alignment and risk detection&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Documentation and standards &lt;/td&gt;&lt;td&gt;GPT-5.4 or Claude Sonnet 4.5 &lt;/td&gt;&lt;td&gt;Consistent structure, clear prose&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Agent and multi-step repo operations &lt;/td&gt;&lt;td&gt;Claude Sonnet 4.5 or GPT-5.4 &lt;/td&gt;&lt;td&gt;Reliable tool-calling across many steps&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A practical pattern:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start with your default model.&lt;/li&gt;
&lt;li&gt;If the output is shallow, switch to a stronger reasoning model.&lt;/li&gt;
&lt;li&gt;If the output is too slow for a simple task, switch back to a faster model.&lt;/li&gt;
&lt;li&gt;Keep one model per agent role for consistency: engineering, security, UX, docs.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Agents (covered below) let you pin a model in their frontmatter, so the same task always runs with the same capability profile.&lt;/p&gt;
&lt;h3 id=&quot;layer-global-and-project-settings&quot;&gt;Layer global and project settings&lt;/h3&gt;
&lt;p&gt;The most reliable setup is layered: global defaults for how you work everywhere, project-level rules for what is unique to a specific repo.&lt;/p&gt;
&lt;h4 id=&quot;global-settings&quot;&gt;Global settings&lt;/h4&gt;
&lt;p&gt;Global Copilot configuration lives under your home directory:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Path &lt;/th&gt;&lt;th&gt;Purpose&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;~/.copilot/instructions/&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Always-on rules applied across all repos&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;~/.copilot/agents/&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Reusable agent definitions&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;~/.copilot/skills/&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Reusable skill playbooks&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;~/.copilot/mcp-config.json&lt;/code&gt; &lt;/td&gt;&lt;td&gt;Global MCP server connections&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Managing these in a dotfiles repo and syncing them to &lt;code&gt;$HOME&lt;/code&gt; on each machine gives you a consistent baseline without reconfiguring per project. Good candidates for global rules include workflow behaviour and tool preferences, secure coding defaults, code-commenting standards, and framework-specific instructions for React, TypeScript, and similar.&lt;/p&gt;
&lt;p&gt;If you want a concrete reference, this is my setup: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/sourcier/dotfiles&quot;&gt;github.com/sourcier/dotfiles&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&quot;project-level-settings&quot;&gt;Project-level settings&lt;/h4&gt;
&lt;p&gt;For project-specific behaviour, add a &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt; to the repo root, or place &lt;code&gt;.instructions.md&lt;/code&gt; files in &lt;code&gt;.github/instructions/&lt;/code&gt;. VS Code picks these up automatically when you open the project.&lt;/p&gt;
&lt;p&gt;Use project-level rules for naming conventions unique to this repo, folder architecture and module boundaries, test and QA requirements, and build and deployment constraints. Use global rules for communication style, security baseline, preferred CLIs, package manager choices, and repeatable personal workflow.&lt;/p&gt;
&lt;h3 id=&quot;instructions-agents-and-skills&quot;&gt;Instructions, agents, and skills&lt;/h3&gt;
&lt;p&gt;These three tools serve different purposes. Treating them as interchangeable leads to a setup that is noisy and hard to maintain.&lt;/p&gt;
&lt;h4 id=&quot;instructions-always-on-policy&quot;&gt;Instructions: always-on policy&lt;/h4&gt;
&lt;p&gt;Instructions are Markdown files with YAML frontmatter that Copilot reads automatically whenever the &lt;code&gt;applyTo&lt;/code&gt; glob matches the file you are working in. Use them for stable guardrails and standards that should apply silently in the background.&lt;/p&gt;
&lt;p&gt;Two patterns work well: broad instructions with &lt;code&gt;applyTo: '*'&lt;/code&gt; for universal rules, and targeted instructions with file-type globs for framework-specific rules.&lt;/p&gt;
&lt;p&gt;Minimal template:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-md&quot;&gt;---
applyTo: '**/*.ts'
description: 'TypeScript service-layer standards'
---

# Service Standards
- Use strict typing
- Return typed errors
- Validate external input at boundaries
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;agents-task-specific-operators&quot;&gt;Agents: task-specific operators&lt;/h4&gt;
&lt;p&gt;Agents are &lt;code&gt;.agent.md&lt;/code&gt; files that define a reusable persona with a pinned model, a tool budget, and a system prompt. Use them when the same class of work needs consistent behaviour every time.&lt;/p&gt;
&lt;p&gt;An agent definition includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;: shown in the VS Code agent picker&lt;/li&gt;
&lt;li&gt;&lt;code&gt;description&lt;/code&gt;: used for routing; Copilot reads this to decide which agent fits a request&lt;/li&gt;
&lt;li&gt;&lt;code&gt;model&lt;/code&gt;: pinned model for this workflow&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tools&lt;/code&gt;: explicit list of tools the agent is allowed to use&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Good starting agents: a Software Engineer for general implementation and refactoring, a Security Reviewer for OWASP-focused code review, an Expert Frontend Engineer for React and TypeScript work, and a Tech Writer for documentation and READMEs.&lt;/p&gt;
&lt;p&gt;Create a new agent when a task requires a distinct review lens, needs a stable model and tool profile, or when you want consistent output style for that workflow.&lt;/p&gt;
&lt;h4 id=&quot;skills-reusable-playbooks&quot;&gt;Skills: reusable playbooks&lt;/h4&gt;
&lt;p&gt;Skills are &lt;code&gt;SKILL.md&lt;/code&gt; files that contain detailed step-by-step procedures for a specific domain. The agent reads the skill file at invocation time rather than keeping it in context permanently, which means skills can be as long and detailed as needed without bloating every conversation.&lt;/p&gt;
&lt;p&gt;Good candidates: a premium frontend UI craftsmanship checklist, a workflow for creating &lt;code&gt;AGENTS.md&lt;/code&gt; files for a new repo, or a Playwright website exploration procedure.&lt;/p&gt;
&lt;p&gt;The rule of thumb:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Instructions&lt;/strong&gt; = default behaviour&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agents&lt;/strong&gt; = who does the work&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills&lt;/strong&gt; = how specialised work gets executed&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;mcp-servers&quot;&gt;MCP servers&lt;/h3&gt;
&lt;p&gt;MCP (Model Context Protocol) extends Copilot with external capabilities: browsers, issue trackers, cloud providers, databases, and more. Servers are configured in &lt;code&gt;~/.copilot/mcp-config.json&lt;/code&gt; for global access, or &lt;code&gt;.vscode/mcp.json&lt;/code&gt; for project scope.&lt;/p&gt;
&lt;p&gt;Three common patterns:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Local command server&lt;/strong&gt;: runs a pre-installed binary on your machine (preferred)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remote HTTP server&lt;/strong&gt;: connects to an external service over HTTPS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;npx/uvx on-demand&lt;/strong&gt;: package runner launches the server each time; avoid for servers you use regularly as the cold boot adds latency on every invocation&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;installing-common-servers&quot;&gt;Installing common servers&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Playwright MCP&lt;/strong&gt;: browser automation and visual QA:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;brew install playwright-mcp
# or via pnpm
pnpm add -g @playwright/mcp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Azure MCP Server&lt;/strong&gt;: Azure resource inspection and management:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;brew tap azure/azure-cli
brew install azmcp
# Authenticate before first use
az login
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;example-config&quot;&gt;Example config&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;mcpServers&quot;: {
    &quot;playwright&quot;: {
      &quot;command&quot;: &quot;playwright-mcp&quot;,
      &quot;args&quot;: [&quot;--headless&quot;]
    },
    &quot;atlassian/atlassian-mcp-server&quot;: {
      &quot;type&quot;: &quot;http&quot;,
      &quot;url&quot;: &quot;https://mcp.atlassian.com/v1/mcp/&quot;
    },
    &quot;Azure MCP Server&quot;: {
      &quot;command&quot;: &quot;azmcp&quot;,
      &quot;args&quot;: [&quot;server&quot;, &quot;start&quot;]
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Prefer a globally installed binary via Homebrew or pnpm for any server you use regularly. Reserve &lt;code&gt;npx&lt;/code&gt; for one-off evaluation of a new server before committing to a permanent install.&lt;/p&gt;
&lt;h4 id=&quot;when-to-reach-for-mcp&quot;&gt;When to reach for MCP&lt;/h4&gt;
&lt;p&gt;Follow this order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Native CLI first: &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;gh&lt;/code&gt;, &lt;code&gt;pnpm&lt;/code&gt;, &lt;code&gt;docker&lt;/code&gt;, cloud CLIs.&lt;/li&gt;
&lt;li&gt;Use MCP when no good CLI path exists or when MCP adds capability the CLI cannot.&lt;/li&gt;
&lt;li&gt;Keep the MCP list minimal and intentional.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;security-checklist&quot;&gt;Security checklist&lt;/h4&gt;
&lt;p&gt;Before adding any MCP server:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Never hardcode tokens in config files. Use environment variables or a secret store.&lt;/li&gt;
&lt;li&gt;Prefer least-privilege credentials.&lt;/li&gt;
&lt;li&gt;Use trusted hosts only for remote HTTP servers.&lt;/li&gt;
&lt;li&gt;Disable or remove servers you are not actively using.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;rolling-it-out&quot;&gt;Rolling it out&lt;/h3&gt;
&lt;h4 id=&quot;individual-setup&quot;&gt;Individual setup&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Install the VS Code extension and Copilot CLI.&lt;/li&gt;
&lt;li&gt;Create &lt;code&gt;~/.copilot/instructions/&lt;/code&gt; and add one global instruction file. Workflow preferences and a security baseline are the highest-value starting points.&lt;/li&gt;
&lt;li&gt;Browse &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/github/awesome-copilot&quot;&gt;awesome-copilot&lt;/a&gt; and copy two or three instruction files relevant to your stack.&lt;/li&gt;
&lt;li&gt;Add a &lt;code&gt;.github/copilot-instructions.md&lt;/code&gt; to your primary repo with project-specific conventions.&lt;/li&gt;
&lt;li&gt;Try agent mode for a non-trivial task to get a feel for how it behaves.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;team-rollout&quot;&gt;Team rollout&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Define a shared baseline in a dotfiles or inner-source repo covering instructions, agents, skills, and MCP config.&lt;/li&gt;
&lt;li&gt;Add two to four high-value project instructions per repo.&lt;/li&gt;
&lt;li&gt;Create three core agents: engineering, security, and documentation review.&lt;/li&gt;
&lt;li&gt;Add skills only for repeated, specialised workflows.&lt;/li&gt;
&lt;li&gt;Review output quality every two weeks and refine rules and prompts based on what you observe.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;keeping-it-improving&quot;&gt;Keeping it improving&lt;/h3&gt;
&lt;p&gt;Results degrade when instructions conflict, when prompts are vague, or when agents are used for everything regardless of fit. A simple quality loop prevents that drift:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Be explicit in prompts: goal, constraints, relevant files, and done criteria.&lt;/li&gt;
&lt;li&gt;Keep instructions concise and non-conflicting.&lt;/li&gt;
&lt;li&gt;Scope rules with &lt;code&gt;applyTo&lt;/code&gt; so they trigger only where needed.&lt;/li&gt;
&lt;li&gt;Use specialised agents for repeated high-value workflows.&lt;/li&gt;
&lt;li&gt;Validate with tests and lint, and feed failures back into instructions.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;quick-audit-checklist&quot;&gt;Quick audit checklist&lt;/h4&gt;
&lt;p&gt;When the setup is in place, use this to evaluate it quickly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Model selection is intentional by task type.&lt;/li&gt;
&lt;li&gt;Global rules exist for workflow and security.&lt;/li&gt;
&lt;li&gt;Project rules exist for repo-specific conventions.&lt;/li&gt;
&lt;li&gt;Agent catalogue maps to real team workflows.&lt;/li&gt;
&lt;li&gt;Skills exist only for deep, repeated procedures.&lt;/li&gt;
&lt;li&gt;MCP servers are minimal, secure, and actively used.&lt;/li&gt;
&lt;li&gt;Prompts include explicit success criteria.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;further-reading&quot;&gt;Further reading&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/github/awesome-copilot&quot;&gt;awesome-copilot&lt;/a&gt;: community instructions, agents, skills, and prompts&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.github.com/en/copilot&quot;&gt;GitHub Copilot documentation&lt;/a&gt;: official reference for all features&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.github.com/en/copilot/concepts/agents/copilot-cli/about-copilot-cli&quot;&gt;Copilot CLI documentation&lt;/a&gt;: about the CLI, modes, and security considerations&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&quot;&gt;VS Code Copilot extension&lt;/a&gt;: extension page with changelog and settings reference&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;wrap-up&quot;&gt;Wrap up&lt;/h3&gt;
&lt;p&gt;The model table in this guide covers the cloud providers available through a Copilot subscription. If you want to cut cloud costs further or keep sensitive work entirely on your machine, running models locally is worth exploring. My next post covers exactly that: installing and tuning Ollama on Apple Silicon, choosing models by use case, and wiring local inference into VS Code Copilot and the CLI. It goes live June 4.&lt;/p&gt;
&lt;p&gt;If this guide helped, use it as a practical checklist this week: pick one primary model, tighten your instruction layers, and remove one source of prompt churn from your workflow. Then share what changed for you in the comments, or subscribe via the form at the end of this page to get the local AI follow-up as soon as it publishes.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/19468/github-copilot-for-engineers-getting-better-results</guid>
<pubDate>Tue, 02 Jun 2026 10:02:04 +0000</pubDate>
</item>
<item>
<title>My GitHub Copilot Sessions Kept Degrading -- So I Built a Skill to Fix It</title>
<link>https://coderlegion.com/17036/my-github-copilot-sessions-kept-degrading-so-i-built-a-skill-to-fix-it</link>
<description>&lt;p&gt;You've probably experienced this. You're 30 minutes into a productive Copilot agent session, things are flowing well -- and then something shifts. The agent asks you to clarify something it already knows. It repeats a question from earlier. The quality of the output quietly drops. You didn't change anything. What happened?&lt;/p&gt;
&lt;p&gt;Context ran out.&lt;/p&gt;
&lt;p&gt;Every Copilot session has a fixed token budget. Once that budget fills up, the model starts compressing or dropping older context. The result isn't an error message. It's subtle degradation -- and most developers don't even realize it's happening until they're already fighting it.&lt;/p&gt;
&lt;p&gt;I built a skill to address this directly. Here's what I learned.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-problem-isn-t-copilot-it-s-how-we-use-it-&quot;&gt;The problem isn't Copilot. It's how we use it.&lt;/h3&gt;
&lt;p&gt;After tracking a few weeks of agent sessions, I found five recurring patterns that burned through context faster than the actual work:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Re-reads&lt;/strong&gt;&lt;br&gt;
When the same instruction exists in multiple files, the agent reloads it every time it's referenced. I had rules duplicated across &lt;code&gt;copilot-instructions.md&lt;/code&gt; and individual skill files. Every time a skill loaded, it brought along content that was already in context. Fix: cross-cutting rules live in &lt;code&gt;references/*.md&lt;/code&gt; only. Skills link to them, never copy them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Reading entire files instead of snippets&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;read_file&lt;/code&gt; without &lt;code&gt;startLine&lt;/code&gt;/&lt;code&gt;endLine&lt;/code&gt; loads the full file -- every time. On a workspace with many skill files, this adds up fast. I also had &lt;code&gt;list_dir&lt;/code&gt; calls on the workspace root, which recursively indexed hundreds of paths I never needed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Too many tools active&lt;/strong&gt;&lt;br&gt;
Every loaded MCP tool takes up space in the system context -- even if it's never called. In agent mode, deferred tools should only be loaded via &lt;code&gt;tool_search&lt;/code&gt; when genuinely needed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Working too long in one session&lt;/strong&gt;&lt;br&gt;
After 15-20 messages, context compression begins. The agent doesn't tell you this. You notice it when output quality drops or earlier decisions get quietly reversed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Trial-and-error tool use&lt;/strong&gt;&lt;br&gt;
When an agent dives straight into tool calls without a plan, every failed attempt costs double tokens -- once for the call, once for the error. Requiring a written Plan of Action before any tool is invoked eliminates this entirely.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-skill-i-built&quot;&gt;The skill I built&lt;/h3&gt;
&lt;p&gt;I encoded all of this into a &lt;code&gt;token-hygiene&lt;/code&gt; skill:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;---
name: token-hygiene
description: &quot;Guidelines for efficient Copilot context management. Use when a session
  is slowing down, the agent is repeating questions, context is filling up, or when
  starting a complex multi-step task. Triggers: 'token', 'context full', 'session
  cleanup', 'new chat', 'load skill', 'terminal risk', 'plan of action',
  'context efficiency'.&quot;
version: &quot;1.0&quot;
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The skill body covers the five causes above, plus a pre-task checklist the agent can consult before starting any complex job:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Check &lt;/th&gt;&lt;th&gt;Action&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Is this info already in context? &lt;/td&gt;&lt;td&gt;Don't reload it&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Which skills do I actually need? &lt;/td&gt;&lt;td&gt;Load only those -- not preemptively&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Am I reading a large file? &lt;/td&gt;&lt;td&gt;Use &lt;code&gt;startLine&lt;/code&gt;/&lt;code&gt;endLine&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Searching with a broad term? &lt;/td&gt;&lt;td&gt;Use &lt;code&gt;grep_search&lt;/code&gt; instead of &lt;code&gt;semantic_search&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Complex multi-step task? &lt;/td&gt;&lt;td&gt;Write a Plan of Action first&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Been working in this session long? &lt;/td&gt;&lt;td&gt;Consider new chat + session memory&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Agent repeating a question? &lt;/td&gt;&lt;td&gt;Session is full -- save and restart&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-terminal-protocol-a-surprise-lesson&quot;&gt;The terminal protocol: a surprise lesson&lt;/h3&gt;
&lt;p&gt;While building this skill, I discovered something that surprised me. The &lt;code&gt;run_in_terminal&lt;/code&gt; tool has an &lt;code&gt;explanation&lt;/code&gt; parameter described as &lt;em&gt;&quot;This will be shown to the user before the command is run.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;That is not true.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;explanation&lt;/code&gt; parameter is not visible in the confirmation dialog. It's metadata for the tool system, not a user-facing message. This means if you rely on it to inform users about what a command does, they never see it.&lt;/p&gt;
&lt;p&gt;So I added a terminal protocol as a reference file. It requires the agent to write the explanation as a chat message &lt;em&gt;before&lt;/em&gt; the tool call -- not after, not inside the tool call. The message must cover:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What the command does in plain language&lt;/li&gt;
&lt;li&gt;Which files are read or modified&lt;/li&gt;
&lt;li&gt;Whether data leaves the system&lt;/li&gt;
&lt;li&gt;Whether the action is reversible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Combined with a risk classification matrix ([LOW] low / [MEDIUM] medium / [HIGH] high / [CRITICAL] critical), this makes every terminal action visible and deliberate.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;vs-code-indexing-a-silent-token-drain&quot;&gt;VS Code indexing: a silent token drain&lt;/h3&gt;
&lt;p&gt;One thing worth adding to your &lt;code&gt;.vscode/settings.json&lt;/code&gt; immediately:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;&quot;files.exclude&quot;: { &quot;out/&quot;: true, &quot;Output/&quot;: true },
&quot;search.exclude&quot;: { &quot;out/&quot;: true, &quot;Output/&quot;: true }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;VS Code indexes your entire workspace for search. Generated output folders -- HTML reports, screenshots, log files -- get included in search results and can end up as irrelevant context when the agent runs a workspace search. &lt;code&gt;.gitignore&lt;/code&gt; doesn't prevent this. Only &lt;code&gt;files.exclude&lt;/code&gt; and &lt;code&gt;search.exclude&lt;/code&gt; do.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-skill-structure&quot;&gt;The skill structure&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;.github/skills/token-hygiene/
  SKILL.md                            # Core skill -- 5 causes, checklist, VS Code tip
  references/
    terminal-protocol.md              # Required transparency rules for terminal calls
    terminal-risk-classification.md   # Risk matrix per command type
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The references are loaded on demand -- the agent only reads them when it actually needs to run a terminal command. This follows the progressive disclosure pattern I described in my previous post on reusable marketing skills.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-most-useful-thing-session-memory&quot;&gt;The most useful thing: session memory&lt;/h3&gt;
&lt;p&gt;The fix I use most often isn't even in the skill itself. At the end of any session longer than 15 messages, I ask:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;Summarize our progress as a short status update.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I paste that into the first message of the new chat. The agent has full context again in one message, without reloading a single file.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;manage_todo_list&lt;/code&gt; also helps here -- if the agent tracks tasks as it works, you never need to scroll back through the conversation to remember where you are.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-this-matters-more-than-you-d-expect&quot;&gt;Why this matters more than you'd expect&lt;/h3&gt;
&lt;p&gt;Token hygiene sounds like an optimization problem. It's actually a reliability problem.&lt;/p&gt;
&lt;p&gt;When context fills quietly, the agent doesn't fail loudly. It makes slightly worse decisions. It misremembers earlier choices. It starts contradicting itself in subtle ways. For short sessions, you might not notice. For longer, multi-step workflows -- publishing pipelines, multi-file refactors, anything with state -- the degradation compounds.&lt;/p&gt;
&lt;p&gt;Encoding these rules as a skill means I never have to think about them. The agent consults the checklist before complex tasks and follows the terminal protocol automatically. I just do the work.&lt;/p&gt;
&lt;p&gt;The repo: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/WilcoRakhorst/copilot-context-skills&quot;&gt;copilot-context-skills on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The previous post: &lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/wilcorakhorst/i-built-reusable-marketing-skills-for-github-copilot-heres-how-and-why-4l97&quot;&gt;I Built Reusable Marketing Skills for GitHub Copilot -- Here's How and Why&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What patterns have you noticed that drain context faster than they should? I'd like to expand the skill with more real-world examples.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/17036/my-github-copilot-sessions-kept-degrading-so-i-built-a-skill-to-fix-it</guid>
<pubDate>Fri, 08 May 2026 10:31:06 +0000</pubDate>
</item>
<item>
<title>I Built Reusable Marketing Skills for GitHub Copilot — Here's How (and Why)</title>
<link>https://coderlegion.com/16882/i-built-reusable-marketing-skills-for-github-copilot-heres-how-and-why</link>
<description>&lt;p&gt;What if your code editor could do keyword research, audit your SEO, and optimize your content for AI search engines — without leaving VS Code?&lt;/p&gt;
&lt;p&gt;I built a set of open-source agent skills that turn GitHub Copilot into a hands-on marketing strategist. Here's what I learned, how they work, and how you can use (or build) your own.&lt;/p&gt;
&lt;p&gt;The problem&lt;br&gt;
I run a small website. Every time I wanted to write a blog post, the workflow looked like this:&lt;/p&gt;
&lt;p&gt;Open Ahrefs/Semrush → research keywords&lt;br&gt;
Open Google Docs → write the article&lt;br&gt;
Open WordPress → publish and fill in SEO fields&lt;br&gt;
Open ChatGPT → rewrite for social media&lt;br&gt;
Repeat&lt;br&gt;
Five tools. Five context switches. And every time, I found myself giving the same SEO instructions to AI assistants: &quot;Use the keyword in the first paragraph&quot;, &quot;Write a meta description under 155 characters&quot;, &quot;Structure with H2/H3 headings&quot;...&lt;/p&gt;
&lt;p&gt;What if I could encode all that knowledge once, and have my AI assistant apply it automatically?&lt;/p&gt;
&lt;p&gt;The solution: Copilot Skills&lt;br&gt;
GitHub Copilot (in agent mode) can read SKILL.md files from your workspace. These files act as knowledge modules — they tell Copilot how to approach a domain, what rules to follow, and what frameworks to apply.&lt;/p&gt;
&lt;p&gt;I created four skills that cover the full marketing workflow:&lt;/p&gt;
&lt;p&gt;seo-keyword-research  →  Find what your audience searches for&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;seo-strategy          →  Structure your site to rank&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;geo-optimization      →  Get cited by AI search engines&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    ↓
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;content-creator       →  Write content that ranks AND gets cited&lt;br&gt;
What's inside a skill?&lt;br&gt;
A skill is just a Markdown file with structured knowledge. Here's a simplified look at the GEO (Generative Engine Optimization) skill:&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;name: geo-optimization&lt;br&gt;
description: &quot;Optimize content for AI search engines like ChatGPT, &lt;br&gt;
Gemini, and Perplexity. Use when the user mentions 'AI visibility', &lt;/p&gt;
&lt;h3 id=&quot;-geo-ai-search-or-cited-by-ai-&quot;&gt;'GEO', 'AI search', or 'cited by AI'.&quot;&lt;/h3&gt;
&lt;h2 id=&quot;geo-generative-engine-optimization&quot;&gt;GEO — Generative Engine Optimization&lt;/h2&gt;
&lt;h3 id=&quot;what-is-geo-&quot;&gt;What is GEO?&lt;/h3&gt;
&lt;p&gt;GEO = optimizing content so AI-powered search engines cite your &lt;br&gt;
brand in generated answers.&lt;/p&gt;
&lt;h3 id=&quot;geo-scorecard-16-criteria-&quot;&gt;GEO Scorecard (16 criteria)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Criterion &lt;/th&gt;&lt;th align=&quot;left&quot;&gt;Target&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;Authoritative tone &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Expert language, no hedging&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;Structured data &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Schema markup present&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;...&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;anti-patterns&quot;&gt;Anti-patterns&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Don't do this &lt;/th&gt;&lt;th align=&quot;left&quot;&gt;Why&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;Keyword stuffing &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;AI recognizes and skips it&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;...&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The description field is key — Copilot uses it to decide when to invoke the skill. The body contains the actual knowledge the AI applies.&lt;/p&gt;
&lt;p&gt;How it works in practice&lt;br&gt;
Here's what a real session looks like:&lt;/p&gt;
&lt;p&gt;Me: &quot;Do keyword research for a blog about home espresso machines&quot;&lt;/p&gt;
&lt;p&gt;Copilot (automatically invokes seo-keyword-research):&lt;/p&gt;
&lt;p&gt;Searches the web for related keywords&lt;br&gt;
Classifies intent (informational, commercial, transactional)&lt;br&gt;
Analyzes SERP features&lt;br&gt;
Outputs a structured keyword map with primary/secondary keywords, difficulty estimates, and content type recommendations&lt;br&gt;
Me: &quot;Now write the article and optimize it for AI search&quot;&lt;/p&gt;
&lt;p&gt;Copilot (invokes content-creator + geo-optimization):&lt;/p&gt;
&lt;p&gt;Writes with proper H2/H3 structure&lt;br&gt;
Includes the keyword in the first paragraph&lt;br&gt;
Adds statistics with citations (GEO requirement)&lt;br&gt;
Uses authoritative tone&lt;br&gt;
Ends with a clear conclusion (AI search engines need this)&lt;br&gt;
Generates meta title and description within character limits&lt;br&gt;
Me: &quot;Publish as draft to WordPress&quot;&lt;/p&gt;
&lt;p&gt;Copilot (uses REST API knowledge from seo-strategy):&lt;/p&gt;
&lt;p&gt;Creates the post via wp-json/wp/v2/posts&lt;br&gt;
Sets Yoast SEO meta fields&lt;br&gt;
Outputs the draft URL&lt;br&gt;
Total time: ~15 minutes. From zero to published draft with SEO metadata.&lt;/p&gt;
&lt;p&gt;The GEO angle: why AI search changes everything&lt;br&gt;
Here's something most developers don't think about: when someone asks ChatGPT &quot;what's the best espresso machine for beginners?&quot;, the answer comes from somewhere. That somewhere could be your website — but only if your content is structured in a way AI models can parse and trust.&lt;/p&gt;
&lt;p&gt;This is called Generative Engine Optimization (GEO). It's like SEO, but for AI search engines. The research (Aggarwal et al., 2024) shows that GEO techniques can boost visibility in AI-generated answers by up to 40%.&lt;/p&gt;
&lt;p&gt;My geo-optimization skill includes:&lt;/p&gt;
&lt;p&gt;A 16-criterion scorecard for AI-readiness&lt;br&gt;
Writing guidelines that balance human readability and AI parseability&lt;br&gt;
Anti-patterns (things that make AI skip your content)&lt;br&gt;
E-E-A-T implementation (Experience, Expertise, Authoritativeness, Trust)&lt;br&gt;
What I learned building these skills&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Skills need evidence, not opinions&lt;br&gt;
AI assistants hallucinate. If your skill says &quot;meta descriptions should be 155 characters&quot; without a source, Copilot might second-guess it or contradict itself later.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I added a sources file with links to Moz, Ahrefs, Google Search Central, and peer-reviewed papers. This makes the skill more reliable and more trustworthy for users.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The description field is your trigger&lt;br&gt;
Copilot decides which skill to invoke based on the description in the YAML frontmatter. Be specific about trigger words:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;description: &quot;Use when the user mentions 'SEO', 'search engine &lt;br&gt;
optimization', 'Google rankings', 'rank higher', 'meta tags'...&quot;&lt;br&gt;
The more trigger phrases you include, the more reliably it activates.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Structure &amp;gt; prose&lt;br&gt;
Tables, bullet lists, and clear headings work better than long paragraphs. The AI parses structured content faster and applies it more consistently.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Skills should reference each other&lt;br&gt;
My skills cross-link: the SEO strategy skill says &quot;for keyword research, see seo-keyword-research&quot;. This helps Copilot chain skills together in multi-step workflows.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Installation (30 seconds)&lt;br&gt;
git clone &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/WilcoRakhorst/helder-ai-marketing-skills.git&quot;&gt;https://github.com/WilcoRakhorst/helder-ai-marketing-skills.git&lt;/a&gt; .github/skills/marketing&lt;/p&gt;
&lt;p&gt;That's it. Open VS Code with Copilot agent mode, and start asking marketing questions. Copilot auto-discovers the skills.&lt;/p&gt;
&lt;p&gt;Or as a Git submodule (stays updatable):&lt;/p&gt;
&lt;p&gt;git submodule add &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/WilcoRakhorst/helder-ai-marketing-skills.git&quot;&gt;https://github.com/WilcoRakhorst/helder-ai-marketing-skills.git&lt;/a&gt; .github/skills/marketing&lt;/p&gt;
&lt;p&gt;Build your own skills&lt;br&gt;
The pattern works for any domain knowledge:&lt;/p&gt;
&lt;p&gt;Create a SKILL.md in .github/skills/your-skill/&lt;br&gt;
Add YAML frontmatter with name and description (include trigger words)&lt;br&gt;
Write structured knowledge — tables, checklists, decision trees&lt;br&gt;
Add references for any factual claims&lt;br&gt;
Test it — ask Copilot questions in the skill's domain and see if it gets invoked&lt;br&gt;
Domains that would benefit from this approach:&lt;/p&gt;
&lt;p&gt;Accessibility (WCAG guidelines as a skill)&lt;br&gt;
Security (OWASP Top 10 as actionable checklists)&lt;br&gt;
API design (REST/GraphQL conventions)&lt;br&gt;
Legal/compliance (GDPR, cookie consent rules)&lt;br&gt;
Brand guidelines (tone of voice, terminology)&lt;br&gt;
The repo&lt;br&gt;
GitHub: helder-ai/marketing-skills&lt;/p&gt;
&lt;p&gt;Licensed CC BY-NC 4.0 — free to use, adapt, and learn from.&lt;/p&gt;
&lt;p&gt;If you find it useful: ⭐ the repo, or open a PR if you have improvements. I'd especially love contributions from SEO practitioners who want to encode their expertise.&lt;/p&gt;
&lt;p&gt;What domain knowledge would you encode as a Copilot skill? Let me know in the comments!&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/16882/i-built-reusable-marketing-skills-for-github-copilot-heres-how-and-why</guid>
<pubDate>Wed, 06 May 2026 17:16:51 +0000</pubDate>
</item>
<item>
<title>GitHub Copilot Just Killed Flat-Rate AI Coding. Here's What It Means for Your Team.</title>
<link>https://coderlegion.com/16837/github-copilot-just-killed-flat-rate-ai-coding-heres-what-it-means-for-your-team</link>
<description>&lt;p&gt;On April 27, 2026, GitHub announced that &lt;strong&gt;all Copilot plans are moving to usage-based billing on June 1, 2026&lt;/strong&gt;. The flat &quot;premium request&quot; model is dead. Welcome to per-token pricing for AI coding assistants.&lt;/p&gt;
&lt;p&gt;If you're a solo developer, this might not change much. If you run an engineering team, you need to read this carefully — because your AI bill is about to become unpredictable in ways it wasn't before.&lt;/p&gt;
&lt;p&gt;Here's what's actually changing, why it's happening, and what you should do this month.&lt;/p&gt;
&lt;h3 id=&quot;what-s-changing&quot;&gt;What's Changing&lt;/h3&gt;
&lt;p&gt;Today, Copilot uses &lt;strong&gt;Premium Request Units (PRUs)&lt;/strong&gt;. You get a monthly bucket of requests, and every chat or agent prompt counts as one — regardless of whether it's a one-line question or a 30-minute autonomous coding session.&lt;/p&gt;
&lt;p&gt;Starting June 1, 2026:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PRUs are replaced by GitHub AI Credits&lt;/strong&gt; (1 credit = $0.01 USD)&lt;/li&gt;
&lt;li&gt;Every interaction is billed by &lt;strong&gt;token consumption&lt;/strong&gt; — input + output + cached tokens&lt;/li&gt;
&lt;li&gt;Each model has its own per-token rate, matching published API rates&lt;/li&gt;
&lt;li&gt;Code completions and Next Edit suggestions remain free across all plans&lt;/li&gt;
&lt;li&gt;Plan base prices are unchanged: Pro $10/mo, Pro+ $39/mo, Business $19/seat, Enterprise $39/seat&lt;/li&gt;
&lt;li&gt;Each plan includes monthly AI Credits equal to its subscription price (Pro = $10 in credits, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The big shift: a quick question and a multi-hour agentic session no longer cost the same.&lt;/p&gt;
&lt;h3 id=&quot;why-github-did-this&quot;&gt;Why GitHub Did This&lt;/h3&gt;
&lt;p&gt;Read between the lines of the &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.blog/news-insights/company-news/github-copilot-is-moving-to-usage-based-billing/&quot;&gt;official announcement&lt;/a&gt; and the picture is clear. Agentic coding broke the math.&lt;/p&gt;
&lt;p&gt;A single autonomous coding session — running across an entire repo, calling tools, iterating, retrying — can consume thousands of times more compute than a chat question. Under PRUs, both counted as &quot;one request.&quot; A handful of power users can cost more than the plan price covers.&lt;/p&gt;
&lt;p&gt;GitHub said it directly in their April 21 update on individual plans: &lt;em&gt;&quot;It's now common for a handful of requests to incur costs that exceed the plan price.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;That's not sustainable. Token-based billing aligns price with cost. It's the same reason every API provider has always priced this way.&lt;/p&gt;
&lt;h3 id=&quot;who-wins-who-loses&quot;&gt;Who Wins, Who Loses&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Wins:&lt;/strong&gt; Developers who mostly use code completions and light chat. You'll likely see no real change. Your $10 Pro plan probably never came close to using $10 in tokens.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Loses:&lt;/strong&gt; Heavy agent users. If you're running long-trajectory agentic workflows — multi-step refactors, autonomous bug-fixing across files, parallel subagents — you'll feel this. The same workflows that gave you outsized value under PRUs are exactly what's getting expensive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Maybe:&lt;/strong&gt; Teams. It depends entirely on how your developers actually use Copilot. Some companies will save money. Others will hit budget caps mid-month for the first time ever.&lt;/p&gt;
&lt;h3 id=&quot;the-annual-plan-trap&quot;&gt;The Annual Plan Trap&lt;/h3&gt;
&lt;p&gt;If you're on an annual Pro or Pro+ plan, GitHub is doing something clever and slightly hostile: you keep your existing PRU-based pricing until the plan expires — but &lt;strong&gt;model multipliers go up on June 1&lt;/strong&gt; for annual subscribers only.&lt;/p&gt;
&lt;p&gt;Translation: your existing annual plan gets quietly worse. You can either ride it out at degraded value, or convert to a monthly plan early and get prorated credit.&lt;/p&gt;
&lt;p&gt;If you're an annual subscriber, you should sit down before June 1 and decide which path actually saves you money. Don't ignore this.&lt;/p&gt;
&lt;h3 id=&quot;what-to-do-this-month&quot;&gt;What To Do This Month&lt;/h3&gt;
&lt;p&gt;For individual developers:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Check your current usage.&lt;/strong&gt; GitHub is launching a preview bill experience in early May. Look at your Billing Overview on github.com and see what your actual token consumption would have cost you the past few months.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit which models you use.&lt;/strong&gt; Different models have wildly different per-token rates. If you're defaulting to the most expensive premium model for tasks GPT-5 mini could handle, that habit is about to cost real money.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decide on annual vs monthly.&lt;/strong&gt; If you're on annual, run the numbers before June 1.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For engineering teams:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Set up budgets.&lt;/strong&gt; Admin-level budget controls let you cap spend at the enterprise, cost center, or user level. Use them. Without caps, one developer running parallel agent workflows can blow through your monthly credits in a week.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pool credits across the org.&lt;/strong&gt; GitHub now allows pooled included usage instead of per-seat isolation. This is genuinely useful — your light users effectively subsidize your heavy users without anyone changing behavior.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Educate your team on model selection.&lt;/strong&gt; &quot;Use the cheapest model that works for the task&quot; is now a real engineering practice with a real budget impact.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Watch out for Copilot code review.&lt;/strong&gt; It now consumes both AI Credits &lt;em&gt;and&lt;/em&gt; GitHub Actions minutes. Two meters running at once.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;the-bigger-picture&quot;&gt;The Bigger Picture&lt;/h3&gt;
&lt;p&gt;This isn't just a Copilot story. Every AI coding tool is heading the same direction — Cursor, Cody, Continue, Claude Code. Token-based pricing is becoming the default because flat-rate doesn't survive contact with agentic workloads.&lt;/p&gt;
&lt;p&gt;The era of &quot;$20/month gets you unlimited AI coding&quot; is over. What's replacing it is more honest, but also more demanding: you need to know what your AI usage actually costs, and you need to manage it like any other infrastructure spend.&lt;/p&gt;
&lt;p&gt;For teams that have been treating AI coding as a free productivity boost, that mental model needs to change before June 1.&lt;/p&gt;
&lt;p&gt;The good news: the tools to manage this are getting better. Budget controls, usage dashboards, and pooled credits all help. The bad news: you actually have to use them.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Originally published on &lt;a rel=&quot;nofollow&quot; href=&quot;https://lenkastudio.com/blog/github-copilot-usage-based-billing-what-it-means&quot;&gt;lenkastudio.com&lt;/a&gt;. We help teams ship modern web, mobile, and AI-powered products. If you're rethinking your AI dev tooling and budget for 2026, &lt;a rel=&quot;nofollow&quot; href=&quot;https://lenkastudio.com/contact&quot;&gt;let's talk&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/16837/github-copilot-just-killed-flat-rate-ai-coding-heres-what-it-means-for-your-team</guid>
<pubDate>Wed, 06 May 2026 07:58:02 +0000</pubDate>
</item>
<item>
<title>The Real Problem With AI Coding Isn’t Intelligence — It’s Continuity</title>
<link>https://coderlegion.com/13053/the-real-problem-with-ai-coding-isnt-intelligence-its-continuity</link>
<description>&lt;p&gt;Most AI coding failures are not caused by weak models.&lt;/p&gt;
&lt;p&gt;They happen because the system loses continuity.&lt;/p&gt;
&lt;p&gt;A model can generate decent code in one shot. It can explain architecture, suggest refactors, and help debug isolated issues. But once the work becomes long-running — once memory, role separation, evolving context, and multiple sessions enter the picture — many AI setups begin to break down.&lt;/p&gt;
&lt;p&gt;The problem is not just model quality.&lt;br&gt;
The problem is that most AI coding systems are still structured like stateless assistants.&lt;/p&gt;
&lt;p&gt;Real development work is not stateless.&lt;/p&gt;
&lt;p&gt;It has identity, history, unresolved threads, shifting priorities, and accumulated intent. If all of that gets mixed into one growing prompt, the system gradually loses coherence. The model may still sound capable, but the overall system becomes fragile. Context drifts. Memory bloats. Roles blur. Useful insights disappear into noise.&lt;/p&gt;
&lt;p&gt;That is why I have been building a persona-aware agent shell on top of GitHub Copilot.&lt;/p&gt;
&lt;p&gt;Not to make the AI feel more decorative.&lt;br&gt;
Not to give it a superficial personality layer.&lt;br&gt;
But to give long-running AI work a structure that can preserve continuity.&lt;/p&gt;
&lt;p&gt;What Usually Breaks&lt;/p&gt;
&lt;p&gt;In practice, AI coding systems often fail in very predictable ways.&lt;/p&gt;
&lt;p&gt;First, context keeps accumulating without changing shape. Every session adds more text, more reminders, more patches, more references. Over time, the system becomes heavier but not clearer. Memory turns into a dump.&lt;/p&gt;
&lt;p&gt;Second, identity and task state get mixed together. Core behavioral constraints, persistent preferences, recent session details, and the current request all compete in the same space. The model has to infer structure from a pile of text that was never properly separated.&lt;/p&gt;
&lt;p&gt;Third, roles become unstable. The same system is expected to be an architect, debugger, planner, note-taker, and companion without any explicit boundary between those functions. It may still produce useful output, but the internal operating pattern becomes inconsistent.&lt;/p&gt;
&lt;p&gt;Fourth, continuity is confused with accumulation. Many AI systems treat memory as “store more, keep more, append more.” But keeping everything is not the same as preserving coherence. In fact, over-accumulation often destroys it.&lt;/p&gt;
&lt;p&gt;This is why many systems look impressive in short demos and become unreliable in real, ongoing work.&lt;/p&gt;
&lt;p&gt;The Shift: From Prompting to Operating&lt;/p&gt;
&lt;p&gt;What changed my thinking was realizing that the real challenge was not how to prompt better.&lt;/p&gt;
&lt;p&gt;It was how to operate better.&lt;/p&gt;
&lt;p&gt;A useful AI system is not just a model plus instructions. It is an environment where intelligence can stay coherent over time.&lt;/p&gt;
&lt;p&gt;That means the structure around the model matters as much as the model itself.&lt;/p&gt;
&lt;p&gt;In my own work, I’ve been separating interaction into four layers:&lt;/p&gt;
&lt;p&gt;Persona Core&lt;br&gt;
The stable identity layer. This is where role, tone, priorities, boundaries, and deep behavioral shape live.&lt;/p&gt;
&lt;p&gt;Persistent Context&lt;br&gt;
The compressed continuity layer. Not everything that happened, but the parts that still matter.&lt;/p&gt;
&lt;p&gt;Session Context&lt;br&gt;
The active working state for the current thread or task.&lt;/p&gt;
&lt;p&gt;Current User Request&lt;br&gt;
The immediate prompt or instruction.&lt;/p&gt;
&lt;p&gt;This separation sounds simple, but it changes everything.&lt;/p&gt;
&lt;p&gt;Instead of forcing the model to infer which details are permanent, which are temporary, and which are urgent, the system gives those distinctions explicit structure. The result is not just cleaner output. It is more stable long-running behavior.&lt;/p&gt;
&lt;p&gt;Why Memory Should Be Recompressed, Not Accumulated&lt;/p&gt;
&lt;p&gt;This has become one of the strongest design principles in my system:&lt;/p&gt;
&lt;p&gt;Memory should be recompressed, not endlessly accumulated.&lt;/p&gt;
&lt;p&gt;If memory is treated as an append-only log, it eventually becomes a burden. The system spends more effort carrying history than using it.&lt;/p&gt;
&lt;p&gt;But continuity does not require full preservation of every detail.&lt;br&gt;
It requires preservation of shape.&lt;/p&gt;
&lt;p&gt;What matters is not whether the system remembers every message.&lt;br&gt;
What matters is whether it retains the right patterns:&lt;/p&gt;
&lt;p&gt;identity&lt;/p&gt;
&lt;p&gt;priorities&lt;/p&gt;
&lt;p&gt;unresolved tensions&lt;/p&gt;
&lt;p&gt;recurring preferences&lt;/p&gt;
&lt;p&gt;meaningful changes&lt;/p&gt;
&lt;p&gt;active trajectories&lt;/p&gt;
&lt;p&gt;That is a very different problem from raw storage.&lt;/p&gt;
&lt;p&gt;Recompression means periodically turning lived interaction into a smaller, more structured continuity object. It is closer to memory consolidation than transcript hoarding.&lt;/p&gt;
&lt;p&gt;In practical terms, this helps prevent the familiar fate of many AI systems: they become larger in context, but weaker in direction.&lt;/p&gt;
&lt;p&gt;Why Persona Structure Matters&lt;/p&gt;
&lt;p&gt;The word “persona” is often misunderstood in AI discussions.&lt;/p&gt;
&lt;p&gt;People assume it means style. Or roleplay. Or cosmetic behavior.&lt;/p&gt;
&lt;p&gt;That is not how I use it.&lt;/p&gt;
&lt;p&gt;In my system, persona is an operational unit.&lt;/p&gt;
&lt;p&gt;It is a way to preserve differentiated behavior, stable role orientation, and long-term continuity in a multi-agent or multi-context environment. Persona is not there to make the model sound more human. It is there to make the system more structurally coherent.&lt;/p&gt;
&lt;p&gt;A good persona layer can help answer questions like:&lt;/p&gt;
&lt;p&gt;What kind of attention should this agent bring?&lt;/p&gt;
&lt;p&gt;What should remain stable across sessions?&lt;/p&gt;
&lt;p&gt;What kind of memory matters to this role?&lt;/p&gt;
&lt;p&gt;Where should responsibility begin and end?&lt;/p&gt;
&lt;p&gt;How should continuity be compressed without losing identity?&lt;/p&gt;
&lt;p&gt;That is why I call it a persona-aware shell, not just a prompt wrapper.&lt;/p&gt;
&lt;p&gt;The shell is doing operational work.&lt;/p&gt;
&lt;p&gt;What This Looks Like in Practice&lt;/p&gt;
&lt;p&gt;The system I’ve been building is centered in a VS Code extension workflow, with persona definitions stored as structured YAML assets and working memory stored separately as persistent context files.&lt;/p&gt;
&lt;p&gt;That distinction matters.&lt;/p&gt;
&lt;p&gt;Core identity should not be mixed with lived memory.&lt;br&gt;
Role should not be mixed with recent state.&lt;br&gt;
Continuity should not be reduced to raw chat history.&lt;/p&gt;
&lt;p&gt;By separating these layers, the system can support long-running interaction without collapsing into prompt sprawl.&lt;/p&gt;
&lt;p&gt;This has also changed how I think about AI coding itself.&lt;/p&gt;
&lt;p&gt;The most important improvement is not that the model writes more code.&lt;br&gt;
It is that the surrounding system loses less shape.&lt;/p&gt;
&lt;p&gt;Once continuity is preserved, the AI becomes more useful not only as a code generator, but as a participant in a sustained development loop: observing, planning, remembering, resuming, and refining.&lt;/p&gt;
&lt;p&gt;That is a different category of usefulness.&lt;/p&gt;
&lt;p&gt;The Deeper Lesson&lt;/p&gt;
&lt;p&gt;The real bottleneck in AI coding is often not intelligence.&lt;/p&gt;
&lt;p&gt;It is continuity.&lt;/p&gt;
&lt;p&gt;Not whether the model can solve a problem once, but whether the system can keep a coherent relationship to the problem over time.&lt;/p&gt;
&lt;p&gt;That is why I think the future of AI development systems will not be defined by prompting tricks alone. It will be defined by operating structure:&lt;/p&gt;
&lt;p&gt;memory architecture&lt;/p&gt;
&lt;p&gt;role boundaries&lt;/p&gt;
&lt;p&gt;continuity compression&lt;/p&gt;
&lt;p&gt;task layering&lt;/p&gt;
&lt;p&gt;long-running coherence&lt;/p&gt;
&lt;p&gt;In other words, better outputs are not enough.&lt;/p&gt;
&lt;p&gt;What we need are better conditions for intelligence to remain intelligible.&lt;/p&gt;
&lt;p&gt;That is the direction I’m building toward.&lt;/p&gt;
&lt;p&gt;Not just a smarter assistant.&lt;br&gt;
A more stable operating structure for intelligence.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/13053/the-real-problem-with-ai-coding-isnt-intelligence-its-continuity</guid>
<pubDate>Tue, 17 Mar 2026 12:53:08 +0000</pubDate>
</item>
<item>
<title>How GitHub Copilot Helped Me Roast Its Own Users</title>
<link>https://coderlegion.com/11243/how-github-copilot-helped-me-roast-its-own-users</link>
<description>&lt;blockquote&gt;&lt;p&gt;What if GitHub Copilot didn’t just help you write code but judged you for it?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-i-built&quot;&gt;What I Built&lt;/h3&gt;
&lt;p&gt;I had been waiting for a challenge that truly sounded like me for a long time, and that’s when the GitHub Copilot CLI Challenge showed up.&lt;/p&gt;
&lt;p&gt;Within five minutes, the idea that popped into my head was to use Copilot CLI to do something with Copilot itself.&lt;/p&gt;
&lt;p&gt;That’s when the idea of roasting the user for their GitHub Copilot usage came up.&lt;/p&gt;
&lt;p&gt;Then I started wondering how to implement it.&lt;/p&gt;
&lt;p&gt;Whether to build something that runs in the terminal but that would consume RAM.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Should I try a different approach?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That’s when the idea of a VS Code extension popped up (GitHub CLI actually helped me there ).&lt;/p&gt;
&lt;p&gt;This was my first time using an AI pair programmer to help me build a project completely, because I had never built, or even thought about creating a VS Code extension before.&lt;/p&gt;
&lt;p&gt;The roasts are static for now and don’t use AI, because I couldn’t afford an API key .&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;demo&quot;&gt;Demo&lt;/h3&gt;
&lt;p&gt;Click the following link:&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://marketplace.visualstudio.com/items?itemName=VigneshJ.copilot-roaster&quot;&gt;Copilot Roaster Extension&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Install the extension using the link.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p8kd7cmoa87g3e4bp5dn.png&quot; alt=&quot;Extenstion&quot;&gt;&lt;/p&gt;
&lt;p&gt;And your setup is complete.&lt;/p&gt;
&lt;p&gt;Then, open any sample file to test it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z8739gfssiuep4wghrca.png&quot; alt=&quot;Sample File&quot;&gt;&lt;/p&gt;
&lt;p&gt;Ask GitHub Copilot to write something and accept its suggestion to see the magic ✨&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y256grfxydcbfngkdcru.png&quot; alt=&quot;Copilot Chat&quot;&gt;&lt;/p&gt;
&lt;p&gt;Find my demo below:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.loom.com/share/e9206dad95044bdba7127ad198710722&quot;&gt;Demo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can find the GitHub repository &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Vignesh025/copilot-roast-extension&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Feel free to fork, modify, and upgrade it.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;my-experience-with-github-copilot-cli&quot;&gt;My Experience with GitHub Copilot CLI&lt;/h3&gt;
&amp;lt;!-- Explain how you used GitHub Copilot CLI while building your project and how it impacted your development experience. --&amp;gt;
&lt;p&gt;This was my first time using an AI pair programmer in the CLI. I was really excited to see how it worked. After installing it and typing copilot in the terminal, it felt like magic when this showed up.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vre4uytrbplpzkp3dzed.png&quot; alt=&quot;Copilot CLI&quot;&gt;&lt;/p&gt;
&lt;p&gt;I started wondering how it would work,  which subscription it would use and which profile it would be linked to.&lt;/p&gt;
&lt;p&gt;While thinking about all this, I typed a prompt, and that’s when I got an error saying I needed to log in to proceed further.&lt;/p&gt;
&lt;p&gt;First, we need to use /login to sign in with our GitHub account.&lt;/p&gt;
&lt;p&gt;After that, everything was smooth. The suggestions were almost exactly what I expected (maybe my prompt was too good ).&lt;/p&gt;
&lt;p&gt;Then I tweaked things a bit, and tadaaa &lt;/p&gt;
&lt;p&gt;The extension was ready and looked cool.&lt;/p&gt;
&lt;p&gt;I added a few more roasts just to make sure the same ones didn’t repeat.&lt;/p&gt;
&lt;p&gt;Then I published it on the Marketplace.&lt;/p&gt;
&lt;p&gt;GitHub Copilot CLI provided me with the exact steps to publish the extension, because I had no clue how to do it and the whole process was smooth as well.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;So go ahead, install the extension, let Copilot write your code, and brace yourself… because this time, you’re the one getting reviewed &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Follow me on&lt;/em&gt;&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.linkedin.com/in/vigneshj-&quot;&gt;&lt;em&gt;Linkedin&lt;/em&gt;&lt;/a&gt; | &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Vignesh025&quot;&gt;&lt;em&gt;GitHub&lt;/em&gt;&lt;/a&gt; | &lt;a rel=&quot;nofollow&quot; href=&quot;https://x.com/vigneshtwt_&quot;&gt;&lt;em&gt;Twitter&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Subscribe to my &lt;a rel=&quot;nofollow&quot; href=&quot;https://thedeveloperstack.substack.com&quot;&gt;newsletter&lt;/a&gt; and get articles delivered straight to your inbox.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/11243/how-github-copilot-helped-me-roast-its-own-users</guid>
<pubDate>Sun, 08 Feb 2026 07:19:53 +0000</pubDate>
</item>
</channel>
</rss>