docs: fine-grained GitHub PAT permissions + manual webhook setup#1400
Open
jkwiecien-solvd wants to merge 2 commits into
Open
docs: fine-grained GitHub PAT permissions + manual webhook setup#1400jkwiecien-solvd wants to merge 2 commits into
jkwiecien-solvd wants to merge 2 commits into
Conversation
…etup The getting-started guide only said to create tokens "with `repo` scope", which is misleading for fine-grained PATs — they ignore `repo` and the repo admin role, requiring explicit per-permission grants. Missing the Webhooks permission produces a 403 on webhook creation; missing Contents/Pull requests/Issues/Actions breaks agent actions at runtime. - Step 6: per-token, per-permission table (implementer vs reviewer) for both classic and fine-grained tokens, derived from the API surface in src/github/client.ts (reviews live under Pull requests; PR comments use the Issues API; CI status uses the Actions API, not Checks). Includes an explicit "leave unset" list. - Step 9: manual `curl` webhook-creation fallback for local/ngrok setups, noting the callback must target the router (:3000) not the dashboard (:3001), and that 403 means the Webhooks permission is missing. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
zbigniewsobiecki
requested changes
Jun 12, 2026
zbigniewsobiecki
left a comment
Member
There was a problem hiding this comment.
Really useful table — and the claims hold up against the actual client surface (issues.createComment for PR comments, reviews under pulls.createReview, CI via the Actions API). Two small factual fixes before merge:
- The Webhooks row says "One-time webhook creation (step 7)" — webhook setup is step 9 (your classic-token paragraph already references step 9 correctly).
- The manual curl example includes
"push"in the events array, but the programmatic path registers exactlyGITHUB_WEBHOOK_EVENTS(src/api/routers/webhooks/github.ts:6):pull_request, pull_request_review, pull_request_review_comment, check_suite, issue_comment— nopush. Could you drop it so the manual fallback matches what CASCADE actually subscribes to?
With those two, happy to merge.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Documents the exact GitHub token permissions Cascade needs, and a manual webhook-creation fallback.
The getting-started guide previously said only to create tokens "with `repo` scope". That's misleading for fine-grained PATs, which ignore the `repo` scope and the repository admin role — they require explicit per-permission grants. In practice this means:
Changes (
docs/getting-started.md)src/github/client.ts:issues.createComment/updateComment/deleteComment).curlwebhook-creation block for local/ngrok setups, noting the callback URL must target the router (:3000), not the dashboard (:3001), and that a 403 means the Webhooks permission is missing.Why
Docs-only. Closes a real setup papercut: the prior guidance led to repeated 403s when registering the GitHub webhook with a fine-grained token.
🤖 Generated with Claude Code