<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fh="http://purl.org/syndication/history/1.0"><channel><title>GitHub Agentic Workflows | Blog</title><description>Write agentic workflows in natural language using markdown files and run them as GitHub Actions workflows.</description><link>https://github.github.com/</link><language>en</language><atom:link rel="self" href="https://github.github.com/gh-aw/blog/rss.xml"/><atom:link rel="prev-archive" href="https://github.github.com/gh-aw/blog/rss/2026-07.xml"/><item><title>Weekly Update – August 10, 2026</title><link>https://github.github.com/gh-aw/blog/2026-08-10-weekly-update/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-08-10-weekly-update/</guid><description>This week brought v0.86.1 with guided gh aw fix diagnostics, expanded engine support, and a heavy security hardening pass in v0.86.0.</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It’s been another busy week in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;, with two notable releases and dozens of merged pull requests touching everything from compiler safety to CI stability. Here’s what shipped.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;release-v0861&quot;&gt;Release: v0.86.1&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.86.1&quot;&gt;v0.86.1&lt;/a&gt; landed on August 7th with a broad set of compiler safety fixes, new &lt;code dir=&quot;auto&quot;&gt;gh aw fix&lt;/code&gt; diagnostics, and expanded engine support.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;whats-new&quot;&gt;What’s New&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Guided &lt;code dir=&quot;auto&quot;&gt;gh aw fix&lt;/code&gt; diagnostics&lt;/strong&gt;: The tool now offers a guided fix for restricted &lt;code dir=&quot;auto&quot;&gt;tools.bash&lt;/code&gt; allow-listing on engines that ignore it (&lt;a href=&quot;https://github.com/github/gh-aw/pull/51102&quot;&gt;#51102&lt;/a&gt;), plus tips for known external engines like opencode and crush missing their import (&lt;a href=&quot;https://github.com/github/gh-aw/pull/51088&quot;&gt;#51088&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expanded engine support&lt;/strong&gt;: Added shared engine definitions and smoke tests for Pydantic AI (&lt;a href=&quot;https://github.com/github/gh-aw/pull/51161&quot;&gt;#51161&lt;/a&gt;), plus new example workflows for the aider, cursor, and kiro definition-based engines (&lt;a href=&quot;https://github.com/github/gh-aw/pull/51166&quot;&gt;#51166&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PureLock initiative&lt;/strong&gt;: Introduced a daily pure-function maximum-coverage test workflow (&lt;a href=&quot;https://github.com/github/gh-aw/pull/51107&quot;&gt;#51107&lt;/a&gt;) that is progressively locking down core compiler functions with dedicated test suites (&lt;a href=&quot;https://github.com/github/gh-aw/pull/51167&quot;&gt;#51167&lt;/a&gt;, &lt;a href=&quot;https://github.com/github/gh-aw/pull/51119&quot;&gt;#51119&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Safe-outputs improvements&lt;/strong&gt;: Fixed &lt;code dir=&quot;auto&quot;&gt;add_labels&lt;/code&gt; failing on pull requests in issue-intent paths (&lt;a href=&quot;https://github.com/github/gh-aw/pull/51168&quot;&gt;#51168&lt;/a&gt;) and replaced loosely-typed bool-or-expression fields with &lt;code dir=&quot;auto&quot;&gt;*TemplatableBool&lt;/code&gt; for safer config typing (&lt;a href=&quot;https://github.com/github/gh-aw/pull/51097&quot;&gt;#51097&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;release-v0860&quot;&gt;Release: v0.86.0&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.86.0&quot;&gt;v0.86.0&lt;/a&gt; shipped earlier the same day as a heavy security and reliability hardening pass across secret redaction, MCP gateway logging, and threat-detection resilience.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;security--redaction&quot;&gt;Security &amp;#x26; Redaction&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Secrets can no longer leak through logs or artifacts.&lt;/strong&gt; Redaction is now enforced in step summaries (&lt;a href=&quot;https://github.com/github/gh-aw/pull/50777&quot;&gt;#50777&lt;/a&gt;), patch/bundle artifacts (&lt;a href=&quot;https://github.com/github/gh-aw/pull/50778&quot;&gt;#50778&lt;/a&gt;), and MCP gateway diagnostic logs (&lt;a href=&quot;https://github.com/github/gh-aw/pull/50961&quot;&gt;#50961&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;URL handling hardened&lt;/strong&gt;: userinfo is now stripped from logged URLs and rejected URLs are no longer logged in full (&lt;a href=&quot;https://github.com/github/gh-aw/pull/50776&quot;&gt;#50776&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;upload_artifact&lt;/code&gt; safe-output&lt;/strong&gt; now restricts uploads to canonical allowed roots and rejects sensitive paths (&lt;a href=&quot;https://github.com/github/gh-aw/pull/50779&quot;&gt;#50779&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;notable-pull-requests&quot;&gt;Notable Pull Requests&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Beyond the releases, the team merged a steady stream of fixes and quality-of-life improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/51630&quot;&gt;Skip stale review-thread node IDs instead of failing safe_outputs&lt;/a&gt; — makes &lt;code dir=&quot;auto&quot;&gt;resolve_pull_request_review_thread&lt;/code&gt; more resilient to stale GraphQL node IDs.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/51608&quot;&gt;Grant agentic engines read/write access to /tmp/gh-aw in AWF sandbox&lt;/a&gt; — smooths out sandboxed engine runs that need scratch space.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/51423&quot;&gt;Fix recurring gh-aw-firewall digest-pin loss on DefaultFirewallVersion bumps&lt;/a&gt; — keeps firewall image pins from silently drifting on version bumps.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/51446&quot;&gt;Add explicit end marker syntax for inline skills and sub-agents&lt;/a&gt; — clarifies where inline skill and sub-agent content ends in workflow markdown.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/51275&quot;&gt;Fix Copilot path portability across runners&lt;/a&gt; — irons out cross-platform path handling for the Copilot engine.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-week-purelock&quot;&gt; Agent of the Week: PureLock&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;PureLock is the daily workflow that quietly locks down up to three uncovered pure Go functions per run, writing dedicated test suites so core compiler logic doesn’t regress unnoticed.&lt;/p&gt;
&lt;p&gt;This week PureLock ran three times — once from its daily schedule and twice via manual dispatch — clocking in at 15 to 22 minutes per run and burning through roughly 60,000 tokens total. All three runs completed successfully and stayed strictly read-only until their final PR, methodically chipping away at coverage gaps. Its handiwork showed up directly in this week’s release notes, with &lt;a href=&quot;https://github.com/github/gh-aw/pull/51586&quot;&gt;#51586&lt;/a&gt; locking down &lt;code dir=&quot;auto&quot;&gt;sameExpr&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;addAllowedToNetwork&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;rpcEntryToTimelineEvent&lt;/code&gt; with pure-function test suites.&lt;/p&gt;
&lt;p&gt;Give it a function name like &lt;code dir=&quot;auto&quot;&gt;simplifyDataSchemaNode&lt;/code&gt; and it will happily go write exhaustive tests for it without complaint — the kind of unglamorous, repetitive work that keeps a growing Go codebase honest one pure function at a time.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Usage tip&lt;/strong&gt;: Pair a coverage-locking workflow like this with your CI’s coverage gate so newly written tests actually prevent regressions instead of just padding a report.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/purelock.md&quot;&gt;View the workflow on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it-out&quot;&gt;Try It Out&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Update to &lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.86.1&quot;&gt;v0.86.1&lt;/a&gt; today to get the latest diagnostics and security hardening. As always, feedback and contributions are welcome in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Weekly Update – August 3, 2026</title><link>https://github.github.com/gh-aw/blog/2026-08-03-weekly-update/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-08-03-weekly-update/</guid><description>v0.84.0–v0.84.2 land a shellcheck linting pipeline, safer safe-outputs, container CVE cleanup, and dozens of reliability fixes.</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Another packed week in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;: five releases (v0.83.4 through v0.84.2) and over 100 merged pull requests. This week’s theme was &lt;strong&gt;hardening&lt;/strong&gt; — shell script safety, container security, and closing sneaky edge cases in the safe-outputs pipeline.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;release-highlights&quot;&gt;Release Highlights&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;v0842--august-1&quot;&gt;&lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.84.2&quot;&gt;v0.84.2&lt;/a&gt; — August 1&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;A maintenance release focused on stability and security, with no breaking changes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fixed an argument injection vulnerability (CWE-88)&lt;/strong&gt; in the &lt;code dir=&quot;auto&quot;&gt;git archive&lt;/code&gt; fallback path (&lt;a href=&quot;https://github.com/github/gh-aw/pull/49500&quot;&gt;#49500&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hardened the PR Description Updater&lt;/strong&gt; against one-shot safe-output exhaustion (&lt;a href=&quot;https://github.com/github/gh-aw/pull/49463&quot;&gt;#49463&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stacked PR runs now default to top-of-stack&lt;/strong&gt;, with a configurable &lt;code dir=&quot;auto&quot;&gt;on.pull_request.max-stack&lt;/code&gt; option extended to &lt;code dir=&quot;auto&quot;&gt;pull_request_review&lt;/code&gt; gating (&lt;a href=&quot;https://github.com/github/gh-aw/pull/49420&quot;&gt;#49420&lt;/a&gt;, &lt;a href=&quot;https://github.com/github/gh-aw/pull/49453&quot;&gt;#49453&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Explicit auto-merge strategies&lt;/strong&gt; are now supported in &lt;code dir=&quot;auto&quot;&gt;safe-outputs.create-pull-request&lt;/code&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/49412&quot;&gt;#49412&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CLI version bumps across the board: Copilot 1.0.77, Pi 0.83.0, Playwright Browser v1.62.1, Syft v1.50.0, Grype v0.116.1 (&lt;a href=&quot;https://github.com/github/gh-aw/pull/49521&quot;&gt;#49521&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;v0840-and-v0841&quot;&gt;&lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.84.1&quot;&gt;v0.84.0 and v0.84.1&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;These releases rolled out a &lt;strong&gt;shellcheck linting phase&lt;/strong&gt; for generated run steps in the compile pipeline, plus continued security patching for third-party MCP containers.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;notable-pull-requests&quot;&gt;Notable Pull Requests&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/49880&quot;&gt;feat: shellcheck disabled by default, opt-in via &lt;code dir=&quot;auto&quot;&gt;--shellcheck&lt;/code&gt;/&lt;code dir=&quot;auto&quot;&gt;--validate&lt;/code&gt;, parallel execution&lt;/a&gt;&lt;/strong&gt; — the new shellcheck gate ships opt-in first, so teams can adopt it on their own schedule while the compiler still catches real script bugs when enabled.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/49694&quot;&gt;fix(security): disable semgrep/semgrep container — Critical/High CVEs&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/49806&quot;&gt;security: remove mcp/markitdown container (849 CVEs)&lt;/a&gt;&lt;/strong&gt; — proactive removal of MCP containers with unpatched vulnerabilities, keeping the default toolset safe by default.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/49853&quot;&gt;Fix gh-aw-node brace-expansion patch (GHSA-mh99-v99m-4gvg)&lt;/a&gt;&lt;/strong&gt; — replaced a brittle &lt;code dir=&quot;auto&quot;&gt;npm --prefix&lt;/code&gt; overlay with a temp-dir copy, closing a supply-chain gap.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/49814&quot;&gt;Add first-class agent job gating via &lt;code dir=&quot;auto&quot;&gt;jobs.agent.needs&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;jobs.agent.if&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; — workflow authors can now express fine-grained dependencies and conditions directly on the agent job.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/49792&quot;&gt;Rescue completed watchdog-fired Copilot runs from false &lt;code dir=&quot;auto&quot;&gt;authentication_failed&lt;/code&gt; classification&lt;/a&gt;&lt;/strong&gt; — one of several reliability fixes that reduce false-positive failure reports in the dashboards.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-week-dead-code-removal-agent&quot;&gt; Agent of the Week: Dead Code Removal Agent&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Every day, this quiet janitor scans the codebase for functions nobody calls anymore — and deletes them, no drama required.&lt;/p&gt;
&lt;p&gt;This week it stayed characteristically productive: across its last three scheduled runs it logged zero errors and zero warnings, chewing through roughly 43K tokens total, and its August 1st run (&lt;a href=&quot;https://github.com/github/gh-aw/pull/49801&quot;&gt;#49801&lt;/a&gt;) walked away with four confirmed dead functions removed in a single pass. One earlier run did hit a rough patch — a merge-conflict-heavy branch tripped it into a “risky” classification — but it shrugged that off and came back clean the very next scheduled run.&lt;/p&gt;
&lt;p&gt;It’s the kind of agent that never asks for credit: three runs, one clean PR, and a repo that’s just a little tidier than it was last Tuesday.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Usage tip&lt;/strong&gt;: Schedule dead-code cleanup agents like this one on a low-traffic cadence (daily or every few days) so PRs stay small, reviewable, and easy to revert if a “dead” function turns out to have a reflection-based caller.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/dead-code-remover.md&quot;&gt;View the workflow on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it-out&quot;&gt;Try It Out&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Update to &lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.84.2&quot;&gt;v0.84.2&lt;/a&gt; and give the new shellcheck flags a spin with &lt;code dir=&quot;auto&quot;&gt;--validate&lt;/code&gt;. As always, bug reports, security findings, and PRs are welcome in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Weekly Update – July 27, 2026</title><link>https://github.github.com/gh-aw/blog/2026-07-27-weekly-update/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-07-27-weekly-update/</guid><description>Four releases in one week: security hardening, new linters, Docker monitoring, and a brand-new SEO optimizer workflow for GitHub Docs.</description><pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It was a busy week in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt; — four releases landed between Monday and Friday, each one stacking new capabilities on top of the last. Here’s a look at what shipped.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;releases-this-week&quot;&gt;Releases This Week&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;v0830--july-22&quot;&gt;&lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.83.0&quot;&gt;v0.83.0&lt;/a&gt; — July 22&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;A focused security and developer-experience release.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Three new ESLint rules&lt;/strong&gt; ship in one go: &lt;a href=&quot;https://github.com/github/gh-aw/pull/47869&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;stringsjoinone&lt;/code&gt;&lt;/a&gt; catches unnecessary single-element &lt;code dir=&quot;auto&quot;&gt;strings.Join&lt;/code&gt; calls, &lt;code dir=&quot;auto&quot;&gt;no-setfailed-then-exit-zero&lt;/code&gt; prevents masked CI failures, and &lt;code dir=&quot;auto&quot;&gt;require-execfilesync-try-catch&lt;/code&gt; enforces error handling around &lt;code dir=&quot;auto&quot;&gt;execFileSync&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sub-30s &lt;code dir=&quot;auto&quot;&gt;make test-unit&lt;/code&gt;&lt;/strong&gt; — tests now run impacted packages first, giving you fast feedback without waiting for the full suite.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;close_issue&lt;/code&gt; state-reason&lt;/strong&gt; — agents that close issues can now pick the closure reason dynamically (completed, not-planned, etc.), making your workflows more expressive.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;v0831--july-23&quot;&gt;&lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.83.1&quot;&gt;v0.83.1&lt;/a&gt; — July 23&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;This one expanded &lt;code dir=&quot;auto&quot;&gt;gh aw compile&lt;/code&gt; into a proper security pipeline.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Container vulnerability scanning with &lt;a href=&quot;https://github.com/anchore/grype&quot;&gt;Grype&lt;/a&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/47474&quot;&gt;#47474&lt;/a&gt;) — compile now checks &lt;code dir=&quot;auto&quot;&gt;gh-*&lt;/code&gt; workflow container images for CVEs before deployment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;License auditing and YAML linting&lt;/strong&gt; are also now part of the compile pass, catching problems before they hit production.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;v0832--july-24&quot;&gt;&lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.83.2&quot;&gt;v0.83.2&lt;/a&gt; — July 24&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Reliability and security fixes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Smarter &lt;code dir=&quot;auto&quot;&gt;gh aw add&lt;/code&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/47690&quot;&gt;#47690&lt;/a&gt;) — local skill references are now auto-rewritten to fully-qualified specs on &lt;code dir=&quot;auto&quot;&gt;gh aw add&lt;/code&gt;, so workflows stay portable when you share them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shell injection detection improvements&lt;/strong&gt; and a WIF auth regression fix round out the security hardening.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;v0833--july-25&quot;&gt;&lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.83.3&quot;&gt;v0.83.3&lt;/a&gt; — July 25&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The biggest release of the week.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Git argument injection fix (VULN-001)&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/47957&quot;&gt;#47957&lt;/a&gt;) — a security fix for unvalidated ref/path values in remote import fallbacks that could allow command injection via crafted ref names.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GraphQL injection fix&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/47952&quot;&gt;#47952&lt;/a&gt;) — resolved two code scanning alerts for GraphQL injection in &lt;code dir=&quot;auto&quot;&gt;getOwnerNodeId&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub MCP Server v1.7.0&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/47923&quot;&gt;#47923&lt;/a&gt;) — all workflows now get the latest MCP tool improvements out of the box.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;stringsconcatloop&lt;/code&gt; linter&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/47894&quot;&gt;#47894&lt;/a&gt;) — a new Go analyzer catches &lt;code dir=&quot;auto&quot;&gt;string +=&lt;/code&gt; inside loops and guides you toward &lt;code dir=&quot;auto&quot;&gt;strings.Builder&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Post-update SHA integrity validation&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/47959&quot;&gt;#47959&lt;/a&gt;) — &lt;code dir=&quot;auto&quot;&gt;actions-lock&lt;/code&gt; entries are now SHA-verified after updates, closing a supply-chain tampering vector.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WASM panic recovery&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/47854&quot;&gt;#47854&lt;/a&gt;) — playground users will no longer see stuck promises after a compile panic.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-week-daily-github-docs-seo-optimizer&quot;&gt; Agent of the Week: Daily GitHub Docs SEO Optimizer&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The newest addition to the workflow roster — quietly making sure GitHub Docs can actually find &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; when you need it.&lt;/p&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;daily-github-docs-seo-optimizer&lt;/code&gt; was shipped in v0.83.3 (&lt;a href=&quot;https://github.com/github/gh-aw/pull/47975&quot;&gt;#47975&lt;/a&gt;) and immediately got to work. Its job is to scan GitHub Docs pages and identify minimal, targeted updates that would help Copilot CLI surface Agentic Workflows as solutions to repository automation tasks. It’s not trying to game search engines — it’s trying to make sure that when a developer asks Copilot “how do I automate issue triage?”, the answer actually mentions &lt;code dir=&quot;auto&quot;&gt;gh aw&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Fresh off the assembly line this week, it hasn’t accumulated a rich log history yet (give it time), but the design is interesting: it runs daily on &lt;code dir=&quot;auto&quot;&gt;gpt-5.4&lt;/code&gt; with a bare driver and creates issues prefixed &lt;code dir=&quot;auto&quot;&gt;[github-docs-seo]&lt;/code&gt; when it finds documentation gaps worth flagging. No filesystem writes, no PR spam — just targeted observations filed as issues for humans to review.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Usage tip&lt;/strong&gt;: If you’re maintaining a library or CLI tool, a similar workflow can continuously audit whether your documentation appears in the right Copilot/LLM context for common developer questions — without needing a dedicated SEO team.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/daily-github-docs-seo-optimizer.md&quot;&gt;View the workflow on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it-out&quot;&gt;Try It Out&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Upgrade to &lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.83.3&quot;&gt;v0.83.3&lt;/a&gt; to get the full set of security fixes, the new GitHub MCP Server v1.7.0, and the expanded linter suite. Questions and contributions are always welcome in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Weekly Update – July 20, 2026</title><link>https://github.github.com/gh-aw/blog/2026-07-20-weekly-update/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-07-20-weekly-update/</guid><description>This week: v0.82.13 with smarter ESLint detection and issue intent metadata, a firewall bump to v0.27.37, rootless ARC runner support, and a wave of workshop UX improvements.</description><pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Another action-packed week in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;! Between a fresh release, a firewall bump, improved rootless runner support, and a thoroughly redesigned workshop experience, there was plenty to keep the bots busy.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;release-v08213&quot;&gt;Release: &lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.82.13&quot;&gt;v0.82.13&lt;/a&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.82.13&quot;&gt;v0.82.13&lt;/a&gt; landed on July 18th with smarter tooling, better defaults, and one breaking change to be aware of.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;-breaking-change&quot;&gt;! Breaking Change&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;gh aw add&lt;/code&gt; now rejects packages with &lt;code dir=&quot;auto&quot;&gt;aw.yml&lt;/code&gt; config&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/46273&quot;&gt;#46273&lt;/a&gt;): If you maintain packages that include an &lt;code dir=&quot;auto&quot;&gt;aw.yml&lt;/code&gt; configuration file, update them before upgrading — the CLI will now refuse to install them outright.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;-whats-new&quot;&gt; What’s New&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Auto-configure &lt;code dir=&quot;auto&quot;&gt;COPILOT_PROVIDER_WIRE_API&lt;/code&gt; from the model catalog&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/46156&quot;&gt;#46156&lt;/a&gt;): The CLI now resolves the provider wire API endpoint automatically, so you don’t have to set it by hand.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default-on issue intent metadata&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/46207&quot;&gt;#46207&lt;/a&gt;): &lt;code dir=&quot;auto&quot;&gt;set_issue_type&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;set_issue_field&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;add_labels&lt;/code&gt; now emit intent metadata by default — richer audit trails with zero extra config.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;NO_COLOR&lt;/code&gt; support&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/46197&quot;&gt;#46197&lt;/a&gt;): The CLI now honours the &lt;code dir=&quot;auto&quot;&gt;NO_COLOR&lt;/code&gt; environment variable for cleaner output in CI and accessibility-focused terminals.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stronger ESLint alias detection&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/46365&quot;&gt;#46365&lt;/a&gt;): The &lt;code dir=&quot;auto&quot;&gt;no-core-setoutput&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;exportvariable&lt;/code&gt; rules now catch aliased and destructured &lt;code dir=&quot;auto&quot;&gt;@actions/core&lt;/code&gt; bindings, closing a common bypass pattern.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;notable-pull-requests&quot;&gt;Notable Pull Requests&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/46637&quot;&gt;Firewall bump to v0.27.37&lt;/a&gt;&lt;/strong&gt;: The default &lt;code dir=&quot;auto&quot;&gt;gh-aw-firewall&lt;/code&gt; was updated from v0.27.35 to v0.27.37, bringing &lt;code dir=&quot;auto&quot;&gt;ANTHROPIC_AUTH_TOKEN&lt;/code&gt; credential isolation, &lt;code dir=&quot;auto&quot;&gt;~/.local/bin&lt;/code&gt; added to sandbox PATH for rootless Copilot installs, and runner doctor catalog updates.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/46047&quot;&gt;Rootless flag for ARC/DinD runners&lt;/a&gt;&lt;/strong&gt;: &lt;code dir=&quot;auto&quot;&gt;install_copilot_cli.sh&lt;/code&gt; now accepts a &lt;code dir=&quot;auto&quot;&gt;--rootless&lt;/code&gt; flag for ARC and Docker-in-Docker runner environments — a welcome fix for teams running Copilot on custom runners.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/46633&quot;&gt;New &lt;code dir=&quot;auto&quot;&gt;timenowsub&lt;/code&gt; linter&lt;/a&gt;&lt;/strong&gt;: The linter-miner contributed another Go linter that flags &lt;code dir=&quot;auto&quot;&gt;time.Now().Sub(t)&lt;/code&gt; and auto-rewrites it to the idiomatic &lt;code dir=&quot;auto&quot;&gt;time.Since(t)&lt;/code&gt;. Small but satisfying.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/46616&quot;&gt;Workshop redesign&lt;/a&gt;&lt;/strong&gt;: The workshop has been moved to &lt;code dir=&quot;auto&quot;&gt;/workshop/&lt;/code&gt;, simplified to match docs styling (&lt;a href=&quot;https://github.com/github/gh-aw/pull/46593&quot;&gt;#46593&lt;/a&gt;), and now shows step counts on entry and scenario cards (&lt;a href=&quot;https://github.com/github/gh-aw/pull/46622&quot;&gt;#46622&lt;/a&gt;) — making it much easier to gauge how much is left before you start.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/46604&quot;&gt;MCP toolsets sync&lt;/a&gt;&lt;/strong&gt;: GitHub MCP toolset mappings were synced with the upstream &lt;code dir=&quot;auto&quot;&gt;github-mcp-server&lt;/code&gt; main branch, keeping tool definitions up to date.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-week-avenger&quot;&gt; Agent of the Week: Avenger&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The CI guardian who never sleeps — Avenger runs every hour, checks whether CI is passing, and if it’s not, merges &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt;, runs &lt;code dir=&quot;auto&quot;&gt;recompile&lt;/code&gt;/&lt;code dir=&quot;auto&quot;&gt;fmt&lt;/code&gt;/&lt;code dir=&quot;auto&quot;&gt;lint&lt;/code&gt;/&lt;code dir=&quot;auto&quot;&gt;test&lt;/code&gt;, and opens a PR with any fixable issues.&lt;/p&gt;
&lt;p&gt;This week, Avenger ran multiple times and achieved &lt;code dir=&quot;auto&quot;&gt;success&lt;/code&gt; across the board, quietly keeping the codebase tidy during the busy firewall bump and workshop refactor merge storm. Each run it faithfully pulled in the latest &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt;, ran the full quality gauntlet, and — finding nothing broken — went back to sleep without making a fuss.&lt;/p&gt;
&lt;p&gt;The highlight of Avenger’s week was its run right after the &lt;a href=&quot;https://github.com/github/gh-aw/pull/46637&quot;&gt;v0.27.37 firewall bump&lt;/a&gt; landed, where it dutifully checked that all 258 recompiled &lt;code dir=&quot;auto&quot;&gt;.lock.yml&lt;/code&gt; files hadn’t introduced any CI regressions. They hadn’t. Avenger nodded once and clocked out.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Usage tip&lt;/strong&gt;: Avenger shines in repos where automated PRs (dependency bumps, codegen, lock file updates) can quietly break CI — it catches those regressions within the hour so humans don’t have to.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/avenger.md&quot;&gt;View the workflow on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it-out&quot;&gt;Try It Out&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Grab &lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.82.13&quot;&gt;v0.82.13&lt;/a&gt; and take the redesigned workshop for a spin. As always, feedback and contributions are welcome in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Weekly Update – July 13, 2026</title><link>https://github.github.com/gh-aw/blog/2026-07-13-weekly-update/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-07-13-weekly-update/</guid><description>v0.82.8 ships gVisor sandbox isolation, docker-sbx runtime, private-to-public-flows control, and sbx credential refresh fixes.</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Another active week in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;! We shipped &lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.82.8&quot;&gt;v0.82.8&lt;/a&gt;, landed several impactful features, and squashed a frustrating Docker authentication bug that had been interrupting &lt;code dir=&quot;auto&quot;&gt;sbx&lt;/code&gt;-runtime workflows.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;release-v0828&quot;&gt;Release: v0.82.8&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.82.8&quot;&gt;v0.82.8&lt;/a&gt; published on July 11th with a broad set of reliability and security improvements.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;whats-new&quot;&gt;What’s New&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;gVisor container runtime&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/44796&quot;&gt;#44796&lt;/a&gt;): Set &lt;code dir=&quot;auto&quot;&gt;sandbox.agent.runtime: gvisor&lt;/code&gt; in your workflow frontmatter to run the agent inside a gVisor sandbox for stronger isolation — great for workflows processing untrusted input.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Shared partials can declare &lt;code dir=&quot;auto&quot;&gt;sandbox.agent.mounts&lt;/code&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/44500&quot;&gt;#44500&lt;/a&gt;): Partial workflow files can now define mount configurations that get merged into the parent, enabling reusable sandbox setups without copy-paste.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AI authorship disclosure header&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/44497&quot;&gt;#44497&lt;/a&gt;): A new &lt;code dir=&quot;auto&quot;&gt;disclosure-header&lt;/code&gt; safe-output message type lets agents declare AI authorship inline in PR comments and issues.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;gh aw add&lt;/code&gt; resolves transitive &lt;code dir=&quot;auto&quot;&gt;uses:&lt;/code&gt; references&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/44763&quot;&gt;#44763&lt;/a&gt;): Importing a workflow partial now automatically pulls in any nested imports — no more manual dependency hunting.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;OAuth token failures surface in conclusion job&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/44777&quot;&gt;#44777&lt;/a&gt;, &lt;a href=&quot;https://github.com/github/gh-aw/pull/44756&quot;&gt;#44756&lt;/a&gt;): Token failures are no longer silently swallowed — they now show up where you’d expect.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;notable-pull-requests-this-week&quot;&gt;Notable Pull Requests This Week&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/45006&quot;&gt;docker-sbx runtime support&lt;/a&gt;&lt;/strong&gt; — You can now run your agent inside a KVM-isolated Docker sbx microVM (&lt;code dir=&quot;auto&quot;&gt;sandbox.agent.runtime: docker-sbx&lt;/code&gt;) while keeping infrastructure containers on the host. Full hardware-virtualization isolation for workloads that need it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/45146&quot;&gt;Emit sbx credential refresh before agent execution&lt;/a&gt;&lt;/strong&gt; — Fixes those maddening intermittent &lt;code dir=&quot;auto&quot;&gt;&quot;user is not authenticated to Docker&quot;&lt;/code&gt; errors. Docker Hub OAuth tokens from the daemon-setup step could expire by the time the agent ran. Now a fresh &lt;code dir=&quot;auto&quot;&gt;sbx login&lt;/code&gt; runs immediately before agent execution for all &lt;code dir=&quot;auto&quot;&gt;sbx&lt;/code&gt;-runtime workflows.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/45113&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;private-to-public-flows: allow&lt;/code&gt; frontmatter field&lt;/a&gt;&lt;/strong&gt; — Wires the full frontmatter → struct → gateway JSON pipeline for &lt;code dir=&quot;auto&quot;&gt;tools.github.private-to-public-flows&lt;/code&gt;, letting you opt specific MCP servers out of &lt;code dir=&quot;auto&quot;&gt;sink-visibility&lt;/code&gt; enforcement when you explicitly trust those flows.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/45101&quot;&gt;Bump gVisor release to 20250707.0&lt;/a&gt;&lt;/strong&gt; — Keeps the pinned gVisor release current with upstream security and reliability patches.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/45004&quot;&gt;Add missing copilot safe-output fixture files&lt;/a&gt;&lt;/strong&gt; — Adds fixtures for &lt;code dir=&quot;auto&quot;&gt;close-discussion&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;assign-to-agent&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;assign-to-user&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;unassign-from-user&lt;/code&gt;, filling gaps in the safe-output test suite.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-week-aw-failure-investigator&quot;&gt; Agent of the Week: aw-failure-investigator&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Your on-call teammate who never sleeps — it wakes up every 6 hours, scans recent workflow run failures, and files GitHub issues so problems don’t fall through the cracks.&lt;/p&gt;
&lt;p&gt;This week &lt;code dir=&quot;auto&quot;&gt;aw-failure-investigator&lt;/code&gt; ran three times across July 11–12, filing 3 issues in total (2 in one run, 1 in another). Each run clocked in around 15 minutes and consumed 250+ AI credits running on claude-opus-4-8 — because when you’re investigating failures, you don’t want to cut corners. The July 11th run had its own failure (meta!), but bounced back cleanly on its next scheduled cycle.&lt;/p&gt;
&lt;p&gt;In one particularly busy shift it made 13 GitHub API calls in 15 minutes, which is either impressive efficiency or evidence that it found a lot to worry about. Probably both.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Usage tip&lt;/strong&gt;: Pair &lt;code dir=&quot;auto&quot;&gt;aw-failure-investigator&lt;/code&gt; with a label-based notification rule so the right team gets pinged when it files an issue — that way failures surface asynchronously without requiring anyone to watch the Actions tab.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/aw-failure-investigator.md&quot;&gt;View the workflow on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it-out&quot;&gt;Try It Out&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Update to &lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.82.8&quot;&gt;v0.82.8&lt;/a&gt; and explore the new &lt;code dir=&quot;auto&quot;&gt;docker-sbx&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;gvisor&lt;/code&gt; sandbox runtimes. If you’ve been hitting Docker auth errors on &lt;code dir=&quot;auto&quot;&gt;sbx&lt;/code&gt; workflows, the credential refresh fix should put those to rest. Contributions and feedback are always welcome at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Weekly Update – July 6, 2026</title><link>https://github.github.com/gh-aw/blog/2026-07-06-weekly-update/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-07-06-weekly-update/</guid><description>Compiler fixes, linter refactors, prompt quality gates, and a 28% ambient-context size reduction highlight a busy week in gh-aw.</description><pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It was a productive week in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt; — with dozens of pull requests landing across the compiler, linters, JavaScript setup scripts, and documentation. Here’s a look at the highlights.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;notable-pull-requests&quot;&gt;Notable Pull Requests&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;fixcompiler-auto-add-pre_activation-to-safe_outputsconclusion-needs&quot;&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/43570&quot;&gt;fix(compiler): auto-add &lt;code dir=&quot;auto&quot;&gt;pre_activation&lt;/code&gt; to &lt;code dir=&quot;auto&quot;&gt;safe_outputs&lt;/code&gt;/&lt;code dir=&quot;auto&quot;&gt;conclusion&lt;/code&gt; needs&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;A sneaky compiler bug was generating &lt;code dir=&quot;auto&quot;&gt;skillet.lock.yml&lt;/code&gt; files with broken &lt;code dir=&quot;auto&quot;&gt;actionlint&lt;/code&gt; expressions: &lt;code dir=&quot;auto&quot;&gt;safe_outputs&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;conclusion&lt;/code&gt; jobs referenced &lt;code dir=&quot;auto&quot;&gt;${{ needs.pre_activation.outputs.skill_name }}&lt;/code&gt; without actually declaring &lt;code dir=&quot;auto&quot;&gt;pre_activation&lt;/code&gt; as a dependency. This fix auto-wires the dependency whenever a message template references &lt;code dir=&quot;auto&quot;&gt;pre_activation&lt;/code&gt; outputs — no more cryptic expression errors in generated lock files.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;refactorlinters-consolidate-astcontext-helpers-into-internalastutil&quot;&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/43649&quot;&gt;refactor(linters): consolidate AST/context helpers into &lt;code dir=&quot;auto&quot;&gt;internal/astutil&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The linter suite had quietly grown several copies of the same helper functions — &lt;code dir=&quot;auto&quot;&gt;enclosingFuncType&lt;/code&gt;, context-type resolution, OS-call detection — scattered across individual analyzers. This PR gathers them all into a single &lt;code dir=&quot;auto&quot;&gt;pkg/linters/internal/astutil&lt;/code&gt; package and rewires the affected analyzers, eliminating drift risk and making future linter work easier to reason about.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;ambient-context-reduce-copilot-agent-analysis-first-request-size-by-28&quot;&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/43619&quot;&gt;ambient-context: reduce copilot-agent-analysis first-request size by ~28%&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;copilot-agent-analysis&lt;/code&gt; was the largest ambient-context payload at 27,299 characters — most of it content that’s rarely needed at runtime. By gating cold-start rebuild content behind an optional import, this PR trims the first-request size to 11,876 characters, cutting token costs on every agent activation that uses this analysis path.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;add-shared-prompt-quality-gate-for-plateaued-agent-review-workflows&quot;&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/43527&quot;&gt;Add shared prompt quality gate for plateaued agent-review workflows&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Agent effectiveness scores had been stuck around 61–62 for several weeks — a signal that prompt design, not runtime bugs, was the limiting factor. This PR introduces a reusable quality rubric shared across analyzer and reviewer workflows, giving those workflows a concrete target for what “good” looks like and a path out of the plateau.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;fixsetupjs-numeric-coercion-setoutput-stringification-and-async-entrypoint-cleanup&quot;&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/43637&quot;&gt;fix(setup/js): numeric coercion, setOutput stringification, and async entrypoint cleanup&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;A sweep across 23 files in &lt;code dir=&quot;auto&quot;&gt;actions/setup/js&lt;/code&gt; replaced global &lt;code dir=&quot;auto&quot;&gt;isNaN&lt;/code&gt; (which silently coerces inputs) with &lt;code dir=&quot;auto&quot;&gt;Number.isNaN&lt;/code&gt;, fixed &lt;code dir=&quot;auto&quot;&gt;core.setOutput&lt;/code&gt; value types, and cleaned up unhandled async rejections. Small correctness improvements that prevent subtle runtime surprises in CI steps.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-week-weekly-issue-summary&quot;&gt; Agent of the Week: Weekly Issue Summary&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Your Monday morning data journalist — scans all issue activity from the past week and compiles trends, charts, and resolution statistics into a single digest comment.&lt;/p&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;weekly-issue-summary&lt;/code&gt; has been running quietly every Monday around 3 PM UTC, pulling 30 days of issue data, generating CSV trend files, and rendering two charts: one for issue open/close velocity and one for resolution time distributions. In its last three runs it made 13 GitHub API calls each time and burned through roughly 59 AI credits — efficient for a workflow that touches every open and closed issue in the repo. Two of the three runs succeeded without any write-side effects, posting the full digest to a tracking issue, while one run hit a timeout on the data preparation phase and bailed cleanly.&lt;/p&gt;
&lt;p&gt;The June 15th failure is the fun part: the observability report flagged it with the note “this run consumed a heavy execution profile for its task shape” and gently suggested the team might want to swap in a smaller model. The workflow took the feedback in stride and came back the following Monday working perfectly.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Usage tip&lt;/strong&gt;: Pair &lt;code dir=&quot;auto&quot;&gt;weekly-issue-summary&lt;/code&gt; with a label strategy — the chart breakdowns are most useful when issues are consistently labeled, since resolution-time distributions get interesting when you can split them by category.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/weekly-issue-summary.md&quot;&gt;View the workflow on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it-out&quot;&gt;Try It Out&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;All of this week’s changes are already on &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt; — pull the latest and run &lt;code dir=&quot;auto&quot;&gt;gh aw compile&lt;/code&gt; to pick up the compiler and linter improvements. Got feedback or spotted something worth fixing? Contributions are always welcome at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Weekly Update – June 29, 2026</title><link>https://github.github.com/gh-aw/blog/2026-06-29-weekly-update/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-06-29-weekly-update/</guid><description>This week in gh-aw: a brand-new Copilot Canvas extension, sandbox hardening hits 80%, Code Scanning Fixer expands to all severity levels, and more.</description><pubDate>Mon, 29 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A big week at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;! Canvas extensions land, security coverage expands, and the runtime stack gets a fresh set of bumps. Here’s everything that shipped between June 22 and June 29.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-new-copilot-canvas-extension-for-agentic-workflows&quot;&gt; New: Copilot Canvas Extension for Agentic Workflows&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/42137&quot;&gt;PR #42137&lt;/a&gt; ships a project-scoped GitHub Copilot Canvas extension — a GitHub-styled dashboard you can open right inside the Copilot app to manage agentic workflows without leaving your editor.&lt;/p&gt;
&lt;p&gt;The extension supports:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Browse definitions and runs&lt;/strong&gt; — &lt;code dir=&quot;auto&quot;&gt;listDefinitions(page, pageSize)&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;listRuns(page, pageSize)&lt;/code&gt; with full pagination&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inspect runs&lt;/strong&gt; — &lt;code dir=&quot;auto&quot;&gt;getRun(id)&lt;/code&gt; returns rich step summaries with safe markdown rendering&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dispatch workflows&lt;/strong&gt; — kick off any workflow via &lt;code dir=&quot;auto&quot;&gt;dispatchWorkflow(definitionId, inputs)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Run CLI commands in-canvas&lt;/strong&gt; — &lt;code dir=&quot;auto&quot;&gt;runGhAwLogs(args)&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;runGhAwAudit(args)&lt;/code&gt; bring &lt;code dir=&quot;auto&quot;&gt;gh aw logs&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;gh aw audit&lt;/code&gt; into the canvas surface&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The UI is built with Alpine.js and Primer CSS using native ES modules, with strict TypeScript domain models (&lt;code dir=&quot;auto&quot;&gt;WorkflowDefinition&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;WorkflowRun&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;WorkflowStep&lt;/code&gt;) and deterministic in-memory pagination. This is a high-impact addition for anyone who manages agentic workflows day-to-day.&lt;/p&gt;
&lt;p&gt;Paired with this, &lt;a href=&quot;https://github.com/github/gh-aw/pull/42147&quot;&gt;PR #42147&lt;/a&gt; adds a new &lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;create-canvas&lt;/code&gt; skill&lt;/strong&gt; that guides you through authoring, validating, and debugging canvas extensions — covering the full lifecycle from scaffolding via &lt;code dir=&quot;auto&quot;&gt;extensions_manage&lt;/code&gt; to exercising actions with &lt;code dir=&quot;auto&quot;&gt;invoke_canvas_action&lt;/code&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-security-sandbox-hardening-reaches-80&quot;&gt; Security: Sandbox Hardening Reaches 80%&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/42119&quot;&gt;PR #42119&lt;/a&gt; is a satisfying milestone: &lt;code dir=&quot;auto&quot;&gt;sandbox.agent.sudo: false&lt;/code&gt; is now set on &lt;strong&gt;206 out of 257 workflows (80.16%)&lt;/strong&gt;. This PR added the flag to 79 additional workflow specs and regenerated the matching lock files. Provenance-managed (&lt;code dir=&quot;auto&quot;&gt;source:&lt;/code&gt;) workflows were left untouched. If your workflow audits were catching a lot of missing sandbox flags, this cleans up the bulk of them.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-code-scanning-fixer-now-covers-all-severity-levels&quot;&gt; Code Scanning Fixer: Now Covers All Severity Levels&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Previously, &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/code-scanning-fixer.md&quot;&gt;code-scanning-fixer&lt;/a&gt; only tackled &lt;code dir=&quot;auto&quot;&gt;critical&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;high&lt;/code&gt; alerts. &lt;a href=&quot;https://github.com/github/gh-aw/pull/42139&quot;&gt;PR #42139&lt;/a&gt; removes that filter, expanding the workflow to enumerate &lt;strong&gt;all open code scanning alerts&lt;/strong&gt; and prioritize them by severity:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;critical &gt; high &gt; medium &gt; low&lt;/code&gt; (using &lt;code dir=&quot;auto&quot;&gt;rule.security_severity_level&lt;/code&gt; when available)&lt;/li&gt;
&lt;li&gt;Falls back to &lt;code dir=&quot;auto&quot;&gt;error &gt; warning &gt; note&lt;/code&gt; when security severity is absent&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The selection logic, no-op messaging, and PR body copy were all generalized to work across every severity level. If you had a backlog of medium/low findings quietly aging, this workflow will now start chipping away at them.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-runtime-mcpg-v0332--firewall-v02713&quot;&gt; Runtime: mcpg v0.3.32 + Firewall v0.27.13&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/42146&quot;&gt;PR #42146&lt;/a&gt; bumps two default runtime components:&lt;/p&gt;
&lt;div&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Component&lt;/th&gt;&lt;th&gt;Old&lt;/th&gt;&lt;th&gt;New&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td data-label=&quot;Component&quot;&gt;gh-aw-mcpg&lt;/td&gt;&lt;td data-label=&quot;Old&quot;&gt;v0.3.31&lt;/td&gt;&lt;td data-label=&quot;New&quot;&gt;v0.3.32&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-label=&quot;Component&quot;&gt;gh-aw-firewall&lt;/td&gt;&lt;td data-label=&quot;Old&quot;&gt;v0.27.12&lt;/td&gt;&lt;td data-label=&quot;New&quot;&gt;v0.27.13&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;All container image digests are SHA-pinned in &lt;code dir=&quot;auto&quot;&gt;action_pins.json&lt;/code&gt;. Low-risk, no migration needed.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-other-merges-worth-noting&quot;&gt; Other Merges Worth Noting&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/42115&quot;&gt;PR #42115&lt;/a&gt; — linter-miner added a new &lt;code dir=&quot;auto&quot;&gt;osgetenvlibrary&lt;/code&gt; analyzer that flags &lt;code dir=&quot;auto&quot;&gt;os.Getenv&lt;/code&gt;/&lt;code dir=&quot;auto&quot;&gt;LookupEnv&lt;/code&gt; calls in library packages (environment coupling in libraries is a common footgun).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/42118&quot;&gt;PR #42118&lt;/a&gt; — Prevents step-summary conversation truncation when agent output contains fenced code blocks.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/42117&quot;&gt;PR #42117&lt;/a&gt; — Slash-command footer hints now render correctly for custom safe-output footers.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/42112&quot;&gt;PR #42112&lt;/a&gt; — Fixed a cache-memory history path bug in Agent Persona Explorer that was triggering false &lt;code dir=&quot;auto&quot;&gt;cache_memory_miss&lt;/code&gt; errors.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-week-agent-persona-explorer&quot;&gt; Agent of the Week: agent-persona-explorer&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;A research agent that turns the lens inward — it systematically tests the &lt;code dir=&quot;auto&quot;&gt;agentic-workflows&lt;/code&gt; custom agent by roleplaying as different worker personas and evaluating what comes back.&lt;/p&gt;
&lt;p&gt;Each run, &lt;code dir=&quot;auto&quot;&gt;agent-persona-explorer&lt;/code&gt; picks three personas from a pool of nine — Backend Engineer, Frontend Developer, DevOps Engineer, Data Scientist, Product Manager, and more — generates 2 automation scenarios per persona, then submits each to the &lt;code dir=&quot;auto&quot;&gt;agentic-workflows&lt;/code&gt; agent and scores the responses on five dimensions: clarity, tool selection, security awareness, efficiency, and output quality. It stores a rotation history in cache memory so it never tests the same persona slice twice in a row. Results are published as a GitHub issue labeled &lt;code dir=&quot;auto&quot;&gt;agent-research&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The workflow ran three times in the past week. Two runs succeeded cleanly, but the first failed due to a cache-memory path mismatch — which was fixed in &lt;a href=&quot;https://github.com/github/gh-aw/pull/42112&quot;&gt;PR #42112&lt;/a&gt; within hours. The two successful runs consumed around 24 AIC each, used &lt;code dir=&quot;auto&quot;&gt;gpt-5.4&lt;/code&gt; for analysis, and made 13 GitHub API calls to gather workflow context before synthesizing findings.&lt;/p&gt;
&lt;p&gt;There’s also a quiet A/B experiment running in the background (since May 2026): the workflow is testing whether batching all persona scenarios into one sub-agent call is cheaper than spawning a separate sub-agent per scenario. The hypothesis is a ≥20% token reduction — and with 14 minimum samples required for a t-test conclusion, the jury is still out.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Usage tip&lt;/strong&gt;: If you’re building or tuning a custom agent, &lt;code dir=&quot;auto&quot;&gt;agent-persona-explorer&lt;/code&gt;-style testing is a powerful way to surface blind spots — run it against your own agent to see how it handles requests from personas you didn’t design for.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/agent-persona-explorer.md&quot;&gt;View the workflow on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt; repository for the full list of changes, and give the new Canvas extension a spin if you’re managing agentic workflows in Copilot.&lt;/p&gt;</content:encoded></item><item><title>Custom Linters in Practice: Sergo, Linter Miner, and LintMonster</title><link>https://github.github.com/gh-aw/blog/2026-06-26-custom-linters-sergo-linter-miner-and-lintmonster/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-06-26-custom-linters-sergo-linter-miner-and-lintmonster/</guid><description>How gh-aw grows, audits, and applies its custom Go linters with three cooperating workflows and a trail of linked PRs and issues.</description><pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; now registers &lt;strong&gt;35 custom Go analyzers&lt;/strong&gt; in
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/cmd/linters/main.go&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;cmd/linters/main.go&lt;/code&gt;&lt;/a&gt;.
That linter surface is not maintained by hand alone.
It is grown, audited, and applied by three separate
workflows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/linter-miner.md&quot;&gt;Linter Miner&lt;/a&gt;
proposes new analyzers from recurring patterns.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/sergo.md&quot;&gt;Sergo&lt;/a&gt;
stress-tests those analyzers for false positives,
false negatives, and suppression gaps.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/lint-monster.md&quot;&gt;LintMonster&lt;/a&gt;
runs the custom suite and turns findings into
tracked cleanup work.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The interesting part is not that each workflow exists.
It is that they form a loop: one workflow adds lint
rules, another challenges them, and a third drives the
codebase toward compliance.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;linter-miner-keeps-adding-new-rules&quot;&gt;Linter Miner keeps adding new rules&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/linter-miner.md&quot;&gt;workflow definition&lt;/a&gt;
is explicit about its job: mine discussions, issues,
and Go source, pick one new linter idea, implement it,
and open a PR. GitHub search currently shows a long run
of
&lt;a href=&quot;https://github.com/search?q=repo%3Agithub%2Fgh-aw+is%3Apr+%22%5Blinter-miner%5D%22&amp;#x26;type=pullrequests&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;[linter-miner]&lt;/code&gt; PRs&lt;/a&gt;,
and the recent examples are concrete:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/34498&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;fprintlnsprintf&lt;/code&gt;&lt;/a&gt;
flags &lt;code dir=&quot;auto&quot;&gt;fmt.Fprintln(w, fmt.Sprintf(...))&lt;/code&gt; and links to
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/docs/adr/34498-add-fprintlnsprintf-linter.md&quot;&gt;ADR 34498&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/39133&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;timeafterleak&lt;/code&gt;&lt;/a&gt;
catches &lt;code dir=&quot;auto&quot;&gt;time.After(...)&lt;/code&gt; inside &lt;code dir=&quot;auto&quot;&gt;for&lt;/code&gt;+&lt;code dir=&quot;auto&quot;&gt;select&lt;/code&gt;
loops.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/39263&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;errorfwrapv&lt;/code&gt;&lt;/a&gt;
flags &lt;code dir=&quot;auto&quot;&gt;fmt.Errorf(...%v..., err)&lt;/code&gt; where &lt;code dir=&quot;auto&quot;&gt;%w&lt;/code&gt; should
preserve the error chain.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/40837&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;wgdonenotdeferred&lt;/code&gt;&lt;/a&gt;
catches non-deferred &lt;code dir=&quot;auto&quot;&gt;sync.WaitGroup.Done()&lt;/code&gt; calls.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/41090&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;lenstringsplit&lt;/code&gt;&lt;/a&gt;
rewrites &lt;code dir=&quot;auto&quot;&gt;len(strings.Split(s, sep))&lt;/code&gt; to
&lt;code dir=&quot;auto&quot;&gt;strings.Count(s, sep)+1&lt;/code&gt; when the separator is
provably non-empty.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/41285&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;stringreplaceminusone&lt;/code&gt;&lt;/a&gt;
rewrites &lt;code dir=&quot;auto&quot;&gt;strings.Replace(..., -1)&lt;/code&gt; to
&lt;code dir=&quot;auto&quot;&gt;strings.ReplaceAll(...)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is not a one-off burst. The same theme appears in
the blog’s own weekly updates:
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/docs/src/content/docs/blog/2026-05-25-weekly-update.md&quot;&gt;May 25&lt;/a&gt;,
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/docs/src/content/docs/blog/2026-06-15-weekly-update.md&quot;&gt;June 15&lt;/a&gt;,
and
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/docs/src/content/docs/blog/2026-06-22-weekly-update.md&quot;&gt;June 22&lt;/a&gt;.
Those posts document &lt;code dir=&quot;auto&quot;&gt;fprintlnsprintf&lt;/code&gt;,
&lt;code dir=&quot;auto&quot;&gt;timeafterleak&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;errorfwrapv&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;deferinloop&lt;/code&gt; as
shipped work rather than aspirational ideas.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;sergo-pressure-tests-the-linters-after-they-land&quot;&gt;Sergo pressure-tests the linters after they land&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Where Linter Miner expands the rule set,
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/sergo.md&quot;&gt;Sergo&lt;/a&gt;
does the adversarial follow-up. The workflow is focused
on actionable Go analysis using Serena, and its issue
history shows a steady pattern:
find a precision gap, write a tightly scoped issue, and
let the next PR harden the analyzer.&lt;/p&gt;
&lt;p&gt;The clearest evidence is the issue-to-PR chain:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/issues/40244&quot;&gt;Issue #40244&lt;/a&gt;
found that &lt;code dir=&quot;auto&quot;&gt;errstringmatch&lt;/code&gt; only handled
&lt;code dir=&quot;auto&quot;&gt;strings.Contains(err.Error(), ...)&lt;/code&gt;;
&lt;a href=&quot;https://github.com/github/gh-aw/pull/40248&quot;&gt;PR #40248&lt;/a&gt;
extended coverage to &lt;code dir=&quot;auto&quot;&gt;HasPrefix&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;HasSuffix&lt;/code&gt;,
&lt;code dir=&quot;auto&quot;&gt;EqualFold&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;Index&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;LastIndex&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;Compare&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/issues/41377&quot;&gt;Issue #41377&lt;/a&gt;
found missing &lt;code dir=&quot;auto&quot;&gt;//nolint:&lt;/code&gt; support across four
context-family linters;
&lt;a href=&quot;https://github.com/github/gh-aw/pull/41382&quot;&gt;PR #41382&lt;/a&gt;
added suppression parity.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/issues/41376&quot;&gt;Issue #41376&lt;/a&gt;
found a false negative in &lt;code dir=&quot;auto&quot;&gt;manualmutexunlock&lt;/code&gt; when
two struct instances shared the same mutex field;
&lt;a href=&quot;https://github.com/github/gh-aw/pull/41383&quot;&gt;PR #41383&lt;/a&gt;
fixed the keying model.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/issues/40947&quot;&gt;Issue #40947&lt;/a&gt;
found that &lt;code dir=&quot;auto&quot;&gt;wgdonenotdeferred&lt;/code&gt; missed goroutine
closures launched inside loops;
&lt;a href=&quot;https://github.com/github/gh-aw/pull/41026&quot;&gt;PR #41026&lt;/a&gt;
fixed the function-literal scope boundary.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/issues/41163&quot;&gt;Issue #41163&lt;/a&gt;
found that &lt;code dir=&quot;auto&quot;&gt;lenstringsplit&lt;/code&gt; mishandled an empty
raw-string separator;
&lt;a href=&quot;https://github.com/github/gh-aw/pull/41188&quot;&gt;PR #41188&lt;/a&gt;
fixed the false positive and the broken autofix.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is also useful evidence in the failures. Sergo’s
&lt;a href=&quot;https://github.com/github/gh-aw/issues/40243&quot;&gt;Issue #40243&lt;/a&gt;
bundled several package-identity precision fixes into
one direction, and
&lt;a href=&quot;https://github.com/github/gh-aw/pull/40247&quot;&gt;PR #40247&lt;/a&gt;
closed unmerged after sprawling into a large branch.
The narrower follow-up work still landed, including
&lt;a href=&quot;https://github.com/github/gh-aw/pull/40248&quot;&gt;PR #40248&lt;/a&gt;.
That is a good sign: the workflow is producing reviewable
problems, not just optimistic reports.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;lintmonster-turns-diagnostics-into-repository-work&quot;&gt;LintMonster turns diagnostics into repository work&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/lint-monster.md&quot;&gt;LintMonster&lt;/a&gt;
operates later in the loop. It runs
&lt;code dir=&quot;auto&quot;&gt;make golint-custom&lt;/code&gt;, groups findings by root cause,
creates or updates issues, and can assign up to three
Copilot agent sessions to fix them.&lt;/p&gt;
&lt;p&gt;Its evidence trail is easy to follow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/issues/40932&quot;&gt;Issue #40932&lt;/a&gt;
grouped four resource-lifecycle and context-propagation
findings; &lt;a href=&quot;https://github.com/github/gh-aw/pull/41589&quot;&gt;PR #41589&lt;/a&gt;
merged the targeted fixes.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/issues/40933&quot;&gt;Issue #40933&lt;/a&gt;
tracked hard-coded path constants;
&lt;a href=&quot;https://github.com/github/gh-aw/pull/41611&quot;&gt;PR #41611&lt;/a&gt;
replaced the flagged literals with existing constants.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/issues/39314&quot;&gt;Issue #39314&lt;/a&gt;
established an authoritative function-length backlog
for &lt;strong&gt;653 findings&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/issues/41466&quot;&gt;Issue #41466&lt;/a&gt;
refreshed that same backlog at &lt;strong&gt;660 findings&lt;/strong&gt; and
kept it consolidated instead of spawning duplicate
tracking issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is what makes the custom linter suite operational
instead of decorative. Rules only matter if they change
the repository. LintMonster is the workflow that turns
diagnostics into queues, slices, assignments, and merged
cleanup work.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;why-the-three-workflow-loop-matters&quot;&gt;Why the three-workflow loop matters&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Taken together, the workflows separate three jobs that
usually get conflated:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Invent a rule from a real pattern.&lt;/strong&gt;
Linter Miner does this with new analyzers such as
&lt;a href=&quot;https://github.com/github/gh-aw/pull/39133&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;timeafterleak&lt;/code&gt;&lt;/a&gt;
and
&lt;a href=&quot;https://github.com/github/gh-aw/pull/41090&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;lenstringsplit&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Challenge the rule’s correctness.&lt;/strong&gt;
Sergo does this with issues such as
&lt;a href=&quot;https://github.com/github/gh-aw/issues/40947&quot;&gt;#40947&lt;/a&gt;
and
&lt;a href=&quot;https://github.com/github/gh-aw/issues/41163&quot;&gt;#41163&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Apply the rule to production code.&lt;/strong&gt;
LintMonster does this with issue-to-PR chains such as
&lt;a href=&quot;https://github.com/github/gh-aw/issues/40932&quot;&gt;#40932 → #41589&lt;/a&gt;
and
&lt;a href=&quot;https://github.com/github/gh-aw/issues/40933&quot;&gt;#40933 → #41611&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That split is why the system looks durable. New rules
keep arriving. Old rules keep getting corrected. The
repository keeps absorbing the results.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;further-evidence&quot;&gt;Further evidence&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;If you want to inspect the trail directly, start here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Source workflows:
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/linter-miner.md&quot;&gt;Linter Miner&lt;/a&gt;,
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/sergo.md&quot;&gt;Sergo&lt;/a&gt;,
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/lint-monster.md&quot;&gt;LintMonster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linter registry:
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/cmd/linters/main.go&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;cmd/linters/main.go&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ADRs:
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/docs/adr/34498-add-fprintlnsprintf-linter.md&quot;&gt;34498&lt;/a&gt;,
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/docs/adr/39133-custom-linter-for-time-after-leaks-in-loops.md&quot;&gt;39133&lt;/a&gt;,
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/docs/adr/40837-add-wgdonenotdeferred-linter.md&quot;&gt;40837&lt;/a&gt;,
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/docs/adr/41090-add-lenstringsplit-linter.md&quot;&gt;41090&lt;/a&gt;,
&lt;a href=&quot;https://github.com/github/gh-aw/blob/main/docs/adr/41285-add-stringreplaceminusone-linter.md&quot;&gt;41285&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Search views:
&lt;a href=&quot;https://github.com/search?q=repo%3Agithub%2Fgh-aw+is%3Apr+%22%5Blinter-miner%5D%22&amp;#x26;type=pullrequests&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;[linter-miner]&lt;/code&gt; PRs&lt;/a&gt;,
&lt;a href=&quot;https://github.com/search?q=repo%3Agithub%2Fgh-aw+is%3Aissue+label%3Asergo&amp;#x26;type=issues&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;label:sergo&lt;/code&gt; issues&lt;/a&gt;,
&lt;a href=&quot;https://github.com/search?q=repo%3Agithub%2Fgh-aw+is%3Aissue+label%3Alint-monster&amp;#x26;type=issues&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;label:lint-monster&lt;/code&gt; issues&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is a useful pattern beyond &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt;: treat static
analysis as a living workflow system, not just a binary
that runs in CI.&lt;/p&gt;</content:encoded></item><item><title>Weekly Update – June 22, 2026</title><link>https://github.github.com/gh-aw/blog/2026-06-22-weekly-update/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-06-22-weekly-update/</guid><description>This week brings a +320% compiler speed fix, a new defer-in-loop linter, gh-aw-detection rolling out to 50% of workflows, and JSON-RPC reliability improvements.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Another packed week at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;! Over 20 pull requests merged between June 15 and June 22, covering a significant performance regression fix, a new Go linter, a major feature flag rollout, and a handful of targeted reliability improvements. Here’s what shipped.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-performance-320-compiler-regression-fixed&quot;&gt; Performance: +320% Compiler Regression Fixed&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/40662&quot;&gt;PR #40662&lt;/a&gt; fixes a nasty regression in &lt;code dir=&quot;auto&quot;&gt;BenchmarkCompileComplexWorkflow&lt;/code&gt; that had quietly pushed compile times from ~3 ms/op to ~12.7 ms/op — a 320% slowdown. The culprit was &lt;code dir=&quot;auto&quot;&gt;validateTemplateInjection&lt;/code&gt; triggering a full &lt;code dir=&quot;auto&quot;&gt;yaml.Unmarshal&lt;/code&gt; on every pass through &lt;code dir=&quot;auto&quot;&gt;hasAnyExpressionInRunContent&lt;/code&gt;, even when &lt;code dir=&quot;auto&quot;&gt;skipValidation=true&lt;/code&gt; (the default in &lt;code dir=&quot;auto&quot;&gt;NewCompiler()&lt;/code&gt;). Eliminating that redundant unmarshal brings benchmark performance back to baseline. If your workflows felt slower to compile lately, this is the fix.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-new-linter-deferinloop&quot;&gt; New Linter: &lt;code dir=&quot;auto&quot;&gt;deferinloop&lt;/code&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/40679&quot;&gt;PR #40679&lt;/a&gt; adds a new Go analysis linter — &lt;code dir=&quot;auto&quot;&gt;deferinloop&lt;/code&gt; — that flags &lt;code dir=&quot;auto&quot;&gt;defer&lt;/code&gt; statements placed inside &lt;code dir=&quot;auto&quot;&gt;for&lt;/code&gt;-loop bodies. A &lt;code dir=&quot;auto&quot;&gt;defer&lt;/code&gt; inside a loop doesn’t fire at the end of each iteration; it fires when the enclosing function returns, causing resource leaks (file handles, connections) and confusing LIFO cleanup ordering. &lt;code dir=&quot;auto&quot;&gt;gocritic&lt;/code&gt; covers this pattern but is currently disabled due to golangci-lint v2 bugs, so this custom analyzer fills the gap and is now enforced in CI.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-gh-aw-detection-rolls-out-to-50-of-workflows&quot;&gt; &lt;code dir=&quot;auto&quot;&gt;gh-aw-detection&lt;/code&gt; Rolls Out to 50% of Workflows&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/40698&quot;&gt;PR #40698&lt;/a&gt; expands the &lt;code dir=&quot;auto&quot;&gt;gh-aw-detection&lt;/code&gt; feature flag from 20% (43 workflows) to &lt;strong&gt;50% of agentic workflows&lt;/strong&gt; (107 out of 214). The rollout targets workflows alphabetically and adds &lt;code dir=&quot;auto&quot;&gt;features: gh-aw-detection: true&lt;/code&gt; to the 64 newly included workflows. If you’re watching detection coverage metrics, expect a notable jump.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-reliability-fixes&quot;&gt; Reliability Fixes&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;json-rpc-error-handling&quot;&gt;JSON-RPC Error Handling&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/40715&quot;&gt;PR #40715&lt;/a&gt; fixes a bug where &lt;code dir=&quot;auto&quot;&gt;handleMessage&lt;/code&gt; in the MCP server was surfacing &lt;code dir=&quot;auto&quot;&gt;[object Object]&lt;/code&gt; in error responses. The root cause: the catch block used &lt;code dir=&quot;auto&quot;&gt;String(e)&lt;/code&gt; for non-&lt;code dir=&quot;auto&quot;&gt;Error&lt;/code&gt; thrown values, but &lt;code dir=&quot;auto&quot;&gt;safe_outputs_handlers.cjs&lt;/code&gt; throws plain objects for validation errors — giving callers a useless stringification. The fix detects plain objects and serializes them correctly, and also enforces valid JSON-RPC error codes for all thrown values.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;skillet-sparse-checkout-path-typing&quot;&gt;Skillet Sparse Checkout Path Typing&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/40684&quot;&gt;PR #40684&lt;/a&gt; fixes a sparse checkout path typing issue in Skillet’s pre-activation skills checkout. A type mismatch was causing silent failures when resolving sparse checkout paths — the kind of bug that’s nearly invisible until it bites you.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;daily-observability-report-artifact-fetching&quot;&gt;Daily Observability Report Artifact Fetching&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/40705&quot;&gt;PR #40705&lt;/a&gt; ensures the &lt;code dir=&quot;auto&quot;&gt;daily-observability-report&lt;/code&gt; workflow explicitly requests &lt;code dir=&quot;auto&quot;&gt;agent&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;detection&lt;/code&gt; artifact sets during log fetches. Without this, report generation could silently proceed without the required telemetry inputs, producing incomplete or noop outcomes.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-internals-fnv-1a-heredoc-delimiters&quot;&gt; Internals: FNV-1a Heredoc Delimiters&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/40696&quot;&gt;PR #40696&lt;/a&gt; replaces SHA-256 with FNV-1a for heredoc delimiter generation. FNV-1a is dramatically faster for this use case — heredoc delimiters don’t need cryptographic-strength hashing, and the switch reduces overhead in the compiler’s string-processing path.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-token-optimization&quot;&gt; Token Optimization&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/40695&quot;&gt;PR #40695&lt;/a&gt; reduces ambient prompt surface in high-traffic workflows. Trimming unnecessary context from the initial system prompt means fewer tokens on every invocation — the savings add up quickly when a workflow runs hundreds of times a day.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-week-delight&quot;&gt; Agent of the Week: delight&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Your repository’s resident UX guardian — scans documentation, CLI help text, workflow messages, and validation code for clarity, professionalism, and usability gaps, filing targeted single-file improvement tasks when it finds something worth fixing.&lt;/p&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;delight&lt;/code&gt; ran three times in the past 30 days (June 18, 19, and earlier in June), and all three runs completed successfully and stayed &lt;strong&gt;entirely read-only&lt;/strong&gt; — meaning it reviewed the codebase and came away with nothing to file. For a workflow whose whole job is finding UX rough edges, that’s a quiet kind of compliment to the team. Each run, it randomly samples 1–2 documentation files, 1–2 CLI commands, 1–2 workflow message configurations, and 1 validation file, then evaluates them against five enterprise UX design principles: clarity, professional communication, efficiency, trust, and documentation quality.&lt;/p&gt;
&lt;p&gt;On the rare occasions when it does find something worth flagging, it files a GitHub issue labeled both &lt;code dir=&quot;auto&quot;&gt;delight&lt;/code&gt; &lt;em&gt;and&lt;/em&gt; &lt;code dir=&quot;auto&quot;&gt;cookie&lt;/code&gt; — because apparently good UX comes with cookies. It’s capped at 2 issues per run so it never floods your backlog, and it keeps a rolling memory of past findings to avoid flagging the same thing twice.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Usage tip&lt;/strong&gt;: Run &lt;code dir=&quot;auto&quot;&gt;delight&lt;/code&gt; in any repo where user-facing quality matters — its single-file task constraint means every improvement it suggests is scoped, reviewable, and completable in an afternoon.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/delight.md&quot;&gt;View the workflow on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it-out&quot;&gt;Try It Out&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Pull the latest CLI build to get the compiler performance fix, the new &lt;code dir=&quot;auto&quot;&gt;deferinloop&lt;/code&gt; linter, and all this week’s reliability improvements. As always, feedback and contributions are welcome at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Weekly Update – June 15, 2026</title><link>https://github.github.com/gh-aw/blog/2026-06-15-weekly-update/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-06-15-weekly-update/</guid><description>This week brings Go timer-leak fixes, two new linters, a 4 MB patch-size bump, cross-repo safe-output allowlists, and much more.</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;No releases this week — but the merge queue more than made up for it. Over 50 pull requests landed in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt; between June 9 and June 15, touching everything from Go reliability to docs, linters, and cost optimization. Here’s the highlights.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-reliability-eliminating-timeafter-timer-leaks&quot;&gt; Reliability: Eliminating &lt;code dir=&quot;auto&quot;&gt;time.After&lt;/code&gt; Timer Leaks&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/39188&quot;&gt;PR #39188&lt;/a&gt; landed one of the most satisfying fixes of the week: every looped &lt;code dir=&quot;auto&quot;&gt;time.After&lt;/code&gt; call in the CLI was replaced with a properly cancelled timer, and a new &lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;timeafterleak&lt;/code&gt;&lt;/strong&gt; Go linter was wired into CI to keep it that way. In tight loops, &lt;code dir=&quot;auto&quot;&gt;time.After&lt;/code&gt; creates a new timer on every iteration without ever cleaning up the old ones — a slow drip of leaked goroutines. Now that drip is plugged, and the linter makes sure it stays that way.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-new-linters-errorfwrapv-and-timeafterleak&quot;&gt; New Linters: &lt;code dir=&quot;auto&quot;&gt;errorfwrapv&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;timeafterleak&lt;/code&gt;&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Two new Go analysis linters shipped this week:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/39133&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;timeafterleak&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; — flags &lt;code dir=&quot;auto&quot;&gt;time.After&lt;/code&gt; inside &lt;code dir=&quot;auto&quot;&gt;for&lt;/code&gt;+&lt;code dir=&quot;auto&quot;&gt;select&lt;/code&gt; loops where the timer would never be cancelled.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/39263&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;errorfwrapv&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; — flags &lt;code dir=&quot;auto&quot;&gt;fmt.Errorf&lt;/code&gt; calls that use &lt;code dir=&quot;auto&quot;&gt;%v&lt;/code&gt; to wrap errors instead of &lt;code dir=&quot;auto&quot;&gt;%w&lt;/code&gt;, ensuring errors stay unwrappable through the call stack.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both linters were auto-generated by the &lt;code dir=&quot;auto&quot;&gt;linter-miner&lt;/code&gt; workflow and are now enforced in CI.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-max-patch-size-increased-to-4-mb&quot;&gt; Max Patch Size Increased to 4 MB&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/39118&quot;&gt;PR #39118&lt;/a&gt; raises the default &lt;code dir=&quot;auto&quot;&gt;max-patch-size&lt;/code&gt; from 1 MB to 4 MB and improves the error message when a patch exceeds the limit. If your workflows were running into patch-size rejections on larger changesets, you’ll want to pull in the latest CLI — this headroom matters for repos with big generated files.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-cross-repo-safe-outputs-dispatch-allowlists&quot;&gt; Cross-Repo &lt;code dir=&quot;auto&quot;&gt;safe-outputs&lt;/code&gt; Dispatch Allowlists&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/39080&quot;&gt;PR #39080&lt;/a&gt; adds support for cross-repo &lt;code dir=&quot;auto&quot;&gt;dispatch-workflow&lt;/code&gt; allowlists in safe-outputs. You can now configure which repositories are allowed to trigger a &lt;code dir=&quot;auto&quot;&gt;dispatch-workflow&lt;/code&gt; safe output, giving teams fine-grained control over cross-repo automation boundaries.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-better-failure-diagnostics&quot;&gt; Better Failure Diagnostics&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Two PRs improve what you see when workflows fail:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/39122&quot;&gt;#39122&lt;/a&gt;&lt;/strong&gt;: Failure issues now include the last 5 tool calls when a tool denial triggers — so instead of “tool was denied,” you get the full context of what the agent was trying to do.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/39069&quot;&gt;#39069&lt;/a&gt;&lt;/strong&gt;: When the AI credits guardrail fires, failure issues now include an “Optimize token consumption” section with concrete suggestions for reducing costs.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;-docs-anthropic-wif-and-experiments&quot;&gt; Docs: Anthropic WIF and Experiments&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/39241&quot;&gt;#39241&lt;/a&gt;&lt;/strong&gt;: Anthropic Workload Identity Federation (WIF) is now documented as a first-class Claude authentication option — no more hunting through PRs to figure out how to set it up.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/39226&quot;&gt;#39226&lt;/a&gt;&lt;/strong&gt;: The experiments docs were expanded with concrete examples covering custom models, sub-agents, and sub-skills.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;-token--cost-optimizations&quot;&gt; Token / Cost Optimizations&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Several PRs this week focused on reducing unnecessary token consumption:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/39280&quot;&gt;#39280&lt;/a&gt;&lt;/strong&gt;: Reduced first-request token overhead in &lt;code dir=&quot;auto&quot;&gt;smoke-copilot&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;test-quality-sentinel&lt;/code&gt; by trimming ambient context.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/39157&quot;&gt;#39157&lt;/a&gt;&lt;/strong&gt;: Reduced ambient-context payload across daily and PR workflows by sharing prompt imports more efficiently.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-week-aw-failure-investigator&quot;&gt; Agent of the Week: aw-failure-investigator&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Your tireless overnight watchman — scans every workflow run in the repository, diagnoses root causes, and files structured GitHub issues before you’ve had your morning coffee.&lt;/p&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;aw-failure-investigator&lt;/code&gt; ran &lt;strong&gt;three times&lt;/strong&gt; in the past week (it’s on a 6-hour schedule — it never really sleeps), consuming over 4.7 million tokens and 60 turns across those runs. In its most recent run on June 15 at 1:38 AM, it filed two P1/P2 issues: one alerting that the Daily Model Inventory Checker had been 100% broken for six consecutive days due to a &lt;code dir=&quot;auto&quot;&gt;session.idle&lt;/code&gt; 60-second timeout exhausting all retry attempts, and another flagging that both Azure OpenAI smoke variants were false-failing in lockstep due to Azure 429 throttling. Earlier in the week it also identified that Code Simplifier was silently hitting the api-proxy invocation cap (50/50 LLM calls), causing 100% failure rate with no existing tracking issue.&lt;/p&gt;
&lt;p&gt;It ran its June 14 morning investigation in 16.6 minutes, used 1.8M tokens, and still filed 3 detailed issues — including one that caught a failure the team hadn’t noticed yet. Impressive dedication for an agent that technically has no idea what time it is.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Usage tip&lt;/strong&gt;: Deploy &lt;code dir=&quot;auto&quot;&gt;aw-failure-investigator&lt;/code&gt; in any repo with multiple scheduled workflows — catching silent regressions at 2 AM beats discovering them at the next sprint review.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/aw-failure-investigator.md&quot;&gt;View the workflow on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it-out&quot;&gt;Try It Out&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;All of this week’s improvements ship with the latest CLI build. Pull the newest version and explore the expanded patch-size headroom, the new linters, and the improved failure diagnostics. As always, contributions are welcome at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Effective Tokens replaced by AI Credits</title><link>https://github.github.com/gh-aw/blog/2026-06-08-migrating-from-effective-tokens-to-ai-credits/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-06-08-migrating-from-effective-tokens-to-ai-credits/</guid><description>The latest gh-aw build uses AI Credits (AIC) as the primary spend metric and keeps Effective Tokens (ET) as a legacy compatibility field.</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In the latest gh-aw build, Effective Tokens (ET) have been
replaced by AI Credits (AIC) as the primary spend metric.&lt;/p&gt;
&lt;aside aria-label=&quot;Caution&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Caution&lt;/p&gt;&lt;div&gt;&lt;p&gt;AIC is now the default cost metric in gh-aw output. ET remains
available only as a legacy compatibility field.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;This change reflects GitHub Copilot billing and models.dev pricing.
It makes spend tracking directly aligned to monetary cost instead of
a normalized token proxy.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-this-means-in-practice&quot;&gt;What this means in practice&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;gh aw audit&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;gh aw logs&lt;/code&gt; report AI Credits as the primary
spend metric.&lt;/li&gt;
&lt;li&gt;Effective Tokens are deprecated in documentation and should be
treated as legacy compatibility output.&lt;/li&gt;
&lt;li&gt;Cost reporting and budget discussions should use AIC values.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For repositories that need automatic workflow updates, run:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;gh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;aw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--write&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;metric-reference&quot;&gt;Metric reference&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI Credits (AIC)&lt;/strong&gt;: primary spend metric (1 AIC = $0.01 USD)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Effective Tokens (ET)&lt;/strong&gt;: deprecated legacy metric&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;where-to-read-more&quot;&gt;Where to read more&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.github.com/gh-aw/reference/cost-management/&quot;&gt;Cost Management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.github.com/gh-aw/reference/audit/&quot;&gt;Auditing Workflows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.github.com/gh-aw/specs/ai-credits-specification/&quot;&gt;AI Credits Specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.github.com/gh-aw/specs/effective-tokens-specification/&quot;&gt;Effective Tokens Specification&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Agent of the Day – June 2, 2026</title><link>https://github.github.com/gh-aw/blog/2026-06-02-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-06-02-agent-of-the-day/</guid><description>How Scout analyzed token usage trends across 237+ gh-aw workflows and surfaced the cost drivers behind a 65% spike in late May 2026.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day--june-2-2026-the-data-detective&quot;&gt;Agent of the Day – June 2, 2026: The Data Detective&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;You know that feeling when a bill arrives and it’s higher than you expected — and the line items are all vague? That’s what staring at aggregate AI token consumption looks like without good tooling. The number goes up, the curve bends, and everyone shrugs. Was it a new workflow? A prompt gone feral? A perfectly normal Monday?&lt;/p&gt;
&lt;p&gt;That’s the exact problem &lt;strong&gt;Scout&lt;/strong&gt; was built for.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day-scout&quot;&gt;Agent of the Day: Scout&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Scout is gh-aw’s on-demand research agent — a workflow you invoke with a question and come back to with an answer. It doesn’t file PRs or leave comments as part of a pipeline. It reads, reasons, and &lt;em&gt;reports&lt;/em&gt;, turning an open-ended research prompt into structured evidence a team can actually act on.&lt;/p&gt;
&lt;p&gt;On May 31, 2026 (&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/26709587451&quot;&gt;run #26709587451&lt;/a&gt;), Scout received a deceptively simple prompt on &lt;a href=&quot;https://github.com/github/gh-aw/issues/36100&quot;&gt;issue #36100&lt;/a&gt;: investigate token usage trends from the &lt;code dir=&quot;auto&quot;&gt;agentic-token-audit&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;agentic-token-optimizer&lt;/code&gt; workflows across April and May.&lt;/p&gt;
&lt;p&gt;Eight turns and 8.1 minutes later, it had the answer — and it wasn’t pretty.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h3 id=&quot;what-scout-found&quot;&gt;What Scout Found&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The headline: daily token consumption in gh-aw &lt;strong&gt;nearly doubled&lt;/strong&gt; over two months, peaking at &lt;strong&gt;138 million tokens on May 29&lt;/strong&gt; — the highest single day in the entire dataset.&lt;/p&gt;
&lt;div&gt;
























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Window&lt;/th&gt;&lt;th&gt;Avg tokens/day&lt;/th&gt;&lt;th&gt;Avg action-min/day&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td data-label=&quot;Window&quot;&gt;April 2026 (21 days)&lt;/td&gt;&lt;td data-label=&quot;Avg tokens/day&quot;&gt;~80.1M&lt;/td&gt;&lt;td data-label=&quot;Avg action-min/day&quot;&gt;~713&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-label=&quot;Window&quot;&gt;Early May (days 1–5)&lt;/td&gt;&lt;td data-label=&quot;Avg tokens/day&quot;&gt;~62.1M&lt;/td&gt;&lt;td data-label=&quot;Avg action-min/day&quot;&gt;—&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-label=&quot;Window&quot;&gt;Late May (days 20–29)&lt;/td&gt;&lt;td data-label=&quot;Avg tokens/day&quot;&gt;&lt;strong&gt;~101.8M&lt;/strong&gt;&lt;/td&gt;&lt;td data-label=&quot;Avg action-min/day&quot;&gt;~900&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Run counts stayed nearly flat the whole time — capped near 100/day by the collector’s limit. More runs weren’t the culprit. The growth was coming from &lt;em&gt;within&lt;/em&gt; each run.&lt;/p&gt;
&lt;p&gt;Scout traced it to two compounding forces. First, heavy-hitter workflows: the May 29 spike was dominated by &lt;strong&gt;PR Sous Chef&lt;/strong&gt; (15.7M tokens across 5 runs, averaging ~186 turns per run), &lt;strong&gt;Safe Output Health Monitor&lt;/strong&gt; (8.7M, single run), and &lt;strong&gt;Go Logger Enhancement&lt;/strong&gt; (8.5M). Token variance tracked workflow mix and turn count almost exactly. Second, catalog growth: &lt;strong&gt;~111 new agentic workflow &lt;code dir=&quot;auto&quot;&gt;.md&lt;/code&gt; files were added between April and May&lt;/strong&gt;, pushing the repository to over 237 workflows. More workflows meant more scheduled runners pulling heavier daily reporters and analyzers into the mix.&lt;/p&gt;
&lt;p&gt;There’s a silver lining. The &lt;code dir=&quot;auto&quot;&gt;agentic-token-optimizer&lt;/code&gt; workflow is doing its job — flagging concrete savings targets and driving commits. After Scout’s predecessor run flagged &lt;code dir=&quot;auto&quot;&gt;go-logger&lt;/code&gt; at 1.7M tokens per run on May 31, commit &lt;code dir=&quot;auto&quot;&gt;#36088&lt;/code&gt; (“Trim go-logger workflow prompt and validation overhead”) landed quickly. The feedback loop works.&lt;/p&gt;
&lt;p&gt;The gap is velocity: new workflows are arriving faster than optimizations land, so the net curve still bends upward.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h3 id=&quot;how-scout-works&quot;&gt;How Scout Works&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;What makes this run compelling isn’t just the findings — it’s how Scout approached the problem. It used &lt;strong&gt;37 distinct tool types&lt;/strong&gt; across 8 turns, drawing on Tavily’s research suite (search, crawl, extract, map, and research) to pull historical snapshot data and cross-reference it against repository commits. It made 61 network requests with zero firewall blocks, querying the &lt;code dir=&quot;auto&quot;&gt;memory/token-audit&lt;/code&gt; branch for the daily snapshot history and reconciling gaps in the mid-May data (several dates had empty downloads from API rate-limit failures during collection).&lt;/p&gt;
&lt;p&gt;The result was a structured research report posted directly to &lt;a href=&quot;https://github.com/github/gh-aw/issues/36100&quot;&gt;issue #36100&lt;/a&gt;, complete with a data table, a trend attribution section, caveats about data quality during the blind-spot window (May 6–19), and concrete recommendations — all in a single comment.&lt;/p&gt;
&lt;p&gt;No pipeline. No scaffolding. Just: “here’s a hard question” → “here’s a rigorous answer.”&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h3 id=&quot;why-this-matters&quot;&gt;Why This Matters&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Scout is a good reminder that not every agent needs to &lt;em&gt;do&lt;/em&gt; something to be valuable. Some of the highest-leverage work in a complex system is the work of &lt;em&gt;seeing clearly&lt;/em&gt; — quantifying what’s happening, attributing root causes, and giving a team a shared picture to reason from. Without that, optimization work is guesswork.&lt;/p&gt;
&lt;p&gt;When your token bill doubles in six weeks, you want a Scout.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Want to run your own research agent or explore the full gh-aw workflow catalog? Check out the project at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github.com/github/gh-aw&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – June 1, 2026</title><link>https://github.github.com/gh-aw/blog/2026-06-01-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-06-01-agent-of-the-day/</guid><description>How the Daily Security Red Team Agent scanned 379 production files, reviewed 12 suspicious candidates, and cleared all threats in under 6 minutes.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day--june-1-2026-the-red-team-that-never-sleeps&quot;&gt;Agent of the Day – June 1, 2026: The Red Team That Never Sleeps&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Security scanning is easy to deprioritize. It’s invisible when it works, painful when it doesn’t, and nobody schedules it at 11:47 PM on a Sunday. That’s exactly why we automated it.&lt;/p&gt;
&lt;p&gt;Meet the &lt;strong&gt;Daily Security Red Team Agent&lt;/strong&gt; — a Claude-powered workflow that runs nightly against &lt;code dir=&quot;auto&quot;&gt;actions/setup/js&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;actions/setup/sh&lt;/code&gt;, looking for the things no one wants to find: backdoors, secret leaks, destructive operations, and supply-chain compromise. Last night’s run (&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/26727994329&quot;&gt;#123, 2026-05-31T23:47:47Z&lt;/a&gt;) came back clean. That’s the good news. The more interesting story is what it took to get there.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h3 id=&quot;what-the-agent-actually-does&quot;&gt;What the Agent Actually Does&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;In 16 agentic turns over about six minutes, the agent unshallowed the repository to &lt;strong&gt;12,465 commits&lt;/strong&gt; and scanned &lt;strong&gt;717 files&lt;/strong&gt; — 379 in production scope — using bash as its forensic workhorse. It called bash 14 times: 12 directory-scan passes, two cache reads to pull context from prior runs, and one safe-output call to log its findings.&lt;/p&gt;
&lt;p&gt;Twelve candidates came up for review. All twelve were dismissed. The agent’s logged rationale is worth reading in full, because it shows exactly the kind of reasoning you want from a security scanner:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“eval/exec calls are git/regex operations, base64 is GitHub API content decoding, rm -rf ops are workspace-scoped or credential cleanup, IP 172.30.0.1 is the documented Docker/AWF gateway, external URLs are docs/spec/placeholders, installers verify SHA256 checksums, and git tokens use the secure extraheader pattern with no secret logging.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That’s not hand-waving. Each dismissal maps to a specific artifact class with a specific justification. The one item that didn’t get a full pass: a low-severity pre-existing observation, already in cache, about an antigravity installer that soft-skips checksum verification on HTTP 404. Noted, tracked, not new.&lt;/p&gt;
&lt;p&gt;No issues were created this run. The agent is configured to open up to five GitHub issues per run, labeled &lt;code dir=&quot;auto&quot;&gt;security, red-team&lt;/code&gt;, prefixed with &lt;code dir=&quot;auto&quot;&gt;[SECURITY]&lt;/code&gt;. Strict mode means it won’t fabricate urgency. If it doesn’t find something real, it files nothing.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h3 id=&quot;the-experiment-running-underneath&quot;&gt;The Experiment Running Underneath&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Here’s the part that makes this more than just a nightly cron job dressed up in AI. Since May 12, the workflow has been running an A/B experiment (&lt;a href=&quot;https://github.com/github/gh-aw/issues/31673&quot;&gt;issue #31673&lt;/a&gt;) comparing two analysis techniques: &lt;strong&gt;single_pass&lt;/strong&gt; versus &lt;strong&gt;iterative&lt;/strong&gt;. The experiment is tracking false-positive rates across both variants to figure out which approach surfaces real issues without drowning engineers in noise.&lt;/p&gt;
&lt;p&gt;Last night’s run used the &lt;strong&gt;full-comprehensive&lt;/strong&gt; technique variant. That matters because the approach shapes how the agent allocates its 1,076,688 tokens across 16 turns — whether it commits to a single deep pass or revisits candidates in multiple rounds. Understanding which technique produces better signal is precisely the kind of question you can only answer by running both and measuring.&lt;/p&gt;
&lt;p&gt;The agent’s own behavior fingerprint classified this run as &lt;em&gt;exploratory&lt;/em&gt; — methodical, wide-coverage, following leads rather than checking predetermined boxes. That fits the full-comprehensive profile. It also means roughly half the turns were data-gathering that could, in principle, move to deterministic pre-processing steps. That’s not a criticism; it’s a roadmap.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h3 id=&quot;why-this-matters&quot;&gt;Why This Matters&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Actions setup scripts are high-value targets. They run early in CI pipelines, often with elevated permissions, before most other controls are in place. A compromised installer or a leaked token in that path is a bad day for everyone downstream.&lt;/p&gt;
&lt;p&gt;Running a human red-team review at that depth every night isn’t realistic. Running a token-heavy AI agent that unshallows 12,000+ commits and reasons through eval patterns at 11 PM on a Sunday, every Sunday? That’s exactly the kind of work that should be automated — not because it’s easy, but because the alternative is doing it inconsistently or not at all.&lt;/p&gt;
&lt;p&gt;The workflow logged a clean bill of health. The experiment is generating data. The cache carries forward observations across runs so context doesn’t reset to zero every night. That’s an agent doing its job.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/github/gh-aw/blob/assets/Daily-Agent-of-the-Day-Blog-Writer/328451f896dea540a14ccc9eb4f7a48d3da56be2f854e92a9bea9dd70a87cf10.png?raw=true&quot; alt=&quot;Daily workflow activity chart&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;If you want to see how the workflow is structured, run your own experiments, or understand how &lt;code dir=&quot;auto&quot;&gt;cache-memory&lt;/code&gt; persistence works across agentic runs, the full source is at &lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;&lt;/strong&gt;. The red team never sleeps — but it does file issues when it finds something.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – June 1, 2026</title><link>https://github.github.com/gh-aw/blog/2026-06-01-agent-of-the-day-2/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-06-01-agent-of-the-day-2/</guid><description>Architecture Guardian: a scheduled agentic workflow that detects code structure violations before they become load-bearing.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;This post references historical &lt;strong&gt;Effective Tokens (ET)&lt;/strong&gt; metrics. gh-aw now uses &lt;strong&gt;AI Credits (AIC)&lt;/strong&gt; as the primary cost metric.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-day-architecture-guardian&quot;&gt; Agent of the Day: Architecture Guardian&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Architectural drift is quiet and cumulative. A file grows past 600 lines. A function absorbs one more responsibility. An import cycle sneaks in between two packages that “just need to share a little logic.” None of it trips a CI gate, no test turns red, and six months later a new engineer opens that directory and wonders how it got this bad. The Architecture Guardian workflow exists precisely to interrupt that pattern before it becomes load-bearing.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;what-it-does&quot;&gt;What It Does&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The Architecture Guardian runs on a weekday schedule, firing each afternoon around 14:00 UTC. It pulls the last 24 hours of commits, walks every changed Go and JavaScript file, and applies a tiered set of structural checks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;File size&lt;/strong&gt;: files over 500 lines generate a warning; over 1,000 lines, a blocker.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function length&lt;/strong&gt;: any function exceeding 80 lines is flagged.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Export count&lt;/strong&gt;: more than 10 exports from a single file draws scrutiny.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Import cycles&lt;/strong&gt;: the full dependency graph of changed packages is traced for cycles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When violations surface, the workflow doesn’t just log and move on. It opens a GitHub issue labeled &lt;code dir=&quot;auto&quot;&gt;architecture&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;automated-analysis&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;cookie&lt;/code&gt;, assigned directly to Copilot for triage. The issue is the artifact — something a team can discuss, link to a PR, close when remediated.&lt;/p&gt;
&lt;p&gt;The engine is GitHub Copilot, running as an agentic workflow defined in &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/architecture-guardian.md&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;architecture-guardian.md&lt;/code&gt;&lt;/a&gt;. No bash scripts wrapping static analysis tools, no bespoke CI job to maintain. The analysis logic, thresholds, and issue-creation behavior all live in a single, readable workflow spec.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;the-june-1-run&quot;&gt;The June 1 Run&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/26766995181&quot;&gt;Run 26766995181&lt;/a&gt; completed on June 1, 2026 at 16:18 UTC, five minutes and forty seconds after it started. The agent worked through three turns with &lt;code dir=&quot;auto&quot;&gt;claude-sonnet-4.6&lt;/code&gt; via GitHub Copilot, made 10 GitHub API calls, and consumed 125,356 tokens — a number that looks large until you factor in the effective token count of 1,206,982 once prompt caching is included. Caching is doing real work here.&lt;/p&gt;
&lt;p&gt;The verdict: no violations. Every changed file over the past 24 hours fell within the configured thresholds. The agent’s own summary put it plainly — &lt;em&gt;“0 files analyzed, no import cycles detected.”&lt;/em&gt; Nothing to open, nothing to assign.&lt;/p&gt;
&lt;p&gt;That outcome is worth pausing on. A clean run isn’t a null result; it’s confirmation. The codebase was touched, the guardian looked, and the boundaries held. Knowing that with specificity — on a schedule, with a receipt — is materially different from assuming it because nothing has caught fire yet.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;why-the-thresholds-matter&quot;&gt;Why the Thresholds Matter&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The 500-line warning and 1,000-line blocker aren’t arbitrary. Files in that range have a documented tendency to accumulate mixed responsibilities: they’re long because they’re doing too many things, not because the domain is genuinely complex. The 80-line function limit enforces a similar discipline. It’s not a style preference; it’s a forcing function for decomposition.&lt;/p&gt;
&lt;p&gt;Export counts above 10 are a softer signal — a package with 15 exports might be perfectly well-structured — but they surface files worth a second look. Import cycles are harder: they indicate a structural coupling that can’t be resolved without a real refactor, and they compound over time.&lt;/p&gt;
&lt;p&gt;The Architecture Guardian makes these checks automatic and visible without requiring anyone to remember to run a linter or build a policy around code review checklists. The standards are encoded in the workflow. The workflow runs whether or not anyone’s thinking about it.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;grounded-takeaways&quot;&gt;Grounded Takeaways&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;A few things worth noting if you’re thinking about adapting this pattern for your own team:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scheduling matters.&lt;/strong&gt; A daily check at 14:00 UTC catches violations before they’re a day old. Violations that linger for a week become rationalizations.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Issue creation is the accountability loop.&lt;/strong&gt; Logging a warning to stdout is easy to ignore. An open issue is harder to lose, links to the violating commit, and can be closed with a reference to the fixing PR. That chain is the point.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Clean runs are data.&lt;/strong&gt; The June 1 run found nothing. That’s not a failure of the workflow — it’s the workflow confirming steady-state health. Over time, a history of clean runs punctuated by occasional issues tells you something real about your team’s structural discipline.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Token efficiency scales.&lt;/strong&gt; 1.2 million effective tokens for a daily architectural scan, amortized across a codebase’s active lifetime, is not expensive. The cost of a missed import cycle or a 2,000-line God file is.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The Architecture Guardian is one of the workflows available in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;. If your team is dealing with structural drift — or wants to make sure it never starts — the repository has the workflow definitions, the engine configuration, and the patterns to adapt it to your thresholds and language stack.&lt;/p&gt;</content:encoded></item><item><title>Weekly Update – June 1, 2026</title><link>https://github.github.com/gh-aw/blog/2026-06-01-weekly-update/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-06-01-weekly-update/</guid><description>v0.77.4 delivers Anthropic WIF auth, a new copilot-sdk engine, per-workflow token guardrails, and much more.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;This post references historical &lt;strong&gt;Effective Tokens (ET)&lt;/strong&gt; metrics. gh-aw now uses &lt;strong&gt;AI Credits (AIC)&lt;/strong&gt; as the primary cost metric.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;It’s been a busy week in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;! Five releases landed between May 28 and May 31, capped off by &lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.77.4&quot;&gt;v0.77.4&lt;/a&gt; — one of the biggest releases in recent memory. Here’s everything that shipped.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;release-v0774&quot;&gt;Release: v0.77.4&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.77.4&quot;&gt;v0.77.4&lt;/a&gt; published on May 31st and packs in a ton of new capability.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;-whats-new&quot;&gt; What’s New&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Anthropic WIF Authentication&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/35939&quot;&gt;#35939&lt;/a&gt;): Claude-engine workflows can now authenticate via Workload Identity Federation. No more long-lived API key secrets stored in your repo — WIF handles it securely.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;copilot-sdk&lt;/code&gt; Engine&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/35936&quot;&gt;#35936&lt;/a&gt;): A new &lt;code dir=&quot;auto&quot;&gt;engine: copilot-sdk&lt;/code&gt; frontmatter option gives workflows direct access to the Copilot SDK runtime, opening up new integration patterns.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;aw.yml&lt;/code&gt; Manifest: Includes, Skills &amp;#x26; Agents&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/35778&quot;&gt;#35778&lt;/a&gt;): Your repository manifest now supports &lt;code dir=&quot;auto&quot;&gt;includes&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;skills&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;agents&lt;/code&gt; keys so you can compose and share workflow components across repos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Per-Workflow 24-Hour Effective-Token Guardrail&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/36042&quot;&gt;#36042&lt;/a&gt;): A configurable token guardrail prevents runaway agent costs with enterprise-grade defaults and handy &lt;code dir=&quot;auto&quot;&gt;ET&lt;/code&gt; shorthand support.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;search_commits&lt;/code&gt; in GitHub MCP Search Toolset&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/36115&quot;&gt;#36115&lt;/a&gt;): Agents can now search commits directly via the GitHub MCP search toolset.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;New Skills: &lt;code dir=&quot;auto&quot;&gt;copilot-review&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;go-codemod&lt;/code&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/36111&quot;&gt;#36111&lt;/a&gt;, &lt;a href=&quot;https://github.com/github/gh-aw/pull/36034&quot;&gt;#36034&lt;/a&gt;): Two new skills help agents plan and address PR review feedback, and implement Go codemods for the &lt;code dir=&quot;auto&quot;&gt;gh aw fix&lt;/code&gt; command.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;-notable-fixes&quot;&gt; Notable Fixes&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prefer toolcache Copilot CLI&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/35992&quot;&gt;#35992&lt;/a&gt;): Workflows now use the Actions toolcache copy of the Copilot CLI before downloading a release — faster setup for everyone.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reusable workflow timeout&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/36107&quot;&gt;#36107&lt;/a&gt;): &lt;code dir=&quot;auto&quot;&gt;timeout-minutes&lt;/code&gt; is now correctly passed through reusable workflow callers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Threat-detection hardening&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/36113&quot;&gt;#36113&lt;/a&gt;): Missing prompt artifacts no longer block safe-output execution.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;on.needs&lt;/code&gt; YAML strip&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/35965&quot;&gt;#35965&lt;/a&gt;): Processed &lt;code dir=&quot;auto&quot;&gt;on.needs&lt;/code&gt; keys are stripped from emitted YAML, preventing invalid workflow syntax.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;release-v0773&quot;&gt;Release: v0.77.3&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.77.3&quot;&gt;v0.77.3&lt;/a&gt; on May 29th brought sandbox improvements and better initialization:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;authHeader&lt;/code&gt; in sandbox agent targets&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/35694&quot;&gt;#35694&lt;/a&gt;): You can now specify custom authentication headers directly in &lt;code dir=&quot;auto&quot;&gt;sandbox.agent.targets&lt;/code&gt; frontmatter.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;gh aw init&lt;/code&gt; creates the Agentic Workflows custom agent&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/35773&quot;&gt;#35773&lt;/a&gt;): Running &lt;code dir=&quot;auto&quot;&gt;gh aw init&lt;/code&gt; now scaffolds a GitHub Copilot custom agent for Agentic Workflows right out of the box.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stricter schema validation for &lt;code dir=&quot;auto&quot;&gt;workflow_call&lt;/code&gt;/&lt;code dir=&quot;auto&quot;&gt;workflow_dispatch&lt;/code&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/35788&quot;&gt;#35788&lt;/a&gt;): Unknown input keys are now rejected at compile time.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;notable-merged-prs-this-week&quot;&gt;Notable Merged PRs This Week&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/36142&quot;&gt;Add project UTC offset support for rendered timestamps&lt;/a&gt;&lt;/strong&gt; — Timestamps and expiration messages now render correctly for teams in non-UTC time zones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/36137&quot;&gt;Optimize &lt;code dir=&quot;auto&quot;&gt;api-consumption-report&lt;/code&gt; with inline small-model sub-agents&lt;/a&gt;&lt;/strong&gt; — The API consumption report workflow is now faster and more efficient thanks to inline sub-agents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/36164&quot;&gt;Add structured diagnostics to the daily workflow ET guardrail&lt;/a&gt;&lt;/strong&gt; — The effective-token guardrail now emits structured logs with a stable &lt;code dir=&quot;auto&quot;&gt;[daily-workflow-et]&lt;/code&gt; prefix, making debugging much easier.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/36155&quot;&gt;Enable &lt;code dir=&quot;auto&quot;&gt;close_discussion&lt;/code&gt; safe output in Daily Regulatory workflow&lt;/a&gt;&lt;/strong&gt; — The regulatory compliance workflow can now close discussions as part of its cycle.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-week-api-consumption-report&quot;&gt; Agent of the Week: api-consumption-report&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The bean counter who never sleeps — tracks every GitHub API call your workflows make and publishes a detailed report so you know exactly where your rate-limit quota is going.&lt;/p&gt;
&lt;p&gt;This week &lt;code dir=&quot;auto&quot;&gt;api-consumption-report&lt;/code&gt; analyzed 95 workflow runs across the repository (58 successes, 37 failures — it doesn’t sugarcoat the numbers), tallied up 10,619 GitHub REST API calls in a single day, and generated a full trend chart showing that API usage spiked to ~80K calls on May 20th before settling back down. It also uploaded five charts as release assets — a trend line, a heatmap, a per-workflow breakdown, a “burners” donut chart, and a workflow-level trend — then published the whole package as a GitHub Discussion for everyone to browse.&lt;/p&gt;
&lt;p&gt;Hilariously, in one of its recent runs it completed in under 2 minutes with zero token usage and exactly one GitHub API call. Turns out that was the run where the cache hadn’t warmed yet — it took a look around, shrugged, and went home early.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Usage tip&lt;/strong&gt;: Schedule this workflow weekly to catch runaway API consumption before you hit rate limits — the per-workflow breakdown makes it easy to spot which agent is hogging the quota.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/api-consumption-report.md&quot;&gt;View the workflow on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it-out&quot;&gt;Try It Out&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Upgrade to &lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.77.4&quot;&gt;v0.77.4&lt;/a&gt; today and explore the new &lt;code dir=&quot;auto&quot;&gt;copilot-sdk&lt;/code&gt; engine and WIF authentication for Claude. As always, feedback and contributions are welcome at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – May 29, 2026</title><link>https://github.github.com/gh-aw/blog/2026-05-29-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-05-29-agent-of-the-day/</guid><description>Auto-Triage Issues: the gh-aw workflow that labels your GitHub backlog on autopilot—complete with a transparent Discussion report after every run.</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;By the time an issue makes it into your backlog, someone already spent time writing it. The least you can do is make sure it gets read by the right person quickly. In practice, that rarely happens — unlabeled issues pile up, the search experience degrades, and the right engineer finds out about a relevant bug two sprints too late. Labeling sounds simple. Doing it consistently, at scale, without burning anyone’s afternoon, is the actual challenge.&lt;/p&gt;
&lt;p&gt;That’s exactly the problem the &lt;strong&gt;Auto-Triage Issues&lt;/strong&gt; workflow in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;gh-aw&lt;/a&gt; was built to solve.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h3 id=&quot;agent-of-the-day&quot;&gt;Agent of the Day&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Workflow:&lt;/strong&gt; Auto-Triage Issues&lt;br&gt;
&lt;strong&gt;Engine:&lt;/strong&gt; GitHub Copilot (gpt-5-mini)&lt;br&gt;
&lt;strong&gt;Run:&lt;/strong&gt; &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/26640355375&quot;&gt;#26640355375&lt;/a&gt; — May 29, 2026, 13:34 UTC&lt;br&gt;
&lt;strong&gt;Result:&lt;/strong&gt; ✓ SUCCESS&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h3 id=&quot;what-it-does&quot;&gt;What It Does&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Auto-Triage Issues runs on a schedule — several times a day — and also fires on &lt;code dir=&quot;auto&quot;&gt;issues&lt;/code&gt; events. Each pass, it reads through unlabeled GitHub issues, reasons about their content, and applies labels with a stated confidence level and rationale. No human in the loop. No queue to drain manually.&lt;/p&gt;
&lt;p&gt;The agent runs behind an enabled squid-proxy firewall, with outbound access scoped to &lt;code dir=&quot;auto&quot;&gt;github.com&lt;/code&gt; and approved defaults. That constraint is intentional: triage doesn’t need the open internet, and limiting the blast radius of any agent is good practice regardless of what it’s doing.&lt;/p&gt;
&lt;p&gt;Today’s midday run is a useful case study in how the workflow behaves under varying load.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h3 id=&quot;the-morning-run-vs-the-midday-run&quot;&gt;The Morning Run vs. The Midday Run&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The 07:45 UTC pass (&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/26625003469&quot;&gt;run #26625003469&lt;/a&gt;) was a light one: 7 turns, finished in 5 minutes. A handful of issues to consider, quick classification, done. That’s what a steady-state workload looks like.&lt;/p&gt;
&lt;p&gt;By 13:34 UTC, the picture was different. The agent completed 28 turns over 10 minutes — four times the conversational depth, twice the elapsed time. Same workflow, same model, same success result. The difference was the volume and complexity of what was waiting in the queue.&lt;/p&gt;
&lt;p&gt;This matters because it shows the system isn’t just running a fixed script. The agent works through each issue, reasons about it, and the turn count reflects real cognitive work being done. A heavier inbox produces a longer run, not a failure or a time-out.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h3 id=&quot;what-got-triaged-today&quot;&gt;What Got Triaged Today&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Two issues received labels during the midday run:&lt;/p&gt;
&lt;div&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Issue&lt;/th&gt;&lt;th&gt;Labels Applied&lt;/th&gt;&lt;th&gt;Rationale&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td data-label=&quot;Issue&quot;&gt;#35708&lt;/td&gt;&lt;td data-label=&quot;Labels Applied&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;automation&lt;/code&gt;&lt;/td&gt;&lt;td data-label=&quot;Rationale&quot;&gt;”Automated triage report with no bug/feature signal”&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td data-label=&quot;Issue&quot;&gt;#34915&lt;/td&gt;&lt;td data-label=&quot;Labels Applied&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;documentation&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;automation&lt;/code&gt;&lt;/td&gt;&lt;td data-label=&quot;Rationale&quot;&gt;”Automated documentation quality report generated by automation; content is documentation-focused and workflow-generated”&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Both calls were high-confidence. Issue #34915 is a good example of the multi-label path: the agent identified that the issue was both workflow-generated &lt;em&gt;and&lt;/em&gt; documentation-focused, and applied both labels rather than forcing a single category. That kind of nuanced classification is where static regex-based approaches tend to fall short.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h3 id=&quot;the-discussion-output&quot;&gt;The Discussion Output&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;At the end of each run, the workflow doesn’t just apply labels and exit quietly. It creates — or updates — a GitHub Discussion titled &lt;strong&gt;[Auto-Triage Report] 2026-05-29&lt;/strong&gt;, containing a Markdown table that summarizes every issue it classified: the issue number, the labels applied, confidence level, and the agent’s reasoning.&lt;/p&gt;
&lt;p&gt;That report serves two purposes. First, it’s auditable — a reviewer can open the Discussion and see exactly what the agent decided and why, without digging through logs. Second, it creates a natural place for human override: if a classification looks wrong, the context is right there to inform a correction.&lt;/p&gt;
&lt;p&gt;Transparency in automated triage isn’t optional. Reviewers need to trust the output before they’ll stop second-guessing it.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h3 id=&quot;why-gpt-5-mini&quot;&gt;Why gpt-5-mini&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The model choice here is deliberate. gpt-5-mini is fast and cost-effective for classification tasks where the signal is textual and the label set is bounded. You don’t need a heavyweight model to tell the difference between a documentation report and a bug report. Reserving larger models for tasks that actually need them — planning, synthesis, code generation — keeps the system efficient across a full day of scheduled runs.&lt;/p&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h3 id=&quot;try-it-yourself&quot;&gt;Try It Yourself&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;If your repository is drowning in unlabeled issues, Auto-Triage is a pattern worth adopting. The workflow lives in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;, alongside the rest of the agentic workflow library. The firewall configuration, the Discussion report pattern, and the label confidence output are all ready to fork and adapt.&lt;/p&gt;
&lt;p&gt;Triage shouldn’t be a task anyone has to remember to do. It should just happen — correctly, consistently, and with a paper trail.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – May 28, 2026</title><link>https://github.github.com/gh-aw/blog/2026-05-28-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-05-28-agent-of-the-day/</guid><description>How the Dead Code Removal Agent quietly hit run #100 — finding and deleting a redundant Go wrapper function, running full verification, and opening a clean PR.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;This post references historical &lt;strong&gt;Effective Tokens (ET)&lt;/strong&gt; metrics. gh-aw now uses &lt;strong&gt;AI Credits (AIC)&lt;/strong&gt; as the primary cost metric.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Every codebase accumulates sediment. A helper function that made sense six months ago. A wrapper that lost its reason to exist after a refactor. Nobody deletes it on purpose — it just lingers. In Go, that lingering costs you: extra surface area to maintain, test coverage for code that does nothing new, and cognitive overhead for every engineer who reads the file.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Dead Code Removal Agent&lt;/strong&gt; is a scheduled GitHub Actions workflow that runs daily on the &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; repository. Its job is simple: find unused code, verify nothing breaks, and open a pull request. No human intervention required until review time.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day&quot;&gt;Agent of the Day&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;run-100--a-quiet-milestone&quot;&gt;Run #100 — A Quiet Milestone&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;On May 27, 2026, the agent completed &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/26520529392&quot;&gt;run #100&lt;/a&gt;. Not a fanfare moment — just another daily run doing exactly what it was built to do. It finished in &lt;strong&gt;11.4 minutes&lt;/strong&gt; across &lt;strong&gt;5 turns&lt;/strong&gt;, consumed &lt;strong&gt;14.6M effective tokens&lt;/strong&gt;, and used &lt;strong&gt;12 GitHub Actions minutes&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The target this time was &lt;code dir=&quot;auto&quot;&gt;NewValidationErrorWithLocation&lt;/code&gt; in &lt;code dir=&quot;auto&quot;&gt;pkg/workflow/workflow_errors.go&lt;/code&gt;. The function was a constructor wrapper around &lt;code dir=&quot;auto&quot;&gt;WorkflowValidationError&lt;/code&gt; — originally a convenience, but over time it became redundant as callers could initialize the struct directly. The agent identified it, confirmed it had no remaining callers, and started working.&lt;/p&gt;
&lt;p&gt;The tool call sequence tells the story cleanly: one &lt;code dir=&quot;auto&quot;&gt;Install&lt;/code&gt;, eight &lt;code dir=&quot;auto&quot;&gt;Check&lt;/code&gt; passes, five &lt;code dir=&quot;auto&quot;&gt;Read&lt;/code&gt;s, three &lt;code dir=&quot;auto&quot;&gt;View&lt;/code&gt;s, four &lt;code dir=&quot;auto&quot;&gt;Edit&lt;/code&gt;s, a &lt;code dir=&quot;auto&quot;&gt;Find&lt;/code&gt;, a &lt;code dir=&quot;auto&quot;&gt;Verify&lt;/code&gt;, a &lt;code dir=&quot;auto&quot;&gt;Format&lt;/code&gt;, two &lt;code dir=&quot;auto&quot;&gt;Run&lt;/code&gt;s, two &lt;code dir=&quot;auto&quot;&gt;Create&lt;/code&gt;s, an &lt;code dir=&quot;auto&quot;&gt;Update&lt;/code&gt;, and a &lt;code dir=&quot;auto&quot;&gt;Vet&lt;/code&gt;. That’s methodical, not mechanical. The agent didn’t just delete the function — it removed the corresponding &lt;code dir=&quot;auto&quot;&gt;TestNewValidationErrorWithLocation&lt;/code&gt; test from &lt;code dir=&quot;auto&quot;&gt;pkg/workflow/error_helpers_test.go&lt;/code&gt; and updated &lt;code dir=&quot;auto&quot;&gt;compiler_error_formatting_test.go&lt;/code&gt; to use direct &lt;code dir=&quot;auto&quot;&gt;WorkflowValidationError&lt;/code&gt; struct initialization instead.&lt;/p&gt;
&lt;p&gt;Verification was thorough. Before touching the PR, the agent ran &lt;code dir=&quot;auto&quot;&gt;go build ./...&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;go vet ./...&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;go vet -tags=integration ./...&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;make fmt&lt;/code&gt;. Everything passed. The resulting PR — &lt;strong&gt;“chore: remove dead functions — 1 function removed”&lt;/strong&gt; on branch &lt;code dir=&quot;auto&quot;&gt;chore/remove-dead-code-20260527&lt;/code&gt; — arrived clean, with no lint issues and a test suite that still compiles.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;what-five-runs-look-like&quot;&gt;What Five Runs Look Like&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Zoom out a week and the picture gets more interesting. Across five runs in the last seven days, the agent logged:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;35.5 minutes&lt;/strong&gt; total duration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;38.9M effective tokens&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;38 GitHub Actions minutes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;21 turns&lt;/strong&gt; across all five runs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;5 out of 5&lt;/strong&gt; high-confidence episodes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Run classification across that window: two normal runs, one risky, one failure, one in-progress. The failure and the risky classification matter as much as the successes. The agent doesn’t always find something safe to remove, and when it can’t complete cleanly, it doesn’t force a PR. That restraint is a feature, not a gap.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;why-automation-fits-this-problem&quot;&gt;Why Automation Fits This Problem&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Dead code removal is well-suited to an agent for a specific reason: the feedback loop is entirely mechanical. Does it build? Does &lt;code dir=&quot;auto&quot;&gt;go vet&lt;/code&gt; pass? Does the test suite still run? Those questions have definitive answers. The agent never has to speculate about intent — it just has to be rigorous about verification, which it is.&lt;/p&gt;
&lt;p&gt;The harder editorial question — &lt;em&gt;should&lt;/em&gt; this code be removed — is answered by the PR review. The agent does the investigation and the grunt work. Engineers do the judgment call. That division feels right.&lt;/p&gt;
&lt;p&gt;There’s also something useful about the daily cadence. A function doesn’t become dead overnight. But catching it the morning after the last caller disappears, rather than six months later during a refactor, is the difference between a one-line deletion and an archaeology project.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;get-involved&quot;&gt;Get Involved&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;If you’re curious about how the Dead Code Removal Agent is built, or if you want to run something similar against your own Go codebase, the workflow lives at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;. The patterns here — schedule-triggered agents, structured verification steps, PR-as-output — are composable. Start there.&lt;/p&gt;
&lt;p&gt;Run #100 was just another Tuesday. That’s the point.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – May 27, 2026</title><link>https://github.github.com/gh-aw/blog/2026-05-27-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-05-27-agent-of-the-day/</guid><description>The Agent Performance Analyzer scored 236 workflows this week — ecosystem health jumped 20 points to 90/100 and a persistent 5-day CLI failure was auto-filed as a GitHub issue.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;This post references historical &lt;strong&gt;Effective Tokens (ET)&lt;/strong&gt; metrics. gh-aw now uses &lt;strong&gt;AI Credits (AIC)&lt;/strong&gt; as the primary cost metric.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Every day, 236 agentic workflows run inside the &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; repository. Most complete quietly. A few fail in patterns worth tracking. And once a week, one workflow reads the entire fleet, scores it, and writes up what it found. That workflow is the &lt;strong&gt;Agent Performance Analyzer&lt;/strong&gt;, and its run on May 27, 2026 produced the clearest signal in months.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day-agent-performance-analyzer--meta-orchestrator&quot;&gt;Agent of the Day: Agent Performance Analyzer — Meta-Orchestrator&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code dir=&quot;auto&quot;&gt;agent-performance-analyzer&lt;/code&gt; is not a workflow that builds features or merges PRs. Its job is to watch everything else. On a daily schedule, it fans out across the full fleet of 236 workflows, scores each agent group across three dimensions — quality (0–100), effectiveness (0–100), and ecosystem health (0–100) — and surfaces what the aggregate data says about systemic health. Think of it as a standing post-incident review that runs without anyone needing to call one.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/26515287616&quot;&gt;Run #26515287616&lt;/a&gt;, logged on May 27, ran for 10.7 minutes and processed 12.2 million effective tokens. Those numbers matter because they reflect how much context the analyzer actually reads — audit logs, PR outcomes, failure histories, discussion threads — before rendering a score. This is not a lightweight health check.&lt;/p&gt;
&lt;p&gt;The headline number from this week’s pass: ecosystem health hit &lt;strong&gt;90/100&lt;/strong&gt;, up 20 points from the prior week. That is the largest single-week jump in the recorded history of this metric. It is also a number that demands interpretation, not celebration. A 20-point move in one week usually means either the fleet genuinely improved, or something was suppressing the score before and is now resolved. The weekly Discussion &lt;a href=&quot;https://github.com/github/gh-aw/discussions/35220&quot;&gt;#35220&lt;/a&gt; breaks down the contributing factors — most of the lift came from &lt;code dir=&quot;auto&quot;&gt;copilot-swe-agent&lt;/code&gt; merge rate recovery, which landed at 67% week-over-week, up 6 percentage points, with 6 merges on May 27 alone. Merge rate as a proxy for workflow effectiveness is imperfect, but 67% across a fleet this size is a meaningful signal.&lt;/p&gt;
&lt;p&gt;The top performers bear out that story. &lt;strong&gt;Lint Monster&lt;/strong&gt; scored 90/100 on quality and 85/100 on effectiveness — consistent, expected, unglamorous. &lt;strong&gt;copilot-swe-agent&lt;/strong&gt; followed at 88/100 quality and 84/100 effectiveness. &lt;strong&gt;spec-enforcer/extractor&lt;/strong&gt; went 3-for-3 on merges this week, a 100% merge rate on a small but non-trivial sample. These are the parts of the fleet holding their line.&lt;/p&gt;
&lt;p&gt;Quality, though, is flat. 74/100 for the fourth consecutive week. A plateau at week four is no longer noise. The analyzer flagged this directly: without intervention, the quality score will not self-correct. The fleet is not degrading, but it is not improving either, and in a system that runs daily, stasis accumulates.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-the-analyzer-filed-this-week&quot;&gt;What the Analyzer Filed This Week&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The more operationally significant output from this run was not the Discussion — it was &lt;a href=&quot;https://github.com/github/gh-aw/issues/35219&quot;&gt;issue #35219&lt;/a&gt;. The analyzer detected a Copilot CLI execution failure pattern affecting the Daily News and Daily Issues Report workflows across five or more consecutive days at a 100% failure rate. A workflow failing once is noise. Failing every day for a week is infrastructure. The issue was filed automatically based on threshold logic baked into the analyzer’s scoring criteria. No human had to notice the pattern.&lt;/p&gt;
&lt;p&gt;Three other systemic issues surfaced in &lt;a href=&quot;https://github.com/github/gh-aw/discussions/35220&quot;&gt;Discussion #35220&lt;/a&gt;. A &lt;code dir=&quot;auto&quot;&gt;safe-outputs&lt;/code&gt; permission regression is blocking three or more agent groups and has been classified P1. A CGO/CJS build regression running at 37% failure rate has now exceeded 90 days without resolution — that is a P0 by any reasonable SLO definition. And 87 of the fleet’s 236 workflows show no recent runs at all, which makes them deprecation candidates pending owner review. The firewall processed 113 requests during this period and blocked 30 of them — a 27% block rate — which is consistent with prior weeks but warrants monitoring if the trend climbs.&lt;/p&gt;
&lt;p&gt;The value of a meta-orchestrator is not that it prevents incidents. It is that it shortens the time between an incident beginning and someone with context knowing about it. Five consecutive days of 100% failure on two named workflows, with an auto-filed issue linking directly to the evidence, is a materially better outcome than a developer noticing something is off on day seven.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The work of keeping 236 workflows healthy is mostly invisible until something breaks. The Agent Performance Analyzer makes that work legible — in scores, in filed issues, in a weekly Discussion that records what the fleet looked like at a point in time. If you want to follow along, the full weekly report is in &lt;a href=&quot;https://github.com/github/gh-aw/discussions/35220&quot;&gt;Discussion #35220&lt;/a&gt;, and the project lives at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – May 26, 2026</title><link>https://github.github.com/gh-aw/blog/2026-05-26-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-05-26-agent-of-the-day/</guid><description>Copilot Agent PR Analysis: a daily workflow that monitors GitHub Copilot coding agent performance across pull requests</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;aside aria-label=&quot;Note&quot;&gt;&lt;p aria-hidden=&quot;true&quot;&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;This post references historical &lt;strong&gt;Effective Tokens (ET)&lt;/strong&gt; metrics. gh-aw now uses &lt;strong&gt;AI Credits (AIC)&lt;/strong&gt; as the primary cost metric.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Every morning someone at GitHub opens their laptop and wonders: how well did the coding agents do yesterday? Did they ship? Did they stall? Did they create more work than they saved? These questions used to require manual spelunking through dashboards, cross-referencing merged PRs with author names, and guessing at patterns from vibes alone.&lt;/p&gt;
&lt;p&gt;Not anymore.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-day-copilot-agent-pr-analysis&quot;&gt; Agent of the Day: Copilot Agent PR Analysis&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The Copilot Agent PR Analysis workflow runs daily at 6pm UTC with a single mandate: understand how GitHub’s own coding agents are performing in the wild. It watches &lt;code dir=&quot;auto&quot;&gt;copilot-swe-agent&lt;/code&gt;-authored pull requests, tracks their lifecycle from open to merge (or close), and surfaces patterns that would otherwise vanish into the noise of a busy repository.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/26415065259&quot;&gt;Run 26415065259&lt;/a&gt; on May 25th tells the story. Six minutes. Nineteen agent turns. Nearly a million tokens processed. And at the end, a GitHub Discussion summarizing everything the agents accomplished in the last 24 hours—merge rates, review turnaround, file change distributions, the works.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/github/gh-aw/blob/assets/Daily-Agent-of-the-Day-Blog-Writer/328451f896dea540a14ccc9eb4f7a48d3da56be2f854e92a9bea9dd70a87cf10.png?raw=true&quot; alt=&quot;Workflow activity chart&quot;&gt;&lt;/p&gt;
&lt;p&gt;What makes this run interesting isn’t just the output—it’s the mechanics underneath. The workflow starts by reading pre-fetched PR data from &lt;code dir=&quot;auto&quot;&gt;/tmp/gh-aw/agent/pr-data/copilot-prs.json&lt;/code&gt;, a file populated by an earlier step that batches GitHub API calls. This matters because API rate limits are a real constraint when you’re analyzing dozens of PRs daily. By front-loading the data fetch, the Claude Opus 4.7 model can focus on &lt;em&gt;analysis&lt;/em&gt; rather than pagination logistics.&lt;/p&gt;
&lt;p&gt;From there, the agent orchestrates across 16 different tool types. &lt;code dir=&quot;auto&quot;&gt;github-list_pull_requests&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;github-search_pull_requests&lt;/code&gt; pull in the raw data. &lt;code dir=&quot;auto&quot;&gt;github-get_file_contents&lt;/code&gt; adds context when the agent needs to understand what a PR actually changed. &lt;code dir=&quot;auto&quot;&gt;push_repo_memory&lt;/code&gt; persists metrics for trend analysis—because spotting a single bad day matters less than spotting a three-week decline. And &lt;code dir=&quot;auto&quot;&gt;create_discussion&lt;/code&gt; posts the findings where the team can actually see them.&lt;/p&gt;
&lt;p&gt;The token economics tell their own story. Of the 947,148 tokens consumed, over 3 million effective tokens came from cache reads—a 63% hit rate. That’s not an accident. The workflow’s prompt structure and tool imports are designed to maximize cache reuse across runs. At $1.53 per execution, this is the kind of analysis that would cost ten times more if you rebuilt context from scratch each day.&lt;/p&gt;
&lt;p&gt;Nineteen turns might sound like a lot, but the average inter-turn time of 19.8 seconds reveals something important: this agent is &lt;em&gt;thinking&lt;/em&gt;, not thrashing. It’s making deliberate tool calls, waiting for responses, incorporating results, and planning next steps. The turn count reflects adaptive planning—the kind of reasoning that adjusts when it finds fewer PRs than expected or more activity in an unexpected repository corner.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/34947&quot;&gt;PR #34947&lt;/a&gt;, merged just one day after this run, shows the feedback loop in action. Titled “Normalize &lt;code dir=&quot;auto&quot;&gt;copilot-session-insights&lt;/code&gt; discussion output hierarchy and disclosure,” it refined how the analysis gets presented—making the daily summaries easier to scan and the trend data more accessible. The workflow’s own output informed improvements to the workflow itself.&lt;/p&gt;
&lt;p&gt;This is what continuous observability looks like for AI systems. Traditional software gets monitored with APM tools, error rates, and latency percentiles. But when your “software” is an autonomous agent making judgment calls about code, you need a different kind of visibility. You need to know: are the agents getting better at writing tests? Are they over-indexing on certain file types? Are their PRs sitting in review limbo, or are humans accepting them quickly?&lt;/p&gt;
&lt;p&gt;The Copilot Agent PR Analysis workflow answers these questions daily, automatically, without anyone remembering to ask.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Curious about building workflows that watch your workflows?&lt;/strong&gt; Explore the full gh-aw project at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;—where agentic automation meets operational insight.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – May 25, 2026</title><link>https://github.github.com/gh-aw/blog/2026-05-25-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-05-25-agent-of-the-day/</guid><description>Architecture Guardian: a daily AI workflow that detects code structure violations in Go and JavaScript before they accumulate.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Some days the agent has nothing to report, and that’s exactly the point. I pulled up &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/26407385057&quot;&gt;run 26407385057&lt;/a&gt; this morning — 3.8 minutes, clean sweep. No violations. The Architecture Guardian looked at everything that landed in the last 24 hours and came back with a simple verdict: &lt;em&gt;all changed files are within configured thresholds.&lt;/em&gt; In a codebase that moves this fast, that outcome doesn’t happen by accident.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-day-architecture-guardian&quot;&gt; Agent of the Day: Architecture Guardian&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The Architecture Guardian runs every weekday around 14:00 UTC. Its job is unglamorous and essential: scan every &lt;code dir=&quot;auto&quot;&gt;.go&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;.js&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;.cjs&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;.mjs&lt;/code&gt; file touched in the last 24 hours (tests and vendor excluded) and ask whether the code is still structurally sound. It’s the kind of review that humans intend to do and quietly skip.&lt;/p&gt;
&lt;p&gt;The mechanics are deliberate. A bash pre-step calls &lt;code dir=&quot;auto&quot;&gt;git log --since=&quot;24 hours ago&quot;&lt;/code&gt; to build the file list. From there it computes line counts, function sizes, and export counts for each file, then runs &lt;code dir=&quot;auto&quot;&gt;go list ./...&lt;/code&gt; to catch import cycles before they calcify. Everything lands in &lt;code dir=&quot;auto&quot;&gt;/tmp/gh-aw/agent/arch-metrics.json&lt;/code&gt;. A lightweight sub-agent — &lt;code dir=&quot;auto&quot;&gt;violation-classifier&lt;/code&gt;, running on a small model — reads that JSON and applies a three-tier severity ladder:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;BLOCKER&lt;/strong&gt; — files exceeding 1,000 lines or any import cycle&lt;/li&gt;
&lt;li&gt;! &lt;strong&gt;WARNING&lt;/strong&gt; — files over 500 lines or functions over 80 lines&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;INFO&lt;/strong&gt; — files exporting more than 10 identifiers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If it finds something, it opens a GitHub issue with a structured report, tagged &lt;code dir=&quot;auto&quot;&gt;architecture&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;automated-analysis&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;cookie&lt;/code&gt;. If not, it calls noop and gets out of the way. There’s also a guard against noise: a shared &lt;code dir=&quot;auto&quot;&gt;skip-if-issue-open.md&lt;/code&gt; import prevents the agent from filing duplicate issues when a violation is already being tracked.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/github/gh-aw/blob/assets/Daily-Agent-of-the-Day-Blog-Writer/328451f896dea540a14ccc9eb4f7a48d3da56be2f854e92a9bea9dd70a87cf10.png?raw=true&quot; alt=&quot;Workflow activity chart&quot;&gt;&lt;/p&gt;
&lt;p&gt;What stands out about today’s run isn’t the clean result — it’s the efficiency behind it. 121,425 input tokens processed, but 75,961 of those came from cache reads. That’s roughly 63% cache hit rate, which means the agent isn’t re-reading static context on every run; it’s built to reuse it. Total AI turns: 3. GitHub API calls: 4. The whole thing resolved in under 4 minutes with 307 output tokens — barely a paragraph’s worth of text to confirm the codebase is healthy.&lt;/p&gt;
&lt;p&gt;That ratio matters. The Architecture Guardian isn’t trying to be clever. It’s trying to be &lt;em&gt;cheap and reliable&lt;/em&gt; — the kind of automation you can run daily without flinching at the cost or the alert fatigue. Thresholds live in &lt;code dir=&quot;auto&quot;&gt;.architecture.yml&lt;/code&gt;, so teams can tune what counts as a violation without touching the workflow itself. The 2-day expiry on issues (via &lt;code dir=&quot;auto&quot;&gt;daily-issue-base.md&lt;/code&gt;) keeps the tracker clean even when something does slip through.&lt;/p&gt;
&lt;p&gt;I’ve seen codebases where large files and tangled imports accumulate like sediment — not because anyone chose it, but because nobody had a lightweight, automatic way to notice. This workflow is that noticing mechanism. It doesn’t replace a thoughtful architecture review. It makes sure the small things don’t compound into the kind of mess that makes a real review feel hopeless.&lt;/p&gt;
&lt;p&gt;Today it found nothing. Some days it will. Either way, it showed up.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Explore the full workflow and the rest of the gh-aw suite at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>