GitHub Agentic Workflows

Environment Variables

Environment variables in GitHub Agentic Workflows can be defined at multiple scopes, each serving a specific purpose in the workflow lifecycle. Variables defined at more specific scopes override those at more general scopes, following GitHub Actions conventions while adding AWF-specific contexts.

GitHub Agentic Workflows supports environment variables in 13 distinct contexts:

ScopeSyntaxContextTypical Use
Workflow-levelenv:All jobsShared configuration
Job-leveljobs.<job_id>.envAll steps in jobJob-specific config
Step-levelsteps[*].envSingle stepStep-specific config
Engineengine.envAI engineEngine secrets, timeouts
Containercontainer.envContainer runtimeContainer settings
Servicesservices.<id>.envService containersDatabase credentials
Sandbox Agentsandbox.agent.envSandbox runtimeSandbox configuration
Sandbox MCPsandbox.mcp.envModel Context Protocol (MCP) gatewayMCP debugging
MCP Toolstools.<name>.envMCP server processMCP server secrets
MCP Scriptsmcp-scripts.<name>.envMCP script executionTool-specific tokens
Safe Outputs Globalsafe-outputs.envAll safe-output jobsShared safe-output config
Safe Outputs Jobsafe-outputs.jobs.<name>.envSpecific safe-output jobJob-specific config
GitHub Actions StepgithubActionsStep.envPre-defined stepsStep configuration

Workflow-level shared configuration:

---
env:
NODE_ENV: production
API_ENDPOINT: https://api.example.com
---

Job-specific overrides:

---
jobs:
validation:
env:
VALIDATION_MODE: strict
steps:
- run: npm run build
env:
BUILD_ENV: production # Overrides job and workflow levels
---

AWF-specific contexts:

---
# Engine configuration
engine:
id: copilot
env:
OPENAI_API_KEY: ${{ secrets.CUSTOM_KEY }}
# MCP server with secrets
tools:
database:
command: npx
args: ["-y", "mcp-server-postgres"]
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
# Safe outputs with custom PAT
safe-outputs:
create-issue:
env:
GITHUB_TOKEN: ${{ secrets.CUSTOM_PAT }}
---

Agents can write markdown content to the $GITHUB_STEP_SUMMARY environment variable to publish a formatted summary visible in the GitHub Actions run view.

Inside the AWF sandbox, $GITHUB_STEP_SUMMARY is redirected to a file at /tmp/gh-aw/agent-step-summary.md. After agent execution completes, the framework automatically appends the contents of that file to the real GitHub step summary. Secret redaction runs before the content is published.

Example: an agent writing a brief analysis result to the step summary:

Terminal window
echo "## Analysis complete" >> "$GITHUB_STEP_SUMMARY"
echo "Found 3 issues across 12 files." >> "$GITHUB_STEP_SUMMARY"

The output appears in the Summary tab of the GitHub Actions workflow run.

GitHub Agentic Workflows automatically injects the following environment variables into every agentic engine execution step (both the main agent run and the threat detection run). These variables are read-only from the agent’s perspective and are useful for writing workflows or agents that need to detect their execution context.

VariableValueDescription
GITHUB_AW"true"Present in every gh-aw engine execution step. Agents can check for this variable to confirm they are running inside a GitHub Agentic Workflow.
GH_AW_PHASE"agent" or "detection"Identifies which execution phase is active. "agent" for the main run; "detection" for the threat-detection safety check run that precedes the main run.
GH_AW_VERSIONe.g. "0.40.1"The gh-aw compiler version that generated the workflow. Useful for conditional logic that depends on a minimum feature version.

These variables appear alongside other GH_AW_* context variables in the compiled workflow:

env:
GITHUB_AW: "true"
GH_AW_PHASE: agent # or "detection"
GH_AW_VERSION: "0.40.1"
GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt

These variables configure the gh aw CLI tool. Set them in your local shell environment or as repository/organization variables in GitHub Actions.

VariableDefaultDescription
DEBUGdisablednpm-style namespace debug logging. DEBUG=* enables all output; DEBUG=cli:*,workflow:* selects specific namespaces. Exclusions are supported: DEBUG=*,-workflow:test. Also activated when ACTIONS_RUNNER_DEBUG=true.
DEBUG_COLORS1 (enabled)Set to 0 to disable ANSI colors in debug output. Colors are automatically disabled when output is not a TTY.
ACCESSIBLEemptyAny non-empty value enables accessibility mode, which disables spinners and animations. Also enabled when TERM=dumb or NO_COLOR is set.
NO_COLORemptyAny non-empty value disables colored output and enables accessibility mode. Follows the no-color.org standard.
GH_AW_ACTION_MODEauto-detectedOverrides how JavaScript is embedded in compiled workflows. Valid values: dev, release, script, action. When unset, the CLI auto-detects the appropriate mode.
GH_AW_FEATURESemptyComma-separated list of experimental feature flags to enable globally. Values in workflow features: frontmatter take precedence over this variable.
GH_AW_MAX_CONCURRENT_DOWNLOADS10Maximum number of parallel log and artifact downloads for gh aw logs. Valid range: 1100.
GH_AW_MCP_SERVERunsetWhen set, disables the automatic update check. Set automatically when gh aw runs as an MCP server subprocess — no manual configuration needed.

Enabling debug logging:

Terminal window
# All namespaces
DEBUG=* gh aw compile
# Specific namespaces
DEBUG=cli:*,workflow:* gh aw compile
# Without colors
DEBUG_COLORS=0 DEBUG=* gh aw compile

These variables override the default AI model used for agent runs and threat detection. Set them as GitHub Actions repository or organization variables to apply org-wide defaults without modifying workflow frontmatter.

VariableEngine
GH_AW_MODEL_AGENT_COPILOTGitHub Copilot
GH_AW_MODEL_AGENT_CLAUDEAnthropic Claude
GH_AW_MODEL_AGENT_CODEXOpenAI Codex
GH_AW_MODEL_AGENT_GEMINIGoogle Gemini
GH_AW_MODEL_AGENT_CUSTOMCustom engine
VariableEngine
GH_AW_MODEL_DETECTION_COPILOTGitHub Copilot
GH_AW_MODEL_DETECTION_CLAUDEAnthropic Claude
GH_AW_MODEL_DETECTION_CODEXOpenAI Codex
GH_AW_MODEL_DETECTION_GEMINIGoogle Gemini

Set a model override as an organization variable:

Terminal window
gh variable set GH_AW_MODEL_AGENT_COPILOT --org my-org --body "gpt-5"

See Engines for available engine identifiers and model configuration options.


These variables provide fallback values for guard policy fields when the corresponding tools.github.* configuration is absent from workflow frontmatter. Set them as GitHub Actions organization or repository variables to enforce a consistent policy across all workflows.

VariableFrontmatter fieldFormatDescription
GH_AW_GITHUB_BLOCKED_USERStools.github.blocked-usersComma- or newline-separated usernamesGitHub usernames blocked from triggering agent runs
GH_AW_GITHUB_APPROVAL_LABELStools.github.approval-labelsComma- or newline-separated label namesLabels that promote content to “approved” integrity for guard checks
GH_AW_GITHUB_TRUSTED_USERStools.github.trusted-usersComma- or newline-separated usernamesGitHub usernames elevated to “approved” integrity, bypassing guard checks

Set an org-wide blocked user list:

Terminal window
gh variable set GH_AW_GITHUB_BLOCKED_USERS --org my-org --body "bot-account1,bot-account2"

See Tools Reference for complete guard policy documentation.


Environment variables follow a most-specific-wins model, consistent with GitHub Actions. Variables at more specific scopes completely override variables with the same name at less specific scopes.

  1. Step-level (steps[*].env, githubActionsStep.env)
  2. Job-level (jobs.<job_id>.env)
  3. Workflow-level (env:)
  1. Job-specific (safe-outputs.jobs.<job_name>.env)
  2. Global (safe-outputs.env)
  3. Workflow-level (env:)

These scopes are independent and operate in different contexts: engine.env, container.env, services.<id>.env, sandbox.agent.env, sandbox.mcp.env, tools.<tool>.env, mcp-scripts.<tool>.env.

---
env:
API_KEY: default-key
DEBUG: "false"
jobs:
test:
env:
API_KEY: test-key # Overrides workflow-level
EXTRA: "value"
steps:
- run: |
# API_KEY = "test-key" (job-level override)
# DEBUG = "false" (workflow-level inherited)
# EXTRA = "value" (job-level)
---