Error Reference
This reference documents common error messages encountered when working with GitHub Agentic Workflows, organized by when they occur during the workflow lifecycle.
Schema Validation Errors
Section titled “Schema Validation Errors”Schema validation errors occur when the workflow frontmatter does not conform to the expected JSON schema. These errors are detected during the compilation process.
Frontmatter Not Properly Closed
Section titled “Frontmatter Not Properly Closed”Error Message:
frontmatter not properly closedCause: The YAML frontmatter section lacks a closing --- delimiter, or the delimiters are malformed.
Solution: Ensure the frontmatter is enclosed between two --- lines:
---on: pushpermissions: contents: read---
# Workflow contentRelated: Frontmatter must start with --- on the first line and end with --- before the markdown content begins.
Failed to Parse Frontmatter
Section titled “Failed to Parse Frontmatter”Error Message:
failed to parse frontmatter: [yaml error details]Cause: The YAML syntax in the frontmatter is invalid. Common issues include incorrect indentation, missing colons, or invalid characters.
Solution: Validate the YAML syntax. Common fixes include:
- Check indentation (use spaces, not tabs)
- Ensure colons are followed by spaces
- Quote strings containing special characters
- Verify array and object syntax
# Incorrecton:issues: types:[opened]
# Correcton: issues: types: [opened]Invalid Field Type
Section titled “Invalid Field Type”Error Message:
timeout_minutes must be an integerCause: A field received a value of the wrong type according to the schema.
Solution: Provide the correct type as specified in the frontmatter reference:
# Incorrecttimeout_minutes: "10"
# Correcttimeout_minutes: 10Imports Field Must Be Array
Section titled “Imports Field Must Be Array”Error Message:
imports field must be an array of stringsCause: The imports: field was provided but is not an array of string paths.
Solution: Provide an array of import paths:
# Incorrectimports: shared/tools.md
# Correctimports: - shared/tools.md - shared/security.mdMultiple Agent Files in Imports
Section titled “Multiple Agent Files in Imports”Error Message:
multiple agent files found in imports: 'file1.md' and 'file2.md'. Only one agent file is allowed per workflowCause: More than one file under .github/agents/ was included in the imports list.
Solution: Import only one agent file per workflow:
# Incorrectimports: - .github/agents/agent1.md - .github/agents/agent2.md
# Correctimports: - .github/agents/agent1.mdCompilation Errors
Section titled “Compilation Errors”Compilation errors occur when the workflow file is being converted to a GitHub Actions YAML workflow (.lock.yml file).
Workflow File Not Found
Section titled “Workflow File Not Found”Error Message:
workflow file not found: [path]Cause: The specified workflow file does not exist at the given path.
Solution: Verify the file exists in .github/workflows/ and the filename is correct. Use gh aw compile without arguments to compile all workflows in the directory.
Failed to Resolve Import
Section titled “Failed to Resolve Import”Error Message:
failed to resolve import 'path': [details]Cause: An imported file specified in the imports: field could not be found or accessed.
Solution: Verify the import path:
- Check the file exists at the specified path
- Ensure the path is relative to the repository root
- Verify file permissions allow reading
# Imports are relative to repository rootimports: - .github/workflows/shared/tools.mdInvalid Workflow Specification
Section titled “Invalid Workflow Specification”Error Message:
invalid workflowspec: must be owner/repo/path[@ref]Cause: When using remote imports, the specification format is incorrect.
Solution: Use the correct format: owner/repo/path[@ref]
imports: - githubnext/gh-aw/.github/workflows/shared/example.md@mainSection Not Found
Section titled “Section Not Found”Error Message:
section 'name' not foundCause: An attempt to extract a specific section from the frontmatter failed because the section doesn’t exist.
Solution: Verify the referenced section exists in the frontmatter. This typically occurs during internal processing and may indicate a bug.
Runtime Errors
Section titled “Runtime Errors”Runtime errors occur when the compiled workflow executes in GitHub Actions.
Time Delta Errors
Section titled “Time Delta Errors”Error Message:
invalid time delta format: +[value]. Expected format like +25h, +3d, +1w, +1mo, +1d12h30mCause: The stop-after field in the on: section contains an invalid time delta format.
Solution: Use the correct time delta syntax:
on: issues: types: [opened] stop-after: +24h # Valid: hours, days, weeks, monthsSupported units:
h- hours (minimum unit for stop-after)d- daysw- weeksmo- months
Error Message:
minute unit 'm' is not allowed for stop-after. Minimum unit is hours 'h'. Use +[hours]h instead of +[minutes]mCause: The stop-after field uses minutes (m), but the minimum allowed unit is hours.
Solution: Convert to hours:
# Incorrectstop-after: +90m
# Correctstop-after: +2hTime Delta Too Large
Section titled “Time Delta Too Large”Error Message:
time delta too large: [value] [unit] exceeds maximum of [max]Cause: The time delta exceeds the maximum allowed value for the specified unit.
Solution: Reduce the time delta or use a larger unit:
- Maximum: 12 months, 52 weeks, 365 days, 8760 hours
# Incorrectstop-after: +400d
# Correctstop-after: +12moDuplicate Time Unit
Section titled “Duplicate Time Unit”Error Message:
duplicate unit '[unit]' in time delta: +[value]Cause: The same time unit appears multiple times in a time delta.
Solution: Combine values for the same unit:
# Incorrectstop-after: +1d2d
# Correctstop-after: +3dUnable to Parse Date-Time
Section titled “Unable to Parse Date-Time”Error Message:
unable to parse date-time: [value]. Supported formats include: YYYY-MM-DD HH:MM:SS, MM/DD/YYYY, January 2 2006, 1st June 2025, etcCause: The stop-after field contains an absolute timestamp that couldn’t be parsed.
Solution: Use one of the supported date formats:
stop-after: "2025-12-31 23:59:59"# orstop-after: "December 31, 2025"# orstop-after: "12/31/2025"JQ Not Found
Section titled “JQ Not Found”Error Message:
jq not found in PATHCause: The jq command-line tool is required but not available in the environment.
Solution: Install jq on the system:
# Ubuntu/Debiansudo apt-get install jq
# macOSbrew install jqAuthentication Errors
Section titled “Authentication Errors”Error Message:
authentication requiredCause: GitHub CLI authentication is required but not configured.
Solution: Authenticate with GitHub CLI:
gh auth loginFor GitHub Actions, ensure GITHUB_TOKEN or the appropriate token is available:
env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}Engine-Specific Errors
Section titled “Engine-Specific Errors”Manual Approval Invalid Format
Section titled “Manual Approval Invalid Format”Error Message:
manual-approval value must be a stringCause: The manual-approval: field in the on: section has an incorrect type.
Solution: Provide a string value:
# Incorrecton: manual-approval: true
# Correcton: manual-approval: "Approve deployment to production"Invalid On Section Format
Section titled “Invalid On Section Format”Error Message:
invalid on: section formatCause: The on: trigger configuration is malformed or contains unsupported syntax.
Solution: Verify the trigger configuration follows GitHub Actions syntax:
# Valid formatson: push
# oron: push: branches: [main]
# oron: issues: types: [opened, edited]File Processing Errors
Section titled “File Processing Errors”Failed to Read File
Section titled “Failed to Read File”Error Message:
failed to read file [path]: [details]Cause: The file cannot be read due to permissions, missing file, or I/O error.
Solution: Verify:
- File exists at the specified path
- File permissions allow reading
- Disk is not full or experiencing errors
Failed to Create Directory
Section titled “Failed to Create Directory”Error Message:
failed to create .github/workflows directory: [details]Cause: The required directory structure cannot be created.
Solution: Check file system permissions and available disk space.
Workflow File Already Exists
Section titled “Workflow File Already Exists”Error Message:
workflow file '[path]' already exists. Use --force to overwriteCause: Attempting to create a workflow that already exists.
Solution: Use the --force flag to overwrite:
gh aw init my-workflow --forceSafe Output Errors
Section titled “Safe Output Errors”Failed to Parse Existing MCP Config
Section titled “Failed to Parse Existing MCP Config”Error Message:
failed to parse existing mcp.json: [details]Cause: The existing .vscode/mcp.json file contains invalid JSON.
Solution: Fix the JSON syntax or delete the file to regenerate:
# Validate JSONcat .vscode/mcp.json | jq .
# Or remove and regeneraterm .vscode/mcp.jsonFailed to Marshal MCP Config
Section titled “Failed to Marshal MCP Config”Error Message:
failed to marshal mcp.json: [details]Cause: Internal error when generating the MCP configuration.
Solution: This typically indicates a bug. Report the issue with reproduction steps.
Top User-Facing Errors
Section titled “Top User-Facing Errors”This section documents the most common errors you may encounter when working with GitHub Agentic Workflows.
Cannot Use Command with Event Trigger
Section titled “Cannot Use Command with Event Trigger”Error Message:
cannot use 'command' with 'issues' in the same workflowCause: The workflow specifies both a command: trigger and a conflicting event like issues, issue_comment, pull_request, or pull_request_review_comment. Command triggers automatically handle these events internally.
Solution: Remove the conflicting event trigger. The command: configuration already includes support for these events:
# Incorrect - command conflicts with issueson: command: name: bot-helper issues: types: [opened]
# Correct - command handles issues automaticallyon: command: name: bot-helperNote: Command triggers can be restricted to specific events using the events: field:
on: command: name: bot-helper events: [issues, issue_comment] # Only active on these eventsStrict Mode Network Configuration Required
Section titled “Strict Mode Network Configuration Required”Error Message:
strict mode: 'network' configuration is requiredCause: The workflow is compiled with --strict flag but does not include network configuration. Strict mode requires explicit network permissions for security.
Solution: Add network configuration to the workflow:
# Option 1: Use defaults (recommended for most workflows)network: defaults
# Option 2: Specify allowed domains explicitlynetwork: allowed: - "api.github.com" - "*.example.com"
# Option 3: Deny all network accessnetwork: {}Example: Complete workflow with network configuration:
---on: issuespermissions: contents: readnetwork: defaultstools: github: allowed: [list_issues]---
# Issue Handler
Process issues with network access restricted to defaults.Strict Mode Write Permission Not Allowed
Section titled “Strict Mode Write Permission Not Allowed”Error Message:
strict mode: write permission 'contents: write' is not allowedCause: The workflow is compiled with --strict flag but requests write permissions on contents, issues, or pull-requests. Strict mode enforces read-only operations.
Solution: Use safe-outputs instead of write permissions:
# Incorrect - write permissions in strict modepermissions: contents: write issues: write
# Correct - use safe-outputspermissions: contents: read actions: readsafe-outputs: create-issue: labels: [automation] create-pull-request: draft: trueExample: Complete workflow with safe outputs:
---on: pushpermissions: contents: read actions: readnetwork: defaultssafe-outputs: create-issue: title-prefix: "[analysis] " labels: [automated-review]---
# Code Analysis
Analyze changes and create an issue with findings.Strict Mode Network Wildcard Not Allowed
Section titled “Strict Mode Network Wildcard Not Allowed”Error Message:
strict mode: wildcard '*' is not allowed in network.allowed domainsCause: The workflow uses * wildcard in network.allowed domains when compiled with --strict flag. Strict mode requires specific domain patterns.
Solution: Replace wildcard with specific domains or patterns:
# Incorrectnetwork: allowed: - "*"
# Correct - use specific domainsnetwork: allowed: - "api.github.com" - "*.githubusercontent.com" - "example.com"
# Or use defaultsnetwork: defaultsHTTP MCP Tool Missing Required URL Field
Section titled “HTTP MCP Tool Missing Required URL Field”Error Message:
http MCP tool 'my-tool' missing required 'url' fieldCause: An HTTP-based MCP server configuration is missing the required url: field.
Solution: Add the url: field to the HTTP MCP server configuration:
# Incorrectmcp-servers: my-api: type: http headers: Authorization: "Bearer token"
# Correctmcp-servers: my-api: type: http url: "https://api.example.com/mcp" headers: Authorization: "Bearer token"Example: Complete HTTP MCP configuration:
---on: workflow_dispatchmcp-servers: custom-api: type: http url: "https://api.example.com/v1/mcp" headers: X-API-Key: "${{ secrets.API_KEY }}" allowed: - search_data - analyze_results---
# API Integration
Use custom MCP server to process data.Job Name Cannot Be Empty
Section titled “Job Name Cannot Be Empty”Error Message:
job name cannot be emptyCause: A job definition in the workflow has an empty or missing name field.
Solution: This is typically an internal error. If you encounter it, report it with your workflow file. The workflow compiler should generate valid job names automatically.
Workaround: If using custom jobs in steps: configuration, ensure they have valid names:
# Incorrect - empty job name would be generated internallysteps: "": uses: some-action@v1
# Jobs are normally auto-generated; if customizing, ensure valid namesInvalid Time Delta Format
Section titled “Invalid Time Delta Format”Error Message:
invalid time delta format: +[value]. Expected format like +25h, +3d, +1w, +1mo, +1d12h30mCause: The stop-after: field contains an invalid time delta format.
Solution: Use the correct time delta syntax with supported units:
# Incorrect formatsstop-after: "24h" # Missing + prefixstop-after: "+24" # Missing unitstop-after: "+1y" # Unsupported unit
# Correct formatsstop-after: "+24h" # 24 hoursstop-after: "+3d" # 3 daysstop-after: "+2w" # 2 weeksstop-after: "+1mo" # 1 monthstop-after: "+1d12h" # 1 day and 12 hoursSupported units:
h- hoursd- daysw- weeksmo- months
Example: Multiple time delta formats:
---on: workflow_dispatch: stop-after: "+2w3d" # 2 weeks and 3 days---
# Long Running Task
Task will automatically stop after configured time.Minute Unit Not Allowed for Stop-After
Section titled “Minute Unit Not Allowed for Stop-After”Error Message:
minute unit 'm' is not allowed for stop-after. Minimum unit is hours 'h'. Use +2h instead of +90mCause: The stop-after: field uses minutes (m), but the minimum allowed unit is hours.
Solution: Convert minutes to hours:
# Incorrectstop-after: "+90m"
# Correct - convert to hours (round up if needed)stop-after: "+2h"Conversion examples:
- 90 minutes →
+2h(rounds up) - 120 minutes →
+2h - 30 minutes →
+1h(rounds up)
Time Delta Too Large
Section titled “Time Delta Too Large”Error Message:
time delta too large: 400 days exceeds maximum of 365 daysCause: The time delta exceeds the maximum allowed value for the specified unit.
Solution: Use a smaller value or larger unit:
Maximums:
- Hours: 8,760 (1 year)
- Days: 365 (1 year)
- Weeks: 52 (1 year)
- Months: 12
# Incorrect - exceeds maximumstop-after: "+400d"stop-after: "+60w"stop-after: "+15mo"
# Correct - within limitsstop-after: "+365d"stop-after: "+52w"stop-after: "+12mo"Duplicate Time Unit in Time Delta
Section titled “Duplicate Time Unit in Time Delta”Error Message:
duplicate unit 'd' in time delta: +1d2dCause: The same time unit appears multiple times in a time delta expression.
Solution: Combine values for the same unit:
# Incorrectstop-after: "+1d2d"stop-after: "+3h5h"
# Correctstop-after: "+3d"stop-after: "+8h"Unable to Determine MCP Type
Section titled “Unable to Determine MCP Type”Error Message:
unable to determine MCP type for tool 'my-tool': missing type, url, command, or containerCause: An MCP server configuration is missing the required fields to determine its type.
Solution: Specify at least one of: type, url, command, or container:
# Incorrect - missing required fieldsmcp-servers: my-tool: allowed: - some_function
# Correct - using type and commandmcp-servers: my-tool: type: stdio command: "node" args: ["server.js"]
# Or using containermcp-servers: my-tool: container: "myorg/mcp-server:latest"
# Or using HTTPmcp-servers: my-tool: type: http url: "https://api.example.com/mcp"Tool MCP Configuration Cannot Specify Both Container and Command
Section titled “Tool MCP Configuration Cannot Specify Both Container and Command”Error Message:
tool 'my-tool' mcp configuration cannot specify both 'container' and 'command'Cause: An MCP server configuration includes both container: and command: fields, which are mutually exclusive.
Solution: Use either container: OR command:, not both:
# Incorrect - both container and commandmcp-servers: my-tool: container: "myorg/server:latest" command: "node" args: ["server.js"]
# Correct - use container onlymcp-servers: my-tool: container: "myorg/server:latest" args: ["--port", "8080"]
# Or use command onlymcp-servers: my-tool: command: "node" args: ["server.js"]HTTP MCP Configuration Cannot Use Container
Section titled “HTTP MCP Configuration Cannot Use Container”Error Message:
tool 'my-tool' mcp configuration with type 'http' cannot use 'container' fieldCause: An HTTP MCP server configuration includes the container: field, which is only valid for stdio-based servers.
Solution: Remove the container: field from HTTP configurations:
# Incorrect - container with HTTPmcp-servers: my-api: type: http url: "https://api.example.com/mcp" container: "myorg/server:latest"
# Correct - HTTP without containermcp-servers: my-api: type: http url: "https://api.example.com/mcp" headers: Authorization: "Bearer ${{ secrets.API_TOKEN }}"Strict Mode Bash Wildcard Not Allowed
Section titled “Strict Mode Bash Wildcard Not Allowed”Error Message:
strict mode: bash wildcard '*' is not allowed - use specific commands insteadCause: The workflow uses bash wildcard * or :* when compiled with --strict flag.
Solution: Replace wildcards with specific command allowlists:
# Incorrecttools: bash: - "*"
# Correct - specify exact commandstools: bash: - "git status" - "git diff" - "npm test" - "ls -la"Example: Complete workflow with specific bash commands:
---on: pushpermissions: contents: readnetwork: defaultstools: bash: - "git --no-pager status" - "git --no-pager diff" - "npm run lint"---
# Code Check
Run specific bash commands for validation.Strict Mode Custom MCP Server Requires Network Configuration
Section titled “Strict Mode Custom MCP Server Requires Network Configuration”Error Message:
strict mode: custom MCP server 'my-server' with container must have network configurationCause: A containerized MCP server lacks network configuration when workflow is compiled with --strict flag.
Solution: Add network configuration to the MCP server:
# Incorrect - container without network in strict modemcp-servers: my-server: container: "myorg/server:latest"
# Correct - add network configurationmcp-servers: my-server: container: "myorg/server:latest" network: allowed: - "api.example.com" - "*.safe-domain.com"HTTP Transport Not Supported by Engine
Section titled “HTTP Transport Not Supported by Engine”Error Message:
tool 'my-tool' uses HTTP transport which is not supported by engine 'codex' (only stdio transport is supported)Cause: The workflow uses an HTTP MCP server with an engine that only supports stdio transport.
Solution: Either switch to a stdio-based MCP server or use a different engine that supports HTTP transport:
# Option 1: Switch to stdio transportmcp-servers: my-tool: type: stdio command: "node" args: ["server.js"]
# Option 2: Use engine that supports HTTP (e.g., copilot)engine: copilotmcp-servers: my-tool: type: http url: "https://api.example.com/mcp"Engines and HTTP support:
- ✅ Copilot: Supports HTTP
- ❌ Claude: stdio only
- ❌ Codex: stdio only
Repository Features Not Enabled for Safe Outputs
Section titled “Repository Features Not Enabled for Safe Outputs”Error Message:
workflow uses safe-outputs.create-issue but repository owner/repo does not have issues enabledCause: The workflow uses safe-outputs.create-issue but the target repository has issues disabled.
Solution: Enable the required repository feature or remove the safe-outputs configuration:
# Option 1: Enable issues in repository settings# Go to Settings → General → Features → Issues (check the box)
# Option 2: Use a different safe outputsafe-outputs: create-discussion: # Use discussions instead category: "General"
# Option 3: Remove safe-outputs if not needed# (remove the safe-outputs section entirely)Similar errors:
create-discussionrequires discussions enabledadd-commentwithdiscussion: truerequires discussions enabled
Engine Does Not Support Firewall
Section titled “Engine Does Not Support Firewall”Error Message:
strict mode: engine 'claude' does not support firewallCause: The workflow specifies network restrictions but uses an engine that doesn’t support network firewalling, and strict mode is enabled.
Solution: Either use an engine with firewall support or remove network restrictions:
# Option 1: Use engine with firewall supportengine: copilot # Supports firewallnetwork: allowed: - "api.github.com"
# Option 2: Remove strict mode (not recommended for security)# Compile without --strict flag
# Option 3: Use network: defaults with no specific restrictionsnetwork: defaultsFirewall support by engine:
- ✅ Copilot: Full firewall support
- ❌ Claude: No firewall support (warnings only in non-strict mode)
- ❌ Codex: No firewall support (warnings only in non-strict mode)
Troubleshooting Tips
Section titled “Troubleshooting Tips”- Enable verbose output: Use
--verboseflag with CLI commands for detailed error information - Validate YAML syntax: Use online YAML validators or editor extensions
- Check file paths: Ensure all paths are correct and files exist
- Review frontmatter schema: Consult the frontmatter reference for all available options
- Compile early: Run
gh aw compilefrequently to catch errors early - Check logs: Review GitHub Actions workflow logs for runtime errors
- Use strict mode: Compile with
--strictflag to catch security issues early - Test incrementally: Add one feature at a time and compile after each change
Getting Help
Section titled “Getting Help”If you encounter an error not documented here:
- Search this page: Use Ctrl+F / Cmd+F to search for keywords from your error message
- Check examples: Review workflow examples in Research & Planning, Triage & Analysis, Coding & Development, or Quality & Testing
- Enable verbose mode: Run
gh aw compile --verbosefor detailed error context - Review validation timing: See Validation Timing to understand when errors occur
- Report issues: If you believe you’ve found a bug, report it on GitHub
For additional help, see Common Issues and Validation Timing.