Concurrency Control
GitHub Agentic Workflows uses dual-level concurrency control to prevent resource exhaustion and ensure predictable execution:
- Per-workflow: Limits based on workflow name and trigger context (issue, PR, branch)
- Per-engine: Limits AI execution across all workflows via
engine.concurrency
Per-Workflow Concurrency
Section titled “Per-Workflow Concurrency”Workflow-level concurrency groups include the workflow name plus context-specific identifiers:
| Trigger Type | Concurrency Group | Cancel In Progress |
|---|---|---|
| Issues | gh-aw-${{ github.workflow }}-${{ issue.number }} | No |
| Pull Requests | gh-aw-${{ github.workflow }}-${{ pr.number || ref }} | Yes (new commits cancel outdated runs) |
| Push | gh-aw-${{ github.workflow }}-${{ github.ref }} | No |
| Schedule/Other | gh-aw-${{ github.workflow }} | No |
This ensures workflows on different issues, PRs, or branches run concurrently without interference.
Per-Engine Concurrency
Section titled “Per-Engine Concurrency”The default per-engine pattern gh-aw-{engine-id} ensures only one agent job runs per engine across all workflows, preventing AI resource exhaustion. The group includes only the engine ID and gh-aw- prefix - workflow name, issue/PR numbers, and branches are excluded.
jobs: agent: concurrency: group: "gh-aw-{engine-id}"Custom Concurrency
Section titled “Custom Concurrency”Override either level independently:
---on: pushconcurrency: # Workflow-level group: custom-group-${{ github.ref }} cancel-in-progress: trueengine: id: copilot concurrency: # Engine-level group: "gh-aw-copilot-${{ github.workflow }}"tools: github: allowed: [list_issues]---Safe Outputs Job Concurrency
Section titled “Safe Outputs Job Concurrency”The safe_outputs job runs independently from the agent job and can process outputs concurrently across workflow runs. Use safe-outputs.concurrency-group to serialize access when needed:
safe-outputs: concurrency-group: "safe-outputs-${{ github.repository }}" create-issue:When set, the safe_outputs job uses cancel-in-progress: false — meaning queued runs wait for the in-progress run to finish rather than being cancelled. This is useful for workflows that create issues or pull requests where duplicate operations would be undesirable.
See Safe Outputs for details.
Related Documentation
Section titled “Related Documentation”- AI Engines - Engine configuration and capabilities
- Frontmatter - Complete frontmatter reference
- Workflow Structure - Overall workflow organization
- Safe Outputs - Safe output processing and job configuration