GitHub Automation
This Skill helps you manage GitHub operations using the gh CLI, including repositories, issues, pull requests, releases, and GitHub Actions workflows.
Capabilities
-
Repositories: Create, clone, fork, view, and manage repos
-
Issues: Create, list, view, close, comment, and label issues
-
Pull Requests: Create, review, merge, list, and comment on PRs
-
Releases: Create releases and manage tags
-
Workflows: View and manage GitHub Actions
-
Gists: Create and manage gists
-
Search: Search repos, issues, PRs, code, and users
Authentication
Setup API Wrapper
Create a helper script for API calls:
cat > /tmp/github-curl << 'EOF' #!/bin/bash curl -s -H "Content-Type: application/json" -H "Authorization: Bearer $GH_TOKEN" "$@" EOF chmod +x /tmp/github-curl
Usage: All examples below use /tmp/github-curl instead of direct curl calls.
Setup API Wrapper
Create a helper script for API calls:
cat > /tmp/github-curl << 'EOF' #!/bin/bash curl -s -H "Content-Type: application/json" -H "Authorization: Bearer $GH_TOKEN" "$@" EOF chmod +x /tmp/github-curl
Usage: All examples below use /tmp/github-curl instead of direct curl calls.
Go to vm0.ai Settings → Connectors and connect GitHub. vm0 will automatically inject the required token.
Verify with:
gh auth status
Instructions
Phase 1: Understand the Request
-
Clarify what GitHub operation the user needs
-
Identify the target repository (if not specified, ask)
-
Confirm any destructive operations before executing
Phase 2: Execute the Operation
Use gh CLI commands. Common patterns:
Repository Operations
gh repo view <owner>/<repo> gh repo clone <owner>/<repo> gh repo create <name> --public/--private gh repo list <owner>
Issue Operations
gh issue list --repo <owner>/<repo> gh issue create --repo <owner>/<repo> --title "Title" --body "Body" gh issue view <number> --repo <owner>/<repo> gh issue close <number> --repo <owner>/<repo> gh issue comment <number> --repo <owner>/<repo> --body "Comment"
Pull Request Operations
gh pr list --repo <owner>/<repo> gh pr create --repo <owner>/<repo> --title "Title" --body "Body" gh pr view <number> --repo <owner>/<repo> gh pr merge <number> --repo <owner>/<repo> gh pr review <number> --repo <owner>/<repo> --approve/--comment/--request-changes gh pr checks <number> --repo <owner>/<repo>
Search Operations
gh search repos <query> gh search issues <query> gh search prs <query> gh search code <query>
GitHub Actions
gh run list --repo <owner>/<repo> gh run view <run-id> --repo <owner>/<repo> gh workflow list --repo <owner>/<repo>
Releases
gh release list --repo <owner>/<repo> gh release create <tag> --repo <owner>/<repo> --title "Title" --notes "Notes"
Guidelines
-
Always specify --repo <owner>/<repo> when not in a cloned repository
-
For destructive operations (delete, close, merge), confirm with user first
-
Use --json flag when you need to parse output programmatically
-
Handle errors gracefully and suggest fixes
-
When creating issues/PRs, use clear titles and descriptive bodies
Phase 3: Report Results
-
Summarize what was done
-
Provide relevant links (PR URLs, issue numbers, etc.)
-
Suggest next steps if applicable
Output Format
When listing items, format clearly:
#123 - Issue title (open/closed) - @author #456 - PR title (open/merged/closed) - @author
When creating items, always report:
-
The created item's number/ID
-
Direct URL to the item
-
Any relevant status information
Examples
Create an issue:
gh issue create --repo <owner>/<repo> --title "Bug: Login fails" --body "Steps to reproduce..."
List open PRs awaiting review:
gh pr list --repo <owner>/<repo> --state open --search "review:required"
Get PR details as JSON:
gh pr view <number> --repo <owner>/<repo> --json title,state,reviews,checks
Prerequisites
This Skill requires the GitHub CLI (gh ) to be installed. Token is automatically provided by vm0 — connect GitHub in vm0.ai Settings → Connectors.
Important: When using environment variables in commands with pipes, wrap the command in bash -c '...' to avoid variable substitution issues:
bash -c 'gh pr view <number> --repo $OWNER/$REPO --json title,state' | jq '.title'
Without environment variables, the pipe is fine:
gh pr view <number> --repo <owner>/<repo> --json title,state | jq '.title'