Files
moltbot/skills/github/SKILL.md
tmimmanuel 72b5cddbe1 fix(doctor): surface GH_CONFIG_DIR hint when gh auth lives at a different HOME
When OpenClaw spawns an agent shell with a different HOME than the user
that ran `gh auth login` (per-agent codex homes, systemd User= services,
sudo'd shells), `gh` looks at $XDG_CONFIG_HOME/gh or $HOME/.config/gh and
reports "not logged into any GitHub hosts" even though the operator HOME
has a valid hosts.yml.

Add `detectGhConfigDirMismatch` in src/agents/skills/gh-config-discovery.ts:
a pure helper that takes process env plus a fileExists probe and returns
either "auth-discoverable", "no-known-auth", "explicit-gh-config-dir-set",
or a "mismatch" with the alternate config dir, the host file path, and a
suggested GH_CONFIG_DIR value to set on the gateway service environment.
The helper checks `/root`, `$SUDO_USER`'s home, and `$USER`'s home as
candidate operator homes on Linux/macOS, and uses platform-specific path
joins so the same logic works on Windows test runners.

Wire the helper into the doctor skills health flow: when the github skill
is reported and the gh binary is present, call the discovery helper and,
on a mismatch, print a "GitHub CLI" note with the operator-actionable
fix instructions before any unavailable-skill repair prompt.

Update skills/github/SKILL.md with a troubleshooting subsection that
documents GH_CONFIG_DIR for service/agent environments where HOME differs
from the user that ran `gh auth login`.

Fixes #78063.
2026-05-11 14:57:42 +01:00

4.5 KiB

name, description, metadata
name description metadata
github Use gh for GitHub issues, PR status, CI/logs, comments, reviews, releases, and API queries.
openclaw
emoji requires install
🐙
bins
gh
id kind formula bins label
brew brew gh
gh
Install GitHub CLI (brew)
id kind package bins label
apt apt gh
gh
Install GitHub CLI (apt)

GitHub Skill

Use the gh CLI to interact with GitHub repositories, issues, PRs, and CI.

When to Use

USE this skill when:

  • Checking PR status, reviews, or merge readiness
  • Viewing CI/workflow run status and logs
  • Creating, closing, or commenting on issues
  • Creating or merging pull requests
  • Querying GitHub API for repository data
  • Listing repos, releases, or collaborators

When NOT to Use

DON'T use this skill when:

  • Local git operations (commit, push, pull, branch) → use git directly
  • Non-GitHub repos (GitLab, Bitbucket, self-hosted) → different CLIs
  • Cloning repositories → use git clone
  • Reviewing actual code changes → use coding-agent skill
  • Complex multi-file diffs → use coding-agent or read files directly

Setup

# Authenticate (one-time)
gh auth login

# Verify
gh auth status

When the gateway HOME differs from the operator HOME

OpenClaw agent shells often run with a different HOME than the user that ran gh auth login (per-agent codex homes, systemd User= services, sudo). gh looks up its config under $GH_CONFIG_DIR, then $XDG_CONFIG_HOME/gh, then $HOME/.config/gh, so the agent shell can report not logged into any GitHub hosts even when the operator login is intact.

To point the gateway at the canonical gh config, set GH_CONFIG_DIR on the service environment, e.g.

# Gateway service env file (example: ~/.openclaw/gateway.systemd.env)
GH_CONFIG_DIR=/path/to/operator/.config/gh

then restart the gateway. openclaw doctor warns when it detects an authenticated hosts.yml outside the agent process's effective gh config dir.

Common Commands

Pull Requests

# List PRs
gh pr list --repo owner/repo

# Check CI status
gh pr checks 55 --repo owner/repo

# View PR details
gh pr view 55 --repo owner/repo

# Create PR
gh pr create --title "feat: add feature" --body "Description"

# Merge PR
gh pr merge 55 --squash --repo owner/repo

Issues

# List issues
gh issue list --repo owner/repo --state open

# Create issue
gh issue create --title "Bug: something broken" --body "Details..."

# Close issue
gh issue close 42 --repo owner/repo

CI/Workflow Runs

# List recent runs
gh run list --repo owner/repo --limit 10

# View specific run
gh run view <run-id> --repo owner/repo

# View failed step logs only
gh run view <run-id> --repo owner/repo --log-failed

# Re-run failed jobs
gh run rerun <run-id> --failed --repo owner/repo

API Queries

# Get PR with specific fields
gh api repos/owner/repo/pulls/55 --jq '.title, .state, .user.login'

# List all labels
gh api repos/owner/repo/labels --jq '.[].name'

# Get repo stats
gh api repos/owner/repo --jq '{stars: .stargazers_count, forks: .forks_count}'

JSON Output

Most commands support --json for structured output with --jq filtering:

gh issue list --repo owner/repo --json number,title --jq '.[] | "\(.number): \(.title)"'
gh pr list --json number,title,state,mergeable --jq '.[] | select(.mergeable == "MERGEABLE")'

Templates

PR Review Summary

# Get PR overview for review
PR=55 REPO=owner/repo
echo "## PR #$PR Summary"
gh pr view $PR --repo $REPO --json title,body,author,additions,deletions,changedFiles \
  --jq '"**\(.title)** by @\(.author.login)\n\n\(.body)\n\n📊 +\(.additions) -\(.deletions) across \(.changedFiles) files"'
gh pr checks $PR --repo $REPO

Issue Triage

# Quick issue triage view
gh issue list --repo owner/repo --state open --json number,title,labels,createdAt \
  --jq '.[] | "[\(.number)] \(.title) - \([.labels[].name] | join(", ")) (\(.createdAt[:10]))"'

Notes

  • Always specify --repo owner/repo when not in a git directory
  • Use URLs directly: gh pr view https://github.com/owner/repo/pull/55
  • Rate limits apply; use gh api --cache 1h for repeated queries