Why a prompt can't schedule itself, and where the trigger actually has to live

You asked the assistant to do this every Monday, and it ran the task once, right there in that conversation. The following Monday, nothing happened, because nothing anywhere was watching for Monday to arrive.

Why rewording won't fix this

A chat prompt exists for the length of one conversation and nothing beyond it. There's no clock running inside it, and no process waiting for a date to match. Asking a model to remember a schedule doesn't create one, because the model itself isn't running at all between your messages. A trigger has to live somewhere that keeps running when you're not there, since the model never does.

The trigger and the work are two separate jobs

The schedule itself needs no model at all. Something outside the conversation has to wake up on a timer, and only once it wakes up does any model call happen, if the task even needs one that particular time.

The timer lives in the platform running the code, never in the prompt.

function setupWeeklyTrigger() {
  ScriptApp.newTrigger("weeklyRun")
    .timeBased()
    .onWeekDay(ScriptApp.WeekDay.MONDAY)
    .atHour(8)
    .create();
}

Where that trigger actually lives

The right place depends on where the rest of the work already runs. A personal Google account has Apps Script's time-based triggers, with no separate hosting needed. A server you already run has cron. Most hosting platforms have a scheduled-function feature built for exactly this. An automation tool you already use probably has a schedule option sitting in its trigger list. None of these ask the model what day it is, because none of them depend on the model at all for the timing.

The Apps Script version of this is covered in more depth in the playbook on recurring file output, which uses the same kind of trigger for a weekly report.

See also: Recurring report that must land in the right folder

A scheduled run still has to report in

A trigger firing with nothing to do should still leave a trace: a log line, or a timestamp in a sheet, so a quiet week looks different from a broken trigger. Without that, the first sign of a failure is someone noticing weeks later that a report never arrived, with no way to tell which Monday it actually stopped.

Check last week before assuming this week is fine

Store whether the last run succeeded, and have each new run check that before doing anything else. A trigger that fires correctly every Monday but fails silently inside its own code is functionally the same as no trigger at all, and the only way to catch that is checking the record it left behind, not trusting that firing on schedule means finishing successfully.

What stays manual

  • Deciding what the trigger should actually check for, not just when it fires.
  • Watching the first few runs after setup, since an auth token expiring or a quota limit breaks this just as silently.
  • Changing the day or the time. That's a trigger configuration change, not a prompt edit.