v0.64.1
π Release Highlights
This release delivers a major expansion of the gh aw audit observability surface, a batch of important security hardening fixes, and two community-reported issues resolved β including a long-standing GHES host configuration bug.
β¨ What's New
-
gh aw audit diffβ Compare firewall behavior, MCP tool invocations, token usage, and run duration across two workflow runs to detect regressions and behavioral drift (gh aw audit diff <run1> <run2> [--format markdown|json]). #22996, #23118 -
Expanded
gh aw auditreport β Five new audit sections give you a single pane of glass: Engine Configuration, Prompt Analysis, Session & Agent Performance, Safe Output Summary, and MCP Server Health. Now also surfaces MCP Gateway guard policy enforcement blocks (integrity, repo-scope, access-denied) per tool and server. #22932, #22962 -
Safe Outputs replay via maintenance workflow β When a
safe_outputsjob fails or is skipped, you can now replay it manually: trigger the Agentic Maintenance workflow withoperation: safe_outputsand a run URL or ID. #22973 -
Stable heredoc delimiters β Lock files no longer diff on every recompile for unchanged workflows. Heredoc delimiters are now derived from a frontmatter hash (HMAC-SHA256), making them both stable and injection-resistant. #23030
-
Agentic fraction & action minutes β New
agentic_fraction(0.0β1.0) andaction_minutesfields in the Agentic Observability Kit surface cost-of-goods-sold (COGS) visibility and identify workflows where data-gathering turns could be moved to deterministic shell steps. #23074 -
Post-job cleanup β
actions/setupnow automatically removes/tmp/gh-aw/after every job via aruns.postlifecycle hook, reducing artifact surface on shared runners. #22938
π Security Fixes
- Heredoc delimiter injection β RCE β Randomized heredoc delimiters prevent attackers from embedding the delimiter in workflow markdown to inject shell commands into generated lock files. #23004
- Shell injection via agent file path β Closed a
shellEscapeArgpre-quoted bypass that allowed crafted agent filenames (a";id;"b.md) to execute arbitrary shell commands. #23023 - Path traversal hardening β Added
MustBeWithinboundary checks to three code paths that joined user-influenced paths without validating the result stays within the base directory. #23044 - Argument injection prevention β Compiler now rejects package/image names starting with
-before invokingnpm,pip,uv, or Docker, preventing flag injection via frontmatter MCP configs. #23045 - XSS attribute stripping β
on*event handlers andstyleattributes are now stripped from allowlisted HTML tags in sanitized content, closing a bypass via<details ontoggle="...">. #22988 - Allocation overflow fix β Fixed a potential runtime panic in
buildDomainItemswherelen(allowed)+len(blocked)could overflowinton pathological inputs (CodeQL #558). #23059 - Web Worker origin guard β Added origin validation to the wasm compiler worker's
onmessagehandler to prevent cross-origin message injection (CodeQL #546). #23063 - Extracted log directory permissions β Replaced
os.ModePerm(0777) with0750inextractZipFileto prevent world-readable log directories on systems with a permissive umask. #23036 - Security dependency updates β
picomatchpatched for CVE-2026-33671 and CVE-2026-33672;smol-tomlpatched for GHSA-v3rj-xjv7-4jmq. #22990
π Bug Fixes & Improvements
- GHES host propagation fixed β
GH_HOSTis now written toGITHUB_ENVinstead ofGITHUB_OUTPUT, making it available to all generated steps (checkout, safe-outputs, etc.) β not just user-typed steps. #22974 - Cross-label concurrency β Concurrency groups for label-triggered workflows now include
$\{\{ github.event.label.name }}, preventing simultaneous label additions from cancelling each other's runs. #23021 - Rate limit resilience β
gh aw updateandgh aw healthno longer fail fatally on transient GitHub API rate limit errors; both emit a warning and continue cleanly. #23032 - Noop-after-failure β When the AI model server returns a transient error after the agent has already called
noop, spurious failure issues are no longer filed. #23050 - Claude audit tool duration β
MaxDurationfor Claude engine bash tools now correctly showsN/Ainstead of stamping the total job time onto every tool call. #23049 - Threat detection robustness β
THREAT_DETECTION_RESULTpayloads with literal newlines in reason strings are now correctly parsed without truncation. #22982 - AWF firewall updated to
v0.25.1. #23022
π Documentation
- New Token Reference page β all tokens and secrets in one place, including precedence chains, fallback logic, and App vs PAT guidance. #22916
- New Research β Plan β Assign β Merge design pattern page. #23031
- Added Replaying Safe Outputs guide to the safe-outputs reference. #22995
skip-if-check-failingandlabel-commandtriggers are now documented in the instructions file. #23086
π Community Contributions
A huge thank you to the community members who reported issues that were resolved in this release!
@deyaaeldeen
For complete details, see CHANGELOG.
Generated by Release
What's Changed
- Add download.jetbrains.com to kotlin ecosystem domain allowlist by @Copilot in #22942
- Add maven-central.storage-download.googleapis.com to java ecosystem domains by @Copilot in #22943
- feat: expand gh aw audit with engine config, prompt, session, safe-output, and MCP server health sections by @Copilot in #22932
- Davidslater/fix detection compiler by @davidslater in #22969
- fix: write GH_HOST to GITHUB_ENV instead of GITHUB_OUTPUT by @lpcox in #22974
- [docs] Update documentation for features merged 2026-03-25 by @github-actions[bot] in #22972
- [log] Add debug logging to 5 previously unlogged files by @github-actions[bot] in #22983
- feat: add apply_safe_outputs workflow-dispatch job to agentic-maintenance by @Copilot in #22973
- feat: reduce Detection Job firewall domain allowlist to Copilot-API-only set and enable Bash * in detection job by @Copilot in #22948
- feat: add post cleanup script to actions/setup to erase /tmp/gh-aw/ by @Copilot in #22938
- build(deps): bump the npm_and_yarn group across 1 directory with 2 updates by @dependabot[bot] in #22990
- fix: strip on* event handlers and style attributes from allowlisted HTML tags in convertXmlTags() by @Copilot in #22988
- feat: surface MCP Gateway guard policy events in
gh aw auditby @Copilot in #22962 - docs: add Replaying Safe Outputs section to safe-outputs reference by @Copilot in #22995
- fix: robustly parse THREAT_DETECTION_RESULT with literal newlines in reasons (#issue) by @Copilot in #22982
- Fix heredoc delimiter injection enabling code-review bypass β RCE by @Copilot in #23004
- feat:
gh aw audit diffβ compare firewall behavior across runs by @Copilot in #22996 - Include label name in concurrency group to prevent cross-label cancellation by @Copilot in #23021
- docs: add consolidated token reference page by @lpcox in #22916
- docs: add ResearchPlanAssignOps pattern by @Copilot in #23031
- fix: ignore GitHub API rate limit errors in update and health commands by @Copilot in #23032
- Use frontmatter hash for stable heredoc EOF marker identifiers by @Copilot in #23030
- Bump DefaultFirewallVersion to v0.25.1 by @Copilot in #23022
- fix: use 0750 instead of os.ModePerm for extracted log directories by @Copilot in #23036
- fix: resolve broken documentation links causing Doc Build CI failure by @Copilot in #23039
- fix: update wasm golden files for firewall version v0.25.1 by @Copilot in #23038
- [jsweep] Clean apply_safe_outputs_replay.cjs by @github-actions[bot] in #23040
- fix: set FrontmatterHash in TestMCPScriptsStepCodeGenerationStability for deterministic heredoc delimiters by @Copilot in #23041
- security: harden filesystem path operations against path traversal by @Copilot in #23044
- fix: reject package/image names starting with '-' to prevent argument injection (#23070) by @Copilot in #23045
- fix: normalize heredoc delimiters in wasm golden test script by @Copilot in #23052
- fix: skip failure issue when agent exits non-zero after successfully calling noop by @Copilot in #23050
- fix(security): close shellEscapeArg pre-quoted bypass β shell injection via agent file path by @Copilot in #23023
- fix(audit): Claude engine bash tools show total job time as MaxDuration instead of per-tool timing by @Copilot in #23049
- fix: update wasm golden files for refactored awf command format by @Copilot in #23053
- Remove unused
devicesimport in docs/test-mobile.mjs by @Copilot in #23060 - Remove unused
basenameimport in test-wasm-golden.mjs by @Copilot in #23062 - Remove unused
outputContainervariable in editor.js by @Copilot in #23061 - Fix missing origin check in postMessage handler (CodeQL alert 546) by @Copilot in #23063
- Fix allocation-size-overflow in buildDomainItems (CodeQL #558) by @Copilot in #23059
- chore: add agentic fraction & action minutes tracking by @mnkiefer in #23074
- [instructions] Sync github-agentic-workflows.md with v0.40.1 by @github-actions[bot] in #23086
- [community] docs: update community contributions by @github-actions[bot] in #23085
- feat(audit): upgrade
audit diffwith MCP tool invocations, token usage, and duration diffs by @Copilot in #23118 - ci-doctor: switch to codex engine, drop model override, add analysis steps disclosure by @Copilot in #23119
- [docs] Self-healing documentation fixes from issue analysis - 2026-03-26 by @github-actions[bot] in #23124
Full Changelog: v0.64.0...v0.64.1