github/gh-aw-mcpg
GitHub Agentic Workflows MCP Gateway
- Repository: https://github.com/github/gh-aw-mcpg
- Commit:
2ad55e19a00d015d55811baa321d1100a9ea54d9 - Generated: 2026-11-14T00:07:56+00:00
- Scorer 0.1.0, scoring prov-4+qual-2+sec-2, report schema v2
Scores
| Pillar | Score | Signal | Confidence | Coverage |
|---|---|---|---|---|
| AI provenance (estimated AI-generated share) | 86 | explicit | 95% | 100% |
| Code quality | 80 | adequate | 90% | 100% |
| Security | 71 | adequate | 85% | 100% |
AI provenance
Explicit AI attribution on 86% of first-party code added; an estimated 86% including velocity signals.
- Explicitly attributed share (lower bound): 86.3%
- Unattributed share in AI-consistent velocity bursts: 1.4%
- Estimated AI-generated share: 86.3%
| AI tool | Attributed commits | Lines added |
|---|---|---|
| GitHub Copilot coding agent | 5,671 | 271,003 |
| Claude Code | 1 | 0 |
- AI tooling configured in repo: generic-agent
Current source lines last changed by AI-attributed commits: 63,298 of 67,195.
| Findings per 1,000 lines | AI-attributed | Other | Ratio |
|---|---|---|---|
| Quality | 0.237 | 0.257 | 0.92x |
| Security | 0.205 | 0.257 | 0.8x |
- Stylometry index: 1.55 per 1,000 lines (narrated steps 10, placeholders 0, assistant phrasing 0, emoji 189). Reported as a signal, not scored.
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2025-12 | 4,532 | 0% |
| 2026-01 | 56,064 | 66% |
| 2026-02 | 29,947 | 44% |
| 2026-03 | 50,163 | 95% |
| 2026-04 | 31,247 | 100% |
| 2026-05 | 24,649 | 100% |
| 2026-06 | 30,794 | 100% |
| 2026-07 | 26,280 | 100% |
| 2026-08 | 16,325 | 100% |
| 2026-09 | 26,086 | 99% |
| 2026-10 | 11,239 | 100% |
| 2026-11 | 6,751 | 100% |
Evidence
- GitHub Copilot coding agent: trailer 'Co-authored-by: copilot' (e555b778be18)
- GitHub Copilot coding agent: on merged branch (2ad55e19a0) (c0f15e816bd9)
- GitHub Copilot coding agent: author copilot-swe-agent[bot] (322cee55db62)
- GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (4fee6e086774)
- GitHub Copilot coding agent: author copilot-swe-agent[bot] (6f3abbd66b41)
- GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (9634a6128eff)
- GitHub Copilot coding agent: author copilot-swe-agent[bot] (827d52a32f63)
- GitHub Copilot coding agent: author copilot-swe-agent[bot] (d15237d9f841)
- GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (9563329ead39)
- GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (1d7dc80a53c0)
- GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (03a7600e9737)
- GitHub Copilot coding agent: author copilot-swe-agent[bot] (f063e7ee0beb)
- GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (74be3f4a2493)
- GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (3968aef4c0b1)
- GitHub Copilot coding agent: author copilot-swe-agent[bot] (40e76ed35018)
AI provenance describes how code was produced; it is not a quality judgment. Unless attribution is explicit, these are signals consistent with AI generation, not proof. Squash/rebase workflows, imported code, and rewritten history reduce accuracy.
Code quality
Code quality is adequate: test-to-source ratio 2.27, CI runs tests; 16% of function code in complex or long functions; 7% duplicated lines. Weakest area: type safety.
| Area | Score |
|---|---|
| Complexity (lizard) | 63 |
| Duplication | 64 |
| Code smells (Opengrep) | 96 |
| Tests and CI | 100 |
| Documentation | 80 |
| Type safety | 40 |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 2,643; mean complexity 2.9, 90th percentile 6; 44 complex and 24 long functions
- Duplicated lines: 7.5% of 48,516 compared
- Tests: 152,448 test lines for 67,195 source lines (ratio 2.27); CI test commands: go test, cargo test, make test; 38% of recent source commits also change tests
- Docs missing or thin: changelog
Most complex functions:
- apply_tool_labels in guards/github-guard/rust-guard/src/labels/tool_rules.rs: complexity 104, 682 lines
- label_response_paths in guards/github-guard/rust-guard/src/labels/response_paths.rs: complexity 83, 738 lines
- handleWithDIFC in internal/proxy/handler.go: complexity 62, 222 lines
- label_response_items in guards/github-guard/rust-guard/src/labels/response_items.rs: complexity 60, 525 lines
- selectReadOnlyGraphQLOperation in internal/proxy/read_only.go: complexity 54, 185 lines
Security
Security posture is adequate: 7 known vulnerabilities in 1 dependencies; 4 high-severity SAST findings; 3 high-severity workflow issues. Weakest area: secrets.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 31 |
| Static analysis (Opengrep) | 96 |
| Vulnerable dependencies (OSV) | 95 |
| CI workflows (zizmor) | 53 |
| Posture (policy, updates, signing, lockfiles) | 100 |
| OpenSSF Scorecard | n/a |
-
Known vulnerabilities: 7 in 1 packages (critical 0, high 0, medium 0, low 0)
-
Posture checks passed: security policy, dependency updates, signed commits, lockfiles; missing: none
Top findings
| Severity | Finding | Location |
|---|---|---|
| high | opengrep/dockerfile.security.missing-user-entrypoint: By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'. [confidence medium] |
Dockerfile:141 |
| high | opengrep/go.lang.security.audit.dangerous-exec-command: Detected non-static command inside Command. Audit the input to 'exec.Command'. If unverified user data can reach this call site, this is a code injection vulnerability. A malicious actor can inject a malicious script to execute arbitrary code. [confidence low] |
internal/mcp/connection.go:131 |
| high | opengrep/go.lang.security.audit.dangerous-exec-command: Detected non-static command inside Command. Audit the input to 'exec.Command'. If unverified user data can reach this call site, this is a code injection vulnerability. A malicious actor can inject a malicious script to execute arbitrary code. [confidence low] |
internal/sys/docker.go:53 |
| high | opengrep/go.lang.security.audit.dangerous-exec-command: Detected non-static command inside Command. Audit the input to 'exec.Command'. If unverified user data can reach this call site, this is a code injection vulnerability. A malicious actor can inject a malicious script to execute arbitrary code. [confidence low] |
internal/testutil/mcptest/driver.go:104 |
| high | zizmor/template-injection: code injection via template expansion [confidence high] |
.github/workflows/container.yml:37 |
| high | zizmor/dangerous-triggers: use of fundamentally insecure workflow trigger [confidence medium] |
.github/workflows/plan.lock.yml:57 |
| high | zizmor/dangerous-triggers: use of fundamentally insecure workflow trigger [confidence medium] |
.github/workflows/repo-assist.lock.yml:75 |
| medium | opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter: Detected directly writing or similar in 'http.ResponseWriter.write()'. This bypasses HTML escaping that prevents cross-site scripting vulnerabilities. Instead, use the 'html/template' package and render data using 'template.Execute()'. [confidence low] |
internal/httputil/httputil.go:26 |
| medium | opengrep/go.lang.security.audit.crypto.missing-ssl-minversion: MinVersion is missing from this TLS configuration. By default, TLS 1.2 is currently used as the minimum when acting as a client, and TLS 1.0 when acting as a server. General purpose web applications should default to TLS 1.3 with all other protocols disabled. Only where it is known that a web se [confidence high] |
internal/mcp/connection.go:249 |
| medium | opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter: Detected directly writing or similar in 'http.ResponseWriter.write()'. This bypasses HTML escaping that prevents cross-site scripting vulnerabilities. Instead, use the 'html/template' package and render data using 'template.Execute()'. [confidence low] |
internal/proxy/handler.go:566 |
| medium | osv/GO-2026-6603: golang.org/x/[email protected] (Go) is affected by GO-2026-6603 |
go.mod |
| medium | osv/GO-2026-6610: golang.org/x/[email protected] (Go) is affected by GO-2026-6610 |
go.mod |
| medium | osv/GO-2026-6611: golang.org/x/[email protected] (Go) is affected by GO-2026-6611 |
go.mod |
| medium | osv/GO-2026-6612: golang.org/x/[email protected] (Go) is affected by GO-2026-6612 |
go.mod |
| medium | osv/GO-2026-6617: golang.org/x/[email protected] (Go) is affected by GO-2026-6617 |
go.mod |
| medium | osv/GO-2026-6860: golang.org/x/[email protected] (Go) is affected by GO-2026-6860 |
go.mod |
| medium | osv/GO-2026-6866: golang.org/x/[email protected] (Go) is affected by GO-2026-6866 |
go.mod |
| medium | zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] |
.github/workflows/ci.yml:17 |
| medium | zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] |
.github/workflows/ci.yml:68 |
| medium | zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] |
.github/workflows/ci.yml:105 |
| medium | zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] |
.github/workflows/ci.yml:144 |
| medium | zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] |
.github/workflows/ci.yml:182 |
| medium | zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] |
.github/workflows/container.yml:17 |
| medium | zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] |
.github/workflows/rebuild-smoke-codex.yml:17 |
| medium | zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] |
.github/workflows/rebuild-smoke-copilot.yml:22 |
Static signals only: the scorer never runs the project's code. Secret findings are pattern matches that were not verified, and secret values are never stored.
Repository profile
- Source lines: 67,195; test lines: 152,448
| Language | Lines |
|---|---|
| Go | 190,264 |
| Rust | 25,969 |
| Shell | 3,364 |
| Python | 46 |