GitHub Agentic Workflows Operations
GitHub Agentic Workflows Operations Skill
This skill provides expertise in creating, managing, and troubleshooting GitHub Agentic Workflows (gh-aw framework).
Skill 1: Frontmatter Configuration
Description
Configure workflow frontmatter with all required and optional fields following gh-aw specifications.
Implementation Pattern
---
# ===== REQUIRED FIELDS =====
on:
workflow_dispatch:
inputs:
parameter_name:
description: 'Clear description of parameter'
required: false
type: string|boolean|choice|number
default: "default_value" # Boolean: "true"/"false" as strings
schedule:
- cron: '0 9 * * 1' # Monday 9 AM UTC
issues:
types: [opened, labeled]
pull_request:
types: [opened, synchronize]
engine: copilot # GitHub Copilot as AI engine
permissions:
contents: read # NEVER use write — strict mode blocks it
pull-requests: read # All writes go through safe-outputs
issues: read
# ===== TOOLS CONFIGURATION =====
tools:
edit: # bare key — enables file read AND edit
bash: # bare key — default safe commands
github:
toolsets: [pull_requests] # Only include toolsets your workflow needs
# ===== MCP SERVERS (if needed) =====
mcp-servers:
terraform:
container: "hashicorp/terraform-mcp-server:0.3.3"
env:
TF_LOG: "INFO"
allowed: ["*"]
# ===== SAFE OUTPUTS =====
safe-outputs:
create-pull-request:
title-prefix: "[automated] "
labels: [automation]
draft: true
reviewers: [copilot]
expires: 14
fallback-as-issue: true
create-issue:
title-prefix: "[bot] "
labels: [automation]
expires: 7
update-issue: null
add-comment: null
# ===== NETWORK ACCESS =====
network:
allowed:
- defaults
- registry.terraform.io
- releases.hashicorp.com
- api.github.com
# ===== IMPORTS (if using reusable agents/skills) =====
imports:
- owner/repo/.github/agents/agent-name.agent.md@main
- owner/repo/.github/skills/skill-name/SKILL.md@main
---
Key Rules
edit:is a bare key (no value) — enables both reading and writing files.edit: nullandedit: trueboth fail compilation.read:is not a valid tool — file reading is provided byedit:.bash:is a bare key (no value) for default safe commands, orbash: ["cmd"]for specific commands.contents: write/pull-requests: write/issues: writeare blocked by strict mode — usesafe-outputs:for all write operations instead.pull_request:trigger requirestypes:— barepull_request:fails compilation.workflow_dispatch:is a bare key —workflow_dispatch: nullfails compilation.- Toolsets and permissions must align —
toolsets: [default]includes theissuestoolset which requiresissues: read; only declare the toolsets you actually need. - Boolean defaults must be strings:
default: "true"notdefault: true - Safe-output fields use hyphens:
create-pull-requestnotcreate_pull_request - Imports use
owner/repo/path@refformat, not raw GitHub URLs - Safe-outputs can be bare key (default config) or object (custom config)
Skill 2: Safe-Outputs Configuration
Description
Configure safe-outputs for GitHub operations (PRs, issues, comments) with proper validation and best practices.
Common Safe-Output Patterns
Pattern: Pull Request Creation
safe-outputs:
create-pull-request:
title-prefix: "[type] "
labels: [automation, bot-generated]
draft: true
reviewers: [copilot]
expires: 14 # Auto-close after 14 days
fallback-as-issue: true # Create issue if PR fails
base-branch: main # Target branch
When to use:
- Automated code changes
- Dependency upgrades
- Code generation
- Refactoring
Pattern: Issue Creation
safe-outputs:
create-issue:
title-prefix: "[report] "
labels: [automation, needs-review]
assignees: [copilot]
expires: 7
group: true # Group multiple issues as sub-issues
close-older-issues: true # Close previous issues from same workflow
When to use:
- Reporting findings
- Tracking tasks
- Alerting on issues
- Documentation requests
Pattern: Issue/PR Comments
safe-outputs:
add-comment:
target: "triggering" # Comment on triggering issue/PR
max: 3
hide-older-comments: true # Hide previous comments from same workflow
When to use:
- Status updates
- Analysis results
- Bot responses
- Progress reporting
Pattern: PR Reviews
safe-outputs:
create-pull-request-review-comment:
max: 10
side: "RIGHT"
footer: "if-body" # Only show footer when review has body
submit-pull-request-review:
max: 1
footer: false
When to use:
- Code review automation
- Inline suggestions
- Security analysis
- Style checking
Pattern: Label Management
safe-outputs:
add-labels:
allowed: [bug, enhancement, documentation]
max: 3
remove-labels:
allowed: [needs-triage, stale]
max: 3
When to use:
- Workflow status tracking
- Issue classification
- Automation state management
Available Safe-Output Types
create-pull-request- Create PRs with code changescreate-issue- Create issuesupdate-issue- Update issue title/body/statusclose-issue- Close issuescreate-discussion- Create discussionsupdate-discussion- Update discussionsclose-discussion- Close discussionsadd-comment- Add comments to issues/PRs/discussionshide-comment- Hide commentsadd-labels- Add labelsremove-labels- Remove labelsadd-reviewer- Add PR reviewerscreate-pull-request-review-comment- Add PR review commentssubmit-pull-request-review- Submit PR reviewupdate-pull-request- Update PR title/bodydispatch-workflow- Trigger other workflowscreate-project,update-project- Manage GitHub Projectsupload-asset- Upload files to orphaned branch
Skill 3: MCP Server Integration
Description
Configure and use Model Context Protocol (MCP) servers for specialized tool access.
Common MCP Server Configurations
Terraform MCP Server
mcp-servers:
terraform:
container: "hashicorp/terraform-mcp-server:0.3.3"
env:
TF_LOG: "INFO"
allowed: ["*"] # or specific tools
Available operations:
- Read Terraform configurations
- Analyze provider versions
- Detect breaking changes
- Generate upgrade recommendations
Azure MCP Server
mcp-servers:
azure:
container: "mcr.microsoft.com/azure-sdk/azure-mcp:latest"
env:
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
Available operations:
- Azure resource queries
- Best practices validation
- Documentation lookup
- Terraform Azure integration
Custom MCP Server
mcp-servers:
custom:
container: "your-org/your-mcp-server:v1.0.0"
env:
API_KEY: ${{ secrets.API_KEY }}
allowed: ["specific_tool1", "specific_tool2"]
Network Configuration for MCP Servers
network:
allowed:
- defaults # GitHub APIs
- registry.terraform.io
- releases.hashicorp.com
- management.azure.com
- custom-api.example.com
Skill 4: Workflow Compilation & Debugging
Description
Compile workflows and resolve common compilation errors.
Compilation Commands
# Compile single workflow
gh aw compile workflow-name
# Compile all workflows
gh aw compile
# Force recompile
gh aw compile --force workflow-name
# Validate without compiling
gh aw validate workflow-name
Common Compilation Errors & Fixes
Error: Invalid tool value for edit
Problem:
tools:
read: null # ❌ 'read' is not a valid tool
edit: null # ❌ null not valid for edit
edit: true # ❌ true not valid for edit
Solution:
tools: # ✅ bare keys
edit:
bash:
Error: Write permissions blocked by strict mode
Problem:
permissions:
contents: write # ❌ blocked by strict mode
pull-requests: write # ❌ blocked by strict mode
Solution:
permissions: # ✅ read-only
contents: read
pull-requests: read
safe-outputs: # ✅ write operations go here
create-pull-request: null
Error: pull_request trigger requires types
Problem:
on:
pull_request: # ❌ bare null not valid
workflow_dispatch: null # ❌ null not valid
Solution:
on:
workflow_dispatch: # ✅ bare key
pull_request: # ✅ explicit types
types: [opened, synchronize, reopened]
Error: Missing permission for toolset
Problem:
tools:
github:
toolsets: [default] # includes 'issues' toolset
permissions:
contents: read # ❌ missing 'issues: read', compiler warns
Solution:
tools:
github:
toolsets: [pull_requests] # ✅ only what you need
permissions:
contents: read
pull-requests: read
Error: "got array, want object" for tools
Problem:
tools: ['bash', 'read', 'edit'] # ❌ Wrong
Solution:
tools: # ✅ Correct
bash:
edit:
Error: Boolean default must be string
Problem:
workflow_dispatch:
inputs:
enabled:
type: boolean
default: true # ❌ Wrong
Solution:
workflow_dispatch:
inputs:
enabled:
type: boolean
default: "true" # ✅ Correct (quoted)
Error: Invalid safe-output field name
Problem:
safe-outputs:
create_pull_request: null # ❌ Wrong (underscore)
Solution:
safe-outputs:
create-pull-request: null # ✅ Correct (hyphen)
Error: Import download failed
Problem:
imports:
- https://raw.githubusercontent.com/owner/repo/main/agent.md # ❌ Wrong
Solution:
imports:
- owner/repo/.github/agents/agent.md@main # ✅ Correct
Error: Safe-outputs format
Problem:
safe-outputs: [create-issue, create-pull-request] # ❌ Wrong (array)
Solution:
safe-outputs: # ✅ Correct (object)
create-issue: null
create-pull-request: null
Skill 5: Workflow Testing & Deployment
Description
Deploy and test agentic workflows in GitHub Actions.
Deployment Checklist
-
Compile Workflow
gh aw compile workflow-name- Verify 0 errors
- Check warnings (informational only)
-
Commit Files
git add .github/workflows/workflow-name.md git add .github/workflows/workflow-name.lock.yml git commit -m "feat: Add workflow-name agentic workflow" git push -
Enable PR Creation (if using
create-pull-request)- Go to: Settings → Actions → General
- Check: ✓ Allow GitHub Actions to create and approve pull requests
- Save
-
Configure Secrets (if needed)
- Go to: Settings → Secrets and variables → Actions
- Add required secrets (API keys, tokens, etc.)
-
Test Workflow
- Navigate to: Actions tab
- Select workflow
- Click "Run workflow"
- Provide inputs
- Monitor execution
Testing Strategies
Strategy 1: Manual Trigger Testing
on:
workflow_dispatch:
inputs:
dry_run:
description: 'Dry run mode (no actual changes)'
type: boolean
default: "true"
Test without making real changes first.
Strategy 2: Branch Testing
on:
push:
branches:
- test/**
Test on dedicated test branches before enabling on main.
Strategy 3: Label-Based Testing
on:
issues:
types: [labeled]
# Only run when "test-workflow" label is added
Control execution via labels during testing.
Skill 6: Import Reusable Agents & Skills
Description
Use imports to leverage reusable agents and skills from other repositories.
Import Patterns
Import External Agent
imports:
- thomast1906/github-copilot-skills-terraform/.github/agents/terraform-provider-upgrade.agent.md@main
In markdown instructions:
Use your imported Terraform provider upgrade expertise to analyze
the current provider versions and recommend upgrades.
Import External Skill
imports:
- owner/repo/.github/skills/code-review/SKILL.md@main
- owner/repo/.github/skills/security-scan/SKILL.md@main
In markdown instructions:
Apply your code review and security scanning skills to analyze
the changes in this pull request.
Import Multiple Resources
imports:
- owner/repo/.github/agents/analyzer.agent.md@main
- owner/repo/.github/skills/reporting/SKILL.md@main
- owner/repo/.github/skills/validation/SKILL.md@main
Import Best Practices
-
Pin to specific refs when stable:
imports: - owner/repo/.github/agents/agent.md@v1.2.0 # Tag - owner/repo/.github/agents/agent.md@abc1234 # Commit SHA -
Use main/master for latest:
imports: - owner/repo/.github/agents/agent.md@main -
Imports are cached in
.github/aw/imports/- Committed to repository
- Updated on recompilation
- Version-locked for consistency
Skill 7: Common Workflow Patterns
Description
Pre-built patterns for common automation scenarios.
Pattern: Dependency Upgrade Workflow
---
on:
workflow_dispatch:
inputs:
target_version:
description: 'Target version (leave empty for latest)'
required: false
type: string
schedule:
- cron: '0 9 * * 1' # Weekly Monday 9 AM
engine: copilot
permissions:
contents: read
pull-requests: read
tools:
edit:
github:
toolsets: [pull_requests]
safe-outputs:
create-pull-request:
title-prefix: "[dependency] "
labels: [dependencies, automation]
draft: true
reviewers: [copilot]
expires: 14
create-issue:
title-prefix: "[dependency] "
labels: [dependencies, blocked]
network:
allowed:
- defaults
- registry.npmjs.org
- registry.terraform.io
---
# Dependency Upgrade Workflow
Automatically upgrade project dependencies to latest compatible versions.
## Your Task
1. Scan current dependencies
2. Check for available upgrades
3. Analyze breaking changes
4. Create PR with upgrades or issue if blocked
Pattern: Code Analysis & Reporting
---
on:
workflow_dispatch:
pull_request:
types: [opened, synchronize]
engine: copilot
permissions:
contents: read
pull-requests: read
tools:
edit:
github:
toolsets: [pull_requests]
safe-outputs:
add-comment:
target: "triggering"
create-pull-request-review-comment:
max: 10
add-labels:
allowed: [needs-review, lgtm, requires-changes]
---
# Code Analysis Workflow
Analyze code quality and provide feedback on pull requests.
## Your Task
Review the PR changes and provide:
1. Code quality feedback
2. Security concerns
3. Best practice suggestions
4. Inline comments on specific issues
Pattern: IssueOps/ChatOps
---
on:
issues:
types: [opened, labeled]
issue_comment:
types: [created]
engine: copilot
permissions:
contents: read
issues: read
tools:
github:
toolsets: [issues]
safe-outputs:
add-comment: null
update-issue: null
add-labels:
allowed: [in-progress, completed, needs-info]
close-issue: null
---
# IssueOps Workflow
Respond to issue commands and manage issue lifecycle.
## Your Task
When an issue is created or commented on:
1. Parse commands (e.g., /analyze, /report, /close)
2. Execute the requested operation
3. Report results as comment
4. Update issue labels/status
Skill 8: Troubleshooting Guide
Description
Diagnose and fix common issues with agentic workflows.
Issue: Workflow Not Appearing in Actions UI
Symptoms:
- Workflow file exists but doesn't show in Actions tab
- Can't manually trigger workflow
Diagnosis:
# Check if lock file was generated
ls -la .github/workflows/*.lock.yml
# Check if files are committed
git status
# Verify compilation succeeded
gh aw compile workflow-name
Solutions:
- Ensure both
.mdand.lock.ymlare committed and pushed - Verify
workflow_dispatchtrigger is configured - Check repository Settings → Actions to ensure workflows are enabled
Issue: PR Creation Fails
Symptoms:
Warning: Failed to create pull request: GitHub Actions is not permitted to create or approve pull requests.
Solution:
- Go to: Settings → Actions → General
- Scroll to: "Workflow permissions"
- Check: ✓ Allow GitHub Actions to create and approve pull requests
- Click Save
Issue: MCP Server Not Working
Symptoms:
- Tools from MCP server not available
- Connection timeouts
Diagnosis:
# Check container image is correct
mcp-servers:
terraform:
container: "hashicorp/terraform-mcp-server:0.3.3" # Verify version
Solutions:
- Verify container image exists and is accessible
- Check network allowlist includes required domains
- Verify environment variables are set correctly
- Check container logs in workflow run
Issue: Import Not Resolving
Symptoms:
Error: Failed to download import: owner/repo/path@ref
Solutions:
- Verify repository is public or accessible with token
- Check path is correct:
.github/agents/name.agent.md - Verify branch/tag/SHA exists
- Use correct format:
owner/repo/path@ref(not raw URL)
Skill 9: Performance Optimization
Description
Optimize workflow execution time and resource usage.
Optimization Techniques
1. Minimize MCP Server Usage
# Only allow specific tools needed
mcp-servers:
terraform:
allowed: ["analyze_version", "detect_breaking_changes"] # Not "*"
2. Set Appropriate Timeouts
# Don't run indefinitely
on:
workflow_dispatch:
inputs:
timeout_minutes:
description: 'Maximum execution time'
default: "30"
3. Cache Results
tools:
cache-memory: null # Enable caching
Use caching in instructions:
Cache analysis results to avoid re-analyzing unchanged files.
4. Limit Safe-Output Operations
safe-outputs:
create-pull-request-review-comment:
max: 10 # Limit number of comments
5. Use Concise Instructions
# ❌ Avoid overly verbose instructions
Please very carefully analyze every single line...
# ✅ Be concise and clear
Analyze changes and report findings.
Skill 10: Security Best Practices
Description
Implement secure configurations for agentic workflows.
Security Checklist
Minimal Permissions
permissions:
contents: read # Only write if absolutely necessary
pull-requests: write # Only if creating PRs
issues: write # Only if creating issues
Secret Management
mcp-servers:
custom:
env:
API_KEY: ${{ secrets.API_KEY }} # Use secrets, not hardcoded values
Network Restrictions
network:
allowed:
- defaults
- specific-domain.com # Only allow required domains
# Don't use wildcards or overly broad allowlists
Input Validation
on:
workflow_dispatch:
inputs:
target:
type: choice # Use choice instead of string when possible
options: [dev, staging, prod]
Safe-Output Restrictions
safe-outputs:
add-labels:
allowed: [bug, enhancement] # Restrict which labels can be added
add-reviewer:
reviewers: [team-lead, copilot] # Restrict who can be assigned
Quick Reference Card
File Structure
.github/
├── workflows/
│ ├── workflow-name.md # Your workflow definition
│ └── workflow-name.lock.yml # Generated (committed)
├── agents/
│ └── agent-name.agent.md # Reusable agents
└── skills/
└── skill-name/
└── SKILL.md # Reusable skills
Essential Commands
# Compile workflow
gh aw compile workflow-name
# Compile all workflows
gh aw compile
# Validate workflow
gh aw validate workflow-name
# List workflows
gh aw list
Frontmatter Quick Template
---
on:
workflow_dispatch: # bare key — no null
pull_request:
types: [opened, synchronize, reopened] # always specify types
engine: copilot
permissions:
contents: read # never write — strict mode blocks it
pull-requests: read # match only what your toolsets need
tools:
edit: # bare key — enables file read/edit
github:
toolsets: [pull_requests] # only what you need
safe-outputs:
create-pull-request: null # all write ops go here
network:
allowed: [defaults]
---
Common Safe-Outputs
create-pull-request- Code changescreate-issue- Reports/alertsadd-comment- Status updatesupdate-issue- Track progressadd-labels- State management
Debug Workflow Issues
- Check compilation:
gh aw compile workflow-name - Verify files committed:
git status - Check Actions enabled: Settings → Actions
- Enable PR creation: Settings → Actions → General
- Review workflow logs in Actions tab
More from thomast1906/github-copilot-agent-skills
drawio-mcp-diagramming
Create and edit architecture diagrams using Draw.io MCP (`drawio/create_diagram`) with reliable Azure and AWS icon rendering guidance and troubleshooting. Supports Azure2 and AWS4 icon libraries. Requires Python 3 and internet access to refresh icon catalogs (periodic, not per-run).
13api-security-review
Reviews Azure API Management configurations for security vulnerabilities, OWASP API Security Top 10 compliance, VNet Internal mode validation, Private Link verification, and Azure Security Benchmark alignment. Use when performing security audits, pre-deployment validation, or compliance reviews.
13architecture-design
Design Azure cloud architectures from requirements and generate High-Level Design (HLD) documentation with service selection, patterns, cost estimates, and WAF alignment. Use this when asked to design or architect Azure solutions.
13waf-assessment
Assess Azure architectures against Well-Architected Framework (WAF) five pillars - Reliability, Security, Cost Optimization, Operational Excellence, and Performance Efficiency. Provide scores and recommendations.
11azure-apim-architecture
Analyzes and explains Azure API Management architecture decisions for enterprise API marketplace implementations using VNet Internal mode, Front Door, hybrid authentication, and multi-environment strategies. Use when discussing APIM component selection, network topology, cost optimization, or comparing alternatives like workspaces vs instances, VNet Internal vs External mode, or Front Door vs Application Gateway.
11cost-optimization
Analyze Azure architectures for cost optimization opportunities, provide savings recommendations, and calculate ROI for improvements.
11