PR-activity webhook events render as if the user sent them, and non-actionable bot comment-edits are relayed with full raw payloads

Status Open
Maintainer reply None cached
Activity 3 comments · opened Aug 14, 2026

Summary

When a Claude Code Remote session is subscribed to PR activity (via the PR-watching / "subscribe to PR activity" feature), incoming GitHub webhook events are injected into the conversation as <wake reason="external-event"><event source="github" ...> blocks. Two problems with this:

  1. Misattribution in the UI. These injected blocks are not visually distinguished from a message the user actually typed. A large block of raw JSON dropped in by a webhook event reads, in the transcript, as if the user pasted it themselves. This is confusing and clutters the conversation — users have reported it looking like "a bug" because it appears to be their own message.
  1. Non-actionable bot noise is relayed in full, repeatedly. Status-comment bots (e.g. a CI/deploy-preview bot) edit the same PR comment multiple times as a build progresses (queued → building → ready/skipped). Each edit fires a distinct issue_comment.edited webhook, and each one is relayed as a full wake event with the entire comment body inlined — including large opaque content (e.g. base64-encoded internal config blobs) that has zero informational value to the agent or the user. Over the life of a PR this can inject many kilobytes of pure noise into the context window across several edits, none of which ever requires a response.

Example (sanitized)

<wake reason="external-event" current-time="2026-08-14T05:25:22Z">
  <event source="github" kind="issue_comment.edited" from="system" trust="relay" untrusted-keys="author,file,comment,review_comments">
    <!-- An existing GitHub comment on the PR was updated in place. Review the new content and determine what action (if any) is needed to address it. -->
    {"author":"<deploy-preview-bot>","comment":"[vc]: #<long base64 config blob>\nThe latest updates on your projects...\n\n| Project | Deployment | Actions | Updated (UTC) |\n...","pr":"<org>/<repo>#<number>"}
  </event>
</wake>

Suggested fixes

  • Visually distinguish (in the UI/rendering layer) turns that originate from an injected external event vs. an actual user-typed message, so they can never be confused with something the user sent.
  • Recognize known noisy bot authors (deploy-preview/status bots that repeatedly edit the same status comment) and either suppress repeat edits of the same comment, strip/truncate clearly non-actionable binary/base64 content before relaying, or collapse them into a lighter-weight notification instead of the full raw payload.

Impact

Fills the context window with non-actionable content and makes it hard for users to follow their own conversation, since injected events are indistinguishable from their own messages.

View original on GitHub ↗

3 Comments

toumix-agents · 16 days ago

+1 — seeing the same thing, with an extra data point suggesting this is a regression in transcript rendering: these wake envelopes used to be invisible. The session woke, handled the event, and the transcript stayed clean. Recently every subscribed PR event (reviews, comments, CI conclusions, state notices) started appearing in the conversation as a raw XML turn, as if someone had sent the user an XML message.

Example of what now shows up in the transcript (Claude Code on the web, session auto-subscribed via subscribe_pr_activity after creating a PR):

<wake reason="external-event" current-time="2026-08-14T11:29:36Z">
  <event source="github" kind="pull_request_review.submitted" from="system" trust="relay" untrusted-keys="author,file,comment,review_comments">
    <!-- A GitHub review was submitted on the PR with no summary text. Its inline comments have already been delivered as separate events. -->
    {"author":"toumix","author_association":"OWNER","author_type":"User","notes":["1 review comment(s) already delivered as separate events"],"pr":"toumix/desire#68","review_id":4936712226,"review_state":"commented","state":"commented"}
  </event>
</wake>

Expected: wake envelopes are harness-internal plumbing — either hidden from the transcript entirely (as before) or rendered as a compact system event line (e.g. "GitHub: review submitted on toumix/desire#68"), not a raw XML user-style message.

Environment: Claude Code on the web (claude.ai/code remote sessions), sessions subscribed to PR activity via subscribe_pr_activity. Observed 2026-08-14. Event delivery and handling still work correctly — the goal is to keep receiving the events, just not see the raw envelopes.

---
_Generated by Claude Code_

tkwidmer · 16 days ago

This just started happening recently for me. I thought I was going crazy and thought I had changed something accidently in a setting or something. +1. Would love to see these supressed.

toumix · 10 days ago

It's been a week and this is becoming very annoying, especially for sessions where the task is to edit github workflows, they are basically unreadable garbage.

Incidentally DeepSeek harness just proposed the rigorous way to solve this, get some inspiration from them!