Conversation
gatesn
commented
Apr 6, 2026
- Split Claude automation into two workflows with separate trust boundaries: claude-write.yml for write-capable issue automation and follow-up edits on Claude-owned PRs, and claude-review.yml for read-only PR review.
- Sets up a GitHub app (vortex-claude) so PRs pushed by Claude can run CI
- Only claude-write can access the GitHub App private key, and only through the claude-automation environment. No other workflow gets that key.
- claude-write uses a short-lived GitHub App installation token, not GITHUB_TOKEN, so PRs opened by Claude trigger normal pull_request CI.
- claude-write runs only for trusted collaborators with write/maintain/admin access.
- claude-write is issue-driven by default. It may also run from a PR conversation comment, but only when that PR is a same-repo PR originally opened by the Vortex Claude GitHub App (CLAUDE_APP_LOGIN).
- claude-write refuses fork PR content entirely. There is no promotion path for forks.
- claude-review has no GitHub App private key and no write-capable repo token. It uses the built-in GITHUB_TOKEN only for reading repo state and posting review comments.
- claude-review can review same-repo PRs, but it must not create commits, push branches, open PRs, or update PR branches.
- PR conversation comments on Claude-owned PRs are routed to claude-write; claude-review explicitly stands down on that path to avoid duplicate runs.
- Both workflows reject bot-triggered invocations and gate access before running Claude logic.
- Both workflows use persist-credentials: false on checkout so git operations do not silently fall back to the built-in GITHUB_TOKEN.
- Fork PRs are always refused for Claude automation because fork content is treated as untrusted prompt input.
Signed-off-by: Nicholas Gates <nick@nickgates.com>
Signed-off-by: Nicholas Gates <nick@nickgates.com>
|
@claude review |
|
Claude finished @connortsui20's task in 2m 6s —— View job PR ReviewTodo
OverallThe security design here is solid. Splitting into two workflows with separate trust boundaries, using a GitHub App token for write operations, gating on collaborator permission level, refusing fork content entirely, and pinning action SHAs rather than using mutable tags are all good practices. The A few issues worth addressing: Bug:
|