Developers can detect replays in task runs

Developers can now determine if a task run is a replay of a previous run directly from the execution context, enabling custom logic specifically for replayed executions.
Developers can now detect when a task is a replay of a prior run. By checking ctx.run.isReplay inside their tasks, teams can write conditional logic specifically for replayed executions.
This means tasks can behave differently on a replay—skipping side effects like sending duplicate notification emails, omitting analytics events, or logging with different tags. Previously, a replay ran with the exact same context as the original, making it difficult to safely re-run complex tasks that had external side effects.
The replay detection is available across the core engine and webapp execution paths, deriving its value directly from existing database fields without requiring new schema migrations.
1export const myTask = task({2 id: "my-task",3 run: async (payload, { ctx }) => {4 if (ctx.run.isReplay) {5 // Skip sending duplicate notifications6 }7 },8});
View Original GitHub Description
Summary
Adds isReplay boolean to the run context (ctx.run.isReplay), following the same pattern as the existing isTest. The value is derived from the existing replayedFromTaskRunFriendlyId database field, so no schema migration is needed.
✅ Checklist
- I have followed every step in the contributing guide
- The PR title follows the convention.
- I ran and tested the code works
Testing
- Verified
@trigger.dev/corebuilds successfully - Verified
webapptypechecks successfully - All new fields use
default(false)for backwards compatibility
Changelog
- Added
isReplaytoTaskRunandV3TaskRunschemas incommon.ts - Added
RUN_IS_REPLAYsemantic attribute and wired it intaskContext - Propagated
isReplaythrough the dequeue system, run attempt system, and all execution context construction paths (V1 + V2) - Added
isReplaytoDequeuedMessageandTaskRunExecutionLazyAttemptPayloadschemas - Added patch changeset for
@trigger.dev/core - Updated docs: added
isReplayto context reference, added "Detecting replays" section to replaying page
💯
Link to Devin session: https://app.devin.ai/sessions/1d6f1b3cc39a4623b72d05bf00f2d70c