Where does the bug appear (feature/product)?
Cursor IDE
Describe the Bug
Mode: agent, local, sandboxed shell with gh allowlisted
GitHub CLI: gh 2.96.0, authenticated with a classic token (scopes: gist, read:org, repo, workflow)
Summary
While replying to a review thread on my own PR, the agent constructed a GraphQL
review-thread id instead of reading it from a query. The id resolved to a thread
on a repository in a different organization that I have no involvement with, and
the reply was posted there under my account.
What happened
- Task: address review comments on a PR in my organization’s repo.
- Earlier in the session the agent correctly ran a
gh api graphql
reviewThreads query and used the returned ids to reply to six threads. - On a follow-up comment, the agent skipped the query and called
addPullRequestReviewThreadReply with a pullRequestReviewThreadId that was
never returned by any query. It shared the prefix of the real ids and
differed in the last few characters. - GitHub accepted it. The reply landed on a PR in an unrelated organization,
authored by me. The comment text was Kubernetes/ArgoCD content with no
relation to that PR. - The paired resolveReviewThread call failed with FORBIDDEN, which is what
surfaced the mistake. The agent then queried the correct id and posted to
the right PR. - A later DELETE on the stray comment returned 404; I could not remove it.
Impact
A comment appeared under my GitHub account on a third party’s PR with no
relation to my work. I had no way to undo it.
The reply body is taken from the agent session, which can include internal
architecture, unreleased changes, customer context, or credentials discussed
in a private chat. A fabricated node id turns that private context into a
public comment on a third-party pull request, authored by the user, with no
confirmation and no reliable way to delete it. In this case the text was
infrastructure configuration rather than a secret; the same path would
publish privileged content if it had been in the reply.
Steps to Reproduce
Not deterministic; it depends on the model generating
Expected Behavior
The agent should only use resource ids obtained from a prior read in the same
session, and should verify the target repository and PR number on a write that
uses an opaque id. An unverified id should not be sent with user credentials.
Operating System
MacOS
Version Information
Version: 3.20.21
VS Code Extension API: 1.128.0
Commit: f09fca384ceca23f7bf21f9c23655b162641d740
Date: 2026-09-13T19:02:51.781Z
Layout: IDE
Build Type: Stable
Release Track: Default
Electron: 42.10.0
Chromium: 148.0.7778.280
Node.js: 24.18.1
V8: 14.8.178.38-electron.0
xterm.js: 6.1.0-beta.291
OS: Darwin arm64 25.6.0
For AI issues: which model did you use?
composer-2.5
For AI issues: add Request ID with privacy disabled
Request ID: 03155901-7cbb-4c8e-8fc2-970880348eef
Share data was off during this turn however and the error is not reproducible.
Does this stop you from using Cursor
No - Cursor works, but with this issue