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
Repository
joelhooks/joelclawGitHub Stars
49
First Seen
Feb 27, 2026
Security Audits
Installed on
cline25
github-copilot25
codex25
kimi-cli25
gemini-cli25
cursor25