You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Analysis of .github/workflows/*.lock.yml in github/gh-aw. Single-script compact JSON analysis (see Methodology). Compared against prior snapshot 2026-08-22.json where schema overlaps.
Executive summary
Metric
Value
Δ vs 2026-08-22
Lockfiles parsed
290
+1 (289)
Lockfiles skipped/malformed
0
—
Total size
43,090,530 bytes (~41.1 MB)
+423,285 B (+1.0%)
Avg size
148,588 B (~145.1 KB)
+950 B
Min / Max size
89,104 B / 238,455 B
~flat
Engine unknown
0 / 290
—
Permissions unknown (agent job)
0 / 290
—
File size distribution
Range 89.1 KB – 238.5 KB, avg 145.1 KB. Largest: api-consumption-report.lock.yml (176.1 KB), agent-performance-analyzer.lock.yml (163.6 KB), agentic-token-audit.lock.yml (160.3 KB).
Size correlates with job count: the 5 largest files are also among the highest job-count workflows (7–9 jobs), consistent with more jobs → more embedded step/script YAML.
Top combinations: schedule + workflow_dispatch (192, 66.2%), workflow_dispatch only (48, 16.6%), pull_request + workflow_dispatch (37, 12.8%).
Cron scheduling is heavily staggered — of 195 scheduled workflows, cron strings are almost all unique. Only a handful repeat exactly: 7 5 * * * (×3), and 38 3 * * *, 40 3 * * *, 41 4 * * *, 26 5 * * *, 9 3 * * *, 23 11 * * *, 49 14 * * 1-5, 37 5 * * * (×2 each). This indicates deliberate per-workflow minute/hour jitter rather than round-number scheduling, minimizing thundering-herd load on runners.
Safe outputs analysis
Type
Text-presence count
% of 290
create-discussion
290
100%
create-issue
145
50.0%
add-comment
145
50.0%
create-pull-request
81
27.9%
create-pull-request-review-comment
18
6.2%
update-issue
12
4.1%
Caveat: this counts textual occurrence of each safe-output key anywhere in the lockfile (including shared handler boilerplate), so it's an upper bound, not actual usage. The MCP-tool-invocation signal (below) is tighter: only 91/290 (31%) workflows actually have create_discussion wired as an invokable tool, 142 have create_issue, 76 have add_comment, 62 have create_pull_request. Treat the tool-usage numbers as the more reliable indicator of real safe-output configuration.
Discussion category extraction returned 0 matches this run (regex against discussion_category did not match current lockfile structure) — flagged as a detection gap rather than "no categories configured"; do not read this as zero discussion-producing workflows.
Structural characteristics
Metric
Avg
Max
Jobs / workflow
7.33
14
Steps / workflow
142.77
202
Scripts (run:) / workflow
61.44
83
Structural averages are essentially flat vs. 2026-08-22 (jobs 7.32→7.33, steps 142.13→142.77, scripts 61.04→61.44), consistent with the +1 lockfile / +1.0% byte delta being incremental additions rather than a broad rewrite.
Timeout-minutes (per job, summed across all jobs in all workflows): 10min ×308, 45min ×291, 60min ×284, 90min ×3, 120min ×2, 180min ×1, 5min ×2.
Permission patterns (agent job)
The top-level permissions: {} in every lockfile carries no signal — these figures come from jobs.agent.permissions, which mirrors the workflow frontmatter:
Scope
read
write
none
contents
290
0
0
pull-requests
250
0
40
issues
244
0
46
actions
108
0
182
discussions
51
0
239
security-events
14
0
276
checks / packages / deployments
1
0
289
id-token
0
2
288
statuses / pages / attestations
0
0
290
Zero write scopes appear at the agent-job level across all 290 workflows (aside from 2 id-token: write). All real write capability lives in the union of jobs per workflow (safe-output handler jobs):
Scope
Workflows granting write (union)
issues
290 (100%)
contents
201 (69.3%)
pull-requests
142 (49.0%)
discussions
94 (32.4%)
copilot-requests
93 (32.1%)
actions
104 (35.9%)
checks
16
id-token
3
security-events
3
code-quality
2
attestations / packages / drives / statuses
1 each
All 290 workflows (100%) grant at least one write scope somewhere in their job set — confirming the safe-outputs isolation pattern: the agent job itself is read-only/none, writes are delegated to dedicated jobs.
Model distribution (top): copilot/mai-code-1-flash-picker (32), copilot/gpt-5.4 (21), copilot/claude-sonnet-4.5 (12), gpt-5.4 (7), claude-sonnet-4.6 (5), claude-haiku-4.5 (4), plus 4 workflows resolving model dynamically via ${{ needs.activation.outputs.model_size }}.
Tool & MCP patterns
MCP servers by frequency: safeoutputs 290 (100%, always present), github 119 (41.0%), agenticworkflows 42 (14.5%), serena 25 (8.6%), mcpscripts 12, tavily 5, sentry/datadog/ast-grep/deepwiki/microsoftdocs/grafana 2–3 each, long tail of 1-off integrations (mempalace, graft, agentdb, ruflo). Manifest-based detection succeeded for all 290 lockfiles (0 fallback to comment-scraping).
Most common individual tools: create_issue (142), github read-tool cluster (get_commit/get_file_contents/get_latest_release/get_release_by_tag/get_tag/list_branches/list_commits/list_releases/list_starred_repositories/list_tags/search_code/search_repositories, 117 each), PR-read cluster (~111 each), wildcard * tool grant (77), create_discussion (91), create_pull_request (62).
Interesting findings
Cron jitter is near-universal: of 195 scheduled workflows, cron strings are almost all distinct — only 9 exact strings repeat, each just 2–3×. This looks like deliberate per-workflow offset assignment to avoid synchronized runner load, not coincidence.
Copilot is the plurality engine (50%) despite this being "Claude"-branded tooling context; Claude is second (21%), Codex third (16%), with 9 other engines in single digits — a wide agent-backend experimentation surface.
Agent jobs carry essentially zero write permission (0/290 write any scope except 2 stray id-token writes) — all mutation capability is delegated to separate jobs, a strict enforcement of the safe-outputs isolation pattern across the entire fleet.
Safe-output "type presence" overstates real usage by ~3× for discussions: 290/290 lockfiles textually contain create-discussion, but only 91 (31%) actually wire it as an invokable tool — a reminder that naive text search on compiled lockfiles is not a reliable usage proxy.
Day-over-day drift is minimal: +1 lockfile, +1.0% total bytes, flat structural averages — today's change set looks incremental (added/modified 1 workflow) rather than a fleet-wide regeneration.
Note: the 2026-08-22 snapshot used a different detection methodology for triggers, engines, and per-scope permissions (those fields were empty in that run), so this comparison is limited to size/structural metrics and the safe-output counts that both methods captured comparably.
Recommendations
Audit the 46 workflows without issues: read and 40 without pull-requests: read at the agent-job level to confirm they genuinely don't need that context (vs. an oversight).
Fix discussion-category extraction at generation time (or document the field) — this run could not recover any category values from the compiled lockfiles.
Consider spacing out the 9 duplicate-cron-slot pairs/triples (e.g. 7 5 * * * ×3) since they currently compete for runners at the same instant.
Track copilot-requests: write (93 workflows) alongside AI-credit usage — it's a distinct quota surface from the engine-level token accounting.
Methodology
Single-script compact JSON analysis: one Python script (cached at /tmp/gh-aw/cache-memory/scripts/lockfile_stats_v3.py) parsed all 290 .lock.yml files with PyYAML.safe_load in one pass, emitting a compact summary JSON (11.9 KB) that this report was written from — no individual lockfile was read outside that script.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Lockfile Statistics — 2026-08-23
Analysis of
.github/workflows/*.lock.ymlingithub/gh-aw. Single-script compact JSON analysis (see Methodology). Compared against prior snapshot2026-08-22.jsonwhere schema overlaps.Executive summary
File size distribution
api-consumption-report.lock.yml(176.1 KB),agent-performance-analyzer.lock.yml(163.6 KB),agentic-token-audit.lock.yml(160.3 KB).Trigger analysis
Top combinations:
schedule + workflow_dispatch(192, 66.2%),workflow_dispatchonly (48, 16.6%),pull_request + workflow_dispatch(37, 12.8%).Cron scheduling is heavily staggered — of 195 scheduled workflows, cron strings are almost all unique. Only a handful repeat exactly:
7 5 * * *(×3), and38 3 * * *,40 3 * * *,41 4 * * *,26 5 * * *,9 3 * * *,23 11 * * *,49 14 * * 1-5,37 5 * * *(×2 each). This indicates deliberate per-workflow minute/hour jitter rather than round-number scheduling, minimizing thundering-herd load on runners.Safe outputs analysis
Caveat: this counts textual occurrence of each safe-output key anywhere in the lockfile (including shared handler boilerplate), so it's an upper bound, not actual usage. The MCP-tool-invocation signal (below) is tighter: only 91/290 (31%) workflows actually have
create_discussionwired as an invokable tool, 142 havecreate_issue, 76 haveadd_comment, 62 havecreate_pull_request. Treat the tool-usage numbers as the more reliable indicator of real safe-output configuration.Discussion category extraction returned 0 matches this run (regex against
discussion_categorydid not match current lockfile structure) — flagged as a detection gap rather than "no categories configured"; do not read this as zero discussion-producing workflows.Structural characteristics
Structural averages are essentially flat vs. 2026-08-22 (jobs 7.32→7.33, steps 142.13→142.77, scripts 61.04→61.44), consistent with the +1 lockfile / +1.0% byte delta being incremental additions rather than a broad rewrite.
Timeout-minutes (per job, summed across all jobs in all workflows): 10min ×308, 45min ×291, 60min ×284, 90min ×3, 120min ×2, 180min ×1, 5min ×2.
Permission patterns (agent job)
The top-level
permissions: {}in every lockfile carries no signal — these figures come fromjobs.agent.permissions, which mirrors the workflow frontmatter:Zero write scopes appear at the agent-job level across all 290 workflows (aside from 2
id-token: write). All real write capability lives in the union of jobs per workflow (safe-output handler jobs):All 290 workflows (100%) grant at least one write scope somewhere in their job set — confirming the safe-outputs isolation pattern: the agent job itself is read-only/none, writes are delegated to dedicated jobs.
Engine distribution
(from
gh-aw-metadataagent_id, 0 unresolved)Model distribution (top):
copilot/mai-code-1-flash-picker(32),copilot/gpt-5.4(21),copilot/claude-sonnet-4.5(12),gpt-5.4(7),claude-sonnet-4.6(5),claude-haiku-4.5(4), plus 4 workflows resolving model dynamically via${{ needs.activation.outputs.model_size }}.Tool & MCP patterns
MCP servers by frequency:
safeoutputs290 (100%, always present),github119 (41.0%),agenticworkflows42 (14.5%),serena25 (8.6%),mcpscripts12,tavily5,sentry/datadog/ast-grep/deepwiki/microsoftdocs/grafana2–3 each, long tail of 1-off integrations (mempalace,graft,agentdb,ruflo). Manifest-based detection succeeded for all 290 lockfiles (0 fallback to comment-scraping).Most common individual tools:
create_issue(142), github read-tool cluster (get_commit/get_file_contents/get_latest_release/get_release_by_tag/get_tag/list_branches/list_commits/list_releases/list_starred_repositories/list_tags/search_code/search_repositories, 117 each), PR-read cluster (~111 each), wildcard*tool grant (77),create_discussion(91),create_pull_request(62).Interesting findings
id-tokenwrites) — all mutation capability is delegated to separate jobs, a strict enforcement of the safe-outputs isolation pattern across the entire fleet.create-discussion, but only 91 (31%) actually wire it as an invokable tool — a reminder that naive text search on compiled lockfiles is not a reliable usage proxy.Historical trends (vs 2026-08-22)
Note: the 2026-08-22 snapshot used a different detection methodology for triggers, engines, and per-scope permissions (those fields were empty in that run), so this comparison is limited to size/structural metrics and the safe-output counts that both methods captured comparably.
Recommendations
issues: readand 40 withoutpull-requests: readat the agent-job level to confirm they genuinely don't need that context (vs. an oversight).7 5 * * *×3) since they currently compete for runners at the same instant.copilot-requests: write(93 workflows) alongside AI-credit usage — it's a distinct quota surface from the engine-level token accounting.Methodology
Single-script compact JSON analysis: one Python script (cached at
/tmp/gh-aw/cache-memory/scripts/lockfile_stats_v3.py) parsed all 290.lock.ymlfiles withPyYAML.safe_loadin one pass, emitting a compact summary JSON (11.9 KB) that this report was written from — no individual lockfile was read outside that script.All reactions