[BUG] Desktop scheduled tasks lost ultracode in 2.1.289: "Ultracode is on" reminder skipped on scheduled-trigger turns
Since Claude Code 2.1.289 (desktop app update of 2026-10-06), desktop scheduled tasks no longer get ultracode, even with "ultracode": true in ~/.claude/settings.json. The ultra_effort_enter attachment ("Ultracode is on: …") is never added to a scheduled fire's turn, so the model never sees the instruction and doesn't orchestrate.
Environment: macOS, Claude desktop app 2.31226.1, bundled CLI 2.1.295 (first seen on 2.1.289). Local scheduled tasks in auto permission mode. ~/.claude/settings.json has "ultracode": true.
Evidence
Scheduled-fire transcripts from one machine, same settings throughout:
| CLI version | Origin of the fire's turn | Fires | Had "Ultracode is on" |
|---|---|---|---|
| 2.1.260–2.1.288 (2026-09-08 → 10-06) | {kind:"human"}, promptSource sdk | 298 | 298 |
| 2.1.289–2.1.295 (2026-10-06 → 10-12) | {kind:"task-notification", subkind:"scheduled-trigger"}, promptSource system | 45 | 0 |
The ultracode state itself still seems to be on. When the user types a follow-up into one of these runs (origin human), the full reminder appears on that turn.
Likely cause
From the 2.1.295 bundle (minified names, so they may differ):
- The app now stamps fires with origin
task-notification/scheduled-trigger. - The CLI sets
skipAttachmentsfor any origin other thanhumanorauto-continuation(function u_(e){return e===void 0||e.kind==="human"||e.kind==="auto-continuation"}). ultra_effort_enteris only built whenisRegularUserPromptis true:ld("ultra_effort_enter",()=>Promise.resolve(b?.isRegularUserPrompt?gPr(h,n):[])).
The workflow-authoring autoload, which is keyed on that attachment, is skipped along with it.
Steps to reproduce
- Set
"ultracode": truein~/.claude/settings.json. - Create a desktop scheduled task with any prompt and let it fire on its schedule.
- In the run's transcript, the first user turn has origin
scheduled-triggerand there is noultra_effort_enterattachment.
Expected: scheduled fires honor "ultracode": true, as they did through 2.1.288.
Requested fix (any one)
- Build
ultra_effort_enterforscheduled-triggerturns. - Deliver fires with an origin that keeps attachments, such as
auto-continuation. - Add a per-task ultracode/effort field. The task record already carries
model, and effort would benefit too: fires currently run at the model's default effort because no--effortis passed.
Workaround in use: a UserPromptSubmit hook that matches prompts starting with <scheduled-task name=" and returns the reminder text as additionalContext. It only approximates ultracode: the text is sent once and isn't repeated every 10 turns.