[BUG] Claude Code Remote: fired `send_later` one-shot Routines keep a live-looking `next_run_at` +24h and can fire again

Status Open
Maintainer reply None cached
Activity 0 comments · opened Aug 15, 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?

Every send_later one-shot, after firing, is left in this state (from list_triggers):

  • ended_reason: "run_once_fired" (correct — the Routine should be permanently disabled)
  • next_run_at: <fire time + 24h> (wrong — a disabled one-shot should have no next run)
  • updated_at = the fire time, i.e. the +24h stamp is written as part of firing

Example shape (values generic):

{
  "id": "trig_…",
  "name": "send_later 2026-08-15T13:08Z #…",
  "run_once_at": "2026-08-15T13:08:00Z",
  "last_fired_at": "2026-08-15T13:14:38Z",
  "ended_reason": "run_once_fired",
  "next_run_at": "2026-08-16T13:14:38Z"
}

This happens on every firing, so a session that arms a short check-in chain (a PR watch re-arming a ~4-minute one-shot each turn) accumulates a row per wake-up, each showing a fire time tomorrow.

What Should Happen?

Firing a run_once_at Routine should clear or null next_run_at (or the row should be omitted from default list_triggers output), and a Routine with ended_reason: "run_once_fired" must never fire again.

Error Messages/Logs

Steps to Reproduce

  1. In a Claude Code Remote session, call send_later with delay_minutes: 5.
  2. Wait for it to fire.
  3. Call list_triggers: the fired Routine shows ended_reason: "run_once_fired" and next_run_at exactly 24 h after the fire time.

Claude Model

None

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

Version 1.260813.10 com.anthropic.claude

Platform

Anthropic API

Operating System

Other

Terminal/Shell

Other

Additional Information

  • One-shots regularly fire several minutes late (a 13:08 fire time delivered at 13:14).
  • A send_later for 5 minutes was once accepted but returned a fire time ~100 minutes out.

View original on GitHub ↗