github-bot

SKILL.md

GitHub Bot

Interact with GitHub API via the joelclawgithub[bot] GitHub App. Acts as a bot identity with access to all 280+ repos across @joelhooks personal and org accounts.

Authentication

Generate a 1-hour installation token:

TOKEN=$(SKILL_DIR/scripts/github-token.sh)

Use in API calls:

curl -H "Authorization: token $TOKEN" -H "Accept: application/vnd.github+json" \
  https://api.github.com/repos/OWNER/REPO/...

Token expires in 1 hour. Generate a new one if a request returns 401.

Secrets

Stored in agent-secrets (do not hardcode):

Secret Content
github_app_id App ID (2867136)
github_app_client_id Client ID
github_app_installation_id Installation ID
github_app_pem RSA private key

Bot Identity

  • Commits: joelclawgithub[bot] <2867136+joelclawgithub[bot]@users.noreply.github.com>
  • All API actions (comments, reviews, PRs) show as joelclawgithub[bot]
  • Has read/write access to: contents, issues, PRs, actions, deployments, environments, secrets, packages, workflows, checks, statuses, hooks, projects

Logging

Log all GitHub write operations with slog:

slog write --action "ACTION" --tool "github-bot" --detail "what was done" --reason "why"

Actions: create-pr, push-commit, create-issue, merge-pr, create-release, update-workflow, etc.

Pagination

GitHub API paginates at 100 items. For full listing:

PAGE=1
while true; do
  RESULT=$(curl -s -H "Authorization: token $TOKEN" \
    "https://api.github.com/endpoint?per_page=100&page=$PAGE")
  # process $RESULT
  [ "$(echo "$RESULT" | python3 -c 'import json,sys; print(len(json.load(sys.stdin)))')" -lt 100 ] && break
  PAGE=$((PAGE+1))
done
Weekly Installs
25
GitHub Stars
49
First Seen
Feb 27, 2026
Installed on
cline25
github-copilot25
codex25
kimi-cli25
gemini-cli25
cursor25