<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Emanuele Bartolesi</title>
    <description>The latest articles on DEV Community by Emanuele Bartolesi (@kasuken).</description>
    <link>https://dev.to/kasuken</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F79932%2Fbe7bcd76-1f69-4336-9155-6017aebb2c53.png</url>
      <title>DEV Community: Emanuele Bartolesi</title>
      <link>https://dev.to/kasuken</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kasuken"/>
    <language>en</language>
    <item>
      <title>I can build the product with AI. Getting the first users is harder.</title>
      <dc:creator>Emanuele Bartolesi</dc:creator>
      <pubDate>Tue, 10 Nov 2026 20:37:14 +0000</pubDate>
      <link>https://dev.to/playfulprogramming/i-can-build-the-product-with-ai-getting-the-first-users-is-harder-1pap</link>
      <guid>https://dev.to/playfulprogramming/i-can-build-the-product-with-ai-getting-the-first-users-is-harder-1pap</guid>
      <description>&lt;p&gt;With Brainy and MoneyBrain, getting the first users and growing monthly recurring revenue has been harder than building the software.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;November 12, 2026 update.&lt;/strong&gt; After a reader asked how people outside my network found the product, I added what happened after I worked on SEO with dotcraft. I also added a Brainy example covering keyword research in Semrush, tracking search clicks and sign-ups, and using Microsoft Clarity to see where visitors drop off. Jump to the SEO update&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At the beginning, I used my circles on LinkedIn. It gave me somewhere to start talking about the products. Expanding beyond that network has been difficult, especially without a large budget.&lt;/p&gt;

&lt;p&gt;That is where I want to pick up from my &lt;a href="https://dev.to/playfulprogramming/how-i-build-products-with-ai-from-a-brainstorm-to-a-production-release-3h3f"&gt;previous post about building products with AI&lt;/a&gt;. In that post, I described how I move from a brainstorm to requirements, GitHub issues, implementation, and a reviewed pull request. I can give the implementation work a scope and check the result against it.&lt;/p&gt;

&lt;p&gt;Finding users leaves me with questions I am still working through: where to reach people who need the product, and why they would try it, return, and eventually pay.&lt;/p&gt;

&lt;h2&gt;
  
  
  My network gave me a place to start
&lt;/h2&gt;

&lt;p&gt;Talking about Brainy and MoneyBrain on LinkedIn was a reasonable first step. I already had people I could reach there, rather than starting with an empty account and hoping someone would find a product announcement.&lt;/p&gt;

&lt;p&gt;But a professional network is a particular audience. Someone can be interested in how I build software without needing either product. A post about my AI workflow and a post explaining why someone should use an application ask for different kinds of attention.&lt;/p&gt;

&lt;p&gt;More visibility for me would be useful, but I also need to understand which people have the problem the product addresses. Otherwise, I could spend more time promoting it and still learn very little about demand.&lt;/p&gt;

&lt;p&gt;A screenshot of a SaaS advice post brought this back into focus. It covered familiar recommendations: promote the product, talk to users, keep the first version small, use it yourself, and pay attention to people who leave.&lt;/p&gt;

&lt;p&gt;Reading those points alongside my experience, I kept returning to the difficulty of reaching the next group of people without a large budget.&lt;/p&gt;

&lt;p&gt;The post puts most of the work after launch into marketing. I would not assign a fixed percentage to it, but I agree with the underlying reminder: launching leaves a substantial amount of work ahead. For my current goal of finding users, time spent explaining the product and following up with people deserves a place in the schedule alongside implementation. Another completed issue does not tell me whether anyone new understood the offer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some users found me through search
&lt;/h2&gt;

&lt;p&gt;A reader asked whether anyone outside my network had found one of the products. Yes. I spent a lot of time on SEO for the public website, including using the &lt;code&gt;seo&lt;/code&gt; skill in dotcraft to guide that work. After that, people outside my LinkedIn circles found the site through organic search and became users. &lt;a href="https://github.com/kasuken/dotcraft#product-and-delivery" rel="noopener noreferrer"&gt;dotcraft&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That gave me a way to reach someone who was already looking for a solution. On LinkedIn, people often know me for how I build software. A visitor arriving from search has a different starting point. They want to know whether the product solves the problem they searched for.&lt;/p&gt;

&lt;h3&gt;
  
  
  How I would research one page for Brainy
&lt;/h3&gt;

&lt;p&gt;Say I want to reach someone who keeps project notes in one app and tracks the follow-up tasks somewhere else. Here's how I'd research a page for that person.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with the problem.&lt;/strong&gt; I'd put &lt;code&gt;organize project notes&lt;/code&gt; into Semrush's Keyword Magic Tool, select the country I'm targeting, and use the Questions filter to find more specific ways people ask about the problem. I'd use the estimated search volume and keyword difficulty to shortlist terms, then search for those terms myself. If the results are mostly tutorials, I'd write a guide. If they're mostly comparisons, I'd expect readers to want help choosing an app. &lt;a href="https://www.semrush.com/kb/262-keyword-magic-tool" rel="noopener noreferrer"&gt;Semrush Keyword Magic Tool&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Give the page one job.&lt;/strong&gt; For a query like &lt;code&gt;how to turn project notes into tasks&lt;/code&gt;, I'd write a short walkthrough using a sample project. I'd show where I capture a meeting note in Brainy, how I connect it to the project, and where I put the next task. I'd use dotcraft's &lt;code&gt;seo&lt;/code&gt; skill to review whether the title matches the walkthrough and whether the page can be indexed.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;See what happens after the click.&lt;/strong&gt; In Google Search Console, I'd filter the Search results report to that page and look at the queries, impressions, and clicks. If I already had a site with search traffic, those queries could also give me a starting list for step one. Separately, I'd use site or product analytics to see whether visitors from organic search sign up and complete the task the guide demonstrates. That tells me whether the page is bringing in people who go on to use the product. &lt;a href="https://support.google.com/webmasters/answer/10268906" rel="noopener noreferrer"&gt;Search Console performance report&lt;/a&gt; · &lt;a href="https://support.google.com/analytics/answer/10737381" rel="noopener noreferrer"&gt;Search Console and Analytics&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Look at where visitors drop off.&lt;/strong&gt; I also use Microsoft Clarity to see how visitors move through the public website. Heatmaps show where they click and how far they scroll, and session recordings let me look more closely at what happened before they left. For the Brainy example, I'd set up a funnel from the guide to the sign-up page to a completed sign-up. Clarity shows the count and percentage of sessions that stop at each step. If people leave the guide before reaching the sign-up link, I'd check the scroll map and watch a few recordings to see whether the link is easy to miss. &lt;a href="https://learn.microsoft.com/en-us/clarity/setup-and-installation/funnels" rel="noopener noreferrer"&gt;Clarity funnels&lt;/a&gt; · &lt;a href="https://learn.microsoft.com/en-us/clarity/heatmaps-overview" rel="noopener noreferrer"&gt;Clarity heatmaps&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftckimg3un4n4zien8re7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftckimg3un4n4zien8re7.jpg" alt="Microsoft Clarity's public homepage with a sample analytics dashboard and links to session recordings and heatmaps." width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Screenshot of the public Microsoft Clarity homepage. The dashboard figures shown are part of Microsoft's demo.&lt;/em&gt; &lt;a href="https://clarity.microsoft.com/" rel="noopener noreferrer"&gt;Microsoft Clarity&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Reaching outside my LinkedIn circles
&lt;/h2&gt;

&lt;p&gt;The encouragement to promote the product openly is useful. Staying entirely within my familiar LinkedIn circles would leave the same audience boundary in place. I need to be willing to explain what I have built somewhere people do not already know me, and to hear that it may not be relevant to them.&lt;/p&gt;

&lt;p&gt;I could make a long list of places to post. Each one would take time to understand, participate in, and follow up on. I would also have to decide what to say there, because a product announcement that makes sense to my LinkedIn contacts may mean very little to a stranger.&lt;/p&gt;

&lt;p&gt;For Brainy and MoneyBrain, I would rather make the next attempt narrow enough to learn from. Pick one product, one specific problem, and one place where people already discuss that problem. Then explain or demonstrate the part of the product that addresses it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn9d4gftkpd9u2nubtpsd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn9d4gftkpd9u2nubtpsd.png" alt="A small outreach experiment: choose Brainy or MoneyBrain, demonstrate one task, and share it where people already discuss the problem." width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also need to make that choice separately for each product. The fact that I built both does not mean the same people need both, or that the same explanation will persuade them. Putting their names into one announcement is convenient for me; a potential user needs a reason to care about the particular application in front of them.&lt;/p&gt;

&lt;p&gt;I could examine the result: did people recognize the problem, ask how the product handles their situation, or try it?&lt;/p&gt;

&lt;p&gt;If the only response is interest in the technology behind it, that would tell me something too. I might have reached other builders, or explained the implementation more clearly than the reason to use the product.&lt;/p&gt;

&lt;p&gt;I feel the budget constraint, but I do not want to turn that into a conclusion that growth requires a large advertising spend. I have not established that. Before spending more, I want a clearer idea of whom I am trying to reach and what I can show them.&lt;/p&gt;

&lt;p&gt;A useful next asset could be a short walkthrough of one task, using demonstration data and showing the result. I could use it in a relevant conversation, give the landing page something concrete to show, and learn which part needs more explanation. A tutorial answering a question prospective users already ask could also become something they can find or share later. These would give me more to work with than repeatedly announcing that the product exists.&lt;/p&gt;

&lt;p&gt;A community, a search-focused article, or a collaboration needs to earn the time I put into it. A channel with no advertising bill still costs time. Participating well in a community means reading the discussions, respecting its rules, and contributing something useful before expecting attention for my application.&lt;/p&gt;

&lt;h2&gt;
  
  
  The alternative is often something people already do
&lt;/h2&gt;

&lt;p&gt;Before writing that walkthrough, I need to understand what the person would replace. They might already have a tool, a document, or a routine that handles the task adequately. Moving to my product could mean learning another interface and spending time setting it up before they see a benefit.&lt;/p&gt;

&lt;p&gt;My own &lt;a href="https://dev.to/playfulprogramming/moving-to-european-digital-services-one-decision-at-a-time-3j68"&gt;move from Notion to Brainy&lt;/a&gt; is a useful example of an existing workflow being involved. It gives me a case to examine, but another person's reasons to change could be different. I need to ask which part of their current approach is frustrating enough to justify the effort of switching.&lt;/p&gt;

&lt;p&gt;That should shape the product description. Explaining the task someone can complete gives them a way to judge the offer. Describing my AI-assisted development process tells them how I made it. I enjoy talking about that process, and it belongs in the previous post, but it may have little bearing on a person's decision to use Brainy or MoneyBrain.&lt;/p&gt;

&lt;p&gt;Even the comparison with competitors needs this context. A competing subscription price tells me one thing about the market; a person's current workaround tells me what I would have to improve. If their approach is already good enough, I need to understand that answer instead of assuming another feature will persuade them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first visit needs somewhere useful to go
&lt;/h2&gt;

&lt;p&gt;Someone outside my network needs to understand the product without knowing my background. That makes the advice about the landing page and sign-up process more relevant.&lt;/p&gt;

&lt;p&gt;A useful check would be to ask someone unfamiliar with the project to look at the page and explain what they think it does. Then ask them to attempt its main task. I would want to see where they hesitate before adding another feature to the backlog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F06jp2iol7rxixwfruolo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F06jp2iol7rxixwfruolo.png" alt="Two onboarding checks: ask someone to explain the product from its landing page, then watch where they hesitate while trying the main task." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is how I read the advice to make a landing page clean, fast, and convincing. Keep the page focused, check how it loads on a phone, and show a concrete use of the product. A polished layout still needs to help that unfamiliar visitor decide whether to try it.&lt;/p&gt;

&lt;p&gt;Google login might remove a step for some people. It cannot explain an unclear product promise, and I would not treat it as an automatic requirement for every audience. The question I want to investigate is where a prospective user gets stuck between understanding the offer and experiencing something useful.&lt;/p&gt;

&lt;p&gt;Using my own product regularly gives me a way to notice friction in ordinary tasks. In my earlier post about moving to European digital services, I described replacing Notion with Brainy. That is a useful starting point for testing a real workflow. But I know the product's intended behavior and can navigate around something that another person would find confusing. My familiarity is a reason to get an outside view, especially when I am asking that person to trust a new product.&lt;/p&gt;

&lt;p&gt;Keeping the minimum viable product small belongs in this discussion too. I want enough functionality to let someone complete the task that brought them there. Adding features before understanding that task could make both the explanation and the first visit more complicated.&lt;/p&gt;

&lt;p&gt;The screenshot names MoSCoW as a way to keep that scope under control: Must Have, Should Have, Could Have, and Won't Have this time. The &lt;a href="https://www.agilebusiness.org/resource/what-is-moscow-prioritization/" rel="noopener noreferrer"&gt;Agile Business Consortium explains those priorities&lt;/a&gt;. For a first release, I would ask whether leaving a feature out prevents the intended user from completing the core task. If it does not, I need a good reason to put it ahead of learning from users.&lt;/p&gt;

&lt;p&gt;For the first users, I would also consider helping them through that task personally. &lt;a href="https://paulgraham.com/ds.html" rel="noopener noreferrer"&gt;Paul Graham's essay on doing things that don't scale&lt;/a&gt; argues for recruiting early users manually and paying close attention to their experience. I can see a practical application here: offer a short walkthrough, watch where the person needs help, and use that observation to improve the next attempt.&lt;/p&gt;

&lt;p&gt;If I have to explain the same step to everyone, that gives me something specific to investigate in the interface or instructions. If each person wants a completely different outcome, I need to revisit the audience and scope. Automating the welcome messages before understanding those differences could leave me sending more people through a confusing experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trust is part of the first useful experience
&lt;/h2&gt;

&lt;p&gt;There is another reason someone might hesitate even after understanding the product: they have to decide whether to put their information into it. A demonstration with sample data can reduce the effort needed to evaluate the workflow, but using the application for real asks for more trust.&lt;/p&gt;

&lt;p&gt;For any task involving personal or financial information, I would want the product to explain what it stores, what happens to that information, and how a person can leave. Those explanations need to match the actual implementation. I cannot make a privacy or security promise simply because it would look reassuring on the landing page.&lt;/p&gt;

&lt;p&gt;Support belongs in that decision too. A person should be able to find a way to report a problem and understand what help they can reasonably expect. As an independent builder, I need to be honest about that commitment. Offering personal onboarding is useful only if I leave enough time to follow through.&lt;/p&gt;

&lt;p&gt;This is part of what makes a small MVP a serious product decision. I can defer optional features while still needing a dependable core workflow. If the application loses the work someone just entered, a smaller backlog does not make their experience acceptable. The scope has to include the behavior people rely on, and I need to check it before asking them to move a real task into the application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Growing MRR asks more than whether someone signed up
&lt;/h2&gt;

&lt;p&gt;The screenshot recommends charging from day one instead of offering free trials. There is a useful question behind that advice: will someone pay for the outcome? A payment is more direct evidence of willingness to pay than an encouraging comment on LinkedIn.&lt;/p&gt;

&lt;p&gt;I would still make the trial decision around the product. If someone needs to use it with their own information or across several days to judge the benefit, a trial could help them decide. If the value can be demonstrated clearly before purchase, charging immediately may make sense. I would not dismiss every free user as unserious; their experience can reveal a problem that also affects paying users.&lt;/p&gt;

&lt;p&gt;Monthly recurring revenue is an objective I care about. To make progress toward it, I need to understand what would justify an ongoing payment from the people I am trying to reach. Choosing a price or removing a free trial does not answer that question on its own.&lt;/p&gt;

&lt;p&gt;The advice to price based on value is more useful to me than copying another application's subscription page. I would want to ask about the task a person is doing now: how they handle it, what is frustrating, and what a useful improvement would look like. Time saved, a recurring task made easier, or a mistake avoided could give the discussion a concrete basis. Those are possibilities to investigate, not benefits I can assign a monetary value to without talking to people.&lt;/p&gt;

&lt;p&gt;Those conversations could happen through a DM, an email, or a short call, depending on what the person prefers. A focused question about what they tried to do would give me more to work with than asking whether they like the product. I would also want to hear from someone who created an account and then stopped, rather than only from people willing to praise it.&lt;/p&gt;

&lt;p&gt;This is where retention belongs alongside the work of finding new users. If people try the product and do not return, reaching a larger audience leaves that question unresolved. I would want to understand repeated use before scaling the same acquisition attempt. For a recurring subscription, whether people keep finding a reason to use the product matters to the revenue goal too.&lt;/p&gt;

&lt;p&gt;If a person leaves, an optional conversation could help explain what happened. I would make unsubscribing or cancelling straightforward, and respect a person who does not want to explain. An email opt-out might mean they want fewer messages; a product cancellation asks a different question. Either can be feedback, but neither gives me a reason to argue with their decision.&lt;/p&gt;

&lt;p&gt;I also need to understand the expected frequency of the task. Someone may get value from a product every week or at a particular point in the month. Daily activity would be a poor way to judge that experience if daily use was never the goal. I would look for people returning when the need occurs and completing the task they came for.&lt;/p&gt;

&lt;p&gt;Feedback from those conversations needs a decision attached to it. A request for another feature might reveal a missing step in the core workflow, or it might describe a different product. I would record what the person was trying to accomplish before putting the request into the backlog. That gives me a way to compare it with other needs instead of letting the most recent message determine the next epic.&lt;/p&gt;

&lt;h2&gt;
  
  
  I need to know where the attempt stops working
&lt;/h2&gt;

&lt;p&gt;Once I start trying channels outside LinkedIn, a total sign-up count will leave too much unexplained. I want enough visibility to distinguish a message that people never saw from a product they tried and then abandoned.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9g2fzr3z584lsq9fxdky.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9g2fzr3z584lsq9fxdky.png" alt="Six stages to check for drop-off: discover the product, visit the page, sign up, finish the main task, return, and pay." width="799" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A simple record could follow the path from first contact to continued use:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;What I would try to learn&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Someone encounters the product&lt;/td&gt;
&lt;td&gt;Which conversation, post, article, or recommendation brought them there?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;They visit the page&lt;/td&gt;
&lt;td&gt;Can they understand the problem it addresses and the next action?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;They create an account&lt;/td&gt;
&lt;td&gt;Where do they hesitate or leave during registration?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;They complete the main task&lt;/td&gt;
&lt;td&gt;Do they get the outcome that made them try it?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;They return when needed&lt;/td&gt;
&lt;td&gt;Does the product fit an ongoing need?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;They begin or continue paying&lt;/td&gt;
&lt;td&gt;What makes the ongoing price worthwhile to them?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That main task needs a definition for each product before its completion becomes a useful signal. Opening a dashboard might only show that registration worked. The meaningful action should reflect what the person wanted to accomplish, and any measurement should collect only the information needed to understand that behavior.&lt;/p&gt;

&lt;p&gt;With a small number of users, raw counts and conversations need to sit alongside any percentages. A few people leaving at one step would justify looking at it; it would not give me a reliable explanation of why everyone leaves. The channel context matters too. People arriving from my existing network may behave differently from people encountering the product for the first time.&lt;/p&gt;

&lt;p&gt;This could make the next decision more specific. If people understand the offer but cannot finish the task, I have something to investigate in the product. If the people I reach do not recognize the problem, I need to examine the audience or message. Changing both at once would make it harder to understand what helped.&lt;/p&gt;

&lt;h2&gt;
  
  
  The costs behind the MRR goal
&lt;/h2&gt;

&lt;p&gt;MRR also needs more detail than one rising total. &lt;a href="https://stripe.com/resources/more/what-is-monthly-recurring-revenue" rel="noopener noreferrer"&gt;Stripe's explanation of monthly recurring revenue&lt;/a&gt; separates growth from new subscriptions and existing customers increasing their subscriptions, and reductions from cancellations or downgrades. Those movements describe different situations that I would want to understand separately.&lt;/p&gt;

&lt;p&gt;For example, new subscriptions could increase the total while existing subscribers leave. I would want to see both movements before deciding to repeat the acquisition effort. A larger total on its own would not explain whether the product is keeping the users it already reached.&lt;/p&gt;

&lt;p&gt;Then I need to compare recurring revenue with the costs of providing the service. Hosting, payment processing, and support take resources. Where a product uses paid external services, their usage belongs in that calculation too. MRR measures recurring revenue; it does not show what remains after those costs.&lt;/p&gt;

&lt;p&gt;The implementation workflow has costs as well, and the time spent helping users has to fit into the week. Even if AI makes an implementation task cheaper for me, I still need to maintain the behavior it introduces and answer questions about it. That is another reason to keep the scope of a growth experiment manageable.&lt;/p&gt;

&lt;p&gt;A lifetime deal offered simply to produce early cash would deserve particular scrutiny. An ongoing service creates ongoing work, while a one-time payment has a different revenue shape from a recurring subscription. Before making that offer, I need to understand the support commitment it would create. This is a possible decision to examine; I am not reporting a pricing change to either product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ambition needs a reason to continue
&lt;/h2&gt;

&lt;p&gt;The post also encourages builders to aim beyond their first revenue milestone. I like the challenge to think about what a product could become. At the same time, a larger MRR target needs some basis: who else could benefit, how I could reach them, and whether they would keep using it. Changing the number in a goal would leave my current acquisition problem untouched.&lt;/p&gt;

&lt;p&gt;For Brainy and MoneyBrain, I want the next milestone to answer one of those questions while leaving room for a bigger ambition.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want to do with the next cycle of work
&lt;/h2&gt;

&lt;p&gt;My next useful step would be to give one attempt at finding users the same attention I give an implementation task. Choose a specific audience and problem, make a small attempt to reach them, and leave time to follow up with anyone who tries the product.&lt;/p&gt;

&lt;p&gt;A short note for each attempt could record the audience, the message, where I shared it, and what happened afterward. Including the effort spent, even if no money changed hands, would give me something to compare when deciding what to repeat.&lt;/p&gt;

&lt;p&gt;For this purpose, focusing on one product at a time would make the follow-up easier to manage. Brainy and MoneyBrain can both remain part of my work, but trying a new audience and message for both simultaneously would divide that attention. AI gives me a way to move implementation forward; I still have to make room in the week to understand the people using the result.&lt;/p&gt;

&lt;p&gt;I would set a review point before starting. With a limited budget, I need to consider the time spent as well as the money. Continuing an experiment should depend on what I learn from it; persistence alone would not tell me whether to repeat it, change it, or stop.&lt;/p&gt;

&lt;p&gt;That connects two pieces of advice in the screenshot: stay in the game, and consider moving on when the product does not make money. If the goal is a business, revenue and costs need an honest review. Personal usefulness can be a separate reason to maintain it, but it does not establish commercial demand. I want to give a promising idea a fair test without treating every additional month of work as evidence that it will succeed.&lt;/p&gt;

&lt;p&gt;I still value the workflow from the previous post. It helps me turn a product idea into software I can review. With Brainy and MoneyBrain, my immediate challenge is to take the next step beyond my LinkedIn circles and learn why someone unfamiliar with me would choose to use what I built.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AI assisted with drafting and editing this post and generating the cover image.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>saas</category>
      <category>startup</category>
      <category>webdev</category>
    </item>
    <item>
      <title>GitHub Universe 2026: Announcements, Sessions, and My Technical Takeaways</title>
      <dc:creator>Emanuele Bartolesi</dc:creator>
      <pubDate>Thu, 05 Nov 2026 12:13:42 +0000</pubDate>
      <link>https://dev.to/playfulprogramming/github-universe-2026-announcements-sessions-and-my-technical-takeaways-hgh</link>
      <guid>https://dev.to/playfulprogramming/github-universe-2026-announcements-sessions-and-my-technical-takeaways-hgh</guid>
      <description>&lt;p&gt;I attended GitHub Universe 2026 in person at Fort Mason in San Francisco. The keynotes alone packed an immense amount of platform changes, but the fuller picture comes together across the 27 videos in the official conference playlist: keynotes, technical sessions, panels, and shorter videos.&lt;/p&gt;

&lt;p&gt;Beyond the headlines of multi-model routing and agentic coding, what emerged across the stages was a fundamental restructuring of the software delivery lifecycle (SDLC). We are moving from the era of "AI writes lines of code" to "humans orchestrate agent fleets against deterministic platform primitives."&lt;/p&gt;

&lt;p&gt;Here is my technical breakdown of the announcements and sessions that stood out, organized by architectural layer. Product availability and examples below were checked against GitHub's documentation on November 2; session lessons are attributed to their speakers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Git infrastructure&lt;/li&gt;
&lt;li&gt;Copilot models, context, and MCP&lt;/li&gt;
&lt;li&gt;Stacked PRs and session continuity&lt;/li&gt;
&lt;li&gt;Hardware hacking with Copilot CLI&lt;/li&gt;
&lt;li&gt;Enterprise case studies&lt;/li&gt;
&lt;li&gt;Security updates&lt;/li&gt;
&lt;li&gt;The future of AI-assisted development&lt;/li&gt;
&lt;li&gt;Open source and developer craft&lt;/li&gt;
&lt;li&gt;Technical lead checklist&lt;/li&gt;
&lt;li&gt;Catching up with Italian friends&lt;/li&gt;
&lt;li&gt;My fifth GitHub Universe&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. The Core Platform Overhaul: Git Rebuilt for Agent Scale
&lt;/h2&gt;

&lt;p&gt;The opening keynote delivered by Jay Parikh (Head of Core AI at Microsoft &amp;amp; GitHub) and April Leonard established the driving motivation for the platform changes: telemetry.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;2026 Octoverse metric&lt;/th&gt;
&lt;th&gt;Reported activity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Global developers&lt;/td&gt;
&lt;td&gt;More than 225 million; one new developer every second&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code pushes&lt;/td&gt;
&lt;td&gt;17.9 billion, more than 2024 and 2025 combined&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commits&lt;/td&gt;
&lt;td&gt;34.3 billion, more than three times the level two years earlier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merged pull requests&lt;/td&gt;
&lt;td&gt;1.3 billion, around 3.5 million daily&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actions execution volume&lt;/td&gt;
&lt;td&gt;1,440 jobs per second, about 124 million daily&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent-started first drafts&lt;/td&gt;
&lt;td&gt;More than 40% of PRs by September&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New repositories with agent configuration files&lt;/td&gt;
&lt;td&gt;Eight times as many commits on average as new repositories without them&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The &lt;a href="https://github.blog/news-insights/octoverse/octoverse-commits-pushes-reach-new-highs-in-2026-as-developers-build-with-agents/" rel="noopener noreferrer"&gt;Octoverse reporting window&lt;/a&gt; is October 1, 2025, through September 30, 2026. The commit comparison measures activity, not productivity or a causal effect of agents.&lt;/p&gt;

&lt;p&gt;When more than four out of ten pull requests start with an agent's first draft, the pressure reaches well beyond the editor. Every additional branch, push, and verification run depends on infrastructure that can keep up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Next-Generation Git Architecture
&lt;/h3&gt;

&lt;p&gt;April Leonard detailed the rebuild of GitHub's core Git storage subsystem, designed around three principles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Decouple compute from storage:&lt;/strong&gt; Azure Blob Storage holds the durable source of truth. Ephemeral serving nodes cache repository data and scale with demand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimize coordination:&lt;/strong&gt; A specialized replicated log service handles the small reference transaction that remains on the write path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplify the primitives:&lt;/strong&gt; Separate durable data from the compute serving Git operations, reducing the coordination needed as agent activity grows.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The benchmark numbers shared on stage demonstrate what this means in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Write throughput:&lt;/strong&gt; GitHub reported 7,200 writes per second with 5,000 agents targeting one repository, about 180 times current throughput.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traffic replay:&lt;/strong&gt; The team replayed 24 hours of traffic from its busiest open-source repository in one minute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rollout:&lt;/strong&gt; GitHub expects the new architecture and broader multi-region Azure migration to reach users by early 2027. These are reported tests and rollout plans, not throughput or availability guarantees for every repository. The &lt;a href="https://www.youtube.com/watch?v=EQeJj0hoPS8&amp;amp;t=2159s" rel="noopener noreferrer"&gt;opening keynote&lt;/a&gt; and &lt;a href="https://github.blog/news-insights/company-news/github-universe-2026-evolving-every-layer-of-the-stack/" rel="noopener noreferrer"&gt;written announcement&lt;/a&gt; explain the work.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Copilot Under the Hood: Model Optimization, Context, and Protocols
&lt;/h2&gt;

&lt;p&gt;Two of the most valuable breakout sessions pulled back the curtain on how GitHub optimizes models internally and connects agents to external tooling.&lt;/p&gt;

&lt;h3&gt;
  
  
  How GitHub Optimizes Copilot for Every New Model
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://www.youtube.com/watch?v=JSC8eVojIWY" rel="noopener noreferrer"&gt;“How we optimize GitHub Copilot for every new model”&lt;/a&gt;, Julia Kasper explained why a stronger foundation model does not automatically produce a better coding experience when dropped into an unchanged harness.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvyszgslno9lrjdgr8e48.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvyszgslno9lrjdgr8e48.jpg" alt="Julia Kasper explaining why each model needs harness and product tuning" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The evaluation process continues before and after a model launches:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Offline evaluation:&lt;/strong&gt; Benchmarks and internal use help the team assess behavior before release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Online experiments:&lt;/strong&gt; A/B testing and weekly reporting show how changes behave in actual use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model-specific tuning:&lt;/strong&gt; The harness and product need to accommodate differences between models; model choice is only part of the engineering work.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9y4elt8jcmk8ubropvdl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9y4elt8jcmk8ubropvdl.jpg" alt="Offline evaluations and online experiments in Copilot's evaluation loop" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That makes &lt;strong&gt;Copilot Fusion&lt;/strong&gt;, introduced in the keynote, an interesting next step. Instead of asking developers to choose a model for every task, it chooses among three execution patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single:&lt;/strong&gt; One model handles the task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cascade:&lt;/strong&gt; A model drafts a result, a judge evaluates it, and the system can escalate to a stronger model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Critique:&lt;/strong&gt; Other models review a draft and their feedback informs a revision.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers choose Standard, High, or Max effort. &lt;a href="https://docs.github.com/en/copilot/concepts/models/copilot-fusion" rel="noopener noreferrer"&gt;Fusion respects plan and administrator model policies and bills for the models it uses&lt;/a&gt;; it does not itself launch subagents. For me, the useful comparison is whether that orchestration improves the result on my own repositories, at an acceptable cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connecting Local Agents to External Tools via MCP
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://www.youtube.com/watch?v=w2NrzcVzpC4" rel="noopener noreferrer"&gt;“A pixel dog that writes songs: lessons from my first MCP server with GitHub Copilot”&lt;/a&gt;, independent product builder Yunika Liu showed how the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; can connect a coding agent to something much more playful than a business API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fszfl0x3abb3z87ksz0rp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fszfl0x3abb3z87ksz0rp.jpg" alt="Yunika Liu demonstrating Coco, her pixel golden retriever" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MCP gives agents a standard way to discover and call tools exposed by a server. That can mean a database or a service catalog; in this session, it meant Coco, a pixel golden retriever with a desktop presence and an LED display.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe503rpnlw2buvdmwcd3j.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe503rpnlw2buvdmwcd3j.jpg" alt="Yunika Liu's plans for DJ Coco and a physical display" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Liu described building the project in a week, connecting animation triggers, music composition, and WebSocket synchronization. It is a memorable example because the protocol serves a specific idea. For engineering leads, the same approach can expose useful internal tools to agents, but authentication, permissions, and credential handling still need to be designed; MCP does not provide those guarantees by itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Advanced Delivery Workflows: Stacked PRs GA and Cross-Surface Flow
&lt;/h2&gt;

&lt;p&gt;Stacked pull requests were one of the delivery improvements I wanted to understand properly. They reached &lt;strong&gt;general availability on October 6&lt;/strong&gt;, before Universe; the conference session made the review workflow concrete.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stacked Pull Requests: Solving the Review Bottleneck
&lt;/h3&gt;

&lt;p&gt;As coding agents generate features faster, human reviewers become the critical path. When an agent opens an 800-line diff across backend, database, and frontend layers, reviews stall for days.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F87be8ejzhaiw11w5hfcv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F87be8ejzhaiw11w5hfcv.jpg" alt="Initializing a stack with gh stack init" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://www.youtube.com/watch?v=6bv4VZUM2kg" rel="noopener noreferrer"&gt;“How to use GitHub stacked PRs to speed up code reviews”&lt;/a&gt;, the team demonstrated the native workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CLI stacking:&lt;/strong&gt; Install the &lt;code&gt;github/gh-stack&lt;/code&gt; extension, then create dependent branches with &lt;code&gt;gh stack&lt;/code&gt;. The &lt;a href="https://docs.github.com/en/pull-requests/get-started/stacked-prs-quickstart" rel="noopener noreferrer"&gt;quickstart&lt;/a&gt; requires GitHub CLI 2.90 or later and Git 2.20 or later. Here is an illustrative data/service/UI stack; implement and stage each layer where indicated:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  gh extension &lt;span class="nb"&gt;install &lt;/span&gt;github/gh-stack
  &lt;span class="c"&gt;# Start from your repository's current default branch.&lt;/span&gt;
  gh stack init
  &lt;span class="c"&gt;# At the prompt, name the first branch: feature/data-schema&lt;/span&gt;
  &lt;span class="c"&gt;# Implement and stage the data changes before committing.&lt;/span&gt;
  git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"db: add user tenant table"&lt;/span&gt;

  gh stack add feature/service-layer
  &lt;span class="c"&gt;# Implement and stage the service changes before committing.&lt;/span&gt;
  git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"service: implement tenant isolation"&lt;/span&gt;

  gh stack add feature/ui-selector
  &lt;span class="c"&gt;# Implement and stage the UI changes before committing.&lt;/span&gt;
  git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"ui: tenant switcher component"&lt;/span&gt;

  gh stack push
  gh stack submit
  gh stack view
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web navigation:&lt;/strong&gt; GitHub displays the relationships between pull requests in a stack, helping reviewers inspect each layer and understand its dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmwiy52st856ixxsdq0gt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmwiy52st856ixxsdq0gt.jpg" alt="The stacked pull requests session demonstrating a repository workflow" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Merging from the bottom:&lt;/strong&gt; Merge the whole stack or a contiguous group starting at the bottom, once the required reviews and checks pass. Linear-history rules apply, and some changes still require a rebase. The &lt;a href="https://docs.github.com/en/pull-requests/how-tos/merge-and-close-pull-requests/merging-stacked-pull-requests" rel="noopener noreferrer"&gt;merge documentation&lt;/a&gt; describes those conditions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One rollout detail needs care: the &lt;a href="https://github.blog/changelog/2026-10-06-stacked-pull-requests-generally-available/" rel="noopener noreferrer"&gt;GA release note&lt;/a&gt; described staged auto-merge availability, while the merge documentation still lists it as unsupported. I would verify availability in the target repository. Agent Merge is separate and currently excludes stacked PRs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cross-Surface Continuity: App, IDE, CLI, Mobile, and Slack
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://www.youtube.com/watch?v=VJBTPepfWUI" rel="noopener noreferrer"&gt;“Work together, your way, with GitHub Copilot”&lt;/a&gt;, Pierce Boggan, Burke Holland, Julia Kasper, Katie Savage, and James Montemagno explored working across Copilot surfaces.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkmoae1y2lortqtfl0x14.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkmoae1y2lortqtfl0x14.jpg" alt="A Copilot app session shown during the cross-surface demonstration" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The core architectural improvement is &lt;strong&gt;session persistence across client boundaries&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Copilot App &amp;amp; Projects:&lt;/strong&gt; A standalone desktop app brings sessions and tools together, while Projects coordinates work across repositories. In the keynote, Burke attached design mockups and team discussions to a multi-repository feature. &lt;a href="https://docs.github.com/en/copilot/how-tos/github-copilot-app/working-with-projects" rel="noopener noreferrer"&gt;Projects is in public preview&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copilot CLI (&lt;code&gt;copilot&lt;/code&gt;):&lt;/strong&gt; The terminal is another surface for an interactive agent session. It belongs in the same delivery workflow as the app and IDE; it is not the old &lt;code&gt;gh copilot&lt;/code&gt; command.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd7kg5mc8d9c9jbcdavde.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd7kg5mc8d9c9jbcdavde.jpg" alt="Copilot CLI showing its session sidebar and interactive prompt" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Mobile and connected services:&lt;/strong&gt; Mobile makes it possible to pick up work away from the desktop, while services such as Slack can supply context. A concrete keynote example came from Damian Brady: he started a fix on his phone and continued the same cloud session in VS Code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbc4ohcmwlxsgrh2fzl0i.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbc4ohcmwlxsgrh2fzl0i.jpg" alt="James Montemagno demonstrating GitHub Mobile during the session" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Hardware Hacking with Copilot CLI: Event-Driven Agent State
&lt;/h2&gt;

&lt;p&gt;In &lt;a href="https://www.youtube.com/watch?v=PjoXOjjwMLs" rel="noopener noreferrer"&gt;“Hardware hacking with GitHub Copilot: building an AI indicator lamp”&lt;/a&gt;, Beatris Mendez Gandica took agent interaction into physical hardware.&lt;/p&gt;

&lt;p&gt;Using the Octolamp handed out at Universe 2025, Mendez Gandica demonstrated how to hook into the execution lifecycle of the GitHub Copilot CLI to reflect agent states on physical LEDs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdovm1f03u6eutcmtwxe0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdovm1f03u6eutcmtwxe0.jpg" alt="GitHub Copilot CLI Hook Configuration" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Copilot CLI Hook Architecture
&lt;/h3&gt;

&lt;p&gt;The session's hook configuration used documented lifecycle events:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;userPromptSubmitted&lt;/code&gt;: A prompt has been submitted.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;errorOccurred&lt;/code&gt;: An error has occurred.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Stop&lt;/code&gt; and &lt;code&gt;sessionEnd&lt;/code&gt;: The agent has finished responding, or the session has ended. &lt;code&gt;Stop&lt;/code&gt; is an alias for &lt;code&gt;agentStop&lt;/code&gt;; neither event proves that tests passed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href="https://docs.github.com/en/copilot/reference/hooks-reference" rel="noopener noreferrer"&gt;hook schema&lt;/a&gt; uses version 1 and arrays of command objects. This example shows the wiring, not a ready-to-run lamp driver: first provide the two adapter scripts for your operating systems, accepting the states &lt;code&gt;busy&lt;/code&gt;, &lt;code&gt;error&lt;/code&gt;, &lt;code&gt;done&lt;/code&gt;, and &lt;code&gt;idle&lt;/code&gt;. They must translate those states to your device's supported API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"userPromptSubmitted"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"bash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./scripts/lamp-status.sh busy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"powershell"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./scripts/lamp-status.ps1 -Status busy"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"errorOccurred"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"bash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./scripts/lamp-status.sh error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"powershell"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./scripts/lamp-status.ps1 -Status error"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Stop"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"bash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./scripts/lamp-status.sh done"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"powershell"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./scripts/lamp-status.ps1 -Status done"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sessionEnd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"bash"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./scripts/lamp-status.sh idle"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"powershell"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./scripts/lamp-status.ps1 -Status idle"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffv1brelzkjcpys1ompyr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffv1brelzkjcpys1ompyr.jpg" alt="Copilot CLI investigating connectivity problems with the Octolamp" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The session also covered the less glamorous work: network problems, race conditions, and fallback states. That is part of what made the example useful. Ambient feedback can spare us from watching a terminal spinner, but the lamp still needs to behave sensibly when connectivity fails.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Enterprise Case Studies: Real Governance at Scale
&lt;/h2&gt;

&lt;p&gt;The enterprise sessions showed how engineering organizations are applying agents to specific operational problems. The outcomes below are the speakers' reports, with lessons I would test in my own environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trimble: Building a Governance Tool for 436 Repositories in Four Days
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://www.youtube.com/watch?v=ldhFlABY9Rs" rel="noopener noreferrer"&gt;“Four days, zero lines: the AI force multiplier with GitHub Copilot”&lt;/a&gt;, Jeff Doolittle of Trimble shared the story of building &lt;strong&gt;OSS Overseer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The scale was &lt;strong&gt;436 repositories&lt;/strong&gt;. The problem was familiar: audits nobody runs, policies nobody enforces, and onboarding nobody automates. Writing a policy is much easier than making it part of daily repository maintenance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu0iljwof2u8idfbka3ka.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu0iljwof2u8idfbka3ka.jpg" alt="Jeff Doolittle describing neglected audits, policies, and onboarding" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Doolittle reported building OSS Overseer in four days without manually writing the code. What interested me was how the talk connected that speed to decisions about enforcement and repository-owner control.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ns9f974b49w57krku8f.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ns9f974b49w57krku8f.jpg" alt="OSS Overseer safeguards: warnings, extensions, no deletion, and dry runs" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key takeaways from Trimble's deployment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Human judgment sets policy:&lt;/strong&gt; Someone still has to decide what compliance means and which actions the tool may take.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reversible enforcement:&lt;/strong&gt; The safeguards shown included two warnings, self-service extensions, nothing ever deleted, and dry-run behavior by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-service remediation:&lt;/strong&gt; Repository owners need a way to respond to findings and handle exceptions without turning the platform team into a bottleneck.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reported outcome:&lt;/strong&gt; Doolittle described reaching 100% compliance across 436 repositories. The four-day figure refers to building the tool; it should not be read as a promise that every organization's backlog can be cleared in four days.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Slack: Turning a Personal AI Hack into an Organization-Wide Standard
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://www.youtube.com/watch?v=3Qyd9cIuULA" rel="noopener noreferrer"&gt;“How a personal AI productivity hack became Slack's internal tool”&lt;/a&gt;, Frances Coronel shared how organic developer innovation scaled into corporate infrastructure.&lt;/p&gt;

&lt;p&gt;The problem was discovering and sharing useful AI tools across an engineering organization. A personal setup can work well for one developer while remaining invisible to everyone else.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fydlur52uwj4utralno1y.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fydlur52uwj4utralno1y.jpg" alt="Frances Coronel presenting Slack's internal AI tooling work" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Her catalog brought together &lt;strong&gt;MCP servers, skills, and Copilot agents&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shared discovery:&lt;/strong&gt; Give engineers a place to find reusable tools and capabilities instead of rebuilding their own collection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adoption visibility:&lt;/strong&gt; Use a dashboard to understand which capabilities people are using, giving the team evidence for where to invest next.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa0s99xv9pf21fkprw0rf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa0s99xv9pf21fkprw0rf.jpg" alt="Frances Coronel discussing how a personal tool spread within Slack" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  NVIDIA: Domain-Specific AI Agents for Hardware Reliability
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://www.youtube.com/watch?v=M_tzUBAfRP0" rel="noopener noreferrer"&gt;“Building domain-specific AI agents for hardware reliability at NVIDIA”&lt;/a&gt;, Maria Victoria Gromysch described applying agents to hardware engineering and validation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fidevh56uf88qive3tfoz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fidevh56uf88qive3tfoz.jpg" alt="NVIDIA's reported Handover Agent outcomes, including reduced review time" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One concrete example was a &lt;strong&gt;Handover Agent&lt;/strong&gt;. It gathered evidence from product communications in Microsoft Teams and Outlook, alongside factory and release data from Splunk and diagnostics. The output was a report and filed issues that engineers could act on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo8rsjcp72pj8gq5icwtr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo8rsjcp72pj8gq5icwtr.jpg" alt="Handover Agent diagram connecting communications and diagnostic data to reports and issues" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The slide reported 60% less review time, faster issue resolution, and earlier detection of yield issues. For me, the practical lesson is the domain context: collecting the right evidence and making ownership clear can be as valuable as generating code. These are reported results from NVIDIA's workflow, not a general claim about predicting GPU failures.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Security: AI Scan, Secret Push Protection, and Package Firewalls
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.youtube.com/watch?v=cXKiMB4s1Q8" rel="noopener noreferrer"&gt;GitHub Security Lab session&lt;/a&gt; alongside product announcements demonstrated how GitHub is hardening both code and the open source software supply chain.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fin8vl9k3s7r2tjji6ulh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fin8vl9k3s7r2tjji6ulh.jpg" alt="The GitHub Security Lab speaker discussing open-source security" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key security updates announced at Universe:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;AI Scan:&lt;/strong&gt; &lt;a href="https://docs.github.com/en/code-security/concepts/code-scanning/ai-powered-security-detections" rel="noopener noreferrer"&gt;PR scanning&lt;/a&gt; adds selected languages and frameworks beyond CodeQL, including PHP, Bash, Terraform, Dockerfiles, JSP, and Blazor. Findings are advisory and cannot currently enforce a merge requirement through a ruleset; fork and Dependabot PRs are excluded. &lt;a href="https://docs.github.com/en/code-security/concepts/code-scanning/ai-scan" rel="noopener noreferrer"&gt;Whole-repository scanning&lt;/a&gt; is a separate preview, with broader language coverage. Security licensing and AI usage billing matter for adoption.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Push Protection for Unstructured Secrets:&lt;/strong&gt; Pattern matching catches known token formats, but passwords and other unstructured secrets need different detection. &lt;a href="https://docs.github.com/en/code-security/how-tos/secure-your-secrets/prevent-future-leaks/enable-ai-push-protection" rel="noopener noreferrer"&gt;AI push protection&lt;/a&gt; is in public preview, requires the relevant security entitlement and enabled settings, and consumes AI credits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm Package Firewall &amp;amp; Reachability Analysis:&lt;/strong&gt; &lt;a href="https://docs.github.com/en/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/protecting-endpoints-with-package-firewall" rel="noopener noreferrer"&gt;Package firewall&lt;/a&gt; applies policies when configured endpoints install npm packages. Separately, &lt;a href="https://docs.github.com/en/code-security/concepts/supply-chain-security/about-reachability-analysis-for-dependabot-alerts" rel="noopener noreferrer"&gt;reachability analysis&lt;/a&gt; uses static call paths to help prioritize Dependabot alerts in JavaScript and TypeScript repositories. Both are in preview; reachability is currently a free preview for GitHub Enterprise Cloud. A potential call path does not establish production execution or exploitability.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd67onuwj0u334auwauok.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd67onuwj0u334auwauok.jpg" alt="The GitHub Security Lab session on protecting the open-source ecosystem" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My takeaway from putting the research session alongside these product changes is that finding more vulnerabilities creates another responsibility: give maintainers evidence they can investigate and fixes they can verify.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. The Frontier Horizon: Where AI-Assisted Development is Heading
&lt;/h2&gt;

&lt;p&gt;One of the standout panels brought together April Leonard from GitHub, Angela Jiang from Anthropic, Richard Seroter from Google Cloud, and Rohan Varma from OpenAI for &lt;a href="https://www.youtube.com/watch?v=eYPxL3pTylk" rel="noopener noreferrer"&gt;“The next two years of AI-assisted development”&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F181w80cd1bf8lcr5s0in.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F181w80cd1bf8lcr5s0in.jpg" alt="Angela Jiang speaking during the panel on AI-assisted development" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Questions I Am Taking Away from the Panel
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Where does human judgment matter most?&lt;/strong&gt; That was an explicit topic of the discussion. My concern is whether a team can explain the decisions behind a change, even when an agent produces most of the code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where are we over- or under-investing?&lt;/strong&gt; The panel explored that question across the AI development ecosystem. For my teams, I would apply it to verification and review capacity as well as model access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Which skills should developers build next?&lt;/strong&gt; The future-skills discussion is a useful prompt to look beyond prompting: problem formulation, domain knowledge, and evaluating results all deserve deliberate practice.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3dxmitlhtiyyvtka7roh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3dxmitlhtiyyvtka7roh.jpg" alt="Angela Jiang, Rohan Varma, and Richard Seroter on the panel" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Humans Set Direction. Agents Close the Loop.
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://www.youtube.com/watch?v=BR65KdRfGvY" rel="noopener noreferrer"&gt;“Humans set direction. Agents close the loop”&lt;/a&gt;, the discussion returned to the role of developers as more implementation work moves to agents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1dvxi05ieh0espcwkfwj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1dvxi05ieh0espcwkfwj.jpg" alt="A view of issues and pull requests shown during the delivery-workflow session" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The danger of agentic coding is unconstrained autonomous drift. When agents generate code without verification gates, technical debt accumulates faster than humans can review it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5zjoz7kcgya7mxl0k7kd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5zjoz7kcgya7mxl0k7kd.jpg" alt="The speaker discussing the developer's role in an agent-assisted workflow" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The engineering loop I would take back to a team has three concrete boundaries:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Direction:&lt;/strong&gt; Humans provide architectural intent, constraints, and non-negotiable boundaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loop Execution:&lt;/strong&gt; Agents explore implementations, run tests, and refine diffs inside isolated sandboxes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification Gate:&lt;/strong&gt; Passing deterministic CI tests, linting, security scans, and human code review before any branch merges to production.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  8. Open Source Governance, Developer Joy, and the Craft of Code
&lt;/h2&gt;

&lt;p&gt;The closing keynote and breakout tracks brought the conversation back to the human heart of software development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Home Assistant: Building in the Open
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://www.youtube.com/watch?v=q-dvPBfZuGs" rel="noopener noreferrer"&gt;“Code is the easy part: building Home Assistant in the open”&lt;/a&gt;, Franck Nijhof explained that transparency is about decision-making, not just repository visibility.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5uwu5u7zw7gwkc05qmb1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5uwu5u7zw7gwkc05qmb1.jpg" alt="Franck Nijhof showing a before-and-after Home Assistant login design" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The session followed design and architecture decisions through GitHub Discussions, Issues, and Projects. Examples included encrypted backups, the login experience, and public epics—work where the discussion matters before implementation begins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fysh9oe26pigylonkeqeo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fysh9oe26pigylonkeqeo.jpg" alt="A Home Assistant issue describing an opportunity and its community impact" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is the part I want to carry into team practice: make the reasoning visible early enough for someone to challenge a flawed assumption, while changing direction is still relatively cheap.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agents in CI/CD: The CNCF &amp;amp; Project Bluefin Experience
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://www.youtube.com/watch?v=bUhCBYi4dys" rel="noopener noreferrer"&gt;“What open source can teach us about agents in CI/CD”&lt;/a&gt;, Jorge Castro from the CNCF discussed &lt;strong&gt;Project Bluefin&lt;/strong&gt;, &lt;strong&gt;Hive&lt;/strong&gt;, and the operational work surrounding open-source development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqc3c39hdxh77521hpg26.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqc3c39hdxh77521hpg26.jpg" alt="Jorge Castro speaking about agents in open-source CI/CD" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That work sits alongside the challenge Martin raised in the closing keynote: unsolicited, unverified AI pull requests can overwhelm maintainers. Producing more changes is only useful if the project can evaluate and maintain them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F66qzk57gin0q4nq76z9d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F66qzk57gin0q4nq76z9d.jpg" alt="Jorge Castro presenting the open-source operations session" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My recommendations for applying these ideas—not a description of Bluefin's enforced policies—are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give agent workflows explicit permissions and spending limits.&lt;/li&gt;
&lt;li&gt;Run appropriate automated checks before asking maintainers to review a change.&lt;/li&gt;
&lt;li&gt;Keep human review for changes where domain judgment is essential, especially security-sensitive behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What's Worth Building When AI Can Build Anything?
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://www.youtube.com/watch?v=VY4jwwNF9No" rel="noopener noreferrer"&gt;“What's worth building when AI can build anything?”&lt;/a&gt;, the speakers tackled developer identity in an era of abundant code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjhtxj8dysr7jrjoib8pk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjhtxj8dysr7jrjoib8pk.jpg" alt="A slide asking what engineers contribute when AI can produce large volumes of code" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As generating code gets cheaper, choosing what to build becomes even more important. My takeaways were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Taste and Curation:&lt;/strong&gt; The ability to discern which problems are truly worth solving.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Problem Formulation:&lt;/strong&gt; Asking the right questions and defining rigorous acceptance criteria.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain Empathy:&lt;/strong&gt; Deep understanding of real-world human user friction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7eny0rvbkl4fnoblnas9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7eny0rvbkl4fnoblnas9.jpg" alt="A pull request with documented intent and principles shown during the discussion" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Creative Coding, Hackable Badges, and Hardware Kits
&lt;/h3&gt;

&lt;p&gt;Finally, &lt;a href="https://www.youtube.com/watch?v=dcLy_Tq8LO4" rel="noopener noreferrer"&gt;“Why creative coding matters more than ever”&lt;/a&gt;, with Qianqian Ye and John Maeda, reminded developers that software is also an art form.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3fiqp8or4ovi257clvye.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3fiqp8or4ovi257clvye.jpg" alt="The creative-coding session exploring the connection between intention and code" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The discussion of p5.js, creative experimentation, and learning through making sat naturally alongside the physical hardware projects from San Francisco:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Hackable Universe Badge:&lt;/strong&gt; Manufactured by Pimoroni using high-speed surface-mount pick-and-place lines, powered by the Raspberry Pi RP2350 microcontroller.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Mechanical Keyboard Blind Box:&lt;/strong&gt; A hands-on keyboard assembly kit, with the PCB and mechanical parts becoming something you can build and use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwhw9ty382alwuhwupwvn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwhw9ty382alwuhwupwvn.jpg" alt="Pimoroni High-Speed Pick and Place Factory Line for Badges" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fts5aoxl9kjod4beo0vab.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fts5aoxl9kjod4beo0vab.jpg" alt="GitHub Universe Custom Mechanical Keyboard PCB Assembly" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I joined the Maker activities at Universe and assembled my own GitHub keyboard. I still had a few finishing touches left when I packed up, so I finished it at the airport on my way home.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fghoer41otn17uem74uc0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fghoer41otn17uem74uc0.png" alt="Me holding the GitHub Universe keyboard I assembled" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Catching up with Italian friends
&lt;/h2&gt;

&lt;p&gt;I also got to catch up with some Italian friends in San Francisco. With so many sessions to fit in, seeing familiar faces was one of my favorite parts of the trip.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqzemtuoklfv67pg8gtrt.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqzemtuoklfv67pg8gtrt.jpeg" alt="italian friends" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My fifth GitHub Universe
&lt;/h2&gt;

&lt;p&gt;This was my fifth GitHub Universe, and for me it's still the best tech event in the world. I came home with plenty to try, a keyboard I finished at the airport, and another reason to look forward to the next one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F29zujzujic9nski39aaz.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F29zujzujic9nski39aaz.jpeg" alt="me under the GitHub logo" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubcopilot</category>
      <category>ai</category>
    </item>
    <item>
      <title>How I build products with AI: from a brainstorm to a production release</title>
      <dc:creator>Emanuele Bartolesi</dc:creator>
      <pubDate>Wed, 04 Nov 2026 12:47:29 +0000</pubDate>
      <link>https://dev.to/playfulprogramming/how-i-build-products-with-ai-from-a-brainstorm-to-a-production-release-3h3f</link>
      <guid>https://dev.to/playfulprogramming/how-i-build-products-with-ai-from-a-brainstorm-to-a-production-release-3h3f</guid>
      <description>&lt;p&gt;When I start a product, I open ChatGPT before I open a coding agent.&lt;/p&gt;

&lt;p&gt;I want to work through the idea before anything starts creating files. Who needs this product? What belongs in the first version? What am I deliberately leaving out? I want to settle those questions while changing my mind still means editing a document.&lt;/p&gt;

&lt;p&gt;Then I move between tools: ChatGPT for the requirements, Antigravity for the GitHub backlog, Copilot CLI for implementation, and Claude Code for review. I read the final pull request myself before deciding whether to merge. GitHub Actions carries the work through validation and deployment, with different triggers for previews and production releases.&lt;/p&gt;

&lt;p&gt;I also want the same engineering setup when I switch tools or start another product. I use skills for that, and I created &lt;a href="https://github.com/kasuken/dotcraft" rel="noopener noreferrer"&gt;dotcraft&lt;/a&gt;, my plugin of skills and agents for .NET, Blazor, and MudBlazor. It gives me a reusable starting point instead of another setup to assemble.&lt;/p&gt;

&lt;p&gt;My setup:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Work&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Model or setting&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Brainstorming and PRD&lt;/td&gt;
&lt;td&gt;ChatGPT&lt;/td&gt;
&lt;td&gt;GPT-6.1 Sol, high reasoning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Initial application logo&lt;/td&gt;
&lt;td&gt;ChatGPT&lt;/td&gt;
&lt;td&gt;PRD as context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Everyday work without a model preference&lt;/td&gt;
&lt;td&gt;GitHub Copilot&lt;/td&gt;
&lt;td&gt;Copilot Fusion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Epics and child issues&lt;/td&gt;
&lt;td&gt;Antigravity with GitHub CLI&lt;/td&gt;
&lt;td&gt;Gemini 3.8 Flash, high reasoning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Epic implementation&lt;/td&gt;
&lt;td&gt;GitHub Copilot CLI with dotcraft&lt;/td&gt;
&lt;td&gt;GPT-6.1 Luna (or Copilot Fusion), Max reasoning, YOLO mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI review&lt;/td&gt;
&lt;td&gt;Claude Code app or CLI&lt;/td&gt;
&lt;td&gt;Claude Opus 5.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI work&lt;/td&gt;
&lt;td&gt;Copilot or Antigravity with the relevant skills&lt;/td&gt;
&lt;td&gt;A deliberate choice: GPT-6.1 Sol, GPT-6 Astra, or Gemini Flash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repeatable browser checks&lt;/td&gt;
&lt;td&gt;Playwright&lt;/td&gt;
&lt;td&gt;Automated user flows and assertions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final review&lt;/td&gt;
&lt;td&gt;Me&lt;/td&gt;
&lt;td&gt;Read the code and check the behavior&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delivery and releases&lt;/td&gt;
&lt;td&gt;GitHub Actions&lt;/td&gt;
&lt;td&gt;CI, development previews, and production deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The model names will change. What I want to keep is the context: a decision made during the brainstorm needs to survive all the way to the code I merge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lately, Fusion is my default
&lt;/h2&gt;

&lt;p&gt;I don't choose a model manually for every request. Lately, I use &lt;a href="https://docs.github.com/en/copilot/concepts/models/copilot-fusion" rel="noopener noreferrer"&gt;Copilot Fusion&lt;/a&gt; for most work where I don't already have a reason to pick a particular model. I give it the task and let it handle model selection.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1yxx1ato6e7jezxg4ea7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1yxx1ato6e7jezxg4ea7.png" alt="Terminal model picker with Copilot Fusion highlighted and its tier set to Standard." width="647" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Copilot Fusion selected at the Standard tier in my model picker.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;UI work is an example of when I do have a preference: I might specifically want GPT-6.1 Sol or GPT-6 Astra. That is when I make the choice myself. For the rest, Fusion has been working very well for me, and I have found it helps keep my token costs down. I haven't measured a fixed saving per task.&lt;/p&gt;

&lt;p&gt;I switched to Copilot Fusion recently because I was experimenting with it during the Preview (it was called HydraFusion) but I was not enthusiast about the outcomes.&lt;/p&gt;

&lt;p&gt;I keep the model and billing details in &lt;a href="https://www.emanuelebartolesi.com/resources/github-copilot" rel="noopener noreferrer"&gt;my GitHub Copilot guide in the Resources section of my website&lt;/a&gt;. The named-model handoffs below describe particular parts of my workflow; Fusion is what I increasingly use between those cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  The PRD carries my decisions between tools
&lt;/h2&gt;

&lt;p&gt;My ChatGPT conversation ends with a product requirements document, or PRD, in the repository. I use GPT-6.1 Sol with high reasoning to work through the scope before asking for that document.&lt;/p&gt;

&lt;p&gt;"Users can export their data" is the sort of requirement I want to question here. Which data? Which format? Does it include archived records? If I leave those decisions open, the implementation agent has to make them for me.&lt;/p&gt;

&lt;p&gt;I put the PRD somewhere every tool can read it, such as &lt;code&gt;docs/PRD.md&lt;/code&gt;. If I change a requirement, I update the file. A decision that exists only in my ChatGPT conversation is missing context for the next session.&lt;/p&gt;

&lt;p&gt;The PRD also gives me a starting point for the initial application logo. I use it in ChatGPT to explain the product and audience, ask for a few directions, and choose one before generating the image. At this stage, I care about whether the logo works in an application header and as a small icon.&lt;/p&gt;

&lt;p&gt;Sometimes I also use the &lt;a href="https://www.skills.sh/op7418/logo-generator-skill/logo-generator" rel="noopener noreferrer"&gt;logo-generator skill by op7418&lt;/a&gt;. That is a separate skill I use alongside dotcraft.&lt;/p&gt;

&lt;p&gt;Then I open &lt;a href="https://antigravity.google/" rel="noopener noreferrer"&gt;Antigravity&lt;/a&gt; and ask Gemini 3.8 Flash with high reasoning to turn the PRD into epics and child issues through the GitHub CLI. In my experience, this step has been accurate and inexpensive. I still check the backlog before implementation starts.&lt;/p&gt;

&lt;p&gt;This is a reusable version of the request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Read docs/PRD.md and the repository instructions.
Check existing issues and the applicable issue templates,
including account defaults.

Use the GitHub CLI to create epics and child issues.
Each epic needs a product outcome and scope.
Each child issue needs acceptance criteria, dependencies,
and a reference to the relevant PRD section.

Use native parent/sub-issue relationships.
Do not invent requirements or create duplicates.
Report unresolved decisions and return the created issue URLs.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I don't need to create and link every issue by hand. I do need to check that the agent has preserved the scope. A backlog full of clear titles can still describe a different product from the one I intended.&lt;/p&gt;

&lt;p&gt;I check all the Epics and Issues anyway and I fix something if I see something that I don't really like so much.\&lt;br&gt;
I like also this approach because if something that AI implement and I don't like it, I can always rework on the single task or epic using the same description and prompt.\&lt;br&gt;
It helps to obtain always the same outcome.&lt;/p&gt;
&lt;h2&gt;
  
  
  dotcraft is how I keep my setup with me
&lt;/h2&gt;

&lt;p&gt;For my .NET products, I want business logic to live in the application services and component tests to follow the same conventions. Switching from Copilot to Claude Code should not mean explaining those choices again.&lt;/p&gt;

&lt;p&gt;That is why I created &lt;a href="https://github.com/kasuken/dotcraft" rel="noopener noreferrer"&gt;kasuken/dotcraft&lt;/a&gt;. It packages skills I have written, adapted, or curated from other projects, together with agents for implementation, review, and cleanup. I can maintain the shared guidance in one place and reuse it across products.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzuug6xj4hxkbom2tdlso.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzuug6xj4hxkbom2tdlso.png" alt="The dotcraft logo and README tagline describing skills and agents for .NET, Blazor, and MudBlazor across Claude Code, Copilot, and Codex." width="800" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;One shared setup for the .NET products I build. The repository also credits the skills' upstream sources.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For example, &lt;code&gt;blazor-saas-stack&lt;/code&gt; describes my default architecture. &lt;code&gt;bunit-testing&lt;/code&gt; provides guidance for component tests. &lt;code&gt;dotnet-validate&lt;/code&gt; defines the verification expected before a change is called done. I don't want to paste all of those instructions into every implementation prompt.&lt;/p&gt;

&lt;p&gt;The agents give the work separate roles: &lt;code&gt;csharp-expert&lt;/code&gt; implements .NET changes, &lt;code&gt;code-reviewer&lt;/code&gt; reads the result and reports findings, and &lt;code&gt;janitor&lt;/code&gt; handles cleanup in small steps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F44hi6q6fxgzxbj7pwsot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F44hi6q6fxgzxbj7pwsot.png" alt="The dotcraft README listing the csharp-expert, code-reviewer, and janitor agents and their responsibilities." width="800" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The implementation agent is instructed to validate its changes and hand them to the reviewer. Those instructions still need to be checked against what happened in the session.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In Copilot CLI, I install the plugin with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;copilot plugin marketplace add kasuken/dotcraft
copilot plugin install dotcraft@dotcraft
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dotcraft also documents installation for Claude Code and Codex. Each client needs its own setup; installing a plugin in Copilot does not configure Antigravity. For Antigravity, I make the relevant skills available in a &lt;a href="https://antigravity.google/docs/skills" rel="noopener noreferrer"&gt;supported skill location&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The product's own instructions take precedence over dotcraft's defaults. I keep project decisions in &lt;code&gt;AGENTS.md&lt;/code&gt; and the instruction files the client recognizes, then check that the client has found them. In Copilot CLI, &lt;a href="https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/add-custom-instructions" rel="noopener noreferrer"&gt;&lt;code&gt;/instructions&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/add-skills" rel="noopener noreferrer"&gt;&lt;code&gt;/skills list&lt;/code&gt;&lt;/a&gt; help me inspect the setup. A skill appearing in the list establishes availability; I still check that it is loaded when the task needs it.&lt;/p&gt;

&lt;p&gt;I also maintain &lt;a href="https://github.com/kasuken/.github" rel="noopener noreferrer"&gt;kasuken/.github&lt;/a&gt; for shared issue and pull request templates. The feature request form asks for the problem before the proposed solution. The PR checklist asks for testing evidence and includes a check that the app still works with billing disabled.&lt;br&gt;
Using this approach, I don't need to configure common things in all my repos and I increase the bootstrapping of a new project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx0joep01qn0e7ycysk5e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx0joep01qn0e7ycysk5e.png" alt="The shared pull request template's testing section and checklist, including operation with billing disabled." width="800" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The shared PR template gives me specific questions to ask of a change, including what happens when paid features are disabled.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/creating-a-default-community-health-file" rel="noopener noreferrer"&gt;GitHub supplies these supported defaults&lt;/a&gt; when a repository has no local equivalent. They are not copied into a clone, so a local agent may need to fetch them. I ask for that explicitly rather than assume a PR created through &lt;code&gt;gh&lt;/code&gt; will contain the checklist.&lt;/p&gt;
&lt;h2&gt;
  
  
  DayPulse gave me a useful example
&lt;/h2&gt;

&lt;p&gt;For DayPulse, one of my private projects, GPT-6 Sol produced the PRD and I gave it to Antigravity to create the backlog. The Today Screen epic had two child issues.&lt;/p&gt;

&lt;p&gt;The first covered the localized date and the empty state when there was no check-in for the user's local day, with an action leading to &lt;code&gt;/checkin&lt;/code&gt;. The second covered the completed check-in summary, including optional metrics, activities, notes, and navigation to edit or view the entry.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcdu7diwicabgtx7y1oel.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcdu7diwicabgtx7y1oel.png" alt="DayPulse's check-in screen with Very good +3 selected on the mood control, energy set to 7 out of 10, and bottom navigation." width="557" height="962"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;DayPulse's check-in screen with mood and energy selected. Screenshot from my application.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That local-day requirement is a detail I care about. "Show today's check-in" leaves room for an implementation to use the server's date. Specifying the user's local day gives me something concrete to check in the code and tests. The summary issue also explicitly required disabled metrics to stay hidden.&lt;/p&gt;

&lt;p&gt;I handed GPT-6 Luna with Max reasoning the whole epic in one request. I then asked Claude Opus 5.5 to review the implementation across the epic; it reported no findings.&lt;/p&gt;

&lt;p&gt;The issue completion notes recorded 253 passing tests after the first child issue and 284 in the final Release validation, with no build warnings or errors. Those are reported validation totals, including existing tests. They are not counts of tests the agent wrote for those two issues.&lt;/p&gt;

&lt;p&gt;For me, the useful result was being able to compare the implementation with those specific acceptance criteria. A review with no findings doesn't answer whether I asked for the right product behavior.&lt;/p&gt;
&lt;h2&gt;
  
  
  I hand Copilot an epic with a clear stopping point
&lt;/h2&gt;

&lt;p&gt;For the explicit-model implementation route described here, I open Copilot CLI with dotcraft installed, select GPT-6 Luna with Max reasoning, and enable YOLO mode. Some single-issue runs have used around 10–15 Copilot credits in my experience; that is a rough observation, not a price to budget against.&lt;/p&gt;

&lt;p&gt;My request covers the epic and its child issues, with a separate commit for each issue and one pull request at the end:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Implement the epic at &amp;lt;EPIC_URL&amp;gt; and all its child issues.
Read the repository instructions, PRD, and applicable installed skills.
Work on a dedicated feature branch and respect issue dependencies.

Validate each child issue against its acceptance criteria.
Automate repeatable browser flows with Playwright where applicable.
Report automated coverage and anything that still needs a manual check.
Create a coherent commit for each issue and reference its URL.
Record completion and actual validation results on the issues.

Close the epic only when every child issue is implemented and validated.
Leave blocked work open and explain the blocker.

Create a PR using the applicable template, including an issue-to-commit
mapping, validation results, and remaining limitations.
Do not merge the PR.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One commit per issue lets me inspect the parts of the epic separately. In this workflow, closing the epic means implementation is ready for review; it does not mean the feature has shipped.&lt;/p&gt;

&lt;p&gt;YOLO mode removes repeated approval prompts through Copilot's &lt;a href="https://docs.github.com/en/copilot/how-tos/copilot-cli/use-copilot-cli/allowing-tools" rel="noopener noreferrer"&gt;allow-all permissions&lt;/a&gt;. It does not make the commands safe. I am choosing to give the agent that permission, and I remain responsible for what it does.&lt;/p&gt;

&lt;p&gt;After Copilot opens the PR, I ask Claude Code to review the implementation across the whole epic. I usually keep review fixes in that PR and rerun the affected checks if the code changes. I need validation for the version I am considering merging.&lt;/p&gt;

&lt;p&gt;Then I read the final code myself and check the behavior against the requirements. That is where I decide whether to accept the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  UI work gets a different route through the same process
&lt;/h2&gt;

&lt;p&gt;For UI work, I want to choose the model myself when I have a particular result in mind. That might mean GPT-6.1 Sol or GPT-6 Astra in Copilot. I also use Antigravity with Gemini Flash, which has given me good UI results. I choose the tool and model for that piece of work, then return to Fusion when I have no reason to keep a specific model selected.&lt;/p&gt;

&lt;p&gt;For the "general" UI and Design System I love the skill &lt;code&gt;frontend-design&lt;/code&gt; because it helps AI to create the correct UI based on the context of the application and not the typical slop AI.&lt;/p&gt;

&lt;p&gt;I bring in skills such as &lt;code&gt;mudblazor-design-system&lt;/code&gt;, &lt;code&gt;better-layout&lt;/code&gt;, and &lt;code&gt;better-typography&lt;/code&gt; to make the request more specific. I also check keyboard and focus behavior. A screenshot helps me judge the layout, but I still need to use the form and see what happens in the empty state.&lt;/p&gt;

&lt;p&gt;The requirements stay in the repository and the result still gets reviewed. Changing the tool for UI work should not mean losing the acceptance criteria I already settled.&lt;/p&gt;

&lt;h2&gt;
  
  
  I automate the repeatable browser checks with Playwright
&lt;/h2&gt;

&lt;p&gt;I try to automate as much of the application testing as I can with Playwright. I don't want to click through the same screens manually after every change when a browser test can repeat the steps and check the result for me.&lt;/p&gt;

&lt;p&gt;For a flow like DayPulse's check-in, I want the test to start from the empty Today screen, create an entry, verify the summary, edit the entry, and check that the updated values appear. Opening each page successfully isn't enough; the assertions need to cover the behavior in the acceptance criteria. This is the kind of repeatable journey I want automated as the product grows.&lt;/p&gt;

&lt;p&gt;In Brainy, the CI workflow already has a separate Playwright end-to-end test job. It runs against the application with a real SQL Server database and is configured to upload traces and screenshots when tests fail. That gives me something to inspect when a browser test breaks, alongside the agent's explanation.&lt;/p&gt;

&lt;p&gt;I still review whether the interface makes sense and explore behavior the tests don't cover. My aim is to spend that time on things that need my judgment, while Playwright handles the checks I would otherwise repeat by hand. I also review the tests: they need to fail when the expected behavior breaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  I finish the backlog, then check the application as a whole
&lt;/h2&gt;

&lt;p&gt;I repeat the implementation and review loop for the remaining epics in the release scope. Before calling that scope complete, I go back through the parent epics and their child issues. I want to see which PR contains the implementation, what was validated, and whether anything is still blocked or deliberately deferred.&lt;/p&gt;

&lt;p&gt;An agent closing an epic is useful bookkeeping, but I still reconcile it with the merged code. If a child issue is incomplete, I leave it open. If I decide a feature belongs in a later release, I update the scope rather than close the issue as though it had been implemented.&lt;/p&gt;

&lt;p&gt;I can ask an agent to help with that final pass:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Review the epics in the current release scope against the PRD,
their child issues, and the merged pull requests.

For each epic, report the implementation PRs, validation evidence,
and any unmet acceptance criteria. Check the child issues themselves;
do not rely only on the parent's checklist or closed status.

Close remaining issues only when the implementation and validation
support doing so. Leave blocked or deferred work open and explain why.
Report any requirements that are missing from the backlog.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I check the application across those epic boundaries, using automated browser tests for the repeatable journeys and manual checks for the remaining gaps. In DayPulse, the empty Today screen, the check-in form, and the completed summary need to work as one flow. Reviewing each screen separately would leave that journey unchecked.&lt;/p&gt;

&lt;p&gt;The same applies to UI changes made late in the process: a better layout still needs to preserve navigation, validation, and the behavior described in the issues. I make corrections through the same issue and PR loop, so the fix gets reviewed too.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Actions gives me a development preview
&lt;/h2&gt;

&lt;p&gt;I don't want deployment to depend on an agent remembering a sequence of terminal commands. I keep the build, test, and deployment steps in GitHub Actions so that the repository describes how the application gets published.&lt;/p&gt;

&lt;p&gt;DayPulse is a concrete example. Its workflow runs a Release build and the test suite before the deployment job can start. For pull requests from the same repository, it is configured to publish the Blazor WebAssembly application to an &lt;a href="https://learn.microsoft.com/en-us/azure/static-web-apps/review-publish-pull-requests" rel="noopener noreferrer"&gt;Azure Static Web Apps preview environment&lt;/a&gt;. That gives me a development preview associated with the PR, before the change reaches production.&lt;/p&gt;

&lt;p&gt;This is where I can check the published application in the browser. DayPulse is also a PWA, so I need to check installation, offline reload, and upgrades against a published build. The local development server alone doesn't cover those behaviors.&lt;/p&gt;

&lt;p&gt;After I accept and merge the change, the push to &lt;code&gt;main&lt;/code&gt; triggers DayPulse's build, test, and deployment workflow for production. Closing the PR also triggers cleanup of its preview environment. The automation handles the repeated publishing steps; I still check the workflow result and the deployed application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production releases have an explicit trigger
&lt;/h2&gt;

&lt;p&gt;My server-hosted SaaS applications use a different production path. For Brainy, LearnStack, MoneyBrain, and Needly, I maintain a &lt;a href="https://github.com/kasuken/.github/blob/main/.github/workflows/release-azure-webapp.yml" rel="noopener noreferrer"&gt;shared release workflow in &lt;code&gt;kasuken/.github&lt;/code&gt;&lt;/a&gt;. Each application calls it from a small workflow in its own repository.&lt;/p&gt;

&lt;p&gt;For these applications, merging to &lt;code&gt;main&lt;/code&gt; runs CI without automatically deploying to production. I choose when to cut a release; GitHub Actions then handles the deployment. The distinction matters to me because several reviewed epics can belong to one release.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/kasuken/.github/blob/main/RELEASING.md" rel="noopener noreferrer"&gt;release instructions&lt;/a&gt; let me choose a patch, minor, or major bump. For example, this starts a patch release for Brainy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh workflow run release.yml -R kasuken/Brainy -f &lt;span class="nv"&gt;bump&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;patch
gh run watch -R kasuken/Brainy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For that new-release path, the workflow resolves the next version, waits for passing CI on the commit being released, and builds a versioned application package. It deploys that package to Azure App Service through the GitHub &lt;code&gt;production&lt;/code&gt; environment, using OIDC for Azure authentication.&lt;/p&gt;

&lt;p&gt;Database changes are part of that delivery path too. Needly's migrations run before deployment; the other applications in this shared setup apply them on startup. I need to account for that difference when reviewing a release, especially if I might need to restore an earlier application version.&lt;/p&gt;

&lt;p&gt;The workflow then checks the readiness endpoint, any configured extra pages, and the HTTP-to-HTTPS redirect. On the workflow-dispatched new-release path, it creates the version tag and GitHub release only after deployment and those smoke checks succeed. It uses the matching changelog section for the notes when one exists, or generates notes from the merged PRs.&lt;/p&gt;

&lt;p&gt;That is another part of the setup I want to maintain once. An improvement to the shared workflow can serve several products, while the application repositories supply their own project paths and deployment targets.&lt;/p&gt;

&lt;h2&gt;
  
  
  After deployment, I still have a product to check
&lt;/h2&gt;

&lt;p&gt;A passing readiness check tells me the application responds. I also want evidence that the user flow I intended to release still works. I use automated checks where that behavior is covered and focus my manual review on the remaining gaps. For DayPulse, the Today and check-in journey, including the local-day behavior, remains the reference for what needs checking in the published application.&lt;/p&gt;

&lt;p&gt;If I find a problem, it goes back into an issue with reproduction steps and the behavior I expected. I can give that bounded task to an agent, review the correction, and send it through the same delivery process. The backlog remains useful after the initial implementation.&lt;/p&gt;

&lt;p&gt;For applications using my shared release workflow, I can redeploy an earlier version tag when I need to roll back. That restores the earlier application code; it does not reverse database migrations. I need to check that the older version still works with the current schema before choosing that route.&lt;/p&gt;

&lt;p&gt;This is where the workflow reaches a release: the code has been reviewed, the intended version has been deployed, and I have checked the relevant behavior in the running application. Closing all the epics gets me to that final check; it doesn't replace it.&lt;/p&gt;

&lt;h2&gt;
  
  
  I like working this way in Omarchy
&lt;/h2&gt;

&lt;p&gt;In &lt;a href="https://omarchy.org/" rel="noopener noreferrer"&gt;Omarchy&lt;/a&gt;, I keep the browser full-screen on one workspace and three or four terminals tiled on another. Copilot can be working in one terminal while I inspect tests or Git history in another. Switching workspaces and moving focus with the keyboard lets me keep those layouts in place.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvbfze6zlcm3js2nzl4mb.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvbfze6zlcm3js2nzl4mb.webp" alt="Omarchy desktop with a browser, terminal, system monitor, and file manager arranged in four tiled windows." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Four-way tiling, shown in the &lt;a href="https://omarchy.org/manual/navigation/" rel="noopener noreferrer"&gt;official Omarchy navigation manual&lt;/a&gt;. This is the manual's example desktop.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I have tried to reproduce the same behavior on Windows. Getting the tiling, workspace switching, and window focus to feel the way I want has taken more effort there. On Omarchy, I spend less time rearranging the desktop.&lt;/p&gt;

&lt;p&gt;The searchable clipboard history is useful when I am carrying an issue URL or prompt between tools. I also like the themes running through the terminal and supported agent clients. I like sitting down at this machine, and that matters when it is where I build my products.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpdbn1o7454mc2qgwpb3w.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpdbn1o7454mc2qgwpb3w.webp" alt="Omarchy clipboard history filtered by the word reminder, with a matching command and its text preview." width="800" height="566"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Searching copied text, from the &lt;a href="https://omarchy.org/manual/unified-clipboard-history/" rel="noopener noreferrer"&gt;official Omarchy clipboard manual&lt;/a&gt;. The example shows how a copied command can be found again.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I still spend attention on the scope, the backlog, and the final review. dotcraft saves me from rebuilding the engineering setup, and GitHub Actions handles the repeated release steps. Neither can decide whether DayPulse should show that metric or whether a feature belongs in the first release. Those decisions are still mine, and I want to see them reflected in the application I publish.&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubcopilot</category>
      <category>githubactions</category>
      <category>webdev</category>
    </item>
    <item>
      <title>GitHub Universe 2026: My recap from San Francisco</title>
      <dc:creator>Emanuele Bartolesi</dc:creator>
      <pubDate>Tue, 03 Nov 2026 10:23:54 +0000</pubDate>
      <link>https://dev.to/playfulprogramming/github-universe-2026-my-recap-from-san-francisco-23hd</link>
      <guid>https://dev.to/playfulprogramming/github-universe-2026-my-recap-from-san-francisco-23hd</guid>
      <description>&lt;p&gt;I'll write another post in the coming days covering the announcements. This one focuses on GitHub Universe as an event and on the two keynotes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;My updates from San Francisco&lt;/li&gt;
&lt;li&gt;The numbers behind the changes&lt;/li&gt;
&lt;li&gt;The Copilot app&lt;/li&gt;
&lt;li&gt;Projects across repositories&lt;/li&gt;
&lt;li&gt;Session continuity between tools&lt;/li&gt;
&lt;li&gt;Copilot Automations&lt;/li&gt;
&lt;li&gt;Review and merge&lt;/li&gt;
&lt;li&gt;Smaller platform updates&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Enterprise access and budgets&lt;/li&gt;
&lt;li&gt;Rebuilding Git&lt;/li&gt;
&lt;li&gt;Octoverse: how developers use the tools&lt;/li&gt;
&lt;li&gt;Closing keynote: developer joy and hardware&lt;/li&gt;
&lt;li&gt;Protecting open-source maintainers&lt;/li&gt;
&lt;li&gt;DevOps as a prerequisite for agents&lt;/li&gt;
&lt;li&gt;Human judgment and speed&lt;/li&gt;
&lt;li&gt;Chopin and collaborative planning&lt;/li&gt;
&lt;li&gt;Science and the next generation&lt;/li&gt;
&lt;li&gt;The closing message&lt;/li&gt;
&lt;li&gt;What I’m taking back&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I attended GitHub Universe 2026 in person in San Francisco. Between the opening keynote that laid out the architectural overhaul of GitHub and the closing keynote dedicated to the open-source community, maintainers, and developer joy, there was far too much substance to absorb from memory alone. I watched both the &lt;a href="https://www.youtube.com/watch?v=EQeJj0hoPS8" rel="noopener noreferrer"&gt;Day 1 opening keynote&lt;/a&gt; and the &lt;a href="https://www.youtube.com/watch?v=ZSMFrM54H2Q" rel="noopener noreferrer"&gt;Day 2 closing keynote&lt;/a&gt; again to take detailed notes.&lt;/p&gt;

&lt;p&gt;The second watch helped me connect the announcements across both days. In the Copilot app, Projects coordinates work across repositories while Fusion handles model selection. Automations respond to production signals, code review checks the result, and GitHub is rebuilding the Git infrastructure underneath all of it. But the closing keynote provided the essential counterweight: how open-source maintainers protect their repositories from AI pull-request spam, why DevOps maturity is the real prerequisite for coding agents, and how collaborative multiplayer planning can replace isolated single-player prompts.&lt;/p&gt;

&lt;p&gt;My takeaway is that GitHub wants to connect the whole delivery workflow, including the parts that happen before an agent writes code and long after it opens a pull request. That is the angle I care about as a technical lead: how a feature reaches production, who decides whether it is ready, how we protect maintainers, and what the platform needs to support that work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw9n470avbi777uehmq83.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw9n470avbi777uehmq83.jpg" alt="Jay Parikh opening the GitHub Universe 2026 keynote" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Two updates I shared from San Francisco
&lt;/h2&gt;

&lt;p&gt;The trip also gave me a chance to share two things I had been working on myself. Alongside the keynote announcements, these were my own small Copilot updates from San Francisco.&lt;/p&gt;

&lt;p&gt;The first was &lt;strong&gt;Copilot Insights 5.5.0&lt;/strong&gt;, my VS Code extension. I added a Model Costs explorer and a token-cost estimator so developers can compare model rates and explore how different choices affect estimated AI credit usage. The estimates stay separate from actual account consumption. Hearing so much about model choice at Universe made that question feel especially relevant: what does a particular choice mean for the work in front of me and the credits it uses?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD4E22AQG1z__kvUeeQQ%2Ffeedshare-image-high-res%2FB4EaF7no6QJEAU-%2F0%2F1793075351438%3Fe%3D2147483647%26v%3Dbeta%26t%3Drtd56rAuE-_NDmVtZmSIYEiHf9it4Zg8MGOOdkI4Yrc" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD4E22AQG1z__kvUeeQQ%2Ffeedshare-image-high-res%2FB4EaF7no6QJEAU-%2F0%2F1793075351438%3Fe%3D2147483647%26v%3Dbeta%26t%3Drtd56rAuE-_NDmVtZmSIYEiHf9it4Zg8MGOOdkI4Yrc" alt="Promotional visual from my LinkedIn update about Copilot Insights 5.5.0" width="1086" height="1448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/posts/bartolesiemanuele_hello-from-san-francisco-a-quick-update-share-7520703120881152000-cgwS/" rel="noopener noreferrer"&gt;Read my original Copilot Insights update on LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I also shared that I had earned the &lt;strong&gt;Microsoft Pro Badge: GitHub Copilot - Proficient&lt;/strong&gt;. I am not usually a big badge-sharing person, but I was happy about this one. What I like is its focus on deliberate, practical Copilot use: refactoring that preserves behavior, tests that check something useful, and less time spent on repetitive logic. That connects with what I took from both keynotes: the result still needs our attention and judgment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD4E22AQGuHvk7HenZzg%2Ffeedshare-image-high-res%2FB4EaGBP8.WIwAU-%2F0%2F1793169805472%3Fe%3D2147483647%26v%3Dbeta%26t%3D6mvRGvVDu5viaxXBUXtOeu6qeDn-ae4ODpxEGTa6U8Q" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD4E22AQGuHvk7HenZzg%2Ffeedshare-image-high-res%2FB4EaGBP8.WIwAU-%2F0%2F1793169805472%3Fe%3D2147483647%26v%3Dbeta%26t%3D6mvRGvVDu5viaxXBUXtOeu6qeDn-ae4ODpxEGTa6U8Q" alt="Visual from my LinkedIn post about the GitHub Copilot Proficient badge" width="1122" height="1402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7521099296109240321/" rel="noopener noreferrer"&gt;Read my original badge update on LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers explain why GitHub is changing the stack
&lt;/h2&gt;

&lt;p&gt;Jay Parikh opened with the scale of activity on GitHub. The platform now has more than 225 million developers, and a new developer joined every second over the past year, for the second consecutive year.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.blog/news-insights/octoverse/octoverse-commits-pushes-reach-new-highs-in-2026-as-developers-build-with-agents/" rel="noopener noreferrer"&gt;2026 Octoverse report&lt;/a&gt; puts the rest of that activity into perspective:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Reported activity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Code pushes&lt;/td&gt;
&lt;td&gt;17.9 billion, more than 2024 and 2025 combined&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commits across public and private repositories&lt;/td&gt;
&lt;td&gt;34.3 billion, more than three times the level two years earlier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merged pull requests&lt;/td&gt;
&lt;td&gt;1.3 billion, averaging around 3.5 million a day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public and open-source repositories&lt;/td&gt;
&lt;td&gt;566 million, up more than 30% year over year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public contributions&lt;/td&gt;
&lt;td&gt;2.5 billion, up from 1.12 billion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Actions jobs&lt;/td&gt;
&lt;td&gt;1,440 a second, or about 124 million a day, more than three times the previous year's volume&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merged Dependabot pull requests&lt;/td&gt;
&lt;td&gt;More than 30 million, roughly twice the previous year's pace&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The reporting window matters: the Octoverse year runs from October 1, 2025, through September 30, 2026. These are not totals for the full 2026 calendar year, and Actions jobs are different from Actions minutes.&lt;/p&gt;

&lt;p&gt;Activity climbed from January and accelerated sharply around June. GitHub connects that timing with better models, stronger agent harnesses, persistent sessions that can continue across days, and more work running in cloud environments.&lt;/p&gt;

&lt;p&gt;One comparison deserves attention: among repositories created this year, those with an agent configuration file averaged eight times as many commits as those without one. That measures activity, with some limits: commit counts do not measure useful software, and a repository without an agent file may still use AI.&lt;/p&gt;

&lt;p&gt;Jay also called out three projects that give those numbers some purpose: Ersilia's open-source AI tools for drug discovery, OpenQuake's earthquake hazard and risk assessment software, and Matt Pocock's AI Skills for sharing instructions across coding agents. Those examples range from scientific work to improving the tools developers use every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  From an issue to working software in the Copilot app
&lt;/h2&gt;

&lt;p&gt;Jay described a delivery process where a colleague's request, a code change, or a production signal can start work at any point. Developers set direction and make decisions while agents take on implementation and verification. He organized that vision around velocity, intelligence, and quality: completing work efficiently, carrying context and learning forward, and catching defects before shipping.&lt;/p&gt;

&lt;p&gt;Cassidy Williams made it concrete with the GitHub Copilot app and a coffee-shop application.&lt;/p&gt;

&lt;p&gt;Her task was a Coffee Passport feature: customers visit different locations, collect stamps, and receive a reward when they complete the passport. Before implementing it, the team needed answers about what counted as a visit and what happened on repeat visits.&lt;/p&gt;

&lt;p&gt;That is a useful place to start a demo. An agent cannot implement the right behavior if the team has not agreed on the rules.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnk6fxa12p1hjn2xotcyu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnk6fxa12p1hjn2xotcyu.jpg" alt="Cassidy Williams demonstrating the GitHub Copilot app" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The app brings agent sessions, issues, external tools, and project work into one desktop surface. Its canvases include a browser, a terminal, and custom views. Cassidy showed the agent interacting with the running application in a browser canvas to test the passport feature, then opened the changes in VS Code to inspect the code.&lt;/p&gt;

&lt;p&gt;The useful part for me is that implementation and inspection remain connected. A working preview helps answer whether the feature behaves correctly; the diff still needs attention.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connectors bring the missing context into the session
&lt;/h3&gt;

&lt;p&gt;The answers to Cassidy's requirements questions came through connected services. Copilot Connectors use GitHub-managed, verified MCP connections so you can authenticate to a supported service once and use its tools across supported Copilot surfaces.&lt;/p&gt;

&lt;p&gt;The keynote and announcement materials included services such as Slack, Work IQ, Sentry, Vercel, Netlify, and Cloudflare. GitHub also emphasized the wider ecosystem, including Datadog and Figma. The point is access to requirements, discussions, deployment information, and production signals where the agent is doing the work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.github.com/en/copilot/concepts/customizations/copilot-connectors" rel="noopener noreferrer"&gt;Connectors are currently in public preview&lt;/a&gt;. They work across supported app, CLI, VS Code, mobile, and cloud surfaces, but are not yet supported in sessions running on GitHub Actions, such as assigning an issue to Copilot. That distinction matters when adding them to an existing workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Copilot Fusion chooses how to use the models
&lt;/h3&gt;

&lt;p&gt;Cassidy's next question was which model to use. Copilot Fusion moves that decision into a router and orchestrator that evaluates the task and chooses an execution pattern.&lt;/p&gt;

&lt;p&gt;The three patterns explained in the keynote were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single:&lt;/strong&gt; one model handles the task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cascade:&lt;/strong&gt; a model drafts an answer, a judge evaluates it, and the system can escalate to a stronger model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Critique:&lt;/strong&gt; other models review a draft, and their feedback informs a revision.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You choose an effort level: Standard, High, or Max. Standard targets everyday work, High adds orchestration for more substantial tasks, and Max prioritizes deeper reasoning. That is more useful to me than manually switching models for every step of a feature.&lt;/p&gt;

&lt;p&gt;GitHub reported that Fusion Max scored 60 on the Artificial Analysis Coding Agent Index, within two points of Opus 5.5 Max, at half the cost and 40% less time per task. Those are benchmark results, so I would evaluate the same trade-off on my own repositories before assuming equivalent savings.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://docs.github.com/en/copilot/concepts/models/copilot-fusion" rel="noopener noreferrer"&gt;Fusion documentation&lt;/a&gt; also clarifies that it respects plan and administrator model policies, bills for the models it uses, and does not itself launch subagents. Projects orchestration and model orchestration are separate capabilities. Users on paid Copilot plans receive a 30% discount on Fusion model costs through November 30, 2026.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff82h8gxdin0nqg6ozaw4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff82h8gxdin0nqg6ozaw4.jpg" alt="Copilot Fusion's Single, Cascade, and Critique patterns presented during the keynote" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Copilot Dreaming addresses instructions that have gone stale
&lt;/h3&gt;

&lt;p&gt;One detail I wanted to keep from the second watch was Copilot Dreaming.&lt;/p&gt;

&lt;p&gt;Cassidy explained that the coffee application had moved from Java to SvelteKit, while some instructions still described the old implementation. Dreaming proposed a pull request to update that guidance. She reviewed the diff as she would any other change, and also showed the memories Copilot had learned about her preferences and the team's practices. The &lt;a href="https://www.youtube.com/watch?v=EQeJj0hoPS8&amp;amp;t=760s" rel="noopener noreferrer"&gt;Dreaming demo starts around 12:40&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I like this example because custom instructions require maintenance. An instruction file that describes last month's architecture can make an agent consistently do the wrong thing. Proposing an update through a reviewable change is a practical way to handle that maintenance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.github.com/en/copilot/concepts/prompting-and-context/copilot-dreaming" rel="noopener noreferrer"&gt;Dreaming is in public preview&lt;/a&gt;, with plan and model restrictions: it requires GPT-6.1 Sol access, excludes Copilot Pro and data-residency environments, and consumes AI credits when it runs. Instruction-file changes arrive as pull requests; learned memories can update automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Projects coordinates a feature across repositories
&lt;/h2&gt;

&lt;p&gt;Burke Holland continued with Copilot Projects, using the Fourth Coffee repositories to build a feature that lets a customer reorder their usual drink with one tap.&lt;/p&gt;

&lt;p&gt;He added the repositories as context, then supplied design mockups, a Slack discussion, and a Teams conversation with legal and compliance. The latter mattered because this was a personalization feature. He could keep adding context while work was underway, without waiting for an individual agent loop to finish.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fev90l4lube1x3oiw7gd2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fev90l4lube1x3oiw7gd2.jpg" alt="Burke Holland selecting repositories for a Copilot project" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Projects provides an orchestrator that coordinates agents across one or more repositories while keeping the goal and context together. Sessions can run locally or in the cloud, and resulting pull requests appear in the project overview. The developer can follow progress and redirect the work.&lt;/p&gt;

&lt;p&gt;The demo also went beyond code. Burke showed short marketing videos generated with a skill, stored in the library, and described an automation to create them as new features ship. That connects implementation with another piece of delivery work that someone normally has to organize separately.&lt;/p&gt;

&lt;p&gt;Projects was announced as available that day, in &lt;a href="https://docs.github.com/en/copilot/how-tos/github-copilot-app/working-with-projects" rel="noopener noreferrer"&gt;public preview&lt;/a&gt;. For a team with several repositories, the shared view of context, sessions, and resulting pull requests gives the feature a home beyond any individual agent's work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same session can follow you between tools
&lt;/h2&gt;

&lt;p&gt;Damian Brady started his demo on a phone. The order-ahead feature stopped accepting orders before a cafe closed, as intended, but failed to explain that to customers.&lt;/p&gt;

&lt;p&gt;He started a Copilot session to fix it in a cloud sandbox, then picked up the same session in VS Code. Session continuity also spans the Copilot app, CLI, and web, so changing surfaces does not require restarting the task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd2g77let6vt2lnh0edeu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd2g77let6vt2lnh0edeu.jpg" alt="Damian Brady starting a cloud agent session from his phone" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jay explained that this uses the same Copilot harness, now rolled out across Microsoft, and announced that developers could use the harness to build agents through Microsoft Foundry as well.&lt;/p&gt;

&lt;p&gt;Damian's observation about being short on attention and time captured the practical constraint. Once the agent has a clear direction, the developer should be able to focus elsewhere and return when a decision is needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automations connect production signals to repeatable work
&lt;/h2&gt;

&lt;p&gt;The next demo began with a production error. The coffee site's information button returned a 500, and Damian opened the Sentry details in a custom canvas.&lt;/p&gt;

&lt;p&gt;He could create an issue or ask Copilot to investigate. Copilot Automations turns that response into reusable work that can run manually, through an API, on a schedule, or in response to an event. Cloud execution means the workflow can continue after the laptop closes.&lt;/p&gt;

&lt;p&gt;The controls were a substantial part of the demonstration: choose the available tools, allow an automation to create pull requests without allowing it to merge them, and set an AI credit limit. Shared automations let the team reuse that setup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Far4uli22ypf26njm067q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Far4uli22ypf26njm067q.jpg" alt="Shared Copilot Automations listed in the subscriptions repository" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Damian also showed a group of specialist automations in a subscriptions repository. One watched for signals and created issues; others triaged them, reproduced the problem with screenshots, implemented a fix, and verified it against the original request.&lt;/p&gt;

&lt;p&gt;That separation gives each automation a specific job and an output the next one can use. The announcements also described automations learning from outcomes and proposing improvements for review. The &lt;a href="https://docs.github.com/en/copilot/how-tos/github-copilot-app/using-automations" rel="noopener noreferrer"&gt;automation documentation&lt;/a&gt; confirms support for self-improving groups and configurable tools and spending limits. Changes to those workflows deserve the same review as changes to the application.&lt;/p&gt;

&lt;p&gt;For a pilot, I would also account for the &lt;a href="https://docs.github.com/en/copilot/concepts/agent-capabilities/agent-powered-workflows-and-operations/about-automations" rel="noopener noreferrer"&gt;current cloud-automation requirements&lt;/a&gt;: an eligible paid plan, a private or internal repository, and both AI credit and GitHub Actions usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review and merge have to keep up
&lt;/h2&gt;

&lt;p&gt;GitHub reported that Copilot Code Review has surfaced 200 million findings since its launch. At Universe, it introduced Code Review Max, alongside Lite and Balanced, for changes that need deeper inspection.&lt;/p&gt;

&lt;p&gt;According to GitHub, Max achieved the highest F1 score on ReviewBench for high-severity issues. My interest is in the defects a quick review can miss, such as interactions across changed files or a subtle security problem. Testing Max against a team's own review history would help establish where that deeper inspection pays off.&lt;/p&gt;

&lt;p&gt;Damian showed Copilot reviewing a coffee-service pull request before the human review. Code Review is also available to organization members without a Copilot subscription when the organization enables paid usage; that route is currently on GitHub.com. Reviews can consume AI credits and GitHub Actions minutes. &lt;a href="https://docs.github.com/en/copilot/concepts/agent-capabilities/agent-powered-workflows-and-operations/code-review" rel="noopener noreferrer"&gt;GitHub's documentation&lt;/a&gt; covers the review levels and access requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stacked pull requests make related changes easier to inspect
&lt;/h3&gt;

&lt;p&gt;The Coffee Passport work was split into a stack: data changes, a service endpoint, and the UI that depended on them. Each part could be reviewed separately, and the stack could be merged together or in contiguous groups, starting from the bottom.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7uiigptxhca7o686x3io.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7uiigptxhca7o686x3io.jpg" alt="The Coffee Passport feature organized as stacked pull requests" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This gives reviewers smaller diffs while keeping the dependency between changes visible. Native support matters when agents can produce a large feature faster than a person can comfortably review it. The &lt;a href="https://docs.github.com/en/pull-requests/how-tos/stacked-pull-requests" rel="noopener noreferrer"&gt;stacked pull request docs&lt;/a&gt; cover the workflow and the &lt;code&gt;gh stack&lt;/code&gt; extension. Octoverse reports that the preview launched on July 30 and had been used by more than 264,000 developers by September. Stacked PRs reached &lt;a href="https://github.blog/changelog/2026-10-06-stacked-pull-requests-generally-available/" rel="noopener noreferrer"&gt;general availability on October 6&lt;/a&gt;, before Universe.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent Merge helps a pull request reach completion
&lt;/h3&gt;

&lt;p&gt;Damian returned to the fix he had started on his phone and enabled Agent Merge. In the demo, it handled follow-up work such as review feedback, CI failures, and conflicts in the background, with merging enabled once the requirements were met. The &lt;a href="https://www.youtube.com/watch?v=EQeJj0hoPS8&amp;amp;t=1720s" rel="noopener noreferrer"&gt;Agent Merge demo starts around 28:40&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That closes a gap I see in agent workflows: opening a pull request is only one stage of completing the task. Branches keep changing, checks fail, and reviewers ask for adjustments. Agent Merge takes on those follow-up changes, with repository checks and merge permissions defining when the work can land.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://docs.github.com/en/copilot/how-tos/copilot-on-github/use-copilot-agents/watch-and-fix-pull-requests" rel="noopener noreferrer"&gt;current GitHub.com watch-and-fix workflow&lt;/a&gt; documents failed Actions checks and merge conflicts, excludes fork and stacked pull requests, and treats auto-merge as a separate setting. I would check those boundaries before expecting the whole stack to run unattended.&lt;/p&gt;

&lt;h2&gt;
  
  
  The smaller platform updates belong in this recap too
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/events/universe/recap" rel="noopener noreferrer"&gt;Universe announcement page&lt;/a&gt; includes several changes that fit into the same workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub CLI attachments:&lt;/strong&gt; repeatable &lt;code&gt;--attach&lt;/code&gt; flags add local images and videos inline to issues, pull requests, and comments. A reproduction video or architecture diagram can travel with work created from the terminal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue Artifacts:&lt;/strong&gt; plans, research, links, and other artifacts stay attached to the issue, making the reasoning behind the implementation easier to find.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repository pull request views:&lt;/strong&gt; the updated view helps you scan open work, understand its status, and find what needs attention next.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, the &lt;a href="https://docs.github.com/en/github-cli/github-cli/attaching-files-with-github-cli" rel="noopener noreferrer"&gt;CLI attachment workflow&lt;/a&gt; supports attaching more than one file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh &lt;span class="nb"&gt;pr &lt;/span&gt;create &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--title&lt;/span&gt; &lt;span class="s2"&gt;"Explain when order-ahead is unavailable"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--body&lt;/span&gt; &lt;span class="s2"&gt;"Adds a customer-facing explanation before the cafe closes."&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--attach&lt;/span&gt; ./order-ahead-demo.mp4 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--attach&lt;/span&gt; ./order-flow.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;With the files saved locally, an agent-generated screenshot or recording can become part of the review evidence, especially when it shows whether a fix satisfies the original request.&lt;/p&gt;
&lt;h2&gt;
  
  
  Security needs to be part of the agent workflow
&lt;/h2&gt;

&lt;p&gt;Damian demonstrated code scanning findings with the location, vulnerability type, and remediation context available to Agentic Autofix. Assigning a finding produced a pull request with a proposed fix.&lt;/p&gt;

&lt;p&gt;The broader security announcements cover different stages of the workflow, from local changes to dependency installation and pushing code.&lt;/p&gt;
&lt;h3&gt;
  
  
  A Security canvas for investigating findings
&lt;/h3&gt;

&lt;p&gt;The Copilot app's security extension brings code scanning alerts into a Security canvas, where you can ask for an explanation, request a fix, and inspect the resulting changes. It can also review local changes before a pull request is opened.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://docs.github.com/en/copilot/how-tos/github-copilot-app/view-and-fix-security-alerts" rel="noopener noreferrer"&gt;extension documentation&lt;/a&gt; makes two useful distinctions: it is in public preview, and it displays code scanning alerts rather than Dependabot or secret scanning alerts. A requested fix changes the local working copy; the usual review and scanning process still determines whether the alert is resolved.&lt;/p&gt;
&lt;h3&gt;
  
  
  AI Scan extends coverage beyond CodeQL
&lt;/h3&gt;

&lt;p&gt;GitHub presented whole-repository scanning and assigning a backlog of findings to Copilot, as well as AI Scan coverage for pull requests in languages and frameworks CodeQL does not cover.&lt;/p&gt;

&lt;p&gt;For the pull request feature, &lt;a href="https://docs.github.com/en/code-security/concepts/code-scanning/ai-powered-security-detections" rel="noopener noreferrer"&gt;the docs&lt;/a&gt; list examples including PHP, Shell/Bash, Terraform, Dockerfiles, JSP, and Blazor. The findings are advisory and currently cannot enforce a merge requirement through a ruleset. That is a material detail for a team planning its security gates.&lt;/p&gt;
&lt;h3&gt;
  
  
  Push protection catches unstructured secrets
&lt;/h3&gt;

&lt;p&gt;Damian pushed a local commit containing a secret and showed AI detection blocking it before it reached the repository. This extends protection to unstructured secrets such as passwords that do not match a known provider pattern.&lt;/p&gt;

&lt;p&gt;AI-detected secret push protection is in public preview. Both push protection and AI secret detection must be enabled. &lt;a href="https://docs.github.com/en/code-security/how-tos/secure-your-secrets/prevent-future-leaks/enable-ai-push-protection" rel="noopener noreferrer"&gt;GitHub documents&lt;/a&gt; the security licensing requirements and additional AI credit consumption, which belong in the rollout plan.&lt;/p&gt;
&lt;h3&gt;
  
  
  Package firewall and reachability analysis address dependency risk
&lt;/h3&gt;

&lt;p&gt;Package firewall blocks malicious or risky npm packages before agents, developer tools, or CI runners install them. The &lt;a href="https://docs.github.com/en/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/protecting-endpoints-with-package-firewall" rel="noopener noreferrer"&gt;public preview&lt;/a&gt; evaluates downloads against policies such as package age and malware advisories.&lt;/p&gt;

&lt;p&gt;Reachability analysis helps prioritize existing Dependabot alerts by looking for call paths from application code to vulnerable dependency functions. It currently supports JavaScript and TypeScript repositories and is also &lt;a href="https://docs.github.com/en/code-security/concepts/supply-chain-security/about-reachability-analysis-for-dependabot-alerts" rel="noopener noreferrer"&gt;in public preview&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The static analysis gives teams a call path to investigate and helps order the remediation queue. Reachability alone establishes neither runtime execution nor exploitability, so severity and other evidence still inform the priority.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7epurjakso5ro4z86n1h.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7epurjakso5ro4z86n1h.jpg" alt="Package firewall settings for blocking malware and packages with security advisories" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Enterprise access changes, but usage still needs a budget
&lt;/h2&gt;

&lt;p&gt;GitHub Enterprise customers can now access Copilot features without purchasing a separate Copilot subscription and pay for the AI credits they use. The announcement includes the app, code review, automations, and the wider Copilot feature set.&lt;/p&gt;

&lt;p&gt;The rollout details in &lt;a href="https://github.blog/news-insights/company-news/github-universe-2026-evolving-every-layer-of-the-stack/" rel="noopener noreferrer"&gt;the announcement&lt;/a&gt; matter: the new route is available through GitHub Sales, self-service is coming later, and existing Copilot Business and Copilot Enterprise customers can keep their plans or move when ready.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Access or rollout detail to retain&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Copilot app and Projects&lt;/td&gt;
&lt;td&gt;App access spans Copilot plans; Projects is in public preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copilot Fusion&lt;/td&gt;
&lt;td&gt;Generally available in supported clients; model and effort access follows plan and policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copilot Automations&lt;/td&gt;
&lt;td&gt;Eligible paid plans; private/internal repositories for cloud execution; AI credits and Actions usage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code Review, including Max&lt;/td&gt;
&lt;td&gt;Organization policy can enable credit-based review for members without a Copilot subscription&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise consumption route&lt;/td&gt;
&lt;td&gt;Available through Sales; self-service forthcoming; existing plans can continue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security canvas and Connectors&lt;/td&gt;
&lt;td&gt;Public preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Scan&lt;/td&gt;
&lt;td&gt;Repository visibility, security licensing, settings, and usage billing affect access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI-detected secret push protection&lt;/td&gt;
&lt;td&gt;Public preview; requires the security entitlement and detection settings; consumes AI credits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Package firewall and reachability analysis&lt;/td&gt;
&lt;td&gt;Public preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stacked PRs and CLI attachments&lt;/td&gt;
&lt;td&gt;Stacked PRs reached GA October 6; follow the documented stack and attachment workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Simpler access should make adoption easier, while tool permissions and AI credit budgets give enterprise teams a way to control how that usage grows.&lt;/p&gt;
&lt;h2&gt;
  
  
  Rebuilding Git was one of the most substantial announcements
&lt;/h2&gt;

&lt;p&gt;Jay acknowledged that GitHub had struggled with performance and reliability at points during the year. Growth explained some of the pressure; he explicitly said it was not an excuse.&lt;/p&gt;

&lt;p&gt;GitHub reported adding four million CPU cores, 160 PB of high-speed storage, and 50 Tb/s of network capacity so far this year. It also expects to complete the broader migration to a multi-region Azure deployment in early 2027.&lt;/p&gt;

&lt;p&gt;April Leonard then explained why adding capacity alone would not solve the Git bottlenecks. Every agent session can create branches, read history, and push changes. In September alone, developers and agents produced more than seven billion commits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnyij5ab4hed1l88d5z1h.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnyij5ab4hed1l88d5z1h.jpg" alt="April Leonard speaking about GitHub's infrastructure during the keynote" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nearly every repository had already moved to Azure, but for roughly 100 of the busiest repositories, even 25 milliseconds between data centers mattered. An initial improvement changed write coordination from locking a whole repository to locking the branch being updated. That delivered three to four times more write throughput for agents working on different branches.&lt;/p&gt;

&lt;p&gt;The next architecture follows three principles: simplify the primitives, separate storage from compute, and minimize coordination. Azure Blob Storage holds the durable source of truth. Ephemeral serving nodes cache data and can scale with demand. A specialized replicated log service handles the small reference transaction that remains on the critical path.&lt;/p&gt;

&lt;p&gt;The test results were substantial:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With 5,000 agents targeting one repository, the system sustained 7,200 writes per second, which GitHub described as 180 times current throughput.&lt;/li&gt;
&lt;li&gt;GitHub replayed 24 hours of traffic from its busiest open-source repository in one minute against the new architecture.&lt;/li&gt;
&lt;li&gt;The read load-testing harness reached its own limit before the new architecture did.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are reported test results, rather than a throughput guarantee for every repository. The keynote included an early-user segment with Peter Steinberger of OpenClaw, and GitHub expects everyone to move to the new architecture by early 2027.&lt;/p&gt;

&lt;p&gt;The infrastructure work also includes an AI gateway processing trillions of tokens, prompt caching and harness improvements, more Actions capacity and control-plane hardening, additional network edge sites, four times the backhaul between legacy data centers and Azure, and TLS optimizations. The &lt;a href="https://www.youtube.com/watch?v=EQeJj0hoPS8&amp;amp;t=1890s" rel="noopener noreferrer"&gt;keynote recording&lt;/a&gt; covers the infrastructure section, alongside &lt;a href="https://github.blog/news-insights/company-news/github-universe-2026-evolving-every-layer-of-the-stack/" rel="noopener noreferrer"&gt;GitHub's written announcement&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is the dependency behind the earlier demos. Coordinating agents becomes much less useful if they spend their time waiting on Git, CI, or platform availability.&lt;/p&gt;
&lt;h2&gt;
  
  
  Octoverse shows how developers are using the tools
&lt;/h2&gt;

&lt;p&gt;The rest of the &lt;a href="https://github.blog/news-insights/octoverse/octoverse-commits-pushes-reach-new-highs-in-2026-as-developers-build-with-agents/" rel="noopener noreferrer"&gt;Octoverse report&lt;/a&gt; adds context that I did not want to lose in a keynote-only recap.&lt;/p&gt;
&lt;h3&gt;
  
  
  Agents are increasingly producing the first draft
&lt;/h3&gt;

&lt;p&gt;By September, more than 40% of pull requests started with a detectable agent's first draft, up from 17% in March. That amounted to around 110 million in September alone.&lt;/p&gt;

&lt;p&gt;About 87% of agent-started pull requests changed multiple files, compared with 79% of those without detected agent involvement. The share of agent-involved PRs merged within two weeks rose from 83% in February to 90% in September; the comparison group remained around 86%.&lt;/p&gt;

&lt;p&gt;Among Copilot's monthly active users, 55% used agentic features, up from 35% a year earlier. Cloud agent usage grew 230% year over year, compared with 85% for agent chat. These figures describe observed workflows, and undetected agent use can still exist in the comparison group.&lt;/p&gt;

&lt;p&gt;Review and security activity grew alongside implementation: AI-assisted review and GitHub Advanced Security usage each increased by more than 90%, while push protection ran 5.8 billion scans, nearly four times the previous year's pace.&lt;/p&gt;
&lt;h3&gt;
  
  
  Model choice is already plural
&lt;/h3&gt;

&lt;p&gt;In September, 61% of Copilot users who explicitly selected models used more than one, up from 50% four months earlier. Developers on paid plans used 47 distinct models, compared with 29 in May, and no model accounted for more than 25% of qualifying requests.&lt;/p&gt;

&lt;p&gt;The report groups examples by their intended role:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model group&lt;/th&gt;
&lt;th&gt;Examples in the report&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deep reasoning and planning&lt;/td&gt;
&lt;td&gt;Claude Opus 5.5, GPT 5.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;General purpose&lt;/td&gt;
&lt;td&gt;Claude Sonnet 5, Grok 4.7, GPT 6.1 Sol&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fast and lightweight&lt;/td&gt;
&lt;td&gt;Claude Haiku 5.5, Gemini 3.8 Flash, GPT 6 Luna&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Of every 100 developer-selected requests, 38 went to general-purpose models, 37 to reasoning and planning models, and 25 to lightweight models. This analysis excludes automatic selection and several other kinds of traffic; it describes usage rather than model quality.&lt;/p&gt;

&lt;p&gt;Separately, 63% of paying Copilot developers used automatic model selection at least once in September. Project HydraFusion, the research preview behind Fusion, routed almost 60,000 sessions. That helps explain why GitHub is investing in choosing models on the developer's behalf while preserving explicit selection.&lt;/p&gt;
&lt;h3&gt;
  
  
  Growth reaches more countries and industries
&lt;/h3&gt;

&lt;p&gt;The ten largest developer populations in September were:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Country&lt;/th&gt;
&lt;th&gt;Developers on GitHub&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;United States&lt;/td&gt;
&lt;td&gt;38.3 million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;India&lt;/td&gt;
&lt;td&gt;32.0 million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;China&lt;/td&gt;
&lt;td&gt;12.4 million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brazil&lt;/td&gt;
&lt;td&gt;10.2 million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Japan&lt;/td&gt;
&lt;td&gt;7.15 million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;United Kingdom&lt;/td&gt;
&lt;td&gt;6.47 million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Indonesia&lt;/td&gt;
&lt;td&gt;6.34 million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;6.30 million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Russia&lt;/td&gt;
&lt;td&gt;5.07 million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;France&lt;/td&gt;
&lt;td&gt;4.75 million&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The United States and India each added more than ten million developers, and Brazil added 3.28 million. Every country included in last year's projections had already closed at least 20% of the distance to its 2030 projection; the US had closed 38.6%, and India 28.3%.&lt;/p&gt;

&lt;p&gt;For pushes to public repositories, the top ten were the United States, India, China, Brazil, Germany, the United Kingdom, South Korea, France, Japan, and Canada. That is a different ranking from total developer population.&lt;/p&gt;

&lt;p&gt;The new industry analysis uses NAICS classifications of public repositories. Mining, construction, healthcare, and agriculture have grown substantially since 2022. More than 40% of repositories in administrative services, mining, healthcare, and agriculture mentioned AI, but detectable agent-opened pull requests were below 3%. Construction had about 25% mentioning AI and around 9% with agent-opened PRs.&lt;/p&gt;

&lt;p&gt;The distinction between AI mentions and agent-opened PRs keeps two different kinds of adoption visible. The report's wider examples include disaster alerts in Nepal, spacecraft software, research tools, and industrial energy analysis. There is useful software here well beyond developer tooling.&lt;/p&gt;
&lt;h3&gt;
  
  
  Language choices may also reflect agent defaults
&lt;/h3&gt;

&lt;p&gt;TypeScript remained first by contributors, followed by Python and JavaScript. Between September 2025 and September 2026, they added 3.62 million, 3.23 million, and 1.82 million monthly contributors respectively. Rust doubled its contributor base, the fastest percentage growth among the leading languages.&lt;/p&gt;

&lt;p&gt;GitHub's forecast puts TypeScript and Python near 13 million monthly contributors each by September 2027.&lt;/p&gt;

&lt;p&gt;The report also raises the possibility that agent defaults influence language choice. Among new repositories, TypeScript was the primary language in 35% of those with an observed agent signal, compared with 24% without one. For me, that reinforces the value of specifying language and architectural constraints when starting a project with agents.&lt;/p&gt;
&lt;h3&gt;
  
  
  Open source supplies both the foundations and the tools
&lt;/h3&gt;

&lt;p&gt;Octoverse separates community and independent projects from single-vendor or product-led repositories. The distinction is strategic control, not whether the project receives community contributions.&lt;/p&gt;

&lt;p&gt;These are the complete fastest-growing lists by increase in contributing accounts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Community or independent&lt;/th&gt;
&lt;th&gt;Single vendor or product-led&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;farion1231/cc-switch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;anthropics/claude-code&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;punkpeye/awesome-mcp-servers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;openai/codex&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;omacom/omarchy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;anomalyco/opencode&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;firstcontributions/first-contributions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;microsoft/vscode&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ggml-org/llama.cpp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;github/copilot-cli&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;code&gt;EclipseFdn/open-vsx.org&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;zed-industries/zed&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sgl-project/sglang&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;google-gemini/gemini-cli&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;code&gt;vllm-project/vllm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;BerriAI/litellm&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;code&gt;imputnet/helium&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;microsoft/winget-pkgs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;code&gt;vllm-project/vllm-ascend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Kilo-Org/kilocode&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The most-engaged ranking combines stars, forks, and distinct pull request and issue creators:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Community or independent&lt;/th&gt;
&lt;th&gt;Single vendor or product-led&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;openclaw/openclaw&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;NousResearch/hermes-agent&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;vllm-project/vllm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;anomalyco/opencode&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ggml-org/llama.cpp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;earendil-works/pi&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;omacom/omarchy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;stablyai/orca&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;code&gt;farion1231/cc-switch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pingdotgg/t3code&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sgl-project/sglang&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;microsoft/vscode&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pytorch/pytorch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Graphify-Labs/graphify&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rust-lang/rust&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;paperclipai/paperclip&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;code&gt;home-assistant/core&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;BerriAI/litellm&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;code&gt;python/cpython&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;can1357/oh-my-pi&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Inference engines, runtimes, and community platforms sit alongside the agents and editors developers use directly. Both depend on people maintaining code that other projects build on.&lt;/p&gt;
&lt;h2&gt;
  
  
  The closing keynote: Developer joy, hackable hardware, and the human side of AI
&lt;/h2&gt;

&lt;p&gt;While Day 1 focused on platform architecture, enterprise governance, and Git throughput, the final keynote of Universe 2026 brought the conversation back to where GitHub began: open source, community maintainers, and the joy of building software.&lt;/p&gt;

&lt;p&gt;Martin Woodward opened the final session by acknowledging the emotional reality of 2026: with new frontier models shipping every few weeks and telemetry breaking records everywhere, developers are feeling the pace. His answer to feeling constantly out of date is simple: learn by doing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp64m6clm8hu8i7y2dtzr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp64m6clm8hu8i7y2dtzr.jpg" alt="Martin Woodward opening the GitHub Universe 2026 Day 2 Keynote" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The hackable badge and culture when no one is looking
&lt;/h3&gt;

&lt;p&gt;The centerpiece of that hands-on ethos was the physical conference badge every attendee wore in San Francisco. Built in partnership with Arm, the 2026 badge is an astonishing piece of hardware: a dual-core Raspberry Pi RP2350 Cortex processor packed with an accelerometer, environmental sensors, Bluetooth radio, and a color screen running MicroPython.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvg52l1fer3e7ntty0fwy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvg52l1fer3e7ntty0fwy.jpg" alt="The hackable Universe badge powered by the RP2350 processor" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Martin shared an unscripted story behind the badge that stuck with me. During the 2025 conference, a typhoon struck a component supplier and global supply shortages delayed screen deliveries until the night before the event. Rather than canceling the badge giveaway, GitHub engineers, managers, and community members spent the entire night in the San Francisco office hand-assembling boards and soldering screens so attendees could pick them up at 8:00 AM.&lt;/p&gt;

&lt;p&gt;As Martin put it: "Culture is what happens when no one is looking." For all the enterprise features and cloud scale discussed this week, that community-first startup spirit is what still makes GitHub distinctive.&lt;/p&gt;
&lt;h3&gt;
  
  
  From web simulation to MicroPython in the Copilot app
&lt;/h3&gt;

&lt;p&gt;To make sure attendees without hardware or developers watching the livestream could participate, GitHub published a complete web simulator for the badge. It was built by a summer intern, Charlie Nicholson, who used the simulator framework and around $95 in Copilot credits to create an emulator capable of running games like &lt;em&gt;Flappy Mona&lt;/em&gt; directly in the browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F12gs7vadd91lcjxoz486.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F12gs7vadd91lcjxoz486.jpg" alt="The Universe badge simulator running in the browser" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Martin then took the badge project into the GitHub Copilot app. In a live canvas connected to the badge repository, he showed a Breakout game that he said he had created with a single prompt.&lt;/p&gt;

&lt;p&gt;The technical detail that matters here is not the prompt; it is the harness. Martin explained that the Copilot app canvas could access the MicroPython debugging environment, letting the agent inspect execution and debug the game. That gave it a verification loop beyond simply generating code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb4qvavk7bztgvaed4vuh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb4qvavk7bztgvaed4vuh.jpg" alt="GitHub Copilot app canvas interacting with the MicroPython badge environment" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As Martin noted, that tight verification loop is the difference between an agent producing broken syntax and an agent delivering working software.&lt;/p&gt;
&lt;h3&gt;
  
  
  Edge ML on stage: Training a decision tree in the browser
&lt;/h3&gt;

&lt;p&gt;Martin followed the Breakout demo with an edge machine learning application: building a pedometer for the badge without prior ML expertise.&lt;/p&gt;

&lt;p&gt;He streamed raw accelerometer telemetry from the badge over Bluetooth into a browser canvas. On stage, he gathered live training samples across distinct motion states: standing still, walking normally, and swinging his arms with "big keynote energy" (or as he joked, "the walk of someone who just merged to main on a Friday").&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn3r660v7vpfeg7xnbh0j.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn3r660v7vpfeg7xnbh0j.jpg" alt="The audience applauding during Martin's badge demonstration" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using a browser-based training loop, he trained a decision-tree classifier on the accelerometer dataset and deployed the resulting model directly back to the badge firmware over Bluetooth. The badge successfully distinguished actual walking from arbitrary gestures in real time.&lt;/p&gt;

&lt;p&gt;It was a playful demo, but it demonstrated a practical point: agent tooling can give a developer a way into unfamiliar domains—like embedded edge ML—through experimentation. The learning still comes from collecting data, testing the result, and understanding where it fails.&lt;/p&gt;
&lt;h2&gt;
  
  
  Open source under AI pressure: Maintainer fatigue, pull request slop, and new defensive controls
&lt;/h2&gt;

&lt;p&gt;The keynote then transitioned into the hardest conversation happening across the industry: what happens to open-source maintainers when coding agents make creating pull requests essentially free?&lt;/p&gt;

&lt;p&gt;Octoverse reported that over 40% of all pull requests on GitHub now begin with an agent's first draft, up from 17% in March. While that speed accelerates prototyping, Martin acknowledged the painful downside: "Not all those PRs are diamonds. Just because it's easier to create than ever doesn't mean what you have is ready to commit. Some are just bad ideas. Some are barely ideas at all. You know, slop."&lt;/p&gt;

&lt;p&gt;Traditionally, open source functioned because coding had inherent friction. Contributors had to spend time understanding the codebase, learning the project's culture, reading documentation, and following contribution guidelines before submitting code. That friction acted as an organic quality filter.&lt;/p&gt;

&lt;p&gt;Coding agents have largely eliminated that barrier. Well-meaning contributors now use agents to generate pull requests and shallow security reports across dozens of repositories without reading the project guidelines or verifying the fix. For open-source maintainers—most of whom volunteer their free time after work—wading through low-effort AI contributions has become an exhausting, unpaid burden.&lt;/p&gt;
&lt;h3&gt;
  
  
  Maintainer guardrails: WIP limits, contributor exemptions, and PR access
&lt;/h3&gt;

&lt;p&gt;To protect maintainers, Martin highlighted repository controls designed to restore balance. Some predate Universe; the latest update adds more flexibility over who is subject to limits:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Work-in-progress (WIP) limits per repository:&lt;/strong&gt; Maintainers can cap open pull requests from users without write access, encouraging contributors to finish an existing change before opening another.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exemptions for established contributors:&lt;/strong&gt; The &lt;a href="https://github.blog/changelog/2026-10-28-pull-request-limits-exempt-contributors-by-age-or-history/" rel="noopener noreferrer"&gt;October 28 update&lt;/a&gt; allows exemptions based on account age or prior merged pull requests. Meeting either configured condition can exempt a contributor. This is separate from temporary interaction limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control over pull request access:&lt;/strong&gt; Since &lt;a href="https://github.blog/changelog/2026-02-13-new-repository-settings-for-configuring-pull-request-access/" rel="noopener noreferrer"&gt;February&lt;/a&gt;, maintainers can restrict PRs to collaborators or disable them. Disabling PRs hides the PR tab, including existing pull requests; re-enabling restores access. It is more than a pause on new submissions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg68wjsoyjkskrg1jcpfg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg68wjsoyjkskrg1jcpfg.jpg" alt="Martin Woodward discussing the pressure on open-source maintainers" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Martin framed this policy change around a clear boundary:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Open source is the freedom to inspect, to remix, and to share without asking for permission. But it's not the freedom to impose your will on others."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As a technical lead who manages both internal shared code and public open-source libraries, I see these controls as long overdue. If platforms do not give maintainers tools to protect their time, maintainers will simply walk away.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why DevOps is the real prerequisite for AI agents
&lt;/h2&gt;

&lt;p&gt;While unguided AI generation strains maintainers, the keynote showed that maintainers with mature operational pipelines are using agents effectively.&lt;/p&gt;

&lt;p&gt;Martin recognized Franck Nijhof from Home Assistant in the audience and reported that the project had merged more than 5,000 pull requests. He also described GitHub's support for Copilot agents across the Cloud Native Computing Foundation (CNCF) ecosystem.&lt;/p&gt;

&lt;p&gt;Martin recounted a telling example from Jorge Castro around OpenPrinting. The OpenPrinting maintainers possess deep, specialized knowledge of printer drivers and protocols, but their primary pain point was infrastructure: managing container refreshes, keeping dependencies current, and maintaining CI/CD pipelines across multiple architectures. He described the &lt;strong&gt;Hive&lt;/strong&gt; automation framework taking on operational maintenance across four OpenPrinting repositories, freeing the domain experts to focus on the driver code they enjoy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy85m1o4kdvjhialhalyl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy85m1o4kdvjhialhalyl.jpg" alt="Martin Woodward recounting the OpenPrinting and Hive example" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That example reinforces a foundational truth: &lt;strong&gt;teams that do DevOps well are the best equipped to take advantage of AI.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The automated checks, strict linting, integration suites, and branch protections you build to let human developers ship quickly are the exact same safeguards an autonomous agent needs. An agent running in a repository without automated testing or clean CI is just an engine for accumulating unverified changes.&lt;/p&gt;

&lt;p&gt;Actions continues to be the backbone of that verification. According to the published Octoverse report, Actions executed 1,440 jobs per second (about 124 million daily) over the reporting year—more than three times the previous year's volume.&lt;/p&gt;
&lt;h2&gt;
  
  
  The limit of pure speed: "Why they call it work"
&lt;/h2&gt;

&lt;p&gt;Martin addressed the temptation to treat raw coding speed as the sole metric of success:&lt;/p&gt;

&lt;p&gt;His point was that shipping faster only helps if we are building the right things. Humans still need to understand the problem, direct the work, and reflect on whether the result makes things better or worse. Defining what good looks like remains part of the job; the agent cannot take that responsibility away.&lt;/p&gt;

&lt;p&gt;That judgment also reflects how developers interact with models. The telemetry shows that developers are not relying on a single frontier model. Of every 100 developer-selected requests, 25 went to fast, lightweight models (such as Gemini 3.8 Flash, Claude Haiku 5.5, or GPT-6 Luna), while 37 went to reasoning models and 38 to general-purpose models. These figures exclude automatic selection; they are request shares, not a breakdown of all developer tasks.&lt;/p&gt;

&lt;p&gt;Choice also extends to editor surfaces. Copilot usage spans the terminal, CLI, Copilot app, web, mobile, VS Code, Visual Studio, Eclipse, and IntelliJ. Native Copilot integration has also expanded to Apple's Xcode following announcements at WWDC.&lt;/p&gt;
&lt;h2&gt;
  
  
  GitHub Next and Chopin: Rethinking collaborative planning with agents
&lt;/h2&gt;

&lt;p&gt;One of the most compelling segments of the closing keynote came from Maggie Appleton, designer and engineer at GitHub Next (GitHub's advanced research and prototyping lab).&lt;/p&gt;

&lt;p&gt;Maggie tackled a problem every engineer using coding agents has experienced: agent planning today is broken.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqb3l0cd0tt0dj0qik2pi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqb3l0cd0tt0dj0qik2pi.jpg" alt="Maggie Appleton critiquing current agent planning limitations" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Her critique targeted four specific failure modes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The multiple-choice interrogation:&lt;/strong&gt; Planning typically happens in a tiny terminal CLI or desktop chat box, subjecting the developer to an endless sequence of multiple-choice questions. By question nine, cognitive fatigue sets in and the developer defaults to clicking "Option A (Recommended)"—what Maggie called &lt;em&gt;vibes-based decision making&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text walls:&lt;/strong&gt; Once the questionnaire concludes, the agent spits out pages of dense markdown. Reading walls of technical text is tiring, and subtle architectural errors get buried.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single-player isolation:&lt;/strong&gt; Today's agent sessions are private 1-on-1 conversations between an individual engineer and an LLM. Teammates cannot see the plans being generated or the architectural trade-offs being accepted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The PR is too late for feedback:&lt;/strong&gt; Because engineers lack collaborative planning tools, they default to letting the agent implement the entire feature and opening a pull request to get feedback from teammates. But a pull request is way too late in the lifecycle to ask: &lt;em&gt;"Should we even build this?"&lt;/em&gt; or &lt;em&gt;"Is this the right backend architecture?"&lt;/em&gt; Rewriting or discarding code after tokens have already been spent is pure waste.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  The Chopin prototype: Multiplayer canvases, proactive research, and decision audit logs
&lt;/h3&gt;

&lt;p&gt;To solve this, GitHub Next built &lt;strong&gt;Chopin&lt;/strong&gt;, an experimental prototype named after the composer Frédéric Chopin.&lt;/p&gt;

&lt;p&gt;Chopin re-imagines agent planning as a real-time collaborative workspace where multiple human developers and an intelligent agent work together inside the same document:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shared context:&lt;/strong&gt; The planning canvas is connected directly to the repository and open to the entire team. Multiple engineers can chat, write requirements, and refine specifications simultaneously.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proactive agent research:&lt;/strong&gt; Rather than waiting passively for instructions, the Chopin agent reads the team's discussion and anticipates needs. When Martin and Maggie discussed using Bluetooth versus Wi-Fi for their multiplayer badge game, Chopin proactively researched Bluetooth LE range limitations, synthesized the technical trade-offs, and generated inline dataflow diagrams explaining how synchronization would work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual prototypes over text walls:&lt;/strong&gt; When debating user interfaces, Chopin generated interactive, clickable mockups showing different states (such as an animated landscape game view versus a large accessible counter). Engineers can click through states before any production code is written.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decision cards with attribution:&lt;/strong&gt; The demo captured choices as decision cards. When Maggie or Martin selected an option, the document recorded who made the decision and when. If a developer asks two months later why a specific approach was chosen, the record gives them someone to ask and the surrounding planning context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direct conversion to tasks:&lt;/strong&gt; Once the team agrees on the plan, Chopin breaks the work into modular implementation tasks and opens corresponding pull requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9dr651js4jyew5fdtprt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9dr651js4jyew5fdtprt.jpg" alt="Chopin showing badge-sync research and a prototype with two step counters" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Maggie and Martin then tried the collaborative 10,000-step game on their badges. After moving closer together, the demo reached its shared goal—a suitably hands-on ending to a discussion about planning.&lt;/p&gt;

&lt;p&gt;For engineering teams, this approach feels far healthier than isolated agent prompting. It brings software planning back to what it should be: a collaborative team activity where agents assist research and visual prototyping, while humans make and own the decisions.&lt;/p&gt;
&lt;h2&gt;
  
  
  Software beyond tech: Science, low-level systems, and the next generation
&lt;/h2&gt;

&lt;p&gt;The keynote also explored how open-source practices are transforming disciplines outside traditional commercial software.&lt;/p&gt;

&lt;p&gt;Professional, scientific, and technical services have grown fivefold on GitHub, becoming the leading open-source growth sector outside of core tech. Research repositories have quietly become the verifiable paper trail behind published academic literature.&lt;/p&gt;

&lt;p&gt;To support researchers, GitHub highlighted native &lt;strong&gt;Citation support&lt;/strong&gt; (enabling standard academic citations directly from repositories) and &lt;strong&gt;ORCID ID integration&lt;/strong&gt; to link software artifacts to verified researcher identities.&lt;/p&gt;

&lt;p&gt;The GitHub Campus Program now spans nearly 2,500 academic institutions across 60 countries, supported by more than 100 active Campus Experts and 500 alumni helping students navigate git, AI tools, and open source.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9w3j9tm2hwp96cvku8n2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9w3j9tm2hwp96cvku8n2.jpg" alt="Jocelyn Velarde discussing BCI robotics and low-level engineering" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Martin invited Jocelyn Velarde, a visiting undergraduate researcher at the UC Davis Neuroprosthetics Lab and an MLH coach, to share her path through open source.&lt;/p&gt;

&lt;p&gt;While still in high school in Monterrey, Mexico, Jocelyn cold-emailed Dr. Miriam Alanis at Tec de Monterrey and built an EEG-controlled brain-computer interface (BCI) robotic hand prosthetic using Linear Discriminant Analysis (LDA) machine learning.&lt;/p&gt;

&lt;p&gt;Today at UC Davis, she works on the "Brain to Voice" project, decoding neural signals to restore real-time speech for ALS patients. Her specific technical focus is low-level systems engineering across heterogeneous compute platforms to minimize audio streaming latency—work that requires deep hardware and systems understanding.&lt;/p&gt;

&lt;p&gt;Her advice to aspiring engineers was simple and practical: set clear goals, find supportive communities (such as Campus Experts and MLH), and do not hesitate to reach out to mentors directly.&lt;/p&gt;
&lt;h2&gt;
  
  
  The closing message: You write the story
&lt;/h2&gt;

&lt;p&gt;The final keynote ended with characteristic hacker playfulness. Martin placed his badge inside a plushie "Ship It" squirrel, trained gesture-recognition models on stage to detect throws and drops, and invited the audience into a live airtime contest, tossing Mona, Copilot, and Octocat plushies across the hall while the badges tracked airtime.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fky0pyhlikaskhvtbmxo9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fky0pyhlikaskhvtbmxo9.jpg" alt="The closing keynote finale with plushie gesture recognition and audience competition" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Underneath the fun was a serious message for developers:&lt;/p&gt;

&lt;p&gt;Martin said AI makes it easier to create applications we previously lacked the time or skills to build. He asked us to broaden the circle of people we learn from, push the boundaries of what we know, and learn by doing. Creativity, judgment, and taste remain ours to bring.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"In this new era, AI doesn't write the story. You write the story."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  What I am taking back from Universe
&lt;/h2&gt;

&lt;p&gt;Jay Parikh opened Universe with the claim that all the software written so far might amount to just 1% of what humans and agents build over the next five years. Martin Woodward closed it by reminding us that without human judgment and heart, building faster just means accumulating unverified slop.&lt;/p&gt;

&lt;p&gt;Across both keynotes, the real narrative of Universe 2026 was not that agents are replacing developers. It was that GitHub is evolving every layer of the delivery pipeline to make agent-assisted engineering manageable, accountable, and sustainable.&lt;/p&gt;

&lt;p&gt;Day 1 provided the technical machinery:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copilot Projects to coordinate features across repositories.&lt;/li&gt;
&lt;li&gt;Copilot Fusion to handle multi-model routing across reasoning, general, and fast tiers.&lt;/li&gt;
&lt;li&gt;Rebuilding Git from the ground up, with a reported test sustaining 7,200 writes per second from 5,000 agents targeting one repository.&lt;/li&gt;
&lt;li&gt;Automations and Code Review Max to catch regressions and security vulnerabilities before shipping.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Day 2 provided the operational principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Protecting maintainers from automated spam with WIP limits and interaction gates.&lt;/li&gt;
&lt;li&gt;Recognizing that DevOps and CI/CD maturity are strict prerequisites before deploying agents at scale.&lt;/li&gt;
&lt;li&gt;Moving planning out of private terminal questionnaires into multiplayer collaborative canvases like Chopin.&lt;/li&gt;
&lt;li&gt;Anchoring delivery in tight verification loops and human accountability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For my own teams and clients, I am taking back a clear implementation checklist:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pilot a multi-repo feature with Copilot Projects:&lt;/strong&gt; Choose a bounded feature spanning two or three services. Set explicit AI credit budgets and tool access, and follow the work from initial issue through review and merge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Harden the verification gate before scaling agents:&lt;/strong&gt; If a repository does not have automated linting, appropriate unit and integration tests, and clean CI checks, do not give an agent merge permissions. The OpenPrinting example reinforced why operational maintenance belongs alongside the agent rollout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Turn on repository guardrails:&lt;/strong&gt; Configure appropriate limits for outside contributors, with exemptions that fit the community, to encourage focused contributions and prevent maintainer fatigue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bring planning into the open:&lt;/strong&gt; Stop letting engineers plan complex features in private 1-on-1 LLM prompts. Use shared specs, visual mockups, and explicit decision records so the whole team understands what is being built and why.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tools like Fusion, Automations, and Chopin will continue to evolve. But the fundamental responsibility of an engineering lead remains unchanged: define what good looks like, establish the safety rails, and ensure that every decision that reaches production can be explained by a human.&lt;/p&gt;



&lt;p&gt;Thanks for reading this post, I hope you found it interesting!&lt;/p&gt;

&lt;p&gt;Feel free to follow me to get notified when new articles are out 🙂&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__79932"&gt;
    &lt;a href="/kasuken" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F79932%2Fbe7bcd76-1f69-4336-9155-6017aebb2c53.png" alt="kasuken image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/kasuken"&gt;Emanuele Bartolesi&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/kasuken"&gt;🏆 Microsoft MVP (12x) &amp;amp; GitHub Star (4x) ⭐
👨‍🎓 LinkedIn Technical Instructor 🎓&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>github</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>Seasoned Developer Advice after 25 years in IT</title>
      <dc:creator>Emanuele Bartolesi</dc:creator>
      <pubDate>Fri, 09 Oct 2026 10:09:24 +0000</pubDate>
      <link>https://dev.to/playfulprogramming/seasoned-developer-advice-after-25-years-in-it-5dpg</link>
      <guid>https://dev.to/playfulprogramming/seasoned-developer-advice-after-25-years-in-it-5dpg</guid>
      <description>&lt;p&gt;I've now been working in IT for exactly 25 years.&lt;/p&gt;

&lt;p&gt;My impostor syndrome is still very much present. Writing an article called "seasoned developer advice" makes me hesitate a little. There is always something I don't know, a technology I haven't used, or someone who understands a subject much better than I do.&lt;/p&gt;

&lt;p&gt;But after 25 years, I think I can start sharing a few thoughts.&lt;/p&gt;

&lt;p&gt;These are opinions about how to work, build software, and stay in this profession. Take what helps, question the rest, and adapt it to the team and situation you have in front of you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask the question you are embarrassed to ask
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fib8llx945q6r6c2t5d1i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fib8llx945q6r6c2t5d1i.png" alt="01-ask-questions" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If a requirement is unclear, ask about it before you turn it into code.&lt;/p&gt;

&lt;p&gt;What does "active customer" mean? Who can approve this operation? What should happen when the external service is unavailable? These questions can feel basic, especially when everyone else in the meeting appears to understand everything.&lt;/p&gt;

&lt;p&gt;I would rather admit that I don't understand a business rule than build an entire feature around my interpretation of it. The same applies to an unfamiliar piece of code. Ask someone to walk you through it, then explain it back in your own words.&lt;br&gt;
This step is even easier with AI nowdays, but asking a colleague still an easier thing to understand maybe something that AI doesn't know behind a business choice or something like that.&lt;/p&gt;

&lt;p&gt;Experience should make it easier to say "I don't know yet." I still have to remind myself of that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give coordination an owner
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwvipn9z9svvlcr92489k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwvipn9z9svvlcr92489k.png" alt="Plush Emanuele arranging connected task cards on a felt board." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Developers need time to develop. If the lead developer also has to chase every dependency, negotiate the scope, update stakeholders, and organize the release, account for that work in the plan.&lt;/p&gt;

&lt;p&gt;On a larger project, I would want someone explicitly responsible for coordination. That might be a project manager, a delivery lead, or another role that fits the organization. On a small team, it may be a shared responsibility, but the decisions still need an owner.&lt;/p&gt;

&lt;p&gt;A date written in a ticket does not resolve a blocked dependency. Someone has to talk to the other team, agree on what happens next, and adjust the plan when the answer changes.&lt;/p&gt;

&lt;p&gt;When estimating a feature, include that work. A week full of meetings leaves less time for implementation than a week with clear decisions and uninterrupted time.&lt;br&gt;
Actually we are still doing this mistake to "overmeetings" but I hope it will change soon or later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make meetings earn their place
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feyio1e0zl6lpq0bp99up.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feyio1e0zl6lpq0bp99up.png" alt="Plush Emanuele at a meeting table with an hourglass and a decision board." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I don't think every team needs the same meeting schedule.&lt;/p&gt;

&lt;p&gt;A short conversation with the person who understands the business process can be useful while a feature is taking shape. Showing a working screen may reveal that the approval flow is wrong before you spend another week building it.&lt;/p&gt;

&lt;p&gt;A daily meeting where everyone reads out tickets already visible on the board is harder to justify.&lt;/p&gt;

&lt;p&gt;For me, a useful meeting resolves a question, exposes a dependency, or produces a decision. If an update can be written down and read when people have time, try that. If a disagreement needs a conversation, have the conversation.&lt;/p&gt;

&lt;p&gt;Record the outcome where the work lives. A decision made on a call is easy to miss if the developer implementing it was somewhere else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write code for the person who has to change it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbwve3fp0ewbg2ayoawrc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbwve3fp0ewbg2ayoawrc.png" alt="Plush Emanuele showing readable code on a laptop beside connected modules." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Readable code matters most when someone needs to fix it under pressure.&lt;/p&gt;

&lt;p&gt;I prefer a method with a clear name and an obvious flow over an abstraction that takes three files to understand. There are good reasons for abstraction, but I want to know which problem it solves before adding another layer.&lt;/p&gt;

&lt;p&gt;The same caution applies to shared code. Two methods that look similar may represent business rules that will evolve independently. Putting them in one common library creates a relationship you will have to maintain.&lt;/p&gt;

&lt;p&gt;Extract code when the shared behavior is understood. If several applications depend on it, think about compatibility, ownership, and how updates will reach them. Publishing a package creates a responsibility beyond the original project.&lt;br&gt;
Still a valid advice also for we use a lot of AI for writing code.&lt;br&gt;
We need anywayt to review what is written to understand if we can read and understand the code anyway.&lt;/p&gt;

&lt;h2&gt;
  
  
  Leave the explanation you would want to find later
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu66h82yrr9a52g029e9l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu66h82yrr9a52g029e9l.png" alt="Plush Emanuele writing diagrams in a notebook beside a laptop." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code can show what happens without explaining why it must happen that way.&lt;/p&gt;

&lt;p&gt;A comment explaining that a file format is required by an external system is useful. A comment saying that the next line increments a counter usually adds little.&lt;/p&gt;

&lt;p&gt;I want documentation that helps someone do the work: how to run the application, which configuration is needed, how to execute the tests, and what to check when a deployment fails. Keep those instructions close to the repository and update them when the workflow changes.&lt;/p&gt;

&lt;p&gt;There is also value in a short decision note. If the team rejected a queue because the current workload did not justify operating one, record that reasoning and the condition that would make you reconsider.&lt;/p&gt;

&lt;p&gt;AI can help draft these explanations. Check them against the code and the actual setup before treating them as documentation. A plausible installation guide that cannot be followed is another problem for the next developer to debug.&lt;/p&gt;

&lt;h2&gt;
  
  
  Think about the application after it leaves your machine
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff01lcapyywv10288tljt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff01lcapyywv10288tljt.png" alt="Plush Emanuele inspecting a server with a recovery arrow and a shield." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A feature needs more than a successful local run.&lt;/p&gt;

&lt;p&gt;Before shipping, I want to know how we will recognize a failure and what we can do about it. A useful log entry should give enough context to trace an operation without exposing credentials or customer data. An exception with no context can leave you searching through several unrelated requests.&lt;/p&gt;

&lt;p&gt;Be deliberate about tests, too. If a feature moves data between customers, test that boundary. If it sends notifications, consider what happens when an operation is repeated. The failure case should influence the test, rather than becoming an afterthought once the happy path passes.&lt;/p&gt;

&lt;p&gt;And discuss recovery. Reverting code will not undo every effect of that code. A database change or an email already sent needs its own consideration.&lt;/p&gt;

&lt;p&gt;These questions belong in development, while you can still change the design without an incident forcing the decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review the code without making it personal
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7xn1p41u494hx4q59xzb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7xn1p41u494hx4q59xzb.png" alt="Plush Emanuele reviewing a laptop with a magnifying glass and a friendly feedback bubble." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having someone question your implementation can be uncomfortable. With impostor syndrome already in the room, a review comment can feel larger than it is.&lt;/p&gt;

&lt;p&gt;Try to keep the conversation specific. Explain which behavior concerns you, point to the assumption, and suggest a way to verify it. "What happens if this request is retried?" is a useful opening for a discussion.&lt;/p&gt;

&lt;p&gt;As the author, explain your reasoning and be willing to change it. As the reviewer, distinguish a defect from a preference. A naming choice does not deserve the same treatment as a missing authorization check.&lt;/p&gt;

&lt;p&gt;I also like reviews small enough that a colleague can understand the change properly. If a bug fix includes a folder reorganization and a new framework, consider separating those decisions.&lt;/p&gt;

&lt;p&gt;The goal is a change the team understands well enough to maintain. Being the person who wins the argument contributes very little to that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make maintenance part of the plan
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F80apjn13cfirdcuue8ov.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F80apjn13cfirdcuue8ov.png" alt="Plush Emanuele maintaining a software box beside a calendar." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Framework upgrades, dependency updates, and refactoring need time on the calendar.&lt;/p&gt;

&lt;p&gt;It is easy to postpone them because the application still works. When you do, be explicit about what you are accepting and when you will revisit it. Otherwise, postponement becomes the plan by default.&lt;/p&gt;

&lt;p&gt;A refactoring ticket should name the problem it will address. Perhaps adding a validation rule currently requires changing five different places. That gives the team a concrete improvement to assess and a way to tell whether the work helped.&lt;/p&gt;

&lt;p&gt;I would apply the same discipline to modernization. Explain what the upgrade enables, which risk it addresses, and how you will validate the change. The age of a framework alone is a weak explanation for rewriting a working application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep learning through things you can use
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F01fymquljz45tenzs45n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F01fymquljz45tenzs45n.png" alt="Plush Emanuele learning from a book and experimenting with a laptop." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You cannot study every language, framework, cloud service, and AI tool that appears.&lt;/p&gt;

&lt;p&gt;Choose something relevant and spend enough time with it to understand where it helps. Build a small application, add a feature to a side project, or investigate a part of your production system that you usually avoid.&lt;/p&gt;

&lt;p&gt;A course can give you structure. Applying the lesson gives you questions the course may never have covered.&lt;/p&gt;

&lt;p&gt;I would also leave room to learn from colleagues. Someone with less experience may know a tool or technique you have never used. Twenty-five years in IT should not make that conversation awkward.&lt;/p&gt;

&lt;p&gt;Your main language is useful expertise. Stay curious about the parts around it: the database query, the deployment pipeline, or the interface the user has to navigate. A problem does not stop at the boundary of your preferred stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose tools you can trust and understand
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsruu8qfgvavlyu41xan2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsruu8qfgvavlyu41xan2.png" alt="Plush Emanuele choosing tools beside a laptop and a small AI robot." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use an editor that lets you work comfortably. Learn its debugger, navigation, and refactoring tools before assuming a different editor will solve your frustration.&lt;/p&gt;

&lt;p&gt;I would take the same approach to AI. Start with work where you can judge the result: exploring unfamiliar code, preparing a first test draft, or checking an implementation for missed cases.&lt;/p&gt;

&lt;p&gt;Read the output and run the checks. When the tool proposes a design, ask what assumptions it made. You remain responsible for the change you submit.&lt;/p&gt;

&lt;p&gt;Trying another tool or model can be useful when it answers a specific question about your workflow. You don't need a collection of subscriptions just to feel current.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a way of working you can keep doing
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxd8nq266pz72kx45ggv0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxd8nq266pz72kx45ggv0.png" alt="Plush Emanuele taking a coffee break beside a closed laptop." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After 25 years, I want my advice to include what happens away from the keyboard.&lt;/p&gt;

&lt;p&gt;Take breaks. Get up, walk around, do sports, and give yourself permission to stop staring at the same problem. If you are stuck, ask for help rather than making another exhausted hour the price of proving that you can solve it alone.&lt;/p&gt;

&lt;p&gt;Talk to teammates sometimes without a ticket as the agenda. It is easier to ask someone a difficult question when your only interaction with them has not been a review disagreement.&lt;/p&gt;

&lt;p&gt;And keep something outside work. There will always be another release, article, framework, or project. Closing the laptop does not mean you stopped caring about your profession.&lt;/p&gt;

&lt;p&gt;I still don't feel that 25 years gives me an answer to everything. It does give me enough reason to share these thoughts, even while the impostor syndrome tells me to wait a little longer.&lt;/p&gt;




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

&lt;p&gt;If you enjoyed this blog post and want to learn more about C# development, you might be interested in subscribing to my bi-weekly newsletter called Dev Dispatch. By subscribing, you will get access to exclusive content, tips, and tricks, as well as updates on the latest news and trends in the development world. You will also be able to interact with me, and share your feedback and suggestions. To subscribe, simply navigate to &lt;a href="https://buttondown.email/kasuken?tag=devto" rel="noopener noreferrer"&gt;https://buttondown.email/kasuken?tag=devto&lt;/a&gt;, enter your email address and click on the Subscribe button. You can unsubscribe at any time. Thank you for your support!&lt;/p&gt;

</description>
      <category>career</category>
      <category>careerdevelopment</category>
      <category>weeklyretro</category>
    </item>
    <item>
      <title>My Windows 11 Laptop Was Struggling with Claude and Codex. Defender Exclusions Helped.</title>
      <dc:creator>Emanuele Bartolesi</dc:creator>
      <pubDate>Tue, 06 Oct 2026 15:01:47 +0000</pubDate>
      <link>https://dev.to/playfulprogramming/my-windows-11-laptop-was-struggling-with-claude-and-codex-defender-exclusions-helped-2iln</link>
      <guid>https://dev.to/playfulprogramming/my-windows-11-laptop-was-struggling-with-claude-and-codex-defender-exclusions-helped-2iln</guid>
      <description>&lt;p&gt;My Windows 11 laptop sometimes struggled while I was working with Claude and Codex or GitHub Copilot. CPU usage was high, and the fans were running like crazy.&lt;br&gt;
It means also that my battery runs out in 1 hour and 30 minutes 😀&lt;/p&gt;

&lt;p&gt;When I checked Task Manager, Antimalware Service Executable stood out. Disk usage was around 90%, with heavy CPU activity as well, while the two tools were running.&lt;/p&gt;

&lt;p&gt;That process belongs to Microsoft Defender Antivirus. You can find it as &lt;code&gt;Antimalware Service Executable&lt;/code&gt; in Task Manager's Processes tab, or &lt;code&gt;MsMpEng.exe&lt;/code&gt; in the Details tab. &lt;a href="https://learn.microsoft.com/en-us/defender-endpoint/microsoft-defender-antivirus-windows" rel="noopener noreferrer"&gt;Microsoft documents both names here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I suspected Defender's scanning of the tools' local folders was contributing to the slowdown. Adding folder exclusions solved the problem I was seeing on my laptop. This is my experience with one machine, rather than proof that Claude or Codex always causes this behavior.&lt;/p&gt;
&lt;h2&gt;
  
  
  The folders I excluded
&lt;/h2&gt;

&lt;p&gt;These are the four entries in my Windows Security exclusion list:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Users\barto\.claude
C:\Users\barto\.codex
C:\Users\barto\.copilot
C:\Users\barto\.github-copilot-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fta5jqbgk3owcewv1jx8o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fta5jqbgk3owcewv1jx8o.png" alt="Windows Security exclusion list showing the .claude, .codex, .copilot, and .github-copilot-cli folders under my Windows user profile." width="375" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The last two entries are for my Copilot tooling. Their presence in this list does not establish that they contributed to the Claude and Codex slowdown.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There is a security tradeoff:&lt;/strong&gt; a folder exclusion removes Defender antivirus scanning coverage for that folder and its contents. Files placed there later are also covered by the exclusion. Trusting the tool does not guarantee that every file it writes or downloads is safe. &lt;a href="https://support.microsoft.com/en-us/windows/security/threat-malware-protection/virus-and-threat-protection-in-the-windows-security-app" rel="noopener noreferrer"&gt;Microsoft explains the exclusion options and risks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Treat this list as a record of my setup. For your machine, identify the affected folder first and keep any exclusion as narrow as possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to add a folder exclusion in Windows 11
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;Start&lt;/strong&gt;, search for &lt;strong&gt;Windows Security&lt;/strong&gt;, and open it.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Virus &amp;amp; threat protection&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Virus &amp;amp; threat protection settings&lt;/strong&gt;, select &lt;strong&gt;Manage settings&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Scroll to &lt;strong&gt;Exclusions&lt;/strong&gt; and select &lt;strong&gt;Add or remove exclusions&lt;/strong&gt;. Approve the administrator prompt if it appears.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Add an exclusion&lt;/strong&gt;, then &lt;strong&gt;Folder&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Browse to the folder you want to exclude, for example &lt;code&gt;C:\Users\YOUR_USERNAME\.claude&lt;/code&gt;, and select &lt;strong&gt;Select Folder&lt;/strong&gt;. Replace &lt;code&gt;YOUR_USERNAME&lt;/code&gt; with your Windows user folder name.&lt;/li&gt;
&lt;li&gt;Confirm that the folder appears in the exclusion list. Repeat for other folders only where needed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These steps follow &lt;a href="https://support.microsoft.com/en-us/windows/security/threat-malware-protection/virus-and-threat-protection-in-the-windows-security-app" rel="noopener noreferrer"&gt;Microsoft's Windows Security guidance&lt;/a&gt;. On a company-managed laptop, your IT team may control these settings.&lt;/p&gt;




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

&lt;p&gt;If you enjoyed this blog post and want to learn more about C# development, you might be interested in subscribing to my bi-weekly newsletter called Dev Dispatch. By subscribing, you will get access to exclusive content, tips, and tricks, as well as updates on the latest news and trends in the development world. You will also be able to interact with me, and share your feedback and suggestions. To subscribe, simply navigate to &lt;a href="https://buttondown.email/kasuken?tag=devto" rel="noopener noreferrer"&gt;https://buttondown.email/kasuken?tag=devto&lt;/a&gt;, enter your email address and click on the Subscribe button. You can unsubscribe at any time. Thank you for your support!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>Moving to European Digital Services, One Decision at a Time</title>
      <dc:creator>Emanuele Bartolesi</dc:creator>
      <pubDate>Thu, 24 Sep 2026 16:13:19 +0000</pubDate>
      <link>https://dev.to/playfulprogramming/moving-to-european-digital-services-one-decision-at-a-time-3j68</link>
      <guid>https://dev.to/playfulprogramming/moving-to-european-digital-services-one-decision-at-a-time-3j68</guid>
      <description>&lt;p&gt;My move to European digital services includes Proton, Qwant, and DeepL. When it came to Notion, I went further and replaced it with &lt;a href="https://github.com/kasuken/Brainy" rel="noopener noreferrer"&gt;Brainy&lt;/a&gt;, the product I built for my own notes, projects, and tasks.&lt;/p&gt;

&lt;p&gt;That sounds like a migration, but the word creates the wrong expectation. I did not spend a weekend exporting every account, cancelling every subscription, and declaring myself independent from American technology on Monday morning.&lt;/p&gt;

&lt;p&gt;I am changing one decision at a time.&lt;/p&gt;

&lt;p&gt;I do not want a US provider to be the automatic answer for every digital need simply because it is the most visible option. Europe has credible products. Some are good enough to compete directly, and some fit my needs better. That does not mean I will replace a working service because a company has the wrong flag beside its logo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proton made the change visible
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://proton.me/" rel="noopener noreferrer"&gt;Proton&lt;/a&gt; is where the migration became a system rather than a few unrelated experiments.&lt;/p&gt;

&lt;p&gt;Proton Mail replaced my previous email setup. Proton VPN replaced NordVPN. Proton Pass replaced NordPass. I also use &lt;a href="https://proton.me/lumo" rel="noopener noreferrer"&gt;Lumo&lt;/a&gt; for selected private AI conversations rather than treating every chat as suitable for any general-purpose assistant.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4o2345o1guq4n89951lt.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4o2345o1guq4n89951lt.webp" alt="Proton" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The immediate benefit was consolidation. One privacy-focused Swiss ecosystem replaced several separate accounts and subscriptions. I did not need to find a different European company for email, another for passwords, and another for the VPN before making progress.&lt;/p&gt;

&lt;p&gt;There is an obvious trade-off: consolidation reduces vendor sprawl while increasing dependence on Proton. Moving three services into one company is not diversification. I still prefer the current setup, but it would be dishonest to describe concentration as independence.&lt;/p&gt;

&lt;p&gt;Lumo has a similar boundary. Proton says stored conversations use zero-access encryption, which is why it has a place in my private workflow. I do not pretend that it replaces every AI service or every model. The choice depends on the conversation and the job I need to complete.&lt;br&gt;
For the moment I am using Lumo only for questions related my health and other sensitive information.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqxcbgks6wztacu5edrya.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqxcbgks6wztacu5edrya.webp" alt="Lumo" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The corporate map is more complicated than the logos
&lt;/h2&gt;

&lt;p&gt;Once I started checking where services were based, the simple Europe-versus-USA story stopped working.&lt;/p&gt;

&lt;p&gt;NordVPN is not an American service. &lt;a href="https://support.nordvpn.com/hc/en-us/articles/19441152966161-Where-is-NordVPN-based" rel="noopener noreferrer"&gt;NordVPN says it is based in and operates under Panama's jurisdiction&lt;/a&gt;, while its parent company, Nord Security, is based in the Netherlands. Moving to Proton VPN is a Panama-to-Switzerland change at the service-jurisdiction level, with a European parent company also involved in the old setup.&lt;/p&gt;

&lt;p&gt;WeTransfer is European too. &lt;a href="https://wetransfer.com/documents/WeTransfer_Data_Processing_Agreement.pdf" rel="noopener noreferrer"&gt;WeTransfer B.V. is based in Amsterdam&lt;/a&gt;, so my switch to SwissTransfer was not about escaping an American company. It was about the product.&lt;/p&gt;

&lt;p&gt;For my file-sharing needs, &lt;a href="https://www.swisstransfer.com/" rel="noopener noreferrer"&gt;SwissTransfer&lt;/a&gt; has a privacy model I prefer and a much more useful free allowance for large files. Infomaniak says SwissTransfer accepts transfers up to 50 GB, stores the files in Switzerland, supports password protection, and deletes the files after the transfer period. &lt;a href="https://help.wetransfer.com/hc/en-us/articles/360036942752-What-does-a-free-WeTransfer-account-offer-me" rel="noopener noreferrer"&gt;WeTransfer's current free-account documentation&lt;/a&gt; describes an allowance of up to ten transfers or 3 GB in total over a rolling 30-day period.&lt;/p&gt;

&lt;p&gt;That is a concrete difference. I am not using SwissTransfer because the landing page has a Swiss flag. I am using it because privacy and larger transfers matter in this workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd9mjdcmxowrgxjvto9dj.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd9mjdcmxowrgxjvto9dj.webp" alt="SwissTransfer" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This distinction changed how I evaluate alternatives. I now look separately at the service jurisdiction, parent company, data location, underlying infrastructure, business model, portability, and actual product quality. Those facts do not always point to the same country.&lt;/p&gt;
&lt;h2&gt;
  
  
  Some changes need almost no migration
&lt;/h2&gt;

&lt;p&gt;Qwant and DeepL were easier decisions.&lt;/p&gt;

&lt;p&gt;I use &lt;a href="https://www.qwant.com/" rel="noopener noreferrer"&gt;Qwant&lt;/a&gt; for search. Qwant is a French company, and its current privacy policy says it does not use targeted advertising or retain search history by default. Search is also easy to test: use it, compare the results, and keep another engine available when it does not find what you need.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmuynv4h8ay40sy3xzoh1.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmuynv4h8ay40sy3xzoh1.webp" alt="Qwant" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I use &lt;a href="https://www.deepl.com/" rel="noopener noreferrer"&gt;DeepL&lt;/a&gt; for translation. It was founded in Cologne, Germany, and it is a good example of why the word "alternative" can be misleading. I do not need to treat a European translation service as a political compromise. I can use it because it does the work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fovqs2baalve27fkydsim.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fovqs2baalve27fkydsim.webp" alt="DeepL" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Neither choice required a dramatic data migration. There was no archive to restructure and no DNS record that could break a production system. They simply became part of the workflow.&lt;/p&gt;

&lt;p&gt;New domains are another low-risk entry point. I now use &lt;a href="https://www.infomaniak.com/en/domains" rel="noopener noreferrer"&gt;Infomaniak Domains&lt;/a&gt; instead of GoDaddy for new registrations. I am not forcing every existing domain through an immediate transfer. When I need a new domain, the new default is a Swiss, ICANN-accredited registrar. That is progress without creating unnecessary operational risk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fom0pozb68l5kdeeoyghr.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fom0pozb68l5kdeeoyghr.webp" alt="Infomaniak" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DNS is an even quieter change. I use &lt;a href="https://www.quad9.net/" rel="noopener noreferrer"&gt;Quad9&lt;/a&gt; as my resolver. Quad9 is a Swiss nonprofit, and its documentation says the recommended &lt;code&gt;9.9.9.9&lt;/code&gt; service blocks lookups for malicious domains without logging end-user IP addresses. It also supports encrypted DNS protocols. This is closer to changing an infrastructure setting than migrating an account, but it moves a foundational part of normal browsing away from whichever resolver happened to be the default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Falb2sxzm6wglp80afe39.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Falb2sxzm6wglp80afe39.png" alt="Quad9" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Replacing Notion meant building the alternative
&lt;/h2&gt;

&lt;p&gt;Notion was different because a knowledge system accumulates structure as well as data. Notes connect to projects, tasks carry context, and the way information is captured affects whether it becomes useful work or remains another page in an archive.&lt;/p&gt;

&lt;p&gt;I replaced Notion with &lt;a href="https://www.brainy-me.com" rel="noopener noreferrer"&gt;Brainy&lt;/a&gt;, my own product.&lt;/p&gt;

&lt;p&gt;Brainy is a practical second brain organized around the PARA method. It captures notes and ideas, connects them to projects and tasks, and focuses on turning stored knowledge into action. The goal was not to reproduce every Notion feature. It was to build a workflow that matches how I move from an idea to a project, from a project to the next task, and from planning to today's work.&lt;/p&gt;

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

&lt;p&gt;Owning the product gives me control over that workflow, the data model, portability, and the roadmap, but it also gives me the maintenance work. I own the deployments, bugs, database changes, security decisions, and migration logic.&lt;/p&gt;

&lt;p&gt;This is the clearest reason the entire transition cannot happen in two hours. Replacing a service can mean changing a setting or moving years of habits and information. In this case, it also meant building and operating a product.&lt;/p&gt;

&lt;p&gt;For the moment, Brainy is free and you can create your own account here: &lt;a href="https://www.brainy-me.com" rel="noopener noreferrer"&gt;www.brainy-me.com&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Sometimes the correct migration is no migration
&lt;/h2&gt;

&lt;p&gt;I still use Spotify.&lt;/p&gt;

&lt;p&gt;The reason is simple: Spotify is already European and it works for me. Its consumer terms identify Spotify AB in Stockholm, Sweden. Replacing it with another service only to increase the number of changed logos would add work without moving me closer to the actual goal.&lt;/p&gt;

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

&lt;p&gt;A useful migration should leave some rows unchanged. Otherwise the process is driven by ideology rather than requirements.&lt;/p&gt;

&lt;p&gt;Here is the current map:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workflow&lt;/th&gt;
&lt;th&gt;Current choice&lt;/th&gt;
&lt;th&gt;Decision&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Proton Mail&lt;/td&gt;
&lt;td&gt;Moved into the Proton ecosystem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VPN&lt;/td&gt;
&lt;td&gt;Proton VPN&lt;/td&gt;
&lt;td&gt;Replaced NordVPN&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Passwords&lt;/td&gt;
&lt;td&gt;Proton Pass&lt;/td&gt;
&lt;td&gt;Replaced NordPass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private AI chats&lt;/td&gt;
&lt;td&gt;Lumo&lt;/td&gt;
&lt;td&gt;Used selectively for private conversations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Large file transfers&lt;/td&gt;
&lt;td&gt;SwissTransfer&lt;/td&gt;
&lt;td&gt;Chosen for privacy and transfers up to 50 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New domain registrations&lt;/td&gt;
&lt;td&gt;Infomaniak&lt;/td&gt;
&lt;td&gt;Replaced GoDaddy as the default for new domains&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DNS&lt;/td&gt;
&lt;td&gt;Quad9&lt;/td&gt;
&lt;td&gt;Uses a Swiss nonprofit resolver focused on privacy and security&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;Qwant&lt;/td&gt;
&lt;td&gt;In active use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Translation&lt;/td&gt;
&lt;td&gt;DeepL&lt;/td&gt;
&lt;td&gt;In active use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge and planning&lt;/td&gt;
&lt;td&gt;Brainy&lt;/td&gt;
&lt;td&gt;Replaced Notion with my own product&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Music&lt;/td&gt;
&lt;td&gt;Spotify&lt;/td&gt;
&lt;td&gt;Kept because the European service already fits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  The process I use before changing a service
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://european-alternatives.eu/" rel="noopener noreferrer"&gt;European Alternatives directory&lt;/a&gt; is useful for discovery, but inclusion in a directory is the beginning of the evaluation, not the conclusion.&lt;/p&gt;

&lt;p&gt;Before changing a service, I work through a small set of questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What job does the current product perform?&lt;/li&gt;
&lt;li&gt;Which features are genuinely non-negotiable, and which ones are habits?&lt;/li&gt;
&lt;li&gt;Where is the service legally based, where is the data processed, and which external platforms does it still depend on?&lt;/li&gt;
&lt;li&gt;Can I export the data in a useful format and move again later?&lt;/li&gt;
&lt;li&gt;Can I run the old and new services in parallel before cancelling anything?&lt;/li&gt;
&lt;li&gt;Is the alternative better, equivalent, or merely acceptable for this specific job?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last question matters. I am willing to accept a small difference when privacy, control, or supporting a European provider makes the trade worthwhile. I am not willing to ignore a product that fails the workflow simply because it is European.&lt;/p&gt;

&lt;p&gt;The safest changes happen at natural decision points. Register the next domain with a different registrar. Test another search engine without removing the old one. Import a copy of a password vault before cancelling the existing subscription. Send the next large file with a service that supports the size you need.&lt;/p&gt;

&lt;p&gt;Moving all of them at once would turn a preference into an outage plan.&lt;/p&gt;
&lt;h2&gt;
  
  
  Change the next decision
&lt;/h2&gt;

&lt;p&gt;I still use services from American companies, and I expect that to continue. Work, collaboration, audience, and network effects do not disappear because a European alternative exists.&lt;/p&gt;

&lt;p&gt;The difference is that I no longer want the American option to win by default. When a subscription renews, a new need appears, or a current product creates friction, I check what exists in Europe before repeating the old decision.&lt;/p&gt;

&lt;p&gt;The outcomes vary. A European product may be good enough, SwissTransfer may be better for large files, or Spotify may already be the European answer. Brainy sits at the other end of the range because I had to build the alternative around the workflow I wanted.&lt;/p&gt;

&lt;p&gt;This process does not need a dramatic finish. The next decision is enough.&lt;/p&gt;



&lt;p&gt;Thanks for reading this post, I hope you found it interesting!&lt;/p&gt;

&lt;p&gt;Feel free to follow me to get notified when new articles are out 🙂&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__79932"&gt;
    &lt;a href="/kasuken" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F79932%2Fbe7bcd76-1f69-4336-9155-6017aebb2c53.png" alt="kasuken image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/kasuken"&gt;Emanuele Bartolesi&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/kasuken"&gt;🏆 Microsoft MVP (12x) &amp;amp; GitHub Star (4x) ⭐
👨‍🎓 LinkedIn Technical Instructor 🎓&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>productivity</category>
    </item>
    <item>
      <title>Fixing “Your organization has deleted this device” Without Reconnecting Everything</title>
      <dc:creator>Emanuele Bartolesi</dc:creator>
      <pubDate>Tue, 19 May 2026 06:49:19 +0000</pubDate>
      <link>https://dev.to/kasuken/fixing-your-organization-has-deleted-this-device-without-reconnecting-everything-2dl6</link>
      <guid>https://dev.to/kasuken/fixing-your-organization-has-deleted-this-device-without-reconnecting-everything-2dl6</guid>
      <description>&lt;p&gt;For two days, my company laptop kept showing this error:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your organization has deleted this device.&lt;br&gt;&lt;br&gt;
To fix this, contact your system administrator and provide error code 700003.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At first, it looked like the only option was to disconnect and reconnect my work account from Windows.&lt;/p&gt;

&lt;p&gt;I really did not want to do that.&lt;/p&gt;

&lt;p&gt;Removing and adding the account again can work, but it is annoying. You may need to re-authenticate apps, reconnect services, and deal with device registration again.&lt;/p&gt;

&lt;p&gt;Luckily, there is a better option.&lt;/p&gt;

&lt;h2&gt;
  
  
  The command that fixed it
&lt;/h2&gt;

&lt;p&gt;Open a terminal and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;dsregcmd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/forcerecovery&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After running the command, Windows asks you to sign in again with your work account.&lt;/p&gt;

&lt;p&gt;That is it.&lt;/p&gt;

&lt;p&gt;In my case, after logging in again, everything started working without disconnecting all accounts manually.&lt;/p&gt;

&lt;p&gt;It saved me a lot of wasted time.&lt;/p&gt;

&lt;h2&gt;
  
  
  When this helps
&lt;/h2&gt;

&lt;p&gt;This can help when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You get error code &lt;code&gt;700003&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Windows says your organization deleted the device&lt;/li&gt;
&lt;li&gt;Your device is Microsoft Entra joined&lt;/li&gt;
&lt;li&gt;You want to avoid fully disconnecting and reconnecting your work account&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A small warning
&lt;/h2&gt;

&lt;p&gt;This is not magic.&lt;/p&gt;

&lt;p&gt;If your device was intentionally removed by IT, or your company uses Intune, Autopilot, Conditional Access, or Hybrid Join, talk to your administrator first.&lt;/p&gt;




&lt;p&gt;🔖 Stay ahead of the dev curve&lt;br&gt;
I created a Curated RSS Feed Bundle for Web Developers — a hand-picked OPML file of the best dev blogs and websites on the internet.&lt;br&gt;
💡 Just download, import into your favorite RSS reader (like Feedly or NetNewsWire), and enjoy fresh insights every day.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://emanuelebartolesi.gumroad.com/l/rssfeeds" rel="noopener noreferrer"&gt;Grab it on Gumroad&lt;/a&gt; — stay sharp without the noise.&lt;/p&gt;

</description>
      <category>windows</category>
      <category>productivity</category>
      <category>help</category>
    </item>
    <item>
      <title>Stop Coding Through Remote Desktop. Use VS Code Remote Tunnels Instead</title>
      <dc:creator>Emanuele Bartolesi</dc:creator>
      <pubDate>Wed, 15 Apr 2026 07:10:40 +0000</pubDate>
      <link>https://dev.to/playfulprogramming/stop-coding-through-remote-desktop-use-vs-code-remote-tunnels-instead-37oc</link>
      <guid>https://dev.to/playfulprogramming/stop-coding-through-remote-desktop-use-vs-code-remote-tunnels-instead-37oc</guid>
      <description>&lt;p&gt;There is a pattern I keep seeing with customer environments.&lt;/p&gt;

&lt;p&gt;You get access to a VM for development. The code stays there. The dependencies are already there. The network access is there too. On paper, it looks fine.&lt;/p&gt;

&lt;p&gt;Then reality starts.&lt;/p&gt;

&lt;p&gt;You are expected to work through Remote Desktop, as if software development were the same thing as clicking around a server. It is not. Remote Desktop is tolerable for admin work. For actual coding, it is a bad experience. The editor feels disconnected from your normal workflow. Shortcuts feel wrong. Terminals are awkward. Moving between tools is slower than it should be. You are technically “inside” the environment, but you are not really productive.&lt;/p&gt;

&lt;p&gt;In my case, there was another constraint. I could not even sign into VS Code on the customer VM with my own account, which meant no normal setup, no synced configuration, and no easy way to work the way I usually do.&lt;/p&gt;

&lt;p&gt;That is where VS Code Remote Tunnels becomes the right solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real-world scenario
&lt;/h2&gt;

&lt;p&gt;Instead of living inside a remote desktop session, you expose the development environment through a secure tunnel and connect to it from your local VS Code. The code stays on the customer VM. The execution stays on the customer VM. But the editor experience comes back to your own machine, where you can actually work properly.&lt;/p&gt;

&lt;p&gt;Remote Tunnels is the answer I would pick for that every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What VS Code Remote Tunnels actually does
&lt;/h2&gt;

&lt;p&gt;VS Code Remote Tunnels gives you a way to connect to a remote machine from VS Code without setting up SSH access. The official model is simple: you create a secure tunnel from the remote machine, and then connect to it from a VS Code client somewhere else. Microsoft’s documentation describes it as connecting to a remote machine, such as a desktop or VM, through a secure tunnel using Microsoft dev tunnels.&lt;/p&gt;

&lt;p&gt;That matters because it changes where the work happens.&lt;/p&gt;

&lt;p&gt;The code stays on the remote VM. The terminals run on the remote VM. Debugging happens against the remote VM. VS Code installs its server-side components on that machine, and your local VS Code becomes the client for that remote environment.&lt;/p&gt;

&lt;p&gt;Another practical point is that SSH is not required. That is one of the biggest advantages in customer environments, because SSH is often blocked, restricted, or simply not part of the approved setup. Remote Tunnels gives you another path that still keeps the work inside the target machine.&lt;/p&gt;

&lt;p&gt;You can then connect in two main ways. You can use local desktop VS Code with the Remote - Tunnels extension, or you can connect through VS Code for the Web in the browser. That browser path is useful when you need access from a locked-down device, although the desktop client is usually the better experience.&lt;/p&gt;

&lt;p&gt;There is one important limitation worth stating clearly. The VS Code Server used behind this model is designed for a single user, not as a shared multi-user development service. Microsoft also states that hosting the VS Code Server as a service is not allowed. So this is a personal remote development setup, not a team-hosted IDE platform.&lt;/p&gt;

&lt;p&gt;That is why Remote Tunnels fits this customer scenario so well. It gives you remote development, not remote desktop. That is the real difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it fits this customer use case
&lt;/h2&gt;

&lt;p&gt;This is exactly the kind of setup where Remote Tunnels is the right answer.&lt;/p&gt;

&lt;p&gt;The customer wants the work to stay inside their environment. That is reasonable. The code, dependencies, network access, and internal services are already on the VM. Moving everything to a local machine would create more friction, more approvals, and in some cases more risk.&lt;/p&gt;

&lt;p&gt;At the same time, working through Remote Desktop is a bad trade.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to set it up
&lt;/h2&gt;

&lt;p&gt;The setup is surprisingly simple. That is part of why this works so well in customer environments.&lt;/p&gt;

&lt;p&gt;First of all, you need to download VS Code Server.&lt;br&gt;
You can download it directly from the official Download page of Visual Studio Code website (&lt;a href="https://code.visualstudio.com/Download" rel="noopener noreferrer"&gt;https://code.visualstudio.com/Download&lt;/a&gt;)&lt;/p&gt;

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

&lt;p&gt;From this page, as you can see in the image above, you can select your OS and your CPU family.&lt;br&gt;
You can also use VS Code with the UI, but it doesn't make sense if you want to install only the server part.&lt;/p&gt;

&lt;p&gt;Then you start the tunnel with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;code tunnel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you run that command, VS Code downloads and starts the VS Code Server on that machine, then creates the tunnel for remote access. The first time, you will also be asked to accept the server license terms, unless you pass the CLI flag to accept them up front.&lt;/p&gt;

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

&lt;p&gt;After that, the CLI gives you a &lt;code&gt;vscode.dev&lt;/code&gt; URL tied to that remote machine. When you open that URL the first time from a client, you will be asked to authenticate with GitHub. That authentication is how VS Code checks that both sides are tied to the same account and that you are allowed to access the remote machine.&lt;/p&gt;

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

&lt;p&gt;There are two practical ways to connect.&lt;/p&gt;

&lt;p&gt;The first is through the browser using that &lt;code&gt;vscode.dev&lt;/code&gt; link. This is the fastest way to prove the setup works.&lt;/p&gt;

&lt;p&gt;The second, and usually better option, is from your local desktop VS Code. For that, install the &lt;strong&gt;Remote - Tunnels&lt;/strong&gt; &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.remote-server" rel="noopener noreferrer"&gt;extension&lt;/a&gt;, open the Command Palette, and run &lt;strong&gt;Remote Tunnels: Connect to Tunnel&lt;/strong&gt;. You can also see available machines in the Remote Explorer.&lt;/p&gt;

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

&lt;p&gt;So the basic flow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On the customer VM, run &lt;code&gt;code tunnel&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Authenticate when prompted&lt;/li&gt;
&lt;li&gt;Open the generated &lt;code&gt;vscode.dev&lt;/code&gt; URL or connect from local VS Code&lt;/li&gt;
&lt;li&gt;Start working on the remote codebase from your own editor&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are two practical details worth calling out.&lt;/p&gt;

&lt;p&gt;First, the tunnel is only reachable while VS Code is running there, unless you explicitly set it up to keep running. Microsoft documents a service mode for this with &lt;code&gt;code tunnel service install&lt;/code&gt;, and there is also a &lt;code&gt;--no-sleep&lt;/code&gt; option to help prevent the remote machine from going to sleep.&lt;/p&gt;

&lt;p&gt;Second, this does not require VS Code to open inbound listeners on the VM. Microsoft states that hosting and connecting use authenticated outbound connections to the Azure-hosted tunneling service, and that no firewall changes are generally necessary. That is one of the reasons this can fit locked-down environments better than people expect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trade-offs and limits
&lt;/h2&gt;

&lt;p&gt;Remote Tunnels is a strong solution for this scenario, but it is not magic. It has constraints, and it is better to say them clearly.&lt;/p&gt;

&lt;p&gt;The first limit is the trust model. To create and access a tunnel, you authenticate with GitHub or Microsoft, and the tunnel itself is brokered through Microsoft’s dev tunnel service. That is exactly why setup is easy, but it also means some customer environments may reject it on policy alone, even if the technical setup works.&lt;/p&gt;

&lt;p&gt;The second limit is extension support, especially in the browser. The desktop VS Code client is usually the best experience. The browser option is useful, but not every extension behaves the same way there. VS Code’s remote documentation is explicit that extensions may run in different locations, local or remote, depending on the extension type and the client being used.&lt;/p&gt;

&lt;p&gt;The third limit is that this is not a shared remote IDE platform. Microsoft states that the VS Code Server is intended for a single user and that hosting it as a service is not allowed. So this is a personal remote development workflow, not something you should pitch as a team-wide hosted development environment for many users.&lt;/p&gt;

&lt;p&gt;The fourth limit is operational persistence. A tunnel is easy to start, but if the remote machine sleeps, shuts down, or the tunnel service is not kept running, your session is gone until it comes back. Microsoft documents service mode and sleep-related options for that reason.&lt;/p&gt;




&lt;h3&gt;
  
  
  👀 GitHub Copilot quota visibility in VS Code
&lt;/h3&gt;

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

&lt;p&gt;If you use GitHub Copilot and ever wondered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what plan you’re on&lt;/li&gt;
&lt;li&gt;whether you have limits&lt;/li&gt;
&lt;li&gt;how much premium quota is left&lt;/li&gt;
&lt;li&gt;when it resets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built a small VS Code extension called &lt;strong&gt;Copilot Insights&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It shows Copilot &lt;strong&gt;plan and quota status&lt;/strong&gt; directly inside VS Code.&lt;br&gt;&lt;br&gt;
No usage analytics. No productivity scoring. Just clarity.&lt;/p&gt;

&lt;p&gt;👉 VS Code Marketplace:&lt;br&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=emanuelebartolesi.vscode-copilot-insights" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=emanuelebartolesi.vscode-copilot-insights&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>productivity</category>
      <category>tooling</category>
      <category>vscode</category>
    </item>
    <item>
      <title>Using GitHub Copilot CLI with Azure AI Foundry (BYOK Models) – Part 2</title>
      <dc:creator>Emanuele Bartolesi</dc:creator>
      <pubDate>Fri, 10 Apr 2026 09:54:00 +0000</pubDate>
      <link>https://dev.to/playfulprogramming/using-github-copilot-cli-with-azure-ai-foundry-byok-models-part-2-4e5n</link>
      <guid>https://dev.to/playfulprogramming/using-github-copilot-cli-with-azure-ai-foundry-byok-models-part-2-4e5n</guid>
      <description>&lt;p&gt;In &lt;a href="https://dev.to/playfulprogramming/using-github-copilot-cli-with-local-models-lm-studio-5e3b"&gt;Part 1&lt;/a&gt;, you ran GitHub Copilot CLI against a local model using LM Studio.&lt;/p&gt;

&lt;p&gt;That setup gives you control. No external calls. No data leaving your machine. But it comes with clear limits. Small models struggle, and output quality drops fast on anything non-trivial.&lt;/p&gt;

&lt;p&gt;This is where Azure AI Foundry comes in.&lt;/p&gt;

&lt;p&gt;Instead of running models locally, you connect Copilot CLI to a cloud-hosted model you control. You still use the same BYOK (Bring Your Own Model) approach, but now the model runs on Azure.&lt;/p&gt;

&lt;p&gt;That changes the trade-offs:&lt;/p&gt;

&lt;p&gt;You gain better models and stronger reasoning&lt;br&gt;
You keep control over the endpoint and deployment&lt;br&gt;
You accept cost and network dependency&lt;/p&gt;

&lt;p&gt;This is not a replacement for the local setup. It is the next step if you want privacy but at the same time, more power.&lt;/p&gt;


&lt;h1&gt;
  
  
  Setting Up Azure AI Foundry
&lt;/h1&gt;

&lt;p&gt;This is the only "Azure-heavy" part. Keep it minimal. You just need a working endpoint and a deployed model.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Create or Use an Existing Resource
&lt;/h2&gt;

&lt;p&gt;Go to &lt;strong&gt;Azure AI Foundry&lt;/strong&gt; in the Azure portal.&lt;/p&gt;

&lt;p&gt;You need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A resource already created&lt;/li&gt;
&lt;li&gt;Access to it (permissions matter)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you already use Azure OpenAI, you can reuse it.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. Deploy a Model
&lt;/h2&gt;

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

&lt;p&gt;This step is mandatory.&lt;/p&gt;

&lt;p&gt;In Azure, you cannot call a model directly. You must &lt;strong&gt;deploy it first&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your resource&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Model deployments&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Select a model (for example GPT-4 class)&lt;/li&gt;
&lt;li&gt;Assign a &lt;strong&gt;deployment name&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;copilot-gpt53codex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This name is what Copilot CLI will use later.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxrft73cvv3svfhaq2dmp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxrft73cvv3svfhaq2dmp.png" alt="Azure Foundry AI Catalog" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is how the GPT 5.3 Codex looks like, but you can also deploy models directly from the HuggingFace catalog.&lt;/p&gt;

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

&lt;p&gt;If your AI Foundry is good, you can deploy the models directly with the Deploy button in the model details page.&lt;/p&gt;

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




&lt;h2&gt;
  
  
  3. Get Endpoint and API Key
&lt;/h2&gt;

&lt;p&gt;From the resource, retrieve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Endpoint URL&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API key&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Typical endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://&amp;lt;your-resource&amp;gt;.openai.azure.com/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will combine this with the deployment in the next step.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Build the Final Endpoint
&lt;/h2&gt;

&lt;p&gt;Copilot CLI expects a full path, not just the base URL.&lt;/p&gt;

&lt;p&gt;Format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://&amp;lt;your-resource&amp;gt;.openai.azure.com/openai/deployments/&amp;lt;your-deployment&amp;gt;/v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://my-ai.openai.azure.com/openai/deployments/copilot-gpt53codex/v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If this path is wrong, nothing will work.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Quick Validation
&lt;/h2&gt;

&lt;p&gt;Before using Copilot CLI, validate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The deployment exists&lt;/li&gt;
&lt;li&gt;The API key is valid&lt;/li&gt;
&lt;li&gt;The endpoint is reachable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you skip this, debugging later becomes painful.&lt;/p&gt;




&lt;h1&gt;
  
  
  Connecting Copilot CLI to Azure
&lt;/h1&gt;

&lt;p&gt;This is the same pattern as Part 1. Different endpoint. More constraints.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set the Environment Variables
&lt;/h2&gt;

&lt;p&gt;You must point Copilot CLI to your Azure deployment.&lt;/p&gt;

&lt;p&gt;PowerShell example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;COPILOT_PROVIDER_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://&amp;lt;your-resource&amp;gt;.openai.azure.com/openai/deployments/&amp;lt;your-deployment&amp;gt;/v1"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;COPILOT_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;your-deployment&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;AZURE_OPENAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;your-api-key&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;COPILOT_PROVIDER_BASE_URL&lt;/code&gt; → full Azure endpoint&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;COPILOT_MODEL&lt;/code&gt; → deployment name, not model name&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AZURE_OPENAI_API_KEY&lt;/code&gt; → required for authentication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No &lt;code&gt;COPILOT_OFFLINE&lt;/code&gt; here. Requests go to Azure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Run a Simple Test
&lt;/h2&gt;

&lt;p&gt;Open Copilot CLI with the following command in a project folder you want to test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;copilot &lt;span class="nt"&gt;--banner&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ask a simple tasks like: "Give me the list of all the files larger than 2MB".&lt;/p&gt;

&lt;p&gt;If everything is configured correctly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The response comes from your Azure AI Foundry Model&lt;/li&gt;
&lt;li&gt;The answer is really fast, at least faster than the answers from the &lt;a href="https://dev.to/playfulprogramming/using-github-copilot-cli-with-local-models-lm-studio-5e3b"&gt;Part 1&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reality Check
&lt;/h2&gt;

&lt;p&gt;This is not “Copilot with Azure magic”.&lt;/p&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copilot CLI acting as a thin client&lt;/li&gt;
&lt;li&gt;Azure acting as the model provider&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You gain better models, not better tooling.&lt;/p&gt;




&lt;h3&gt;
  
  
  👀 GitHub Copilot quota visibility in VS Code
&lt;/h3&gt;

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

&lt;p&gt;If you use GitHub Copilot and ever wondered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what plan you’re on&lt;/li&gt;
&lt;li&gt;whether you have limits&lt;/li&gt;
&lt;li&gt;how much premium quota is left&lt;/li&gt;
&lt;li&gt;when it resets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built a small VS Code extension called &lt;strong&gt;Copilot Insights&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It shows Copilot &lt;strong&gt;plan and quota status&lt;/strong&gt; directly inside VS Code.&lt;br&gt;&lt;br&gt;
No usage analytics. No productivity scoring. Just clarity.&lt;/p&gt;

&lt;p&gt;👉 VS Code Marketplace:&lt;br&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=emanuelebartolesi.vscode-copilot-insights" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=emanuelebartolesi.vscode-copilot-insights&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>github</category>
      <category>githubcopilot</category>
      <category>programming</category>
    </item>
    <item>
      <title>Using GitHub Copilot CLI with Local Models (LM Studio)</title>
      <dc:creator>Emanuele Bartolesi</dc:creator>
      <pubDate>Thu, 09 Apr 2026 11:36:59 +0000</pubDate>
      <link>https://dev.to/playfulprogramming/using-github-copilot-cli-with-local-models-lm-studio-5e3b</link>
      <guid>https://dev.to/playfulprogramming/using-github-copilot-cli-with-local-models-lm-studio-5e3b</guid>
      <description>&lt;p&gt;Local AI is getting attention for one simple reason: control.&lt;/p&gt;

&lt;p&gt;Cloud models are strong and fast, but for many companies and developers, especially when experimenting or working with sensitive code, that is not ideal.&lt;/p&gt;

&lt;p&gt;This is where local models come in.&lt;/p&gt;

&lt;p&gt;Tools like &lt;strong&gt;LM Studio&lt;/strong&gt; let you run LLMs directly on your machine. No external calls. No data leaving your environment or your network.&lt;/p&gt;

&lt;p&gt;Instead of sending prompts to cloud models, you can point Copilot CLI to a &lt;strong&gt;local model running in LM Studio&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This setup is not perfect. It is not officially seamless. But it works well enough for learning, experimentation, and some real workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotbwrhflq8hriglrvff3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotbwrhflq8hriglrvff3.gif" alt="A quick demo" width="720" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What You Need
&lt;/h1&gt;

&lt;p&gt;Before setting this up, make sure the basics are clear. This is not a plug-and-play setup. There are a few moving parts, and some assumptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;You need &lt;strong&gt;GitHub Copilot CLI&lt;/strong&gt; installed and working.&lt;/p&gt;

&lt;p&gt;You can launch GitHub Copilot CLI with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;copilot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or even better, if you want to see the banner in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;copilot &lt;span class="nt"&gt;--banner&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By default, the CLI uses GitHub-managed models, but now you can override that.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: You must be authenticated with GitHub and have access to Copilot.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  LM Studio
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;LM Studio&lt;/strong&gt; is the simplest way to run local LLMs without dealing with raw model tooling.&lt;/p&gt;

&lt;p&gt;What it gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A UI to download and run models&lt;/li&gt;
&lt;li&gt;A local server that exposes an OpenAI-compatible API&lt;/li&gt;
&lt;li&gt;No need to manually manage inference engines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once running, it exposes an endpoint like (OpenAI compatible):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;http://localhost:1234/v1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the key piece. Copilot CLI will talk to this endpoint instead of the cloud.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Local Model (Be Realistic)
&lt;/h2&gt;

&lt;p&gt;Not all models are equal. And your hardware matters.&lt;/p&gt;

&lt;p&gt;For this guide, a small model like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;qwen/qwen3-coder-30b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is enough to get started.&lt;/p&gt;

&lt;p&gt;But be clear on the trade-offs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small models → fast, but weaker reasoning&lt;/li&gt;
&lt;li&gt;Large models → better output, but slow or unusable on most laptops&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are on a standard laptop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1B–3B models → OK&lt;/li&gt;
&lt;li&gt;7B+ models → borderline&lt;/li&gt;
&lt;li&gt;13B+ → usually not practical without a GPU&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On my laptop I am giving a chance to the NVidia model &lt;strong&gt;nemotron-3-nano-4b&lt;/strong&gt; but on my gaming PC (that I use for developing and not gaming) I use bigger models la Qwen3 Code or similar.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tip: Start small. The goal here is understanding the workflow, not benchmarking models.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Connecting Copilot CLI to LM Studio
&lt;/h1&gt;

&lt;p&gt;This is the part most people get wrong.&lt;/p&gt;

&lt;p&gt;Copilot CLI is not designed primarily for local models. You are using a &lt;strong&gt;BYOK (Bring Your Own Key/Model)&lt;/strong&gt; path that is still evolving.&lt;/p&gt;

&lt;p&gt;It works, but you need to be precise.&lt;/p&gt;

&lt;p&gt;Reference: &lt;a href="https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/use-byok-models" rel="noopener noreferrer"&gt;https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/use-byok-models&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Set the Environment Variables
&lt;/h2&gt;

&lt;p&gt;You must override the default Copilot provider.&lt;/p&gt;

&lt;p&gt;In PowerShell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;COPILOT_PROVIDER_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:1234/v1"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;COPILOT_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"google/gemma-3-1b"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;COPILOT_OFFLINE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What they do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;COPILOT_PROVIDER_BASE_URL&lt;/code&gt; → points to your local LM Studio server&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;COPILOT_MODEL&lt;/code&gt; → defines which model to use&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;COPILOT_OFFLINE&lt;/code&gt; → prevents fallback to cloud models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If &lt;code&gt;COPILOT_OFFLINE&lt;/code&gt; is not set, Copilot may silently use cloud models.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fje4fn2f7yla7hryhx611.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fje4fn2f7yla7hryhx611.png" alt="CLI and LM Studio togheter on the screen" width="800" height="263"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Run a Simple Test
&lt;/h2&gt;

&lt;p&gt;Open LM Studio, and open the *&lt;em&gt;Developer *&lt;/em&gt; tab.&lt;br&gt;
Click on the switch of the Status and the server will start in a second.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgekat46qalagdgh9l6qz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgekat46qalagdgh9l6qz.png" alt="LM Studio Developer Settings" width="800" height="139"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, click on Load Models and load the models you prefer that you downloaded previously on your machine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz1olalk0255pe25xae4j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz1olalk0255pe25xae4j.png" alt="LM Studio Load Models" width="800" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open Copilot CLI with the following command in a project folder you want to test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;copilot &lt;span class="nt"&gt;--banner&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ask a simple tasks like: "Give me the list of all the files larger than 2MB".&lt;/p&gt;

&lt;p&gt;If everything is configured correctly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The response comes from your local model&lt;/li&gt;
&lt;li&gt;No external API calls are made&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't expect a result in seconds like a normal cloud model, but it depends on your hardware; it can also take minutes sometimes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Reality Check
&lt;/h2&gt;

&lt;p&gt;This is not a first-class integration.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No guarantee of full compatibility&lt;/li&gt;
&lt;li&gt;No optimization for local inference&lt;/li&gt;
&lt;li&gt;No smart routing like in GitHub-hosted Copilot&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But for simple CLI workflows, it is good enough.&lt;/p&gt;




&lt;h1&gt;
  
  
  When This Setup Makes Sense
&lt;/h1&gt;

&lt;p&gt;Do not use this everywhere. Use it where it actually gives you an advantage.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Privacy-Sensitive Environments
&lt;/h3&gt;

&lt;p&gt;If code cannot leave your machine, this setup is useful.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internal tools&lt;/li&gt;
&lt;li&gt;Proprietary scripts&lt;/li&gt;
&lt;li&gt;Regulated environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You avoid sending prompts and contexts to external services.&lt;/p&gt;

&lt;p&gt;This is the strongest reason to use local models.&lt;br&gt;
Especially in some companies like insurances or military, it makes absolutely sense.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. Offline Workflows
&lt;/h2&gt;

&lt;p&gt;If you work without a stable connection or you don't have a connection at all (like during a flight).&lt;/p&gt;

&lt;p&gt;It is slower, but always available.&lt;/p&gt;


&lt;h2&gt;
  
  
  3. Learning and Understanding AI
&lt;/h2&gt;

&lt;p&gt;This setup forces you to see how LLMs actually behave.&lt;/p&gt;

&lt;p&gt;You learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompt sensitivity&lt;/li&gt;
&lt;li&gt;Model limitations&lt;/li&gt;
&lt;li&gt;Output variability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is valuable if you want to go beyond "just using Copilot".&lt;/p&gt;


&lt;h2&gt;
  
  
  When It Does NOT Make Sense
&lt;/h2&gt;

&lt;p&gt;Avoid this setup if you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High accuracy&lt;/li&gt;
&lt;li&gt;Large context handling&lt;/li&gt;
&lt;li&gt;Production-grade reliability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In those cases, cloud models are still the better option.&lt;/p&gt;


&lt;h3&gt;
  
  
  👀 GitHub Copilot quota visibility in VS Code
&lt;/h3&gt;

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

&lt;p&gt;If you use GitHub Copilot and ever wondered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what plan you’re on&lt;/li&gt;
&lt;li&gt;whether you have limits&lt;/li&gt;
&lt;li&gt;how much premium quota is left&lt;/li&gt;
&lt;li&gt;when it resets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built a small VS Code extension called &lt;strong&gt;Copilot Insights&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It shows Copilot &lt;strong&gt;plan and quota status&lt;/strong&gt; directly inside VS Code.&lt;br&gt;&lt;br&gt;
No usage analytics. No productivity scoring. Just clarity.&lt;/p&gt;

&lt;p&gt;👉 VS Code Marketplace:&lt;br&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=emanuelebartolesi.vscode-copilot-insights" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=emanuelebartolesi.vscode-copilot-insights&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubcopilot</category>
      <category>ai</category>
    </item>
    <item>
      <title>GitHub Copilot Is Too Nice. Fix It With a Tone of Voice File.</title>
      <dc:creator>Emanuele Bartolesi</dc:creator>
      <pubDate>Wed, 01 Apr 2026 12:21:58 +0000</pubDate>
      <link>https://dev.to/playfulprogramming/github-copilot-is-too-nice-fix-it-with-a-tone-of-voice-file-39ij</link>
      <guid>https://dev.to/playfulprogramming/github-copilot-is-too-nice-fix-it-with-a-tone-of-voice-file-39ij</guid>
      <description>&lt;p&gt;Most GitHub Copilot setups are too polite to be useful.&lt;/p&gt;

&lt;p&gt;By default, Copilot tries to agree, avoid criticism, and keep answers "safe".&lt;br&gt;
That sounds good, but in practice it leads to weak suggestions, missed problems, and bad decisions slipping through.&lt;/p&gt;

&lt;p&gt;If you want better output, you need to change its behavior.&lt;/p&gt;

&lt;p&gt;The simplest way is a tone of voice file.&lt;/p&gt;

&lt;p&gt;Create a &lt;code&gt;voice-instructions.md&lt;/code&gt; in your repo and force Copilot to be critical:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;applyTo&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;**'&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="s"&gt;Give direct, critical feedback.&lt;/span&gt;
&lt;span class="s"&gt;Identify mistakes, weak assumptions, unnecessary complexity, unclear naming, hidden risks, and poor trade-offs without softening the message.&lt;/span&gt;

&lt;span class="s"&gt;Do not add generic praise or filler. Do not agree by default.&lt;/span&gt;

&lt;span class="s"&gt;When something is wrong, say exactly what is wrong, why it is a problem, and what should be done instead.&lt;/span&gt;

&lt;span class="s"&gt;Prioritize correctness, clarity, simplicity, maintainability, and practical delivery.&lt;/span&gt;

&lt;span class="s"&gt;Challenge vague requirements and surface missing constraints, edge cases, and operational risks.&lt;/span&gt;

&lt;span class="s"&gt;Be blunt but professional. Never be insulting. Always aim to be useful.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clear problems called out&lt;/li&gt;
&lt;li&gt;Weak assumptions challenged&lt;/li&gt;
&lt;li&gt;Simpler and more maintainable alternatives&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is better code and faster decisions.&lt;/p&gt;

&lt;p&gt;There is a trade-off.&lt;/p&gt;

&lt;p&gt;It feels harsher.&lt;br&gt;
It is not ideal for beginners.&lt;br&gt;
It removes the "friendly assistant" vibe.&lt;/p&gt;

&lt;p&gt;But if you are building real systems, that is the wrong goal anyway.&lt;/p&gt;

&lt;p&gt;If you want better output, demand better behavior.&lt;/p&gt;


&lt;h3&gt;
  
  
  👀 GitHub Copilot quota visibility in VS Code
&lt;/h3&gt;

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

&lt;p&gt;If you use GitHub Copilot and ever wondered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what plan you’re on&lt;/li&gt;
&lt;li&gt;whether you have limits&lt;/li&gt;
&lt;li&gt;how much premium quota is left&lt;/li&gt;
&lt;li&gt;when it resets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built a small VS Code extension called &lt;strong&gt;Copilot Insights&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It shows Copilot &lt;strong&gt;plan and quota status&lt;/strong&gt; directly inside VS Code.&lt;br&gt;&lt;br&gt;
No usage analytics. No productivity scoring. Just clarity.&lt;/p&gt;

&lt;p&gt;👉 VS Code Marketplace:&lt;br&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=emanuelebartolesi.vscode-copilot-insights" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=emanuelebartolesi.vscode-copilot-insights&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubcopilot</category>
      <category>ai</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
