<?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-08.xml"/><item><title>Agent of the Day – September 10, 2026</title><link>https://github.github.com/gh-aw/blog/2026-09-10-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-09-10-agent-of-the-day/</guid><description>Meet the gh-aw agent that grades its own package docs daily and files scored gap reports automatically.</description><pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Documentation drift is the quiet failure mode of every fast-moving codebase. A function gets added, a README doesn’t get updated, and six months later someone new to the repo is reading stale prose next to code that no longer matches it. Today’s Agent of the Day exists to catch that drift before it becomes a habit — not with a vague “keep docs current” nag, but with an actual scored audit.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day-package-specification-librarian-&quot;&gt;Agent of the Day: Package Specification Librarian &lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The &lt;strong&gt;Package Specification Librarian&lt;/strong&gt; runs every day against &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; itself, reading every &lt;code dir=&quot;auto&quot;&gt;README.md&lt;/code&gt; under &lt;code dir=&quot;auto&quot;&gt;pkg/&lt;/code&gt; and comparing it against the real exported symbols in the corresponding Go source. It’s not looking for typos or style nits — it’s checking whether the documentation still tells the truth about the code.&lt;/p&gt;
&lt;p&gt;Its most recent run, &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/34481937715&quot;&gt;#34481937715&lt;/a&gt; on September 10, took 16.6 minutes and completed cleanly with no errors, then opened &lt;a href=&quot;https://github.com/github/gh-aw/issues/59985&quot;&gt;issue #59985&lt;/a&gt;: “Specification Audit — 2026-09-10 — 5 issues found.” The report is refreshingly precise about scope. Out of 37 packages, 36 have specs — a 97% coverage rate — and the one true gap, &lt;code dir=&quot;auto&quot;&gt;pkg/workflowcontract&lt;/code&gt;, isn’t even a missing-doc problem so much as a package that exists purely to hold a contract-test guard and never got a README explaining why.&lt;/p&gt;
&lt;p&gt;The rest of the findings show real discipline in separating signal from noise. The agent flagged &lt;code dir=&quot;auto&quot;&gt;pkg/cli&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;pkg/workflow&lt;/code&gt; for a dozen undocumented exported functions each — including cobra command constructors like &lt;code dir=&quot;auto&quot;&gt;NewEditCommand&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;NewGradersCommand&lt;/code&gt; that back user-facing &lt;code dir=&quot;auto&quot;&gt;gh aw&lt;/code&gt; subcommands but never made it into the README’s command table. It also caught two small real gaps: &lt;code dir=&quot;auto&quot;&gt;ResolveGHESActionPin&lt;/code&gt; missing from &lt;code dir=&quot;auto&quot;&gt;pkg/actionpins&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;IsNotFoundOutput&lt;/code&gt; missing from &lt;code dir=&quot;auto&quot;&gt;pkg/errorutil&lt;/code&gt;. Then, notably, it double-checked five other flagged packages (&lt;code dir=&quot;auto&quot;&gt;setutil&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;styles&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;types&lt;/code&gt;, among others) and correctly ruled them false positives — generic type-parameter tokens like &lt;code dir=&quot;auto&quot;&gt;comparable]&lt;/code&gt; tripping up the naive scan, or methods already documented under a different heading. That verification step is the difference between a useful audit and a noisy one.&lt;/p&gt;
&lt;p&gt;Each finding comes with a quality score across four dimensions — completeness, accuracy, consistency, freshness — so maintainers get a number to track, not just a wall of text. The issue closes with a concrete action-item checklist and a note to include &lt;code dir=&quot;auto&quot;&gt;Closes #59985&lt;/code&gt; in any fix PR, linking the paper trail all the way through. Looking back at prior runs — &lt;a href=&quot;https://github.com/github/gh-aw/issues/58993&quot;&gt;#58993&lt;/a&gt; on September 6 found 3 issues, &lt;a href=&quot;https://github.com/github/gh-aw/issues/57954&quot;&gt;#57954&lt;/a&gt; on September 2 found 6 — the pattern holds: five consecutive successful runs, zero errors, and a steadily shrinking backlog of undocumented symbols as the fixes land.&lt;/p&gt;
&lt;p&gt;It’s a small, unglamorous job done consistently — which is exactly what documentation maintenance needs to actually work.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it-yourself&quot;&gt;Try It Yourself&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Curious how a daily audit agent like this fits into your own repository? Explore the &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;gh-aw project on GitHub&lt;/a&gt; and see how agentic workflows can keep your codebase honest, one scheduled run at a time.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – September 9, 2026</title><link>https://github.github.com/gh-aw/blog/2026-09-09-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-09-09-agent-of-the-day/</guid><description>PureLock hunts down untested pure Go functions and fans out parallel sub-agents to lock in coverage, one small draft PR at a time.</description><pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Coverage reports are easy to generate and easy to ignore. Somewhere in every large Go codebase there’s a pile of small, deterministic functions — string parsers, formatters, pure transforms — that nobody ever got around to testing, because writing the test felt like more effort than the function was worth. Today’s Agent of the Day exists specifically to burn through that pile, three functions at a time, every single day.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day-purelock-&quot;&gt;Agent of the Day: PureLock &lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;PureLock&lt;/strong&gt; runs on a daily schedule against &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; itself, and its design is unusually disciplined about not wasting effort. A precompute job does all the expensive, deterministic legwork up front: it merges coverage profiles, type-checks &lt;code dir=&quot;auto&quot;&gt;./pkg/...&lt;/code&gt; with &lt;code dir=&quot;auto&quot;&gt;go/packages&lt;/code&gt;, runs a fixed-point side-effect analysis to confirm a function has &lt;em&gt;no&lt;/em&gt; observable side effects, and ranks the resulting pure-function candidates by how weak their coverage is. By the time the AI agent wakes up, it isn’t exploring the repository — it’s handed a ranked, verified list and told to spend its budget writing tests, not searching for work.&lt;/p&gt;
&lt;p&gt;The orchestrator then picks up to three candidates that haven’t been touched in the last 60 days (tracked via a &lt;code dir=&quot;auto&quot;&gt;cache-memory&lt;/code&gt; state file), and fans out to parallel &lt;code dir=&quot;auto&quot;&gt;test-writer&lt;/code&gt; sub-agents — one per function, all launched simultaneously rather than sequentially. Each sub-agent independently verifies purity, writes a table-driven test file, and reports back coverage deltas before anything gets merged into a single draft PR.&lt;/p&gt;
&lt;p&gt;The evidence from real runs backs this up. In &lt;a href=&quot;https://github.com/github/gh-aw/pull/56895&quot;&gt;PR #56895&lt;/a&gt;, merged on August 29, PureLock locked down three functions in one pass: &lt;code dir=&quot;auto&quot;&gt;selectHistoricalOperationalValueGrader&lt;/code&gt; went from 0% to 100% function coverage with a 10-subtest table, &lt;code dir=&quot;auto&quot;&gt;extractHostFromRemoteURL&lt;/code&gt; climbed from 64% to 96% by adding four new cases for URL-parsing fallback branches, and &lt;code dir=&quot;auto&quot;&gt;extractOTLPAttributesFromObsMap&lt;/code&gt; hit 100% with nine subtests covering nil maps, type mismatches, and silent-drop behavior for non-string values. Every claim is backed by a &lt;code dir=&quot;auto&quot;&gt;gofmt&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;go vet&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;go test -race&lt;/code&gt; pass recorded directly in the PR body — no unverified assertions, no rubber-stamped merges.&lt;/p&gt;
&lt;p&gt;Recent scheduled runs (&lt;code dir=&quot;auto&quot;&gt;agenticworkflows logs&lt;/code&gt;, last five for &lt;code dir=&quot;auto&quot;&gt;purelock&lt;/code&gt;) show the pattern holding steady: three consecutive successes on September 6–8, each completing in roughly 13–14 minutes and consuming around 25–26K peak input tokens per run, well within its &lt;code dir=&quot;auto&quot;&gt;max-daily-ai-credits&lt;/code&gt; budget. Earlier PRs — like &lt;a href=&quot;https://github.com/github/gh-aw/pull/54539&quot;&gt;#54539&lt;/a&gt; locking down two discussion-trigger and git-ref helpers, and &lt;a href=&quot;https://github.com/github/gh-aw/pull/54235&quot;&gt;#54235&lt;/a&gt; covering three parsing/cache-naming functions — show the same steady rhythm going back to the workflow’s original bootstrap in &lt;a href=&quot;https://github.com/github/gh-aw/pull/51107&quot;&gt;#51107&lt;/a&gt;. A dedicated fix, &lt;a href=&quot;https://github.com/github/gh-aw/pull/57948&quot;&gt;PR #57948&lt;/a&gt;, even shipped to resolve a Go cache-restore collision the workflow had triggered against itself — proof the project treats PureLock’s infrastructure with the same rigor as any other production agent.&lt;/p&gt;
&lt;p&gt;What makes PureLock a good Agent of the Day pick isn’t just that it writes tests — it’s &lt;em&gt;how conservatively&lt;/em&gt; it does it. Every result gets re-validated (&lt;code dir=&quot;auto&quot;&gt;gofmt&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;go vet&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;go test -race&lt;/code&gt;) before it’s allowed anywhere near a PR, failed candidates get logged as &lt;code dir=&quot;auto&quot;&gt;noop&lt;/code&gt; and skipped rather than forced, and every run — success or failure — updates a durable cache so the same function is never redundantly re-analyzed. It’s a small, patient agent doing unglamorous work, and the coverage numbers in &lt;code dir=&quot;auto&quot;&gt;pkg/cli&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;pkg/parser&lt;/code&gt; are quietly better for it.&lt;/p&gt;
&lt;p&gt;Want to see how PureLock (or any other agentic workflow) is built? Explore the project and start your own agent at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github.com/github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – September 8, 2026</title><link>https://github.github.com/gh-aw/blog/2026-09-08-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-09-08-agent-of-the-day/</guid><description>Meet CLI Version Checker, the agent that quietly keeps gh-aw&apos;s toolchain current.</description><pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Every toolchain rots a little every day. Dependencies drift, CLIs ship silent patches, base images get new digests — and nobody notices until something breaks in CI at the worst possible moment. Today’s Agent of the Day exists specifically to make sure that never happens quietly: the &lt;strong&gt;CLI Version Checker&lt;/strong&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day-cli-version-checker&quot;&gt;Agent of the Day: CLI Version Checker&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;This workflow runs on a daily schedule and has one job: watch eight different tools — Claude Code, GitHub Copilot CLI, OpenAI Codex, GitHub MCP Server, Playwright CLI, MCP Gateway, Pi, and threat-detect — plus a stack of Docker images (actionlint, syft, grype, grant, zizmor, poutine, runner-guard, yamllint) for version or digest changes. When it finds one, it opens a pull request. When it doesn’t, it says nothing and exits — no busywork issues, no noise.&lt;/p&gt;
&lt;p&gt;Looking at the last five scheduled runs, the pattern is exactly what you’d want from an agent like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/34190826308&quot;&gt;Run #552&lt;/a&gt; (Sep 8) — completed in 7.6 minutes, checked every tracked package via &lt;code dir=&quot;auto&quot;&gt;npm view&lt;/code&gt; and the GitHub Releases API, found nothing new to update, and exited cleanly.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/34087039920&quot;&gt;Run from Sep 7&lt;/a&gt; and &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/34013998383&quot;&gt;Sep 6&lt;/a&gt; — same story: full version sweep, no drift detected, quiet success.&lt;/li&gt;
&lt;li&gt;Two earlier runs on Sep 4–5 failed outright, a useful reminder that even a narrowly-scoped, read-mostly agent needs monitoring too.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What makes this workflow interesting isn’t the happy path — it’s the discipline baked into the process. The agent is instructed to check a local cache before doing any network calls, to prefer &lt;code dir=&quot;auto&quot;&gt;npm view&lt;/code&gt; over web-fetch for package metadata (cheaper and faster), and to fetch every tool’s version in parallel rather than serially grinding through eight lookups one at a time. When it does detect a real change, it doesn’t just bump a constant — it pulls GitHub release notes, converts every &lt;code dir=&quot;auto&quot;&gt;#1234&lt;/code&gt; PR reference into a full external URL, categorizes changes as Breaking/Features/Fixes/Security/Performance, and only then runs &lt;code dir=&quot;auto&quot;&gt;make recompile&lt;/code&gt; before opening the PR.&lt;/p&gt;
&lt;p&gt;The audit trail also surfaced something small but real: every recent run hit a firewalled domain, &lt;code dir=&quot;auto&quot;&gt;ab.chatgpt.com:443&lt;/code&gt;, and got blocked — 1 request out of roughly 50 per run. Harmless in this case (the agent’s actual work sails through on &lt;code dir=&quot;auto&quot;&gt;api.openai.com&lt;/code&gt;), but it’s exactly the kind of “friction” signal that &lt;code dir=&quot;auto&quot;&gt;gh aw&lt;/code&gt;’s built-in auditing is designed to surface so maintainers can decide whether to allow-list it or leave the firewall as-is.&lt;/p&gt;
&lt;p&gt;There’s a quieter lesson here too: not every agent needs to be flashy to be valuable. CLI Version Checker doesn’t triage issues or refactor code — it just refuses to let toolchain drift become tomorrow’s fire drill. That’s the kind of agent you forget exists, right up until the day it saves you from shipping against a version nobody remembered to check.&lt;/p&gt;
&lt;p&gt;Curious how a workflow like this is put together, or want to build your own quietly-vigilant agent? Check out &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 – September 7, 2026</title><link>https://github.github.com/gh-aw/blog/2026-09-07-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-09-07-agent-of-the-day/</guid><description>Dead Code Removal Agent runs the deadcode static analyzer daily, then quietly deletes what it finds and everything that only existed to test it.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Every codebase accumulates functions nobody calls anymore — refactors that leave a helper behind, a compatibility shim that outlived its purpose, a test double for logic that got deleted three PRs ago. Most teams let it pile up until someone dedicates a “cleanup sprint” to it. gh-aw just runs an agent every day instead.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day-dead-code-removal-agent-&quot;&gt;Agent of the Day: Dead Code Removal Agent &lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Today’s spotlight goes to &lt;strong&gt;Dead Code Removal Agent&lt;/strong&gt;, a scheduled workflow that runs Go’s &lt;code dir=&quot;auto&quot;&gt;deadcode&lt;/code&gt; static analyzer against &lt;code dir=&quot;auto&quot;&gt;./cmd/...&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;./internal/tools/...&lt;/code&gt;, then opens a pull request removing whatever it finds unreachable — along with any tests that existed solely to exercise that dead code.&lt;/p&gt;
&lt;p&gt;Its recent run history tells an honest story, not a highlight reel. Looking at the last five scheduled runs via &lt;code dir=&quot;auto&quot;&gt;agenticworkflows logs&lt;/code&gt;, three failed with agent-logic errors and two succeeded cleanly. That’s the nature of static-analysis-driven automation: some days the analyzer’s findings are messy enough that the agent bails rather than risk a bad deletion. The two clean runs, though, show exactly what this workflow is built for.&lt;/p&gt;
&lt;p&gt;The most recent success, &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/34038688676&quot;&gt;run #204&lt;/a&gt; on September 6, took 19 minutes and 19,398 tokens to produce &lt;a href=&quot;https://github.com/github/gh-aw/pull/58996&quot;&gt;PR #58996&lt;/a&gt;: “&lt;code dir=&quot;auto&quot;&gt;[dead-code] chore: remove dead functions — 5 functions removed&lt;/code&gt;.” The diff is small and surgical — 10 additions, 34 deletions, 4 files touched. It removed four unreachable functions from &lt;code dir=&quot;auto&quot;&gt;pkg/cli/add_workflow_compilation.go&lt;/code&gt; (&lt;code dir=&quot;auto&quot;&gt;compileWorkflowWithRefresh&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;compileWorkflowWithTracking&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;compileDispatchWorkflowDependencies&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;compileCallWorkflowDependencies&lt;/code&gt;) plus &lt;code dir=&quot;auto&quot;&gt;RunShellcheckOnLockFiles&lt;/code&gt; from &lt;code dir=&quot;auto&quot;&gt;pkg/cli/compile_external_tools.go&lt;/code&gt;. Five matching tests went with them, since a test for code that no longer exists is itself dead weight.&lt;/p&gt;
&lt;p&gt;The PR body reads like a self-contained audit trail: it lists the exact functions and files removed, the tests removed, and a verification checklist (&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; all checked; &lt;code dir=&quot;auto&quot;&gt;make fmt&lt;/code&gt; flagged one pre-existing, unrelated &lt;code dir=&quot;auto&quot;&gt;fmt-json&lt;/code&gt; failure rather than papering over it). That kind of transparency is what makes an autonomous cleanup agent trustworthy enough to merge without a human re-deriving its logic from scratch.&lt;/p&gt;
&lt;p&gt;What’s especially fun is watching gh-aw’s agents cross paths. The same PR got a follow-up pass from &lt;strong&gt;PR Sous Chef&lt;/strong&gt;, another daily workflow that nudges stale pull requests — its comment on #58996 is baked right into the PR history, a small reminder that these agents aren’t operating in isolation; they’re part of an ecosystem that reviews, nudges, and merges each other’s work. &lt;a href=&quot;https://github.com/github/gh-aw/pull/58996&quot;&gt;Maintainer @pelikhan merged the PR&lt;/a&gt; a couple hours after it opened.&lt;/p&gt;
&lt;p&gt;Zoom out across the workflow’s history and the pattern holds: &lt;a href=&quot;https://github.com/github/gh-aw/pull/58822&quot;&gt;PR #58822&lt;/a&gt;, &lt;a href=&quot;https://github.com/github/gh-aw/pull/55418&quot;&gt;#55418&lt;/a&gt;, and &lt;a href=&quot;https://github.com/github/gh-aw/pull/54835&quot;&gt;#54835&lt;/a&gt; are all the same shape — five, five, and one functions removed respectively, each with its matching tests, each merged. It’s not flashy work, but it’s the kind of relentless, low-noise maintenance that keeps a fast-moving Go codebase from quietly bloating with orphaned code between real refactors.&lt;/p&gt;
&lt;p&gt;Not every run is a success, and that’s fine. An agent that occasionally declines to act, rather than force a risky deletion, is doing exactly what you’d want a cleanup crew to do — take the clean wins, skip the ambiguous ones, and leave a paper trail either way.&lt;/p&gt;
&lt;p&gt;Want to see how a daily static-analysis agent turns &lt;code dir=&quot;auto&quot;&gt;deadcode&lt;/code&gt; output into a real pull request? Explore the workflow definitions and start building your own at &lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github.com/github/gh-aw&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;</content:encoded></item><item><title>Weekly Update – September 7, 2026</title><link>https://github.github.com/gh-aw/blog/2026-09-07-weekly-update/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-09-07-weekly-update/</guid><description>v0.88.4 hardens the agentic firewall and CI reliability, plus new trusted enclave and DIFC policy support.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Another busy week for &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;! The team shipped a new release focused on hardening the agentic firewall and CI reliability, while dozens of pull requests tightened up sandboxing, model configuration, and safe-output handling across the fleet of agentic workflows.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;release-v0884&quot;&gt;Release: v0.88.4&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.88.4&quot;&gt;v0.88.4&lt;/a&gt; landed this week, focused on hardening the agentic firewall/network layer, improving CI reliability, and expanding project tooling 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;Trusted enclave sensitivity support&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/58328&quot;&gt;#58328&lt;/a&gt;): adds finer-grained sensitivity controls for trusted enclave workflows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DIFC policy generation for GitHub App workflows&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/58302&quot;&gt;#58302&lt;/a&gt;): automatically generates data-flow integrity/confidentiality policies for workflows authenticated via a GitHub App.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;aw.json&lt;/code&gt; project support in the &lt;code dir=&quot;auto&quot;&gt;add&lt;/code&gt; command&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/58267&quot;&gt;#58267&lt;/a&gt;): makes it easier to add workflows into existing &lt;code dir=&quot;auto&quot;&gt;aw.json&lt;/code&gt;-based projects.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Daily Linear and Jira smoke issues workflow&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/58320&quot;&gt;#58320&lt;/a&gt;): adds scheduled smoke-testing coverage for Linear and Jira integrations.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h3 id=&quot;bug-fixes--improvements&quot;&gt;Bug Fixes &amp;#x26; Improvements&lt;/h3&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Fixed root-relative workflow paths in imported local manifests (&lt;a href=&quot;https://github.com/github/gh-aw/pull/58317&quot;&gt;#58317&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Fixed Pi Anthropic routing through the firewall (&lt;a href=&quot;https://github.com/github/gh-aw/pull/58313&quot;&gt;#58313&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Disabled OTLP export when authorization secrets are empty, avoiding noisy failed exports (&lt;a href=&quot;https://github.com/github/gh-aw/pull/58312&quot;&gt;#58312&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Preserved &lt;code dir=&quot;auto&quot;&gt;setup-ruby&lt;/code&gt; PATH precedence inside the Agentic Workflow Firewall (&lt;a href=&quot;https://github.com/github/gh-aw/pull/58311&quot;&gt;#58311&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 release, the past week’s merge queue was dominated by fleet-wide reliability work:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/58726&quot;&gt;Migrate agentic workflows to Cloud Hypervisor&lt;/a&gt;&lt;/strong&gt;: a major infrastructure shift moving the workflow fleet onto Cloud Hypervisor-based microVMs for better isolation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/59046&quot;&gt;Wire dynamic enclave delegation controller into the workflow runtime&lt;/a&gt;&lt;/strong&gt;: lays groundwork for more flexible trusted-enclave delegation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/58880&quot;&gt;Add compiler support for dynamic repository enclave policies&lt;/a&gt;&lt;/strong&gt;: lets repository-level policies drive enclave behavior dynamically.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/58767&quot;&gt;Reclassify policy-driven safe-output declines as skipped, not hard failures&lt;/a&gt;&lt;/strong&gt;: makes workflow runs easier to triage when a safe output is intentionally blocked by policy rather than broken.&lt;/li&gt;
&lt;li&gt;Several workflows got model-configuration fixes to stay on Codex-compatible models, including the &lt;a href=&quot;https://github.com/github/gh-aw/pull/58826&quot;&gt;Daily Go Test Parallelizer&lt;/a&gt;, &lt;a href=&quot;https://github.com/github/gh-aw/pull/58860&quot;&gt;Auto-Triage Issues&lt;/a&gt;, and &lt;a href=&quot;https://github.com/github/gh-aw/pull/58864&quot;&gt;Linter Miner&lt;/a&gt; — a good reminder to keep an eye on model deprecations across your own workflow fleet.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-week-dead-code-remover&quot;&gt; Agent of the Week: dead-code-remover&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The tidiest member of the team — it scans the Go codebase for unreachable functions using static analysis and opens a PR to remove a small batch every day.&lt;/p&gt;
&lt;p&gt;This week &lt;code dir=&quot;auto&quot;&gt;dead-code-remover&lt;/code&gt; ran three times and kept up its steady rhythm: two clean runs each produced a PR titled “[dead-code] chore: remove dead functions — 5 functions removed” (&lt;a href=&quot;https://github.com/github/gh-aw/pull/58996&quot;&gt;#58996&lt;/a&gt;, &lt;a href=&quot;https://github.com/github/gh-aw/pull/58822&quot;&gt;#58822&lt;/a&gt;), quietly trimming five functions each time, while one run hit a snag and came back empty-handed rather than force through a bad batch.&lt;/p&gt;
&lt;p&gt;It never removes more than five functions per run — a self-imposed diet that keeps every PR small enough for a human to review in a coffee break, and disciplined enough that nobody’s ever caught it trying to sneak in a sixth.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Usage tip&lt;/strong&gt;: Cap batch size like this for any “cleanup” agent — small, reviewable PRs land far more often than one giant sweep.&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.88.4&quot;&gt;v0.88.4&lt;/a&gt; and check out the new trusted enclave and DIFC policy features. 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>MicroVM Support Is Consolidating on Cloud Hypervisor</title><link>https://github.github.com/gh-aw/blog/2026-09-05-cloud-hypervisor-consolidation/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-09-05-cloud-hypervisor-consolidation/</guid><description>gh-aw is consolidating its specialized sandbox runtimes on the Cloud Hypervisor microVM implementation.</description><pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;GitHub Agentic Workflows is consolidating its specialized sandbox runtime support on &lt;code dir=&quot;auto&quot;&gt;cloud-hypervisor&lt;/code&gt;. The &lt;code dir=&quot;auto&quot;&gt;gvisor&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;docker-sbx&lt;/code&gt; runtime options are deprecated and will be removed in a future release.&lt;/p&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;docker-sbx&lt;/code&gt; introduced a KVM-backed microVM boundary, while &lt;code dir=&quot;auto&quot;&gt;gvisor&lt;/code&gt; provided a user-space kernel between the agent container and host kernel. Maintaining both paths alongside Cloud Hypervisor created separate installation, compatibility, and troubleshooting surfaces. Consolidating on one microVM implementation makes the stronger isolation path more consistent and easier to evolve.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-changes&quot;&gt;What changes&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The default &lt;code dir=&quot;auto&quot;&gt;docker&lt;/code&gt; runtime remains available and continues to run AWF with network isolation and proxy enforcement. For workflows that require a hardware-virtualized boundary, &lt;code dir=&quot;auto&quot;&gt;cloud-hypervisor&lt;/code&gt; is now the supported direction:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;issues&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;runtime&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;cloud-hypervisor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Investigate this issue.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Cloud Hypervisor support is currently in preview and requires a GitHub-hosted Ubuntu x86_64 runner with &lt;code dir=&quot;auto&quot;&gt;/dev/kvm&lt;/code&gt;. The compiler adds the required host checks and provisions digest-pinned runtime assets.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;migrating-existing-workflows&quot;&gt;Migrating existing workflows&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Review workflows that explicitly set &lt;code dir=&quot;auto&quot;&gt;runtime: gvisor&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;runtime: docker-sbx&lt;/code&gt;. Select &lt;code dir=&quot;auto&quot;&gt;cloud-hypervisor&lt;/code&gt; when the workflow runs on an eligible GitHub-hosted runner and needs a microVM boundary. Otherwise, remove the runtime setting to use the default Docker profile.&lt;/p&gt;
&lt;p&gt;Compile each updated workflow and review the generated lock file:&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;compile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The deprecated values remain documented during the transition, but new workflows should use either the default Docker runtime or &lt;code dir=&quot;auto&quot;&gt;cloud-hypervisor&lt;/code&gt;. See &lt;a href=&quot;https://github.github.com/gh-aw/reference/agent-runtimes/&quot;&gt;Agent Runtime Selection&lt;/a&gt; for requirements and tradeoffs.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – September 3, 2026</title><link>https://github.github.com/gh-aw/blog/2026-09-03-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-09-03-agent-of-the-day/</guid><description>Issue Monster wakes every 40 minutes to hand triaged issues straight to the Copilot coding agent.</description><pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Some workflows in &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; wait for a slash command or a pull request event before they lift a finger. Today’s spotlight has no patience for that. Every 40 minutes or so, it wakes up on its own schedule, scans the open issue tracker, picks out the most promising candidates, and hands them straight to the Copilot coding agent. Its name is exactly as subtle as its appetite: &lt;strong&gt;Issue Monster&lt;/strong&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day-issue-monster&quot;&gt;Agent of the Day: Issue Monster&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Issue Monster is a scheduled &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; workflow (&lt;code dir=&quot;auto&quot;&gt;.github/workflows/issue-monster.md&lt;/code&gt;) whose entire job is triage-by-appetite. It has a pre-fetched view of the open issue queue, a short list of skills — &lt;code dir=&quot;auto&quot;&gt;issue-monster-report-formatting&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;issue-monster-token-budget&lt;/code&gt; — to keep its output tight and cheap, and exactly three safe-output moves per run: &lt;code dir=&quot;auto&quot;&gt;assign_to_agent&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;add_comment&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;noop&lt;/code&gt; if nothing qualifies.&lt;/p&gt;
&lt;p&gt;Watching a stretch of its actual runs from earlier today tells the story better than any spec could. Between &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/33740299445&quot;&gt;run #33740299445&lt;/a&gt; and &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/33766461931&quot;&gt;run #33766461931&lt;/a&gt; — ten consecutive runs spanning about four hours — Issue Monster completed successfully every single time, burning roughly 1 million tokens and 103 action-minutes total, with zero errors, zero warnings, and zero missing tools across the board.&lt;/p&gt;
&lt;p&gt;What makes the run interesting isn’t the token count, it’s the reasoning trail. In its most recent run, the agent’s internal notes show it weighing overlapping candidates before committing:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“I see some top candidates like #57408 (domains audit), #57728 (stale code-scanning alert), #57709 (CLI consistency)… I must ensure these issues are distinct and not overlapping… I’ll aim for the highest-scored independent issues.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It settled on three genuinely separate issues — a security-hardening fix, a documentation gap, and a refactor — and for each one called &lt;code dir=&quot;auto&quot;&gt;assign_to_agent&lt;/code&gt; followed immediately by a comment announcing the decision:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt; &lt;strong&gt;Issue Monster selected this for Copilot&lt;/strong&gt; — I’ve identified this issue as a good candidate for automated resolution and requested assignment to the Copilot coding agent. Om nom nom! &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The cookie-monster signature isn’t just flavor text; it’s a consistent, greppable marker across &lt;a href=&quot;https://github.com/github/gh-aw/issues/57408&quot;&gt;issue #57408&lt;/a&gt; (default domain allowlist hardening), &lt;a href=&quot;https://github.com/github/gh-aw/issues/57709&quot;&gt;issue #57709&lt;/a&gt; (CLI docs consistency), and &lt;a href=&quot;https://github.com/github/gh-aw/issues/58148&quot;&gt;issue #58148&lt;/a&gt; (workflow-skill extraction refactor) — three issues that, as of this run, are now sitting in the Copilot coding agent’s queue waiting for a PR.&lt;/p&gt;
&lt;p&gt;Earlier runs in the same window picked up other issues from the same rotating shortlist, including &lt;a href=&quot;https://github.com/github/gh-aw/issues/57142&quot;&gt;#57142&lt;/a&gt; (a Go package refactor) and &lt;a href=&quot;https://github.com/github/gh-aw/issues/58240&quot;&gt;#58240&lt;/a&gt; (a large parser file split), showing the agent isn’t just repeating the same three picks — it re-evaluates the queue and reprioritizes as issues get claimed or closed.&lt;/p&gt;
&lt;p&gt;The &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; audit tooling flagged one low-severity note worth mentioning: Issue Monster’s task profile (narrow tool breadth, read-mostly posture, moderate resource use) is a candidate for a cheaper model like &lt;code dir=&quot;auto&quot;&gt;gpt-4.1-mini&lt;/code&gt; instead of a frontier engine — a reminder that even a workflow running dozens of times a day has room to trim its own cost curve. That’s the kind of self-aware feedback loop &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt;’s observability tooling is built to surface automatically, run after run.&lt;/p&gt;
&lt;p&gt;No fanfare, no dashboard to babysit — just a small, disciplined loop that turns “here’s an open issue” into “here’s an assigned Copilot task” every 40 minutes, day and night.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Want to build something with the same rhythm? Explore the workflows, skills, and safe-output patterns behind Issue Monster at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github.com/github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – September 2, 2026</title><link>https://github.github.com/gh-aw/blog/2026-09-02-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-09-02-agent-of-the-day/</guid><description>Ponytail Reviewer hunts pull requests for over-engineering, flagging unnecessary complexity before it ships — three runs, one clean pass, and a mid-flight model swap.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day--september-2-2026-the-complexity-cop&quot;&gt;Agent of the Day – September 2, 2026: The Complexity Cop&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Most PR bots check style, tests, or security. Today’s spotlight, &lt;strong&gt;Ponytail Reviewer&lt;/strong&gt;, checks something harder to quantify: whether a change is &lt;em&gt;more complicated than it needs to be&lt;/em&gt;. It runs on every pull request marked ready for review in &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; (and on demand via a &lt;code dir=&quot;auto&quot;&gt;/ponytail&lt;/code&gt; slash command), applies the community-maintained &lt;a href=&quot;https://github.com/DietrichGebert/ponytail&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ponytail-review&lt;/code&gt; skill&lt;/a&gt;, and only speaks up when it finds real over-engineering — no noise, no rubber-stamping.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;what-the-logs-actually-show&quot;&gt;What the logs actually show&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Pulling the last three runs from &lt;code dir=&quot;auto&quot;&gt;agentic-workflows&lt;/code&gt; logs and audits paints a workflow that’s doing its job quietly and reliably:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/33596102316&quot;&gt;Run #33596102316&lt;/a&gt;&lt;/strong&gt; — a 7-minute pass over &lt;a href=&quot;https://github.com/github/gh-aw/pull/57860&quot;&gt;PR #57860&lt;/a&gt; (branch &lt;code dir=&quot;auto&quot;&gt;copilot/sergo-fix-linters-silent-delete&lt;/code&gt;), completed successfully with the Codex engine, burning 164K tokens across 8 model requests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/33637292011&quot;&gt;Run #33637292011&lt;/a&gt;&lt;/strong&gt; — another clean 7-minute review, this time against a &lt;code dir=&quot;auto&quot;&gt;copilot/task-9919-*&lt;/code&gt; branch, also completing without incident.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/33635177913&quot;&gt;Run #33635177913&lt;/a&gt;&lt;/strong&gt; — a quick 7-second run against a PR titled &lt;em&gt;“Fix daily-token-consumption-report: replace unsupported claude-sonnet-4.5 model”&lt;/em&gt;, which failed fast rather than burning minutes on a doomed invocation — exactly the kind of fail-cheap behavior you want from an automated reviewer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Across all three runs: zero errors, zero missing tools, and two safe-output items generated in total — meaning Ponytail Reviewer isn’t just running, it’s making judgment calls about when a comment is actually warranted versus when a PR is clean enough to leave alone.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;built-for-restraint-not-volume&quot;&gt;Built for restraint, not volume&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The workflow’s configuration reflects that philosophy directly. It caps itself at 10 review comments and exactly one submitted review per run, scoped to &lt;code dir=&quot;auto&quot;&gt;COMMENT&lt;/code&gt;-level feedback only — it can flag concerns but can’t block a merge outright. It also shares a &lt;code dir=&quot;auto&quot;&gt;pr-review-base&lt;/code&gt; import with &lt;code dir=&quot;auto&quot;&gt;min-integrity: approved&lt;/code&gt;, meaning it won’t act on unverified or low-trust pull request content, and it pre-fetches diff data through a shared caching layer so repeated invocations on the same PR don’t re-download the same context.&lt;/p&gt;
&lt;p&gt;Running on &lt;code dir=&quot;auto&quot;&gt;codex&lt;/code&gt; with the &lt;code dir=&quot;auto&quot;&gt;copilot/mai-code-1-flash-picker&lt;/code&gt; model, it’s tuned to be fast and cheap per invocation (roughly 3–8 AIC per run in these samples) rather than exhaustive — a reviewer that shows up quickly, says its piece if there’s something to say, and gets out of the way.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;why-this-matters-for-gh-aw&quot;&gt;Why this matters for &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt;&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Complexity creep is invisible day-to-day and expensive in aggregate. A reviewer whose entire mandate is “is this more complicated than it needs to be?” is a narrow lens, but it’s one humans rarely apply consistently under review-fatigue. Ponytail Reviewer applies it on every ready-for-review PR, for free, every time.&lt;/p&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;Curious how it works under the hood? The workflow definition lives at &lt;code dir=&quot;auto&quot;&gt;.github/workflows/ponytail-reviewer.md&lt;/code&gt; in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;. Explore the full catalog of agentic workflows, or build your own, at &lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github.com/github/gh-aw&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – September 1, 2026</title><link>https://github.github.com/gh-aw/blog/2026-09-01-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-09-01-agent-of-the-day/</guid><description>PR Sous Chef checks in on gh-aw&apos;s open pull requests every 15 minutes, nudging Copilot only when a PR has actually gone stale.</description><pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Open pull requests have a way of quietly stalling — a CI check goes red and nobody notices, a review comment sits unanswered for a day, a branch drifts out of date. Today’s spotlight, &lt;strong&gt;PR Sous Chef&lt;/strong&gt;, exists to catch exactly that kind of drift on &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; itself, checking in on every open, non-draft PR every fifteen minutes and nudging the Copilot coding agent only when there’s real work to hand back.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day-pr-sous-chef&quot;&gt;Agent of the Day: PR Sous Chef&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;PR Sous Chef runs on the &lt;code dir=&quot;auto&quot;&gt;pi&lt;/code&gt; engine with &lt;code dir=&quot;auto&quot;&gt;openai/gpt-5.4&lt;/code&gt;, triggered on a tight &lt;code dir=&quot;auto&quot;&gt;every 15m&lt;/code&gt; schedule plus an on-demand &lt;code dir=&quot;auto&quot;&gt;/souschef&lt;/code&gt; slash command for anyone who wants to pull it into a specific PR conversation. It fetches all open PR branches (&lt;code dir=&quot;auto&quot;&gt;refs/pulls/open/*&lt;/code&gt;), reads through PR state, checks, and comments, and decides whether a targeted nudge is warranted — then posts a Copilot request if so.&lt;/p&gt;
&lt;p&gt;Recent runs on &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/33516358980&quot;&gt;September 1&lt;/a&gt; show the pattern clearly: five runs in a single afternoon, all completed successfully, ranging from quiet passes with a single safe item to busier sweeps producing eight or nine actions each — see &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/33509763563&quot;&gt;run #33509763563&lt;/a&gt; and &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/33516358980&quot;&gt;run #33516358980&lt;/a&gt;. Across its last five runs combined, it generated 20 safe-output items with zero errors and zero warnings — a workflow that does its job and gets out of the way.&lt;/p&gt;
&lt;p&gt;The audit trail on that latest run is worth a closer look: 13 out of 13 automated quality graders passed clean, covering everything from tool-success-rate (100%) to loop detection (zero) to context-growth efficiency. The one flagged item was a handful of blocked outbound requests to &lt;code dir=&quot;auto&quot;&gt;github.com:443&lt;/code&gt; — five out of fifty-three total network calls — a firewall-policy nuance rather than a functional problem, since the run still completed successfully and produced its full set of nudges.&lt;/p&gt;
&lt;p&gt;What makes PR Sous Chef worth watching is its restraint. It doesn’t comment on every PR every cycle; a 15-minute schedule paired with a handful of safe items per run means most cycles are pure read-only reconnaissance — checking state, finding nothing actionable, and moving on. Only when a PR has genuinely gone quiet does it step in with a Copilot request, keeping the review queue moving without adding comment noise to PRs that are already progressing fine on their own.&lt;/p&gt;
&lt;p&gt;It’s a small, unglamorous job — but in a repo with dozens of PRs in flight at any given time, having something check in every quarter-hour so nothing falls through the cracks is exactly the kind of quiet infrastructure that keeps a fast-moving project from stalling.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Curious how workflows like PR Sous Chef are built? Explore the project at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github.com/github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Sandbox Security Options Are Now Runtime Profiles</title><link>https://github.github.com/gh-aw/blog/2026-09-01-sandbox-runtime-profiles/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-09-01-sandbox-runtime-profiles/</guid><description>gh-aw replaces sandbox.agent.legacy-security and sandbox.agent.sudo with explicit sandbox runtime profiles.</description><pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Sandbox security behavior is now selected through &lt;code dir=&quot;auto&quot;&gt;sandbox.agent.runtime&lt;/code&gt;. The separate &lt;code dir=&quot;auto&quot;&gt;sandbox.agent.legacy-security&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;sandbox.agent.sudo&lt;/code&gt; settings have been removed, making each runtime an explicit security and topology profile.&lt;/p&gt;
&lt;p&gt;The default &lt;code dir=&quot;auto&quot;&gt;docker&lt;/code&gt; profile runs AWF without sudo and isolates network access. Workflows that need the previous privileged iptables behavior can select &lt;code dir=&quot;auto&quot;&gt;docker-sudo-iptables&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sandbox:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;agent:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;runtime: docker-sudo-iptables&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This profile runs AWF with sudo, uses iptables-based networking, and permits host and GitHub Actions service access. It is required for &lt;code dir=&quot;auto&quot;&gt;sandbox.agent.allow-host-ports&lt;/code&gt; and for connecting to published &lt;code dir=&quot;auto&quot;&gt;services:&lt;/code&gt; ports. Other profiles retain their own isolation guarantees: &lt;code dir=&quot;auto&quot;&gt;gvisor&lt;/code&gt; adds kernel-level isolation, while &lt;code dir=&quot;auto&quot;&gt;docker-sbx&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;cloud-hypervisor&lt;/code&gt; use virtual-machine boundaries.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;migrate-existing-workflows&quot;&gt;Migrate existing workflows&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Run the fixer to update workflow frontmatter:&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;p&gt;The &lt;code dir=&quot;auto&quot;&gt;sandbox-runtime-profiles&lt;/code&gt; codemod rewrites this configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sandbox:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;agent:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;legacy-security: enable&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;to:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sandbox:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;agent:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;runtime: docker-sudo-iptables&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The codemod also removes obsolete &lt;code dir=&quot;auto&quot;&gt;sudo&lt;/code&gt; settings and preserves compatible runtime choices. When a combination cannot be migrated without changing its security intent, the fixer reports an actionable error instead of selecting a profile silently.&lt;/p&gt;
&lt;p&gt;After migration, compile the workflow and review the generated lock file:&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;compile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;See the &lt;a href=&quot;https://github.github.com/gh-aw/reference/sandbox/&quot;&gt;sandbox configuration reference&lt;/a&gt; and &lt;a href=&quot;https://github.github.com/gh-aw/reference/agent-runtimes/&quot;&gt;agent runtime reference&lt;/a&gt; for the behavior and constraints of each profile.&lt;/p&gt;</content:encoded></item><item><title>Why the Built-In Playwright Tool Is Now CLI-Only</title><link>https://github.github.com/gh-aw/blog/2026-09-01-why-playwright-cli-replaces-playwright-mcp/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-09-01-why-playwright-cli-replaces-playwright-mcp/</guid><description>gh-aw removed built-in Playwright MCP support in favor of @playwright/cli: a smaller attack surface and a lighter token footprint for coding agents.</description><pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The built-in &lt;code dir=&quot;auto&quot;&gt;tools.playwright&lt;/code&gt; integration in &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt;&lt;/a&gt; used to support two modes: a Docker-based MCP server (&lt;code dir=&quot;auto&quot;&gt;mode: mcp&lt;/code&gt;) and a CLI-based integration (&lt;code dir=&quot;auto&quot;&gt;mode: cli&lt;/code&gt;). As of this change, the built-in tool only supports CLI mode, and the compiler rejects &lt;code dir=&quot;auto&quot;&gt;mode: mcp&lt;/code&gt; with migration guidance instead of quietly starting a container. Workflows that still need the full Playwright MCP server can configure it explicitly under &lt;code dir=&quot;auto&quot;&gt;mcp-servers&lt;/code&gt;. Here is why CLI became the only built-in option.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;fewer-tokens-spent-on-tool-schemas&quot;&gt;Fewer tokens spent on tool schemas&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;MCP servers advertise their tools to the agent by loading a schema for every available function into the model’s context window. Playwright MCP exposes a wide surface of browser-automation tools — navigation, snapshots, clicks, evaluation, tracing, and more — and all of that schema has to be paid for in tokens on every turn, whether or not the agent uses most of it.&lt;/p&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;@playwright/cli&lt;/code&gt; instead exposes a single command, &lt;code dir=&quot;auto&quot;&gt;playwright-cli&lt;/code&gt;, that the agent invokes directly from bash with a subcommand such as &lt;code dir=&quot;auto&quot;&gt;goto&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;snapshot&lt;/code&gt;, or &lt;code dir=&quot;auto&quot;&gt;click&lt;/code&gt;. The agent only needs to have seen &lt;code dir=&quot;auto&quot;&gt;playwright-cli --help&lt;/code&gt; once (or installed skills via &lt;code dir=&quot;auto&quot;&gt;playwright-cli install --skills&lt;/code&gt;) to know how to drive the browser. There is no persistent tool schema competing with the rest of the workflow’s context for space, which matters for coding agents that also need room to reason about code, tests, and long-running tasks.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;a-smaller-more-auditable-attack-surface&quot;&gt;A smaller, more auditable attack surface&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The built-in MCP mode ran Playwright inside a Docker container with its own image, arguments, and lifecycle that the compiler had to track, pin, and update independently. Every one of those knobs — container image version, extra MCP arguments, mounted volumes — was one more thing that could silently drift out of date or be misconfigured across workflows.&lt;/p&gt;
&lt;p&gt;CLI mode collapses that surface. &lt;code dir=&quot;auto&quot;&gt;@playwright/cli&lt;/code&gt; is a single npm package installed directly on the runner, with one version to track and one command surface to allow through the shell permission system. Because it runs on the runner instead of in a separate container, it also reaches local development servers through &lt;code dir=&quot;auto&quot;&gt;localhost&lt;/code&gt; directly, without needing extra network plumbing between a container and the host. Less machinery means less to get wrong, and less to review when auditing what a workflow can do.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;mcp-is-still-available-just-not-built-in&quot;&gt;MCP is still available, just not built-in&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Some workflows genuinely benefit from MCP’s persistent state and richer introspection — for example, exploratory automation or self-healing tests that need to reason iteratively over page structure across many turns. That use case has not gone away; it is just no longer a hidden default. Configure it explicitly:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mcp-servers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;playwright&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;npx&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;--yes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;@playwright/mcp@0.0.79&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;--no-sandbox&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;allowed&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;browser_navigate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;browser_snapshot&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Making this explicit means the dependency, the pinned version, and the exact allowed tool list are all visible in the workflow source, instead of being implied by a one-word &lt;code dir=&quot;auto&quot;&gt;mode: mcp&lt;/code&gt; setting. See the &lt;a href=&quot;https://github.github.com/gh-aw/reference/playwright/&quot;&gt;Playwright reference&lt;/a&gt; for the full migration table from MCP tool names to &lt;code dir=&quot;auto&quot;&gt;playwright-cli&lt;/code&gt; subcommands.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – August 31, 2026</title><link>https://github.github.com/gh-aw/blog/2026-08-31-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-08-31-agent-of-the-day/</guid><description>Issue Arborist reads 100 open issues a day and links sub-issues into trees, only creating a new parent when a cluster truly needs one.</description><pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Every open-source repo eventually drowns in the same problem: a hundred open issues, half of them clearly related, none of them linked. Someone has to notice that six issues are all milestones of the same game plan, or that a dozen bug reports trace back to one root cause — and then actually go build the sub-issue tree. Today’s spotlight, &lt;strong&gt;Issue Arborist&lt;/strong&gt;, is the daily workflow that does exactly that for &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; itself.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day-issue-arborist&quot;&gt;Agent of the Day: Issue Arborist&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Every morning, Issue Arborist pulls the last 100 open issues that don’t already have a parent, reads through their titles, bodies, and labels, and decides what — if anything — deserves to be grouped. It’s deliberately conservative: it only proposes a brand-new parent issue when a cluster is strong and orphaned, and it only links a sub-issue when the relationship is unambiguous.&lt;/p&gt;
&lt;p&gt;In its &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/33235825296&quot;&gt;August 29 run&lt;/a&gt;, that discipline produced a genuinely useful cleanup. The agent noticed seven Deep Report issues — schema drift fixes, duplicate type consolidation, messaging tweaks — that were all clearly part of the same maintenance effort but had no tracking issue. Rather than link them to something that didn’t fit, it created a new parent, &lt;code dir=&quot;auto&quot;&gt;[Parent] Deep Report cleanup and schema consolidation&lt;/code&gt;, and attached all seven (#56706–#56712) underneath it. It then found two more clean clusters: four cache-miss issues that belonged under the existing &lt;code dir=&quot;auto&quot;&gt;Daily Cache Strategy Analyzer&lt;/code&gt; issue group (#56716), and six milestone issues for a fictional game project, “Neon Heist” (#56635), each one an obvious child of its own plan.&lt;/p&gt;
&lt;p&gt;The very next day, on &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/33294394874&quot;&gt;August 30&lt;/a&gt;, and again on &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/33360242345&quot;&gt;August 31&lt;/a&gt;, it kept going — linking six more milestone issues for a different project, “Starling Drift” (#57144), and folding eight fresh &lt;code dir=&quot;auto&quot;&gt;[deep-report]&lt;/code&gt; findings into the existing issue-group parent (#56849), all without creating a single unnecessary new tracking issue.&lt;/p&gt;
&lt;p&gt;What’s most interesting is what the agent chose &lt;em&gt;not&lt;/em&gt; to do. Each run ends with a same-day &lt;a href=&quot;https://github.com/github/gh-aw/discussions/56833&quot;&gt;discussion post&lt;/a&gt; explicitly listing the clusters it saw but declined to link — a group of near-duplicate “Implement skill-constraint-coverage” issues that might be duplicate attempts rather than a hierarchy, a set of repeated workflow-failure reports that could be separate incidents rather than one root cause, and several &lt;code dir=&quot;auto&quot;&gt;[aw] Smoke ... failed&lt;/code&gt; issues that looked plausible but weren’t confident enough to map automatically. That restraint is the whole point: a triage bot that links everything it can find isn’t useful, it’s noise. Issue Arborist’s value is in knowing when &lt;em&gt;not&lt;/em&gt; to act.&lt;/p&gt;
&lt;p&gt;Across its last three runs it made 129 &lt;code dir=&quot;auto&quot;&gt;link_sub_issue&lt;/code&gt; calls and opened one new parent issue — a quiet, steady gardening job that keeps &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt;’s issue tracker legible without anyone having to ask it to.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Curious how workflows like Issue Arborist are built? Explore the project at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github.com/github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Weekly Update – August 31, 2026</title><link>https://github.github.com/gh-aw/blog/2026-08-31-weekly-update/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-08-31-weekly-update/</guid><description>Three v0.87.x pre-releases landed this week alongside intent-driven workflow design guidance, typed cooldown gating, and a wave of trajectory grader implementations.</description><pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Another packed week for &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;! We shipped three pre-releases (&lt;code dir=&quot;auto&quot;&gt;v0.87.5&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;v0.87.8&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;v0.87.9&lt;/code&gt;) and merged well over a hundred pull requests spanning new workflow scheduling controls, compiler hardening, and a steady stream of trajectory grader implementations. Here’s what stood out.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;release-highlights&quot;&gt;Release Highlights&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.87.9&quot;&gt;v0.87.9&lt;/a&gt; line of pre-releases built on &lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.87.8&quot;&gt;v0.87.8&lt;/a&gt; and &lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.87.5&quot;&gt;v0.87.5&lt;/a&gt;, focused on new workflow gating primitives, engine reliability, and internal grader tooling.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;on.cooldown&lt;/code&gt; workflow gating&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/56998&quot;&gt;#56998&lt;/a&gt;): workflows can now declare a cooldown window so back-to-back triggers don’t pile up on the same target.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Typed &lt;code dir=&quot;auto&quot;&gt;on.stop-after&lt;/code&gt; field&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/56983&quot;&gt;#56983&lt;/a&gt;): &lt;code dir=&quot;auto&quot;&gt;stop-after&lt;/code&gt; now accepts GitHub Actions expressions in addition to static values, giving authors more flexible run-limiting logic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Codex harness tool-schema diagnostics&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/57256&quot;&gt;#57256&lt;/a&gt;): unsupported-model tool-schema failures now surface with a dedicated, readable error message instead of a cryptic provider error.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bump default MCP Gateway to v0.4.14&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/57188&quot;&gt;#57188&lt;/a&gt;) and &lt;strong&gt;Bump Agentic Workflow Firewall to v0.28.10&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/56914&quot;&gt;#56914&lt;/a&gt;): the usual steady drumbeat of dependency upgrades keeping the sandboxing and networking layers current.&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;a href=&quot;https://github.com/github/gh-aw/pull/57005&quot;&gt;Document intent-driven workflow design&lt;/a&gt;: new guidance explains how to write workflow prompts around clear intent rather than rigid step-by-step instructions, complementing the earlier &lt;a href=&quot;https://github.com/github/gh-aw/pull/56611&quot;&gt;intent-driven workflow design guidance&lt;/a&gt; and the optional &lt;code dir=&quot;auto&quot;&gt;intent&lt;/code&gt; frontmatter field (&lt;a href=&quot;https://github.com/github/gh-aw/pull/56599&quot;&gt;#56599&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/56614&quot;&gt;Add the Feature Farmer workflow pattern&lt;/a&gt;: a new documented pattern for workflows that continuously grow small, incremental features — later put into practice by &lt;a href=&quot;https://github.com/github/gh-aw/pull/56988&quot;&gt;converting the trajectory grader workflow to the “all-you-can-eat” pattern&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/57253&quot;&gt;Prevent large MCP query payloads from exceeding argument limits&lt;/a&gt;: a reliability fix so oversized MCP requests fail gracefully instead of silently breaking tool calls.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/56505&quot;&gt;Support authenticated Agent Plugin installation from private repositories&lt;/a&gt;: opens up plugin installation for teams running private forks or internal plugin repos.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/56508&quot;&gt;Add Bash support for Windows runners&lt;/a&gt;: another step toward first-class Windows runner support for agentic workflows.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Under the hood, the team also kept implementing new entries in the trajectory grader library — including &lt;a href=&quot;https://github.com/github/gh-aw/pull/56464&quot;&gt;event-entropy-rate&lt;/a&gt;, &lt;a href=&quot;https://github.com/github/gh-aw/pull/56972&quot;&gt;lempel-ziv-trajectory-complexity&lt;/a&gt;, &lt;a href=&quot;https://github.com/github/gh-aw/pull/56996&quot;&gt;policy-near-miss&lt;/a&gt;, &lt;a href=&quot;https://github.com/github/gh-aw/pull/57087&quot;&gt;exploration-error&lt;/a&gt;, and &lt;a href=&quot;https://github.com/github/gh-aw/pull/57152&quot;&gt;exploitation-error&lt;/a&gt; — building out a richer picture of how agents behave across runs.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-week-ai-moderator&quot;&gt; Agent of the Week: AI Moderator&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;AI Moderator&lt;/strong&gt; is the quiet gatekeeper that watches newly opened issues, comments, and pull requests for spam, AI-generated noise, and link spam, then quietly labels or hides what it finds.&lt;/p&gt;
&lt;p&gt;This week it stayed busy on the front lines — triggered repeatedly across incoming issues and PRs, including runs tied to the Codex harness fix (&lt;a href=&quot;https://github.com/github/gh-aw/pull/57256&quot;&gt;#57256&lt;/a&gt;) and a caveman instruction-verbosity pass. It runs read-only by design (no write-capable safe outputs get exercised unless it actually flags something), which is exactly the kind of low-risk, always-on moderation you want watching your front door.&lt;/p&gt;
&lt;p&gt;Its recent runs did turn up as reliability “failures” in our observability logs — a reminder that even the calmest bouncer occasionally needs a coffee break, or in this case, a closer look at run classification before we assume the worst.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Usage tip&lt;/strong&gt;: Because it runs read-only with &lt;code dir=&quot;auto&quot;&gt;threat-detection: false&lt;/code&gt; and tight per-window rate limits, &lt;code dir=&quot;auto&quot;&gt;ai-moderator&lt;/code&gt; is a solid template for any workflow that needs to watch high-volume public triggers (like &lt;code dir=&quot;auto&quot;&gt;issues: opened&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;pull_request: opened&lt;/code&gt; from forks) without risking runaway write actions.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/ai-moderator.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.87.9&quot;&gt;v0.87.9&lt;/a&gt; and give &lt;code dir=&quot;auto&quot;&gt;on.cooldown&lt;/code&gt; or the new intent-driven design guidance a try. 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>Agent of the Day – August 28, 2026</title><link>https://github.github.com/gh-aw/blog/2026-08-28-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-08-28-agent-of-the-day/</guid><description>Meet ESLint Refiner, the workflow that reviews gh-aw&apos;s own custom lint rules for correctness — and caught a wording bug quietly recurring across eleven files.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Most teams write lint rules once and trust them forever. Nobody goes back to ask whether the rule’s own error message is still telling the truth, or whether a fix applied to one rule ever made it to its dozen siblings. Today’s spotlight, &lt;strong&gt;ESLint Refiner&lt;/strong&gt;, exists precisely for that blind spot: a daily workflow that treats &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt;’s custom ESLint rule set — &lt;code dir=&quot;auto&quot;&gt;eslint-factory&lt;/code&gt; — as a codebase worth auditing in its own right, not just a tool you point at other code.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day-eslint-refiner&quot;&gt;Agent of the Day: ESLint Refiner&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;code dir=&quot;auto&quot;&gt;eslint-factory&lt;/code&gt; is the internal library of custom lint rules that keep &lt;code dir=&quot;auto&quot;&gt;actions/setup/js&lt;/code&gt; scripts safe — things like “wrap this &lt;code dir=&quot;auto&quot;&gt;fs.mkdtempSync&lt;/code&gt; call in a try/catch” or “don’t compare objects with &lt;code dir=&quot;auto&quot;&gt;JSON.stringify&lt;/code&gt; equality.” Rules like these accumulate fast; a sibling workflow, &lt;code dir=&quot;auto&quot;&gt;eslint-miner&lt;/code&gt;, adds roughly one new rule a day. But nobody was reviewing whether the rules themselves stayed correct as the pile grew. ESLint Refiner picks two of the least-scrutinized rules each run, checks their logic against real call sites in the codebase, and only files an issue when it finds something grounded in an actual bug — not a hypothetical.&lt;/p&gt;
&lt;p&gt;In its &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/33050923118&quot;&gt;August 27 run&lt;/a&gt;, the agent reviewed &lt;code dir=&quot;auto&quot;&gt;require-mkdtempsync-try-catch&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;require-decodeuricomponent-try-catch&lt;/code&gt;, and turned up two real problems:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;A recurring overclaim.&lt;/strong&gt; Eleven rules — including both reviewed that day — say a call “will crash the action if unhandled.” That’s not quite true: every entrypoint in &lt;code dir=&quot;auto&quot;&gt;actions/setup/js&lt;/code&gt; already has a top-level try/catch that routes any uncaught throw into a controlled &lt;code dir=&quot;auto&quot;&gt;core.setFailed&lt;/code&gt;, so nothing actually crashes silently. The real cost of skipping the fix is losing a specific &lt;code dir=&quot;auto&quot;&gt;{ cause }&lt;/code&gt; and message, not crashing. This exact wording had already been fixed once, for &lt;code dir=&quot;auto&quot;&gt;require-fetch-response-body-try-catch&lt;/code&gt;, but the fix never propagated — and had since recurred in two brand-new rules. The agent filed &lt;a href=&quot;https://github.com/github/gh-aw/issues/56288&quot;&gt;issue #56288&lt;/a&gt; asking for a reword-all pass plus a guard so it can’t quietly recur a third time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A misclassified literal.&lt;/strong&gt; &lt;code dir=&quot;auto&quot;&gt;require-decodeuricomponent-try-catch&lt;/code&gt; only recognized string literals as provably safe arguments, so calls like &lt;code dir=&quot;auto&quot;&gt;decodeURIComponent(42)&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;decodeURIComponent(null)&lt;/code&gt; got flagged even though a number, boolean, or &lt;code dir=&quot;auto&quot;&gt;null&lt;/code&gt; can never produce a decoding error. Zero live call sites hit this today, but it’s a cheap, well-scoped fix worth closing before one does — filed as &lt;a href=&quot;https://github.com/github/gh-aw/issues/56289&quot;&gt;issue #56289&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Rather than silently move on, the agent also published a same-day &lt;a href=&quot;https://github.com/github/gh-aw/discussions/56290&quot;&gt;discussion post&lt;/a&gt; summarizing exactly what it checked, what came back clean, and what’s queued for tomorrow’s review — including a note that its own repo-memory had gone stale for weeks even while it kept filing issues, which it then rebuilt from a ground-truth GitHub search.&lt;/p&gt;
&lt;p&gt;The following day’s run, on &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/33152652663&quot;&gt;August 28&lt;/a&gt;, kept the streak going with another clean pass — no errors, three safe outputs produced, business as usual for a workflow that’s quietly been doing this every day since it launched.&lt;/p&gt;
&lt;p&gt;What makes ESLint Refiner worth spotlighting isn’t flashy output — it’s discipline. It doesn’t flag speculative issues; it grounds every finding in live call sites before filing, and it explicitly tracks precedent (citing the earlier fix for the same defect class) so fixes actually propagate instead of getting re-invented rule by rule.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Curious how workflows like ESLint Refiner are built? Explore the project at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github.com/github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – August 26, 2026</title><link>https://github.github.com/gh-aw/blog/2026-08-26-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-08-26-agent-of-the-day/</guid><description>Meet the CLI Consistency Checker, the archivist that reads every gh aw --help line so your docs never drift.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day--august-26-2026-the-cli-archivist&quot;&gt;Agent of the Day – August 26, 2026: The CLI Archivist&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Every CLI accumulates small inconsistencies over time — a flag renamed here, a doc page that forgot to follow, an extra blank line nobody meant to leave in. Today’s spotlight workflow exists purely to hunt down that kind of drift before a human ever notices it: the &lt;strong&gt;CLI Consistency Checker&lt;/strong&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day-cli-consistency-checker&quot;&gt;Agent of the Day: CLI Consistency Checker&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;This is a patient, unglamorous job done exceptionally well. Each day the workflow collects the full &lt;code dir=&quot;auto&quot;&gt;--help&lt;/code&gt; output for every one of the &lt;code dir=&quot;auto&quot;&gt;gh aw&lt;/code&gt; CLI’s 40-plus top-level commands and subcommands, then lines it up against &lt;code dir=&quot;auto&quot;&gt;docs/src/content/docs/setup/cli.md&lt;/code&gt; looking for typos, flag-naming inconsistencies, missing &lt;code dir=&quot;auto&quot;&gt;--no-*&lt;/code&gt; negation counterparts, undocumented commands, and stale examples. It’s the kind of exhaustive line-by-line comparison a person would dread doing manually — which is exactly why it’s automated.&lt;/p&gt;
&lt;p&gt;Two consecutive runs this week show the pattern at its best. On &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/32924017960&quot;&gt;run 32924017960&lt;/a&gt; (August 25), the checker filed &lt;a href=&quot;https://github.com/github/gh-aw/issues/55788&quot;&gt;issue #55788&lt;/a&gt;, flagging that the &lt;code dir=&quot;auto&quot;&gt;graders&lt;/code&gt; command — a fully functional first-class CLI command with its own &lt;code dir=&quot;auto&quot;&gt;operational-value&lt;/code&gt; subcommand — was completely absent from the documentation. That report was closed out same-day by &lt;a href=&quot;https://github.com/github/gh-aw/pull/55794&quot;&gt;PR #55794&lt;/a&gt;, which added the missing docs.&lt;/p&gt;
&lt;p&gt;The next day’s run, &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/32974417489&quot;&gt;32974417489&lt;/a&gt;, turned up something subtler: &lt;a href=&quot;https://github.com/github/gh-aw/issues/56047&quot;&gt;issue #56047&lt;/a&gt; reported that seven commands — including &lt;code dir=&quot;auto&quot;&gt;gh aw add&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;gh aw logs&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;gh aw trial&lt;/code&gt;, and three &lt;code dir=&quot;auto&quot;&gt;mcp&lt;/code&gt; subcommands — were rendering &lt;strong&gt;two&lt;/strong&gt; blank lines before their &lt;code dir=&quot;auto&quot;&gt;Flags:&lt;/code&gt; section instead of the single blank line used everywhere else. The root cause traced back to trailing newlines left inside Go raw string literals for each command’s &lt;code dir=&quot;auto&quot;&gt;Example:&lt;/code&gt; field. Cosmetic, yes, but the kind of thing that makes a CLI feel polished versus slightly off. &lt;a href=&quot;https://github.com/github/gh-aw/pull/56052&quot;&gt;PR #56052&lt;/a&gt; trimmed the stray newlines and merged the same day, restoring consistent formatting across all seven commands.&lt;/p&gt;
&lt;p&gt;What stands out across both runs is the discipline of the reports themselves: a clear severity breakdown, an affected-commands table, a root-cause section pointing at the exact source file, and — critically — &lt;em&gt;zero false positives&lt;/em&gt;. Neither run flagged noise; every finding led directly to a merged fix. That’s the bar an agent needs to clear to earn trust running unattended on a schedule.&lt;/p&gt;
&lt;p&gt;It’s a quiet workflow — no flashy dashboards, no dramatic incident response — just a steady daily diff between what the CLI says it does and what the docs say it does. But drift like this compounds silently in any fast-moving codebase, and catching it same-day, every day, is exactly the kind of tedious vigilance agentic workflows are built for.&lt;/p&gt;
&lt;p&gt;Curious how a workflow like this is defined? Check out &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt; and see how a few lines of markdown frontmatter turn into a disciplined daily CLI audit.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – August 25, 2026</title><link>https://github.github.com/gh-aw/blog/2026-08-25-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-08-25-agent-of-the-day/</guid><description>Meet Issue Monster, the Cookie Monster of issues that scans gh-aw&apos;s tracker every 30 minutes and feeds the best candidates to Copilot coding agent.</description><pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day--august-25-2026-the-cookie-monster-of-issues&quot;&gt;Agent of the Day – August 25, 2026: The Cookie Monster of Issues&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Some workflows in &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; wait patiently for a human to summon them. Today’s spotlight isn’t one of those. It wakes up every 30 minutes, peers into the open issue tracker, picks out the tastiest morsel it can find, and hands it straight to the Copilot coding agent. Its name says it all: &lt;strong&gt;Issue Monster&lt;/strong&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day-issue-monster&quot;&gt;Agent of the Day: Issue Monster&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Described in its own frontmatter as “the Cookie Monster of issues,” this workflow runs on a &lt;code dir=&quot;auto&quot;&gt;schedule: every 30m&lt;/code&gt; trigger with a set of guardrails that keep it from overreacting. It skips a run entirely if there are already five or more open draft PRs from &lt;code dir=&quot;auto&quot;&gt;app/copilot-swe-agent&lt;/code&gt;, skips if there are no open issues to consider, and skips if key CI checks (&lt;code dir=&quot;auto&quot;&gt;build&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;test&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;lint-go&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;lint-js&lt;/code&gt;) are failing. Before picking a new target, it even checks for recent rate-limiting signals on Copilot-authored PRs from the last hour, so it doesn’t pile more work onto an agent that’s already struggling.&lt;/p&gt;
&lt;p&gt;Five real runs from the last day tell a consistent story of steady, careful triage:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/32853285457&quot;&gt;Run 32853285457&lt;/a&gt;&lt;/strong&gt; (8.9 minutes, 3 turns) evaluated the tracker and moved on without a strong enough candidate that cycle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/32856106356&quot;&gt;Run 32856106356&lt;/a&gt;&lt;/strong&gt; found three good bites in one pass, assigning &lt;a href=&quot;https://github.com/github/gh-aw/issues/55788&quot;&gt;issue #55788&lt;/a&gt;, &lt;a href=&quot;https://github.com/github/gh-aw/issues/55770&quot;&gt;issue #55770&lt;/a&gt;, and &lt;a href=&quot;https://github.com/github/gh-aw/issues/55716&quot;&gt;issue #55716&lt;/a&gt; to the Copilot coding agent, each with a HIGH-confidence rationale that they were “clearly scoped, independent candidates for automated resolution.” Every assignment came with a cheerful comment: &lt;em&gt;” Issue Monster selected this for Copilot… Om nom nom! ”&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/32859101860&quot;&gt;Run 32859101860&lt;/a&gt;&lt;/strong&gt; picked up the pace again shortly after, assigning &lt;a href=&quot;https://github.com/github/gh-aw/issues/55771&quot;&gt;issue #55771&lt;/a&gt; and &lt;a href=&quot;https://github.com/github/gh-aw/issues/55768&quot;&gt;issue #55768&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/32821436131&quot;&gt;Run 32821436131&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/32816269740&quot;&gt;Run 32816269740&lt;/a&gt;&lt;/strong&gt; ran earlier in the day, each completing in 6–8 minutes with clean, error-free conclusions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Across all five runs, the workflow burned through 350k tokens and racked up 125 GitHub API calls — mostly reads, scanning issue bodies, checking recent PR activity, and verifying rate-limit safety before ever touching the &lt;code dir=&quot;auto&quot;&gt;assign_to_agent&lt;/code&gt; safe output. Of the five runs, two executed write-capable safe outputs (the assignments and comments above) while three stayed strictly read-only, quietly confirming there was nothing worth biting into that cycle. Zero errors, zero warnings, across the board.&lt;/p&gt;
&lt;p&gt;That restraint is the real design story here. Issue Monster only has &lt;code dir=&quot;auto&quot;&gt;issues: read&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;pull-requests: read&lt;/code&gt; permissions directly — it never edits code itself. Its entire job is &lt;em&gt;curation&lt;/em&gt;: reading the room, checking capacity, and making a narrow, well-reasoned call about which issue is ready for an autonomous fix versus which one still needs a human’s judgment. The &lt;code dir=&quot;auto&quot;&gt;assign_to_agent&lt;/code&gt; safe output does the heavy lifting of actually routing the issue to Copilot, and the accompanying comment keeps the paper trail visible to anyone watching the issue.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://github.github.com/blog-combined.png&quot; alt=&quot;gh-aw workflow activity chart&quot;&gt;&lt;/p&gt;
&lt;p&gt;It’s a small, unglamorous job — but multiplied across dozens of runs a day, it’s the difference between an issue tracker that silently accumulates backlog and one where fixable problems get routed to an agent within half an hour of becoming “clearly scoped.” Om nom nom, indeed.&lt;/p&gt;
&lt;p&gt;Curious how Issue Monster — or any other &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; workflow — is put together? Explore the project at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github.com/github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – August 24, 2026</title><link>https://github.github.com/gh-aw/blog/2026-08-24-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-08-24-agent-of-the-day/</guid><description>Meet Q, the on-demand workflow doctor that answers /q comments in gh-aw and turns real complaints into pull requests.</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day--august-24-2026-the-workflow-doctor&quot;&gt;Agent of the Day – August 24, 2026: The Workflow Doctor&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Most agentic workflows in &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; run on a timer, quietly doing their thing every day whether anyone’s watching or not. Today’s spotlight is different: it only shows up when you call it. Type &lt;code dir=&quot;auto&quot;&gt;/q&lt;/code&gt; in a comment on an issue, pull request, or discussion, and this workflow wakes up, reads the room, and goes to work fixing whatever you pointed it at.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day-the-workflow-doctor&quot;&gt;Agent of the Day: The Workflow Doctor&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;We’re calling this persona &lt;strong&gt;The Workflow Doctor&lt;/strong&gt;, and it belongs to &lt;strong&gt;Q&lt;/strong&gt;, a slash-command-triggered &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; workflow described in its own frontmatter as an “intelligent assistant that answers questions, analyzes repositories, and can create PRs for workflow optimizations.” Q runs on the Copilot engine with SDK mode enabled, has read access to issues, pull requests, and discussions, and — critically — is under a hard rule never to touch its own definition file (&lt;code dir=&quot;auto&quot;&gt;q.md&lt;/code&gt;). It exists purely to diagnose and improve &lt;em&gt;other&lt;/em&gt; workflows in the repo.&lt;/p&gt;
&lt;p&gt;Three real runs from the last few days show exactly how varied its case load gets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/32726221560&quot;&gt;Run 32726221560&lt;/a&gt;&lt;/strong&gt; fired from a comment on &lt;a href=&quot;https://github.com/github/gh-aw/discussions/55296&quot;&gt;discussion #55296&lt;/a&gt;, where a maintainer asked Q to “add a job that tests the github MCP in remote mode without using any agentic workflow feature” as a canary test to rule out a runtime/compiler bug, plus a summary of the MCP handshake message. Q completed in 11.5 minutes across a single turn, burning 25.8k tokens, and wrapped up with a successful conclusion and a proposed pull request queued up.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/32727642327&quot;&gt;Run 32727642327&lt;/a&gt;&lt;/strong&gt; answered a comment on &lt;a href=&quot;https://github.com/github/gh-aw/issues/55389&quot;&gt;issue #55389&lt;/a&gt; asking Q to “use mai flash model to reduce cost” — a straightforward cost-tuning request that Q turned into a workflow-level model swap.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/32726004596&quot;&gt;Run 32726004596&lt;/a&gt;&lt;/strong&gt; came from &lt;a href=&quot;https://github.com/github/gh-aw/discussions/55334&quot;&gt;discussion #55334&lt;/a&gt;, where the ask was to “update to use repo-memory to store the mined loops” — plumbing persistent state into a workflow that was previously stateless between runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Audit data on the discussion-triggered run classifies its behavior fingerprint as &lt;code dir=&quot;auto&quot;&gt;directed&lt;/code&gt; execution with &lt;code dir=&quot;auto&quot;&gt;narrow&lt;/code&gt; tool breadth and a &lt;code dir=&quot;auto&quot;&gt;selective_write&lt;/code&gt; actuation style — in plain terms, Q doesn’t wander. It reads exactly what it needs (the triggering comment, the parent issue or discussion, recent logs and audits for the target workflow), forms a specific diagnosis, and proposes a scoped pull request through its &lt;code dir=&quot;auto&quot;&gt;create-pull-request&lt;/code&gt; safe output, complete with a &lt;code dir=&quot;auto&quot;&gt;[q]&lt;/code&gt; title prefix, &lt;code dir=&quot;auto&quot;&gt;automation&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;workflow-optimization&lt;/code&gt; labels, and Copilot as the default reviewer.&lt;/p&gt;
&lt;p&gt;That safe-outputs configuration is worth calling out on its own: PRs expire after 2 days if unmerged, patches are capped at 500 files, and protected-file edits automatically fall back to filing an issue instead of silently failing. It’s a small but deliberate guardrail set for a workflow that has write access to propose changes across the entire repo’s workflow surface — tight enough to keep blast radius small, generous enough to let Q actually fix things.&lt;/p&gt;
&lt;p&gt;The interesting part isn’t any single fix — it’s the range. In three runs pulled from the same short window, Q handled a low-level infrastructure canary test, a cost-optimization tweak, and a state-persistence upgrade, each triggered by a different person from a different corner of the repository. That’s the value proposition of an on-demand workflow doctor: no scheduling, no queue, just &lt;code dir=&quot;auto&quot;&gt;/q&lt;/code&gt; and a clear ask.&lt;/p&gt;
&lt;p&gt;Want to see how Q — or any other &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; workflow — is built? Explore the project at &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github.com/github/gh-aw&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Weekly Update – August 24, 2026</title><link>https://github.github.com/gh-aw/blog/2026-08-24-weekly-update/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-08-24-weekly-update/</guid><description>This week brought three v0.87.x pre-releases with stricter safe-outputs validation, new pre-create PR steering, and a wave of internal reliability fixes.</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Another busy week for &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt;! We shipped three pre-releases (&lt;code dir=&quot;auto&quot;&gt;v0.87.1&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;v0.87.2&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;v0.87.4&lt;/code&gt;) and merged dozens of pull requests focused on safe-output reliability, compiler robustness, and internal reporting accuracy. Here’s what stood out.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;release-highlights&quot;&gt;Release Highlights&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.87.4&quot;&gt;v0.87.4&lt;/a&gt; line of releases focused on compiler robustness, safe-output validation, and internal tooling and observability improvements across the agentic workflow pipeline.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Run steering&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/55171&quot;&gt;#55171&lt;/a&gt;): &lt;code dir=&quot;auto&quot;&gt;safe-outputs.create-pull-request.pre-create.steer: true&lt;/code&gt; introduced run-scoped feedback issues and injected prompting for agents to read comments containing the &lt;code dir=&quot;auto&quot;&gt;steer&lt;/code&gt; keyword. The configuration was subsequently moved to &lt;a href=&quot;https://github.com/github/gh-aw/pull/55792&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;safe-outputs.steer&lt;/code&gt;&lt;/a&gt;, where it requires explicit &lt;code dir=&quot;auto&quot;&gt;issues: read&lt;/code&gt; without silently expanding workflow permissions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code dir=&quot;auto&quot;&gt;gh aw models&lt;/code&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/55148&quot;&gt;#55148&lt;/a&gt;): a new CLI command surfaces catalog pricing, alias resolution, and observed automation models in one place.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copilot SDK startup diagnostics&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/55149&quot;&gt;#55149&lt;/a&gt;): pre-ready crashes now surface the Copilot SDK’s startup stderr, making a previously opaque failure mode much easier to debug.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic PR review dismissal ingestion&lt;/strong&gt; (&lt;a href=&quot;https://github.com/github/gh-aw/pull/55180&quot;&gt;#55180&lt;/a&gt;): workflows can now ingest automatic pull request review dismissals as part of their safe-output processing.&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;a href=&quot;https://github.com/github/gh-aw/pull/55214&quot;&gt;Align daily workflow and merged-PR metrics&lt;/a&gt;: standardized the daily reports’ workflow population and merge-window comparisons so fleet-size and Copilot success-rate numbers stop drifting apart.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/55209&quot;&gt;Fix lockfile-stats discussion category extraction and add loud self-check&lt;/a&gt;: the Lockfile Statistics report was silently reporting zero discussion categories due to a key mismatch in compiled &lt;code dir=&quot;auto&quot;&gt;.lock.yml&lt;/code&gt; parsing — now fixed, with a self-check to keep it from regressing quietly again.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/55236&quot;&gt;Update detection analysis report to reflect gh-aw-detection default-on&lt;/a&gt;: now that &lt;code dir=&quot;auto&quot;&gt;gh-aw-detection&lt;/code&gt; defaults to enabled, the detection-analysis-report workflow correctly classifies unset/absent values instead of flagging them as misconfigured.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/55154&quot;&gt;Migrate 30 copilot workflows to codex engine + copilot/mai-code-1-flash-picker&lt;/a&gt;: a large batch migration moving many Copilot-powered workflows onto the codex engine.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/55192&quot;&gt;Render agentic engine in generated footers&lt;/a&gt;: workflow-generated content (like PR footers) now shows which engine produced it, improving traceability across the fleet.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;-agent-of-the-week-pr-sous-chef&quot;&gt; Agent of the Week: PR Sous Chef&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The tireless kitchen staff of the PR pipeline — it watches over open pull requests and keeps their descriptions, context, and footers fresh and useful.&lt;/p&gt;
&lt;p&gt;This week &lt;code dir=&quot;auto&quot;&gt;pr-sous-chef&lt;/code&gt; ran three times in a single day (all successful, all on the &lt;code dir=&quot;auto&quot;&gt;pi&lt;/code&gt; engine), burning through roughly 76K tokens and racking up 8 safe-output items across its runs — including landing the new pre-create PR steering feature itself via &lt;a href=&quot;https://github.com/github/gh-aw/pull/55171&quot;&gt;#55171&lt;/a&gt;. Its most recent run alone produced 5 safe items in under 8 minutes, a tidy little burst of productivity right before this post went out.&lt;/p&gt;
&lt;p&gt;Somewhat fittingly, the workflow that teaches other PRs how to listen to reviewer feedback (&lt;code dir=&quot;auto&quot;&gt;steer&lt;/code&gt;) shipped that very feature about itself — a small bit of “eating your own dog food” that we appreciated.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Usage tip&lt;/strong&gt;: Reach for a &lt;code dir=&quot;auto&quot;&gt;pr-sous-chef&lt;/code&gt;-style workflow whenever your team’s biggest bottleneck is PR descriptions and footers going stale between review rounds — it keeps that metadata current without anyone lifting a finger.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/pr-sous-chef.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 the latest &lt;a href=&quot;https://github.com/github/gh-aw/releases/tag/v0.87.4&quot;&gt;v0.87.4&lt;/a&gt; release to try the initial pre-create PR steering configuration. Current workflows use &lt;code dir=&quot;auto&quot;&gt;safe-outputs.steer&lt;/code&gt; as described in &lt;a href=&quot;https://github.com/github/gh-aw/pull/55792&quot;&gt;#55792&lt;/a&gt;. As always, questions, bug reports, and contributions are welcome over 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>One Small Error Message, One Big Feedback Loop</title><link>https://github.github.com/gh-aw/blog/2026-08-23-from-conformance-failure-to-eslint-rule/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-08-23-from-conformance-failure-to-eslint-rule/</guid><description>How a daily Safe Outputs check found an MCP error-message bug, drove a repair, and inspired a new ESLint rule.</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Most bug reports start with a person noticing something odd. This one started with a small scheduled script.&lt;/p&gt;
&lt;p&gt;On August 23, the &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/daily-safe-outputs-conformance.md&quot;&gt;Daily Safe Outputs Conformance Checker&lt;/a&gt; spotted a possible gap in &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt;’s MCP error handling. The immediate symptom was not dramatic: under the wrong conditions, a user could receive &lt;code dir=&quot;auto&quot;&gt;[object Object]&lt;/code&gt; instead of a useful error message. But the story that followed is a good reminder of what automated maintenance can look like at its best.&lt;/p&gt;
&lt;p&gt;One check became &lt;a href=&quot;https://github.com/github/gh-aw/issues/55014&quot;&gt;issue #55014&lt;/a&gt;, a focused repair in &lt;a href=&quot;https://github.com/github/gh-aw/pull/55042&quot;&gt;PR #55042&lt;/a&gt;, and a preventative lint rule proposed in &lt;a href=&quot;https://github.com/github/gh-aw/pull/55052&quot;&gt;PR #55052&lt;/a&gt;. The interesting part is not any one of those artifacts. It is the loop between them.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;a-tiny-signal-worth-following&quot;&gt;A tiny signal worth following&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Every day, the checker runs &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/scripts/check-safe-outputs-conformance.sh&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;scripts/check-safe-outputs-conformance.sh&lt;/code&gt;&lt;/a&gt; against the Safe Outputs implementation. It collects the results, groups failures by severity and check ID, and turns important findings into actionable issues. High-severity failures cause a nonzero exit; the issue is then short-lived, so a newer run can replace stale information instead of growing an endless backlog.&lt;/p&gt;
&lt;p&gt;Run &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/32621246743&quot;&gt;#32621246743&lt;/a&gt; raised MCE-006, the check for readable serialized error messages. At first glance, it looked like the checker had simply missed an abstraction: it searched &lt;code dir=&quot;auto&quot;&gt;mcp_server_core.cjs&lt;/code&gt; for direct calls such as &lt;code dir=&quot;auto&quot;&gt;String(e.message)&lt;/code&gt;, while the core delegates formatting to &lt;code dir=&quot;auto&quot;&gt;getErrorMessage()&lt;/code&gt; in &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/actions/setup/js/error_helpers.cjs&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;error_helpers.cjs&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That could have been the end of the investigation: another false positive to tune away. Instead, the generated issue followed the helper. It uncovered a real edge case. If code threw a plain object with a non-string &lt;code dir=&quot;auto&quot;&gt;message&lt;/code&gt;, the helper could fall back to &lt;code dir=&quot;auto&quot;&gt;String(error)&lt;/code&gt;. For a value like &lt;code dir=&quot;auto&quot;&gt;{ message: { reason: &quot;x&quot; } }&lt;/code&gt;, that means the person on the other end could see &lt;code dir=&quot;auto&quot;&gt;[object Object]&lt;/code&gt;—technically a string, but not an explanation.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;fix-the-bugand-improve-the-question&quot;&gt;Fix the bug—and improve the question&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/github/gh-aw/pull/55042&quot;&gt;PR #55042&lt;/a&gt; makes the intent explicit: when a non-&lt;code dir=&quot;auto&quot;&gt;Error&lt;/code&gt; object has a &lt;code dir=&quot;auto&quot;&gt;message&lt;/code&gt; property, preserve a string message or coerce that message value. Only objects without a message use the whole-object fallback. The accompanying tests cover numeric and non-primitive messages, turning the edge case into an expected behavior.&lt;/p&gt;
&lt;p&gt;The repair also improves MCE-006 itself. The checker still accepts direct coercion in the MCP core, but it now recognizes the shared-helper path when &lt;code dir=&quot;auto&quot;&gt;getErrorMessage()&lt;/code&gt; safely handles non-string messages. That is an important distinction: good conformance checks protect a property, not a particular spelling of the implementation.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;then-ask-where-else-does-this-pattern-live&quot;&gt;Then ask: where else does this pattern live?&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The repair was not treated as a one-off. The scheduled &lt;a href=&quot;https://github.com/github/gh-aw/blob/main/.github/workflows/eslint-miner.md&quot;&gt;ESLint Miner&lt;/a&gt; mines recent issues and discussions, scans &lt;code dir=&quot;auto&quot;&gt;actions/setup/js&lt;/code&gt;, selects one low-false-positive rule, validates it, and opens at most one draft PR. Its &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/32629340370&quot;&gt;August 23 run&lt;/a&gt; used MCE-006 as the seed for a broader question: is this pattern hiding elsewhere?&lt;/p&gt;
&lt;p&gt;The result is the proposed &lt;code dir=&quot;auto&quot;&gt;no-string-fallback-for-non-string-message&lt;/code&gt; rule in &lt;a href=&quot;https://github.com/github/gh-aw/pull/55052&quot;&gt;PR #55052&lt;/a&gt;. It looks for a narrow shape: code confirms that &lt;code dir=&quot;auto&quot;&gt;x.message&lt;/code&gt; is a string, returns it when it is, then falls back to &lt;code dir=&quot;auto&quot;&gt;String(x)&lt;/code&gt; instead of &lt;code dir=&quot;auto&quot;&gt;String(x.message)&lt;/code&gt;. The rule is a warning, not an automatic rewrite, because a readable fallback still needs local judgment.&lt;/p&gt;
&lt;p&gt;The miner found four live occurrences in &lt;code dir=&quot;auto&quot;&gt;actions/setup/js&lt;/code&gt;: &lt;code dir=&quot;auto&quot;&gt;dispatch_workflow.cjs&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;route_slash_command.cjs&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;log_parser_shared.cjs&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;safeoutputs_cli.cjs&lt;/code&gt;. Each deserves its own fix decision. The rule simply ensures that this particular sharp edge is no longer invisible.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-real-product-is-the-feedback-loop&quot;&gt;The real product is the feedback loop&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The lasting outcome here is not only a better error message. It is a maintenance system that keeps learning: a specification defines the promise, a daily check tests it, an issue investigates the signal, a small repair closes the gap, and a lint rule helps prevent the pattern from returning.&lt;/p&gt;
&lt;p&gt;That is the kind of automation worth building. It does not replace engineering judgment; it creates more opportunities to apply it where it matters most. Follow &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt; for the status of the repair and rule proposals, and inspect the linked workflows to adapt this feedback loop in your own repository.&lt;/p&gt;</content:encoded></item><item><title>Agent of the Day – August 21, 2026</title><link>https://github.github.com/gh-aw/blog/2026-08-21-agent-of-the-day/</link><guid isPermaLink="true">https://github.github.com/gh-aw/blog/2026-08-21-agent-of-the-day/</guid><description>Meet Code Simplifier, the daily workflow that quietly untangles small pockets of complexity across gh-aw, one careful refactor at a time.</description><pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day--august-21-2026-the-tidy-upper&quot;&gt;Agent of the Day – August 21, 2026: The Tidy-Upper&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Big refactors get all the attention, but most technical debt accumulates in tiny increments — a copy-pasted loop here, a redundant conditional there. Nobody schedules time to fix these on their own; they’re too small to justify a dedicated sprint and too easy to overlook during a busy review. Today’s spotlight is built specifically for that gap: a workflow that hunts for small, low-risk simplification opportunities every day and quietly cleans them up.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;agent-of-the-day-the-tidy-upper&quot;&gt;Agent of the Day: The Tidy-Upper&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;We’re calling this persona &lt;strong&gt;The Tidy-Upper&lt;/strong&gt;, and it belongs to &lt;strong&gt;Code Simplifier&lt;/strong&gt;, a scheduled &lt;code dir=&quot;auto&quot;&gt;gh-aw&lt;/code&gt; workflow that runs daily against the &lt;code dir=&quot;auto&quot;&gt;github/gh-aw&lt;/code&gt; repository. Rather than chasing sweeping architectural changes, it scans a deterministic list of candidate files, scores them for simplification opportunities, and picks the single clearest, lowest-risk target for that day’s pass.&lt;/p&gt;
&lt;p&gt;The Tidy-Upper’s &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/32328256109&quot;&gt;August 20 run&lt;/a&gt; is a great example of its discipline. Working from a pre-computed candidate list (&lt;code dir=&quot;auto&quot;&gt;source-files.json&lt;/code&gt;) rather than re-querying GitHub for history — a deliberate token-efficiency guardrail baked into the workflow — it reviewed 20 candidate files, including &lt;code dir=&quot;auto&quot;&gt;add_comment.cjs&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;add_labels.cjs&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;purity_scan.go&lt;/code&gt;, and deferred all of them as too large or too risky for an unattended pass. Instead it zeroed in on &lt;code dir=&quot;auto&quot;&gt;.squad/templates/ralph-triage.js&lt;/code&gt;, where the &lt;code dir=&quot;auto&quot;&gt;findMember()&lt;/code&gt; helper ran four separate sequential loops over a roster array — one each for exact name match, exact role match, name substring match, and role substring match.&lt;/p&gt;
&lt;p&gt;Its fix replaced those four loops with a single &lt;code dir=&quot;auto&quot;&gt;MEMBER_MATCH_STRATEGIES&lt;/code&gt; array of match predicates, tried in order via one &lt;code dir=&quot;auto&quot;&gt;roster.find(...)&lt;/code&gt; call. The behavior is preserved exactly: same priority order, same normalization, same early-return semantics. It’s the kind of change a human reviewer nods along to instantly, precisely because nothing risky happened — just less code doing the same job. The workflow validated its own work with &lt;code dir=&quot;auto&quot;&gt;node --check&lt;/code&gt;, confirmed &lt;code dir=&quot;auto&quot;&gt;make build&lt;/code&gt; succeeded, and noted honestly that no existing test harness covers that standalone template script, rather than pretending otherwise. That PR shipped as &lt;a href=&quot;https://github.com/github/gh-aw/issues/54129&quot;&gt;PR/issue #54129&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The very next day, &lt;a href=&quot;https://github.com/github/gh-aw/actions/runs/32443619618&quot;&gt;run #268 on August 21&lt;/a&gt; kept the streak going, again completing successfully and landing a follow-up pull request — &lt;a href=&quot;https://github.com/github/gh-aw/pull/52622&quot;&gt;PR #52622&lt;/a&gt; — continuing the same pattern of small, verifiable wins. Across its last three runs, the workflow logged zero errors, zero missing tools, and a near-perfect firewall record (0–1% blocked requests out of well over a hundred network calls each run), evidence that it’s operating exactly within its intended, tightly scoped lane.&lt;/p&gt;
&lt;p&gt;What’s notable about the Tidy-Upper isn’t ambition — it’s restraint. It explicitly reviewed larger, juicier refactor targets and said “not today” because the risk-to-value ratio wasn’t right for an unattended agent. That kind of self-imposed conservatism is what makes daily automated code changes trustworthy enough to actually merge.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it-yourself&quot;&gt;Try it yourself&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Curious how a workflow like Code Simplifier is put together, or want to spin up your own daily housekeeping agent? Check out &lt;a href=&quot;https://github.com/github/gh-aw&quot;&gt;github/gh-aw&lt;/a&gt; and start building.&lt;/p&gt;</content:encoded></item></channel></rss>