[BUG] Cloud session keeps rescheduling hourly PR check-ins with no limit, silently draining cloud credits

Status Open
Maintainer reply None cached
Activity 3 comments · opened Sep 27, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

After Claude Code on the web opened a draft PR in a cloud session, it started monitoring that PR on its own, without asking me. It scheduled a one-shot reminder ("Re-check PR #111") to wake the session about an hour later, and every wake-up scheduled the next one.

The PR never changed, so this chain ran for about 3 days (65+ wake-ups), and every wake-up consumed my cloud session credits. None of the runs did anything useful: each one re-read the PR, found it unchanged (draft, no conflicts, no reviews, the only check passing), and scheduled the next check.

  • The only stop condition was "PR merged or closed". A draft PR waiting on its owner's decision never gets there on its own, so in practice the loop had no end.
  • I was never asked for consent and never told that monitoring would cost credits.
  • There was no notification, email, or budget alert. The only trace was a one-line status message per wake-up inside the session transcript, which I had no reason to open.
  • The MCP servers disconnected and reconnected around almost every wake-up, so each run also reloaded tool schemas, adding overhead to every run.
  • It stopped only when I noticed my credit balance ($58 of $250 left) and told the agent to stop.

What Should Happen?

  • Once the task I asked for is done (here: write a document and open a PR), the session should go idle and stop consuming credits.
  • If Claude wants to monitor a PR, it should ask first and say clearly that monitoring uses credits.
  • Any monitoring should have a hard limit, e.g. stop after 3 consecutive no-change checks or 24 hours, then notify me and ask whether to continue.
  • Scheduled wake-ups should be visible and easy to cancel, and credit usage from background runs should be shown per session.

Error Messages/Logs

No error was shown. Pattern from the session transcript (all times UTC). Each wake-up came from a self-scheduled one-shot reminder named "Re-check PR #111".

2026-09-23 06:20  draft PR #111 opened; the requested task was complete at this point
2026-09-24 07:58  hourly check-ins already running (the loop may have started earlier)
...
2026-09-26 03:04  wake-up -> PR unchanged (open, draft, mergeable: clean, 0 review threads, 1 check: success) -> next check scheduled +60 min
2026-09-26 04:07  same result -> rescheduled +60 min
2026-09-26 05:08  same result -> rescheduled +60 min
... repeats about every 61 minutes ...
2026-09-27 01:36  same result -> rescheduled +60 min
2026-09-27 02:37  same result -> rescheduled for 03:38
~2026-09-27 03:20  I noticed the credit drop and told the agent to stop; pending reminder deleted, PR activity unsubscribed

Total: 65+ wake-ups, 0 changes to the PR, 0 useful actions.

Status line posted to the transcript after each wake-up:
"PR #111 hasn't changed: still an open draft with no merge conflicts, its one check passing, and no reviews. It's waiting on your decision. Next check-in is around HH:MM UTC."

Steps to Reproduce

  1. Open Claude Code on the web (claude.ai/code) and start a cloud session on any GitHub repo.
  2. Give it a task that ends with Claude opening a pull request, e.g. "Write a planning document in docs/ and open a PR." (In my case Claude opened it as a draft; the repo has no CI workflows.)
  3. Don't merge, close, or review the PR, and don't send any more messages to the session.
  4. Come back 1–3 days later and look at the session transcript and your cloud session credits.

Result: the session has woken itself up about every hour, re-checked the unchanged PR, and scheduled the next check each time, consuming credits on every run.

Claude Model

None

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

N/A – Claude Code on the web (cloud session at claude.ai/code), version managed by Anthropic

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Other

Additional Information

Environment

  • Claude Code on the web (cloud session), followed from the Claude app
  • Session ID: session_01PPARc8HVRSavTPo2nKNZFw
  • PR: draft, docs-only; the repo has no CI workflows
  • Timeline: PR opened 2026-09-23 06:20 UTC; the loop ran until I stopped it around 2026-09-27 03:20 UTC

Why this was hard to notice

  • No consent prompt or cost notice when monitoring started.
  • It's a chain of one-shot reminders, not a recurring job. At any moment there's only one pending reminder, and fired ones are hidden, so it never looks like a long-running task.
  • The credits page only shows a total balance, with no per-session breakdown, so the usage looked like normal work.

Suggested fixes

  1. Make post-PR monitoring opt-in, with an explicit note that it consumes credits.
  2. Hard stop after N consecutive no-change checks or 24 hours, then notify the user.
  3. Exponential backoff when nothing changes, instead of fixed hourly polling.
  4. Rely on PR webhook events (the session was already subscribed) instead of polling, especially when the repo has no CI.
  5. Don't auto-monitor draft PRs, docs-only PRs, or PRs blocked only on the owner's decision.
  6. Show scheduled wake-ups in the session UI ("Next wake-up at HH:MM · Stop"), and show a self-rescheduling chain as one recurring Routine.
  7. Show credit usage per session, including background runs, and alert when background usage passes a threshold.
  8. Model side: after several identical check-in results, stop and ask instead of scheduling another check.

Workaround
Tell the session to stop monitoring the PR (it deletes the pending reminder and unsubscribes from PR activity), or delete the pending "Re-check PR #…" reminder from your Routines list.

<img width="1642" height="400" alt="Image" src="https://github.com/user-attachments/assets/f707af18-6da7-4061-ae29-9ddae48dde18" />
<img width="1538" height="1432" alt="Image" src="https://github.com/user-attachments/assets/97aab39e-b9e3-473e-898c-964bb8148eef" />

View original on GitHub ↗

3 Comments

doraemonfv-glitch · 17 days ago

Same issue here (Pro plan, Claude Code on the web, Windows desktop app).

After I asked Claude to open a draft PR and check CI once, the session scheduled a follow-up check on its own and kept re-arming one-shot "Re-check PR #N state" reminders while the PR was open. I never asked for ongoing monitoring.
31 wake-ups over ~31 hours (2026-09-27 05:00 to 2026-09-28 11:55 UTC). After the first few, every one reported no change, using ~7 tool calls each.
When I asked it to cancel, every scheduler/GitHub/shell call failed 9 times in a row with a "no verdict" permission error, so the last reminder still fired.
No notification or usage alert. My cloud session credits and weekly usage were consumed while I wasn't using Claude.
Support (Fin) couldn't show a per-wake-up usage breakdown or escalate to a human.

+1 to the suggested fixes, especially a hard stop after N no-change checks and making post-PR monitoring opt-in.

moonshot-cyber · 17 days ago

Did you get any notice before those hourly re-checks started burning credits, or was the first signal just the balance dropping?

ja3woopark · 15 days ago

Same issue here, and it's not the first time it has happened to me.

The core problem: hidden instructions the user never sees
This isn't the model randomly deciding to babysit a PR. When asked, the session said it was following its default instructions: after creating a PR, subscribe to PR activity without asking, schedule a check-in about an hour out, and if nothing changed, re-arm silently without telling the user, until the PR is merged or closed.

I never saw these instructions, never enabled anything like this, and was never asked. They are injected into the session behind the user's back, and the "re-arm silently" part specifically ensures the user doesn't notice while their usage is being drained. Whatever the intent, the effect is predatory: an invisible, uncapped loop that burns the user's paid usage on work nobody asked for.

The interval makes it worse: ~61 minutes against a 1-hour cache
The session's own instructions state that its prompt cache lives for 1 hour. The same hidden instructions then schedule each check-in "roughly an hour out". In practice, they fired every ~61 minutes.

That's the worst possible interval. Each wake-up lands just after the cache expires, so the whole conversation (hundreds of thousands of tokens, growing every time) gets re-cached at the highest price instead of read from cache at a small fraction of that cost. Waking even a few minutes earlier would have kept the cache warm. By my estimate, the 61-minute timing alone made each wake-up several times more expensive than necessary.

So the loop was running on the most expensive model, ran without the user knowing, and was also timed to miss the cache every single time. The system knows the cache lifetime and schedules just past it anyway.

Environment

  • Claude Code on the web, cloud session
  • Model: Claude Fable 5.1
  • Date: 2026-09-30 (UTC)
  • Repo has no CI and no reviewers, so nothing could change on the PR except a manual merge

What happened

  • I asked for some files to be added and a draft PR opened. Nothing about monitoring.
  • Right after opening the PR (02:12 UTC), the session subscribed to PR activity and scheduled an hourly check-in, without asking.
  • Every check-in found no change and silently scheduled the next one.
  • It ran 21 wake-ups until 22:46 UTC, when I noticed and stopped it manually.

Usage impact

  • The session's own token counter shows ~643k tokens added by the monitoring, vs ~62k for the work I actually asked for.
  • Estimated real processed volume is ~50–60M tokens. Each wake-up made ~5 model calls, each re-reading the full conversation, which grew from ~180k to ~800k tokens.
  • All of this ran on Fable.

Expected behavior

  • No hidden default instructions that spend the user's usage on unrequested background work.
  • PR monitoring should be strictly opt-in.
  • If it runs, it must tell the user when it starts, have a hard cap, and never re-arm silently.
  • Polling shouldn't exist at all when the session is already subscribed to PR events, since the subscription already pushes changes.
  • Any self-scheduled wake-up must fire before the prompt cache expires, never just after it.