Add agentic labeler workflow for issues and PRs#35382
Conversation
Adds .github/workflows/agentic-labeler.md (gh-aw) that runs on new issues, new pull requests, and on manual workflow_dispatch. It chooses appropriate area-* and platform/* labels from the existing repo label set. For PRs, platform/* labels are inferred from the changed file paths (.android.cs, /Platform/iOS/, .maccatalyst.cs, etc.) per the repo's platform-file conventions.
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35382Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35382" |
There was a problem hiding this comment.
Pull request overview
Adds a new gh-aw agentic workflow intended to automatically apply existing repo labels to newly opened/reopened issues and pull requests, with PR platform labels inferred from the set of changed files.
Changes:
- Introduces an agentic workflow prompt (
agentic-labeler.md) defining labeling scope, allowed labels, and platform inference rules. - Adds the compiled GitHub Actions workflow (
agentic-labeler.lock.yml) generated viagh aw compile, including safe-output plumbing for label writes.
Show a summary per file
| File | Description |
|---|---|
| .github/workflows/agentic-labeler.md | Defines the labeling agent prompt, allowed labels list, and platform label inference rules for PRs. |
| .github/workflows/agentic-labeler.lock.yml | Compiled workflow implementing the agent run + safe-output label application and related control-plane behaviors. |
Copilot's findings
Comments suppressed due to low confidence (4)
.github/workflows/agentic-labeler.md:139
- The prompt instructs the model to use the
add-labelssafe-output, but in compiled workflows the actual safe-output tool name isadd_labels(underscore) (see.github/workflows/agentic-labeler.lock.yml:224and the safe outputs config aroundadd_labels). If the model follows this text literally, it may emit an invalid tool call and no labels will be applied. Recommend updating the wording/examples in the Output section to explicitly calladd_labelsand show the expected JSON shape (item_number,labels, optionalrepo).
.github/workflows/agentic-labeler.lock.yml:903 - The conclusion job is set to treat
noopas an issue-worthy event (GH_AW_NOOP_REPORT_AS_ISSUE: "true"). If the agent ever emits a noop (or if the platform injects one), this workflow may create a new GitHub issue instead of just doing nothing, which is outside the stated “labeling only” scope. Suggest disabling noop issue reporting (e.g., configuresafe-outputs: noop: { report-as-issue: false }in the source.mdand recompile).
GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
GH_AW_NOOP_MAX: "1"
GH_AW_WORKFLOW_NAME: "Agentic Labeler"
GH_AW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
GH_AW_AGENT_CONCLUSION: ${{ needs.agent.result }}
GH_AW_NOOP_REPORT_AS_ISSUE: "true"
with:
.github/workflows/agentic-labeler.lock.yml:946
- The workflow is configured to open issues when the agent reports missing tools or incomplete execution (
GH_AW_MISSING_TOOL_CREATE_ISSUE/GH_AW_REPORT_INCOMPLETE_CREATE_ISSUEaretrue). That can create tracker noise unrelated to labeling and contradicts the “does not communicate directly with users” intent. Recommend turning off issue creation for these reporting paths (where supported by gh-aw frontmatter) and rely on run artifacts/logs for diagnostics instead.
env:
GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
GH_AW_MISSING_TOOL_CREATE_ISSUE: "true"
GH_AW_WORKFLOW_NAME: "Agentic Labeler"
with:
github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
script: |
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
setupGlobals(core, github, context, exec, io, getOctokit);
const { main } = require('${{ runner.temp }}/gh-aw/actions/missing_tool.cjs');
await main();
- name: Record incomplete
id: report_incomplete
uses: actions/github-script@373c709c69115d41ff229c7e5df9f8788daa9553 # v9
env:
GH_AW_AGENT_OUTPUT: ${{ steps.setup-agent-output-env.outputs.GH_AW_AGENT_OUTPUT }}
GH_AW_REPORT_INCOMPLETE_CREATE_ISSUE: "true"
GH_AW_WORKFLOW_NAME: "Agentic Labeler"
.github/workflows/agentic-labeler.lock.yml:975
- Agent failures are configured to be reported as GitHub issues (
GH_AW_FAILURE_REPORT_AS_ISSUE: "true"). For a high-frequency trigger likeissues/openedandpull_request_target/opened, transient Copilot/MCP outages could generate a burst of issues. Consider disabling failure-as-issue reporting for this workflow and keep failures confined to the workflow run logs/artifacts.
GH_AW_GROUP_REPORTS: "false"
GH_AW_FAILURE_REPORT_AS_ISSUE: "true"
GH_AW_TIMEOUT_MINUTES: "15"
- Files reviewed: 2/2 changed files
- Comments generated: 3
…y contributors, use exact safe-output tool name - safe-outputs: disable noop/missing-tool/report-incomplete/failure issue creation (was contradicting the labeling-only contract) - on: roles: all (workflow is safe to run for community contributors since the agent is read-only and writes go through the sandboxed safe-output job) - prompt: refer to the safe-output tool by its exact name add_labels
🔍 Multi-Model Review — Agentic Labeler WorkflowReviewed by Claude Opus 4.7, Claude Opus 4.6, and GPT-5.5 in parallel. Below is the synthesized findings, deduplicated and severity-ranked. 🔴 High:
|
…n platform paths, drop reopened on issues - Replace 'gh label list' instruction with the list_labels MCP tool (the agent sandbox has no authenticated gh CLI) - Require explicit item_number on every add_labels call (works under workflow_dispatch where there is no event context) - Require noop call when no labels apply (signals the run completed intentionally) - Tighten platform path patterns to /Platform(s)?/<Name>/ only; drop bare /Android/, /iOS/, /Windows/, /MacCatalyst/, /macOS/, /Tizen/ (template/docs paths matched too broadly) - Remove 'reopened' from issues trigger to avoid re-adding labels a maintainer has manually removed (PRs keep reopened — different lifecycle) - Replace non-existent label examples (bug, regression, proposal) with real ones (t/bug, t/enhancement, i/regression, s/needs-repro, p/0-3)
|
@kubaflo — thanks for the multi-model review! Walking through each item with what was verified and what changed (commit
✅ Fixed. The prompt now uses the
❌ Not applicable. Verified — neither
✅ Fixed for issues. Removed
✅ Fixed. The "Target" section now tells the agent to determine the target item number from the trigger or
✅ Fixed. Tightened the platform path patterns to only
✅ Fixed. Changed "consider calling
❌ Not applicable. Verified via Bonus fix: Replaced bogus label examples in the promptWhile verifying the labels above, I noticed the prompt's "other useful labels" examples ( Summary
Workflow recompiles cleanly. Thanks again for the thorough review! |
|
/azp run maui-pr-uitests, maui-pr-devicetests |
|
Azure Pipelines could not run because the pipeline triggers exclude this branch/path. |
🔍 Multi-Model Re-Review — Post Commit 6Re-reviewed by Claude Opus 4.7, Claude Opus 4.6, and GPT-5.5 after commit ✅ Previous findings — verification
🔴 Critical:
|
| Prompt says | Actual repo label |
|---|---|
t/enhancement |
t/enhancement ☀️ |
t/docs |
t/docs 📝 |
t/breaking |
t/breaking 💥 |
s/duplicate |
s/duplicate 2️⃣ |
GitHub's label API requires exact string match including emoji. The other 8 examples (t/bug, i/regression, s/needs-repro, s/needs-info, p/0–p/3) are correct.
Suggested fix: Update to exact names with emoji, or drop these four and let the agent discover them via list_label.
🟡 Medium: s/needs-info and s/needs-repro trigger repo automation on PRs
(GPT-5.5) — The prompt allows applying s/needs-info and s/needs-repro to any item. But repo policy automation (resourceManagement.yml) treats these as issue-only on PRs: it replaces s/needs-info with s/pr-needs-author-input and removes s/needs-repro, posting comments in both cases. The agent could trigger unintended bot comments.
Suggested fix: Add a note: "On PRs, use s/pr-needs-author-input instead of s/needs-info. Do not apply s/needs-repro to PRs."
✅ Verified correct / non-issues
/AndroidNative/path: Valid —src/Core/AndroidNative/exists in the repo- Lock file: Recompiled with matching v0.68.3 compiler; hash updated
reopenedasymmetry (issues: removed, PRs: kept): Reasonable design choice — PRs are more likely to need re-evaluation after reopen- Platform pattern tightening: Correctly scoped to
/Platform/<Name>/and/Platforms/<Name>/conventions
Review by Claude Opus 4.7 + Claude Opus 4.6 + GPT-5.5, synthesized by Claude Opus 4.6 (1M).
…emoji label names, PR-specific status guidance - toolsets: add 'labels' so the list_label / get_label MCP tools are available (default toolset doesn't include them) - prompt: rename list_labels -> list_label (singular, per github-mcp-server source) - prompt: warn about list_label's 100-item cap (no pagination); recommend get_label for verification when picking labels not surfaced in the listing - prompt: use exact label names with emoji suffixes for t/enhancement, t/docs, t/breaking, s/duplicate - prompt: add PR-specific caveat — don't apply s/needs-info or s/needs-repro to PRs (repo automation rewrites/removes them); use s/pr-needs-author-input instead
|
@kubaflo — thanks for the re-review! All four findings verified against
✅ Fixed. Verified in // ListLabels lists labels from a repository
func ListLabels(t translations.TranslationHelperFunc) inventory.ServerTool {
return NewTool(
ToolsetLabels,
mcp.Tool{
Name: "list_label",
...Both the toolset (
✅ Confirmed and worked around. Verified the source — the GraphQL query is hard-coded Fix in prompt: added an explicit pagination caveat instructing the agent to:
I considered upstreaming a pagination fix to github-mcp-server, but that's a separate workstream — the prompt-level workaround is sufficient for now.
✅ Fixed. Verified all four by enumerating the live label list. Updated to exact strings including emoji. Also added an explicit instruction in the prompt: "using exact names including any emoji suffixes."
✅ Fixed. Verified — Summary
Lock file recompiles cleanly. Thanks for catching the toolset gap — that one would have silently broken the entire workflow at runtime. |
🔍 Multi-Model Re-Review — Post Commit 7 (045ad5a)Re-reviewed by Claude Opus 4.7, Claude Opus 4.6, and GPT-5.5 after commit ✅ All four previous findings — properly fixed
✅ New label examples — all verified to existAll 7 new examples ( ✅ Tool availability verified
🟢 No new issues foundAll three models independently verified the changes and found no significant issues. The PR is in good shape for merge. Review by Claude Opus 4.7 + Claude Opus 4.6 + GPT-5.5, synthesized by Claude Opus 4.6 (1M). |
|
/azp run maui-pr-uitests, maui-pr-devicetests |
|
Azure Pipelines could not run because the pipeline triggers exclude this branch/path. |
PureWeen
left a comment
There was a problem hiding this comment.
Adversarial PR Review + gh-aw Guide Evaluation
Methodology: 3 independent AI reviewers with adversarial consensus (unanimous → include, 2/3 → include at lower severity, 1/3 → follow-up dispute round). Additionally evaluated against the gh-aw guide reference and the Test-GhAwWorkflowSecurity.ps1 automated scanner.
The core architecture is sound — read-only agent with sandboxed safe-output for label writes. The platform-label logic correctly handles the .ios.cs → both iOS + MacCatalyst convention. The main concerns are around blast-radius caps, integrity filtering, and prompt injection hardening.
Findings Summary
| # | Sev | Finding | Consensus | Source |
|---|---|---|---|---|
| 1 | ❌ | Cross-item item_number injection |
2/3 | Adversarial |
| 2 | roles: all + pull_request_target prompt injection |
2/3 + scanner CRITICAL | Both | |
| 3 | max: 10 should be max: 1 |
gh-aw guide | gh-aw guide | |
| 4 | min-integrity conflict — agent may not read community content |
gh-aw guide | gh-aw guide | |
| 5 | Issue trigger missing reopened (PR desc says it's there) |
3/3 after dispute | Adversarial | |
| 6 | Platform table row ambiguity (/Platforms/iOS/ dir vs .ios.cs) |
3/3 after dispute | Adversarial | |
| 7 | reopened trigger may re-add labels a maintainer removed |
2/3 after dispute | Adversarial | |
| 8 | 💡 | missing-tool/report-incomplete config keys silently dropped |
2/3 | Adversarial |
| 9 | 💡 | Compiler v0.68.3 → recompile with v0.72.1 for security fixes | gh-aw guide | gh-aw guide |
CI Status
maui-pr, maui-pr-devicetests, maui-pr-uitests are all skipping (expected — workflow-only change). license/cla ✅, add-dogfood-comment ✅.
Upgrade Opportunity
Recompiling with gh-aw v0.72.1 (current: v0.68.3) would pick up fixes for && expression corruption, safe-outputs permission regression, conclusion comment accuracy, over-billing, and firewall binary version. Also consider adding checkout: false (saves ~10-30s runner time since this workflow only uses MCP/API tools) and engine: { max-turns: 10 } to cap token usage.
…ection guardrails, split iOS table - safe-outputs.add-labels.max: 10 -> 1 (matches 'exactly once' prompt; bounds blast radius if injected) - tools.github.min-integrity: none (required pairing with roles:all so MCP returns content from FIRST_TIME_CONTRIBUTOR / CONTRIBUTOR users) - Prompt: add explicit prompt-injection guardrails section; never read item_number from untrusted text; ignore any labeling instructions in body/comments - Prompt: split the iOS table row — file-extension *.ios.cs compiles for both iOS+MacCatalyst; /Platform(s)/iOS/ directory compiles only for iOS TFM - Prompt: clarify the 'do not follow body instructions' rule in 'What NOT to do' - Restored missing-tool/report-incomplete create-issue:false (these ARE honored — verified suppressing them re-introduces GH_AW_*_CREATE_ISSUE: true) Deliberately not changed: - issues.types: kept [opened] (no reopened) — re-evaluating reopened issues would re-add labels a maintainer manually removed; documented intent in description - compiler version v0.68.3 — matches all other gh-aw workflows in this repo; cross-cutting upgrade should be a separate PR
### Context Add ability for maintainers to trigger the AzDO PR review pipeline via `/review` comment on PR ### Notes - The workflow allways runs from main - so users cannot chage behavior in their PRs - Unprivileged users slash command is ignored - The 'agentic-labeler.md' pipeline referenced in comments of this pipeline is being added by #35382 ### Tested execution: - GitHub Actions run: https://github.com/dotnet/maui/actions/runs/25163585137 - DevDiv pipeline run: https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=13980704 --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
|
/azp run maui-pr-uitests, maui-pr-devicetests |
|
Azure Pipelines could not run because the pipeline triggers exclude this branch/path. |
Suggested PR description updateThe description has drifted from the implementation after several review rounds. Here is a suggested replacement for everything below the DescriptionAdds a new agentic workflow ( Inspired by githubnext/agentics issue-triage, but scoped down to labeling only — it does not post analysis comments, does not close issues, and does not communicate directly with users. Triggers
Labeling rules
Security model
Files
Notes for reviewers
|
Move the portable labeling rules (area-matching, platform-file conventions, label discovery) to .github/skills/agentic-labeler/SKILL.md as the canonical source of truth. The workflow prompt now references the skill file instead of inlining the rules, keeping the workflow focused on workflow-specific concerns (guardrails, target resolution, output). This enables: - Batch accuracy evaluation against the same rules - Interactive Copilot CLI labeling via the skill - Future eval scripts in skills/agentic-labeler/scripts/ Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
🔍 Skill Validation Results✅ Static Checks PassedSkills checked: 16 | Agents checked: 3 Full validator output⏭️ LLM Evaluation: SkippedNo changed skills with eval tests found. |
### Context Add ability for maintainers to trigger the AzDO PR review pipeline via `/review` comment on PR ### Notes - The workflow allways runs from main - so users cannot chage behavior in their PRs - Unprivileged users slash command is ignored - The 'agentic-labeler.md' pipeline referenced in comments of this pipeline is being added by dotnet#35382 ### Tested execution: - GitHub Actions run: https://github.com/dotnet/maui/actions/runs/25163585137 - DevDiv pipeline run: https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=13980704 --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Description Adds a new agentic workflow (`gh-aw`) that automatically applies labels to new issues and pull requests, with special attention to `platform/*` labels for PRs based on the files that were changed. Inspired by [githubnext/agentics issue-triage](https://github.com/githubnext/agentics/blob/main/workflows/issue-triage.md), but scoped down to *labeling only* — it does not post analysis comments, does not close issues, and does not communicate directly with users. ## Triggers - `issues: [opened]` — labels new issues (intentionally excludes `reopened` to avoid re-adding labels a maintainer already removed, since issue bodies don't change on reopen) - `pull_request_target: [opened, reopened]` — labels new and reopened PRs (reopened PRs may have new commits, so re-evaluation is useful) - `workflow_dispatch` (with an `issue_number` input so it can be run explicitly on any issue or PR) ## Labeling rules - Fetches the repo's label set at runtime via the `list_label` / `get_label` MCP tools — not hardcoded. - Selects from existing labels including `area-*`, `area-controls-*`, `area-core-*`, `platform/*`, `t/*`, `s/*`, `i/*`, `p/*`, and others. - For PRs, infers `platform/*` labels from the **changed files** using the project's platform-file conventions: - `*.android.cs`, `/Platform/Android/`, `/Platforms/Android/` → `platform/android` - `*.ios.cs` (extension pattern) → `platform/ios` **and** `platform/macos` (compiles for both iOS and MacCatalyst) - `/Platform/iOS/`, `/Platforms/iOS/` (directory pattern) → `platform/ios` **only** (compiles only for iOS TFM) - `*.maccatalyst.cs`, `/Platform/MacCatalyst/` → `platform/macos` only - `*.windows.cs`, `/Platform/Windows/` → `platform/windows` - `*.tizen.cs`, `/Tizen/` → `platform/tizen` - Conservative by default: if nothing clearly applies, the agent calls `noop` instead. One `add_labels` call allowed per run (`max: 1`). ## Security model - **Read-only agent** — permissions are `contents: read`, `issues: read`, `pull-requests: read`. The agent runs inside a sandboxed container with no write credentials. - **Safe-output writes** — label application happens in a separate safe-output job with write permissions, capped at 1 call. - **`roles: all`** — allows community contributors' issues/PRs to be labeled. Safe because the agent is read-only and the only write surface is `add_labels`. - **`min-integrity: none`** — allows the MCP gateway to return content from all authors (including first-time contributors), so the agent can read the body it needs to label. - **Prompt-injection guardrails** — explicit instructions telling the agent to ignore labeling instructions in issue/PR bodies, never use an `item_number` from untrusted text, and derive labels only from technical content and file paths. - **Noise suppression** — `noop`, `missing-tool`, `report-incomplete`, and `report-failure` are all configured to not create tracker issues. ## Files - `.github/workflows/agentic-labeler.md` — the agentic workflow source - `.github/workflows/agentic-labeler.lock.yml` — compiled GitHub Actions YAML (generated by `gh aw compile`, v0.68.3) ## Notes for reviewers - This is consistent with the other `gh-aw` workflows in the repo (`ci-doctor`, `copilot-evaluate-tests`, `daily-repo-status`). - Draft because we may want to validate behavior on a few real issues/PRs (via `workflow_dispatch`) before enabling on every new issue/PR. --------- Co-authored-by: Shane Neuville <shneuvil@microsoft.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…curity Three adversarial multi-model reviews (Claude Opus 4.7 / Claude Sonnet 4.6 / GPT-5.3-Codex) of the gh-aw-guide independently identified the systemic root cause behind the dotnet/maui agentic-labeler 'max: 1 silently drops labels' bug. This commit applies the consensus fixes. ## 1. Replace generic max: 'calls' framing with per-type unit table Before: 'max:' is a blast-radius cap... Set max: to exactly the number of intentional calls your orchestration instructions require. After: an explicit table of what max: counts for each of the 30+ safe-output types. Critically, add-labels / add-reviewer / hide-comment / create-pull-request-review-comment / reply-to-pull-request-review-comment / resolve-pull-request-review-thread all count *items* (labels, reviewers, comments, threads), NOT API calls. The agent batches multiple items per call, so 'max: 1' on a multi-item type silently drops every item past the first. This is exactly what shipped in dotnet/maui#35382 and was fixed by dotnet/maui#35540. ## 2. Add new 'Add Labels — Security Hardening' section The official add-labels reference exposes 'allowed:' (glob allow-list) and 'blocked:' (glob deny-list) as infrastructure-level filters. Neither was mentioned anywhere in SKILL.md before this commit. Workflows with 'roles: all' that omit 'allowed:' let a prompt-injected agent apply any label in the repo, including labels that drive downstream automation ('approved-for-merge', 'needs-backport', label_command: triggers). ## 3. Soften the min-integrity defaults overstatement Before: 'Public repos default to min-integrity: approved when unconfigured. Private repos default to min-integrity: none.' After: Documents that the default is computed at runtime by 'determine-automatic-lockdown' based on event / actor / repo context — not a static per-visibility rule. Adds a prominent⚠️ callout that private repos resolving to 'none' is dangerous when the workflow has write-capable safe-outputs, because 'private repo = trusted' is a common-but-wrong assumption. ## 4. Fix the Copilot max-turns example Before: 'engine: { id: copilot, max-turns: 15 }' The engine feature-comparison table immediately below this line shows Copilot as ✗ for max-turns and Claude as ✓ — the example contradicted the matrix. Changed the example to claude and added an inline note that Copilot uses max-continuations instead. ## Findings reviewed but discarded after upstream verification - 'noop: report-as-issue: false' is real (documented under experimental/monitoring-with-projects/), not hallucinated as one agent claimed. - 'merge-pull-request' is a real safe-output (ADR-27193 dated 2026-04-19, implemented in pkg/workflow/merge_pull_request.go), not fabricated as the doc-drift agent claimed. - The 'Do NOT set min-integrity explicitly (compiler bug)' line at architecture.md:214 — already fixed in PureWeen/skills main; the reviewing agents saw a stale local copy. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Description
Adds a new agentic workflow (
gh-aw) that automatically applies labels to new issues and pull requests, with special attention toplatform/*labels for PRs based on the files that were changed.Inspired by githubnext/agentics issue-triage, but scoped down to labeling only — it does not post analysis comments, does not close issues, and does not communicate directly with users.
Triggers
issues: [opened]— labels new issues (intentionally excludesreopenedto avoid re-adding labels a maintainer already removed, since issue bodies don't change on reopen)pull_request_target: [opened, reopened]— labels new and reopened PRs (reopened PRs may have new commits, so re-evaluation is useful)workflow_dispatch(with anissue_numberinput so it can be run explicitly on any issue or PR)Labeling rules
list_label/get_labelMCP tools — not hardcoded.area-*,area-controls-*,area-core-*,platform/*,t/*,s/*,i/*,p/*, and others.platform/*labels from the changed files using the project's platform-file conventions:*.android.cs,/Platform/Android/,/Platforms/Android/→platform/android*.ios.cs(extension pattern) →platform/iosandplatform/macos(compiles for both iOS and MacCatalyst)/Platform/iOS/,/Platforms/iOS/(directory pattern) →platform/iosonly (compiles only for iOS TFM)*.maccatalyst.cs,/Platform/MacCatalyst/→platform/macosonly*.windows.cs,/Platform/Windows/→platform/windows*.tizen.cs,/Tizen/→platform/tizennoopinstead. Oneadd_labelscall allowed per run (max: 1).Security model
contents: read,issues: read,pull-requests: read. The agent runs inside a sandboxed container with no write credentials.roles: all— allows community contributors' issues/PRs to be labeled. Safe because the agent is read-only and the only write surface isadd_labels.min-integrity: none— allows the MCP gateway to return content from all authors (including first-time contributors), so the agent can read the body it needs to label.item_numberfrom untrusted text, and derive labels only from technical content and file paths.noop,missing-tool,report-incomplete, andreport-failureare all configured to not create tracker issues.Files
.github/workflows/agentic-labeler.md— the agentic workflow source.github/workflows/agentic-labeler.lock.yml— compiled GitHub Actions YAML (generated bygh aw compile, v0.68.3)Notes for reviewers
gh-awworkflows in the repo (ci-doctor,copilot-evaluate-tests,daily-repo-status).workflow_dispatch) before enabling on every new issue/PR.