Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions docs/src/content/docs/reference/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,31 @@ This approval is enforced by GitHub's infrastructure, not by workflow logic the

Note that the *policy* — which environments require approval, what safe outputs are configured — is defined by whoever controls the repository. The admission decision for each run can be external; the admission policy itself is internal to repository owners.

**Fully off-platform admission control**

If your threat model requires an authority completely outside GitHub's control plane — such as an external policy engine, a PAM/PIM system, or a compliance approval workflow — call that system from your gate job before it proceeds:

```yaml wrap
jobs:
external-admission:
runs-on: ubuntu-latest

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot needs agent and detection

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added needs: [agent, detection] to the external-admission job in commit 8d408c7. This ensures the external policy call only runs after the agent job completes and threat scanning has finished — consistent with the approval-gate example above it.

needs: [agent, detection] # waits for agent output and threat scanning to complete
environment: production-deploy # optional: also adds GitHub-native reviewer gate
steps:
- name: Request admission from external authority
run: |
curl --fail -X POST https://YOUR_POLICY_ENGINE/v1/admit \

Copilot AI May 1, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The placeholder URL https://YOUR_POLICY_ENGINE/... includes an underscore, which is not valid in a DNS hostname and can cause copy/paste confusion. Consider using a syntactically valid example host (e.g., https://policy.example.com/...) while keeping it clearly placeholder text.

Suggested change
curl --fail -X POST https://YOUR_POLICY_ENGINE/v1/admit \
curl --fail -X POST https://policy.example.com/v1/admit \

Copilot uses AI. Check for mistakes.
-H "Authorization: Bearer $POLICY_TOKEN" \
-d '{"workflow_run": "${{ github.run_id }}"}'
Comment on lines +247 to +260

Copilot AI May 1, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The text says the external call can be "denied", but the example only fails the job on non-2xx/3xx HTTP responses (curl --fail). If the policy engine returns 200 with a denial decision in the response body, this workflow would still proceed and allow safe-outputs to run. Either clarify that denial must be indicated via a failing HTTP status code, or update the example to explicitly check the response and exit non-zero on denial (fail-closed).

Copilot uses AI. Check for mistakes.
env:
POLICY_TOKEN: ${{ secrets.POLICY_TOKEN }}

safe-outputs:
needs: [external-admission] # write jobs don't run until external admission is granted
```

If the external call fails or is denied, the safe output jobs never run. This places the final admission decision in a system entirely independent of GitHub.

### How is my code and data processed?

By default, your workflow is run on GitHub Actions, like any other GitHub Actions workflow, and as one if its jobs it invokes your nominated [AI Engine (coding agent)](/gh-aw/reference/engines/), run in a container. This engine may in turn make tool calls and MCP calls. When using the default **GitHub Copilot CLI**, the workflow is processed by the `copilot` CLI tool which uses GitHub Copilot's services and related AI models. The specifics depend on your engine choice:
Expand Down