If your automation suddenly started returning 403 Forbidden or empty responses or If you're seeing 403 Forbidden from /repos/{owner}/{repo}/stargazers, this is expected after GitHub's rollout.

GitHub is restricting public access to lists of stargazers and watchers. Webcmd can keep approved automations working through authenticated GitHub CLI calls, but it cannot turn blocked data back into public data.

That distinction matters. A browser session is not a loophole, and a captured request is not a new permission. The useful Webcmd angle is less dramatic and more durable: one command surface for authorized API access, browser work, structured output, and clear failures when GitHub says no.

The Webcmd command surface keeps GitHub automation consistent while GitHub remains the source of truth for access.

TL;DR

  • GitHub plans to limit repository stargazer and watcher lists to admins and collaborators.
  • GET /users/{username}/subscriptions enters deprecation with empty responses, followed by removal.
  • Webcmd can run approved requests through the GitHub CLI with webcmd gh api.
  • Account owners can use GET /user/subscriptions for their own watched repositories.

What is GitHub changing?

GitHub is restricting /stargazers and /subscribers to repository admins and collaborators. It is also removing /users/{username}/subscriptions. Use the authenticated account routes instead.

Step 1: Install Webcmd

Webcmd requires Node.js 20 or newer.

node --version
npm install -g @agentrhq/webcmd
webcmd external install gh

Step 2: Sign in to GitHub

webcmd gh auth login
webcmd gh auth status

Step 3: Set the repository

REPO_OWNER="agentrhq"
REPO_NAME="webcmd"

Use a repository where your GitHub account is an admin or collaborator.

Step 4: Get the stargazers

These commands only work if your GitHub account has permission to access the requested data.

webcmd gh api \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  --paginate \
  --slurp \
  "/repos/${REPO_OWNER}/${REPO_NAME}/stargazers" \
  | jq 'flatten | map({login, html_url})'
  --jq 'flatten | map({login, html_url})' \
  "/repos/${REPO_OWNER}/${REPO_NAME}/stargazers"

Step 5: Get the watchers

webcmd gh api \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  --paginate \
  --slurp \
  "/repos/${REPO_OWNER}/${REPO_NAME}/subscribers" \
  | jq 'flatten | map({login, html_url})'
  --jq 'flatten | map({login, html_url})' \
  "/repos/${REPO_OWNER}/${REPO_NAME}/subscribers"

Step 6: Get your watched repositories

The old route reads another user's subscriptions. Replace it with the authenticated account route:

webcmd gh api \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  --paginate \
  --slurp \
  /user/subscriptions \
  | jq 'flatten | map({name: .full_name, url: .html_url})'
  --jq 'flatten | map({name: .full_name, url: .html_url})' \
  /user/subscriptions

Step 7: Save the results as JSON

webcmd gh api \
  --paginate \
  --slurp \
  --jq 'flatten | map({login, html_url})' \
  "/repos/${REPO_OWNER}/${REPO_NAME}/stargazers" \
  | jq 'flatten | map({login, html_url})' \
  > stargazers.json

If GitHub returns an empty response or 403 Forbidden, stop the job. Webcmd follows the permissions of the signed-in GitHub account.

Keep reading