> ## Documentation Index
> Fetch the complete documentation index at: https://learn.actionist.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Calendar and schedules

> Review and adjust the recurring work a client's agents do, and get the time zones right when your client is in another country.

<div className="mxp-hero xc-border">
  <div className="exp-eyebrow mxp-rise">RECURRING WORK</div>

  <h2 className="mxp-hero-title mxp-rise" style={{animationDelay:'0.06s'}}>
    Their agents run on a clock. <span style={{background:'linear-gradient(90deg,#24A4FF,#9000FF,#E3008E)',WebkitBackgroundClip:'text',backgroundClip:'text',color:'transparent'}}>Make sure it's the right one.</span>
  </h2>

  <p className="mxp-hero-dek mxp-rise" style={{animationDelay:'0.13s'}}>
    With **Calendar & Schedules** granted, you can see and adjust the recurring jobs a client's agents run, run one on demand, and untangle a run that looks like it never happened. Almost every mistake here traces back to one thing: a time zone nobody checked.
  </p>
</div>

<div className="w-full py-10">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">The permission</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">One toggle, two surfaces.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      The client grants this from their **Manage Reseller** panel as **"Allow reseller to manage Calendar & Schedules"**, described to them as: "View and edit scheduled agent runs, recurring jobs, and calendar-connected workflows on this workspace." In the scope enum it is `calendar_and_schedules`.
    </p>
  </div>

  <div className="exp-surface-grid" style={{marginTop:'22px'}}>
    <div className="exp-surface-tile">
      <strong>The top-level Calendar tab.</strong> A workspace-wide view across every agent on that client's account, unlocked by this scope alone.
    </div>

    <div className="exp-surface-tile">
      <strong>The Schedule tab in Agent Studio.</strong> The recurring-run settings for one specific agent, opened from inside that agent's record.
    </div>
  </div>

  <Note>
    The Schedule tab has a second requirement. Agent Studio itself only opens with `prompts_and_instructions`, so a session holding `calendar_and_schedules` alone reaches the top-level Calendar tab but not the per-agent Schedule tab. Without `prompts_and_instructions`, Agent Studio renders as a disabled form and every tab inside it, Schedule included, is unreachable.
  </Note>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'18px'}}>
    Without this scope, both surfaces show the same locked panel: **"Access restricted"**, then "The client hasn't granted access to Calendar & Schedules in this delegated session." An agent asked to touch its own schedule during that session refuses the same way: "Permission denied: reseller delegated session does not include calendar\_and\_schedules access."
  </p>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'10px'}}>
    This page is the reseller-specific view of scheduling. For the full mechanics of the calendar and schedule builder outside a delegated session, see [Schedules](/Folders/schedules).
  </p>

  <Info>
    Inside the [Reseller mode banner](/resellers/view-as-client), this permission shows up as a short **Calendar** chip, alongside Prompts, Tools, Skills, Memories, Files, Chat History and Billing. If **Calendar** is missing from that list, this permission was not granted for the session you are in, whatever the Manage Reseller panel shows on the client's side.
  </Info>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">The building blocks</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">What a schedule is made of.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Every schedule targets one agent task, and is either one-time or recurring. Recurring schedules add a frequency, an interval, and a stop rule.
    </p>
  </div>

  <div>
    | Property                   | What it sets                                                                                     |
    | -------------------------- | ------------------------------------------------------------------------------------------------ |
    | Target                     | The agent task this schedule fires. Every schedule belongs to exactly one agent.                 |
    | Type                       | One-time, or recurring.                                                                          |
    | Frequency (recurring only) | One of six: Minutely, Hourly, Daily, Weekly, Monthly, Yearly.                                    |
    | Interval                   | A multiplier from 1 to 365 applied to the frequency, for example every 2 weeks or every 90 days. |
    | Weekly detail              | Day-of-week chips, for schedules on a Weekly frequency.                                          |
    | Monthly detail             | A single day-of-month, for schedules on a Monthly frequency.                                     |
    | Stop rule                  | Never, on a specific date, or after a set number of occurrences.                                 |
  </div>

  <AccordionGroup>
    <Accordion title="One-time versus recurring" icon="calendar">
      A one-time schedule fires once, at the date and time you set, and is done. A recurring schedule keeps firing according to its frequency and interval until its stop rule ends it.
    </Accordion>

    <Accordion title="The six frequencies and the interval" icon="repeat">
      Minutely, Hourly, Daily, Weekly, Monthly, and Yearly all take the same interval field, a multiplier from 1 to 365. An interval of 1 means every unit, an interval of 3 on a Daily frequency means every three days.
    </Accordion>

    <Accordion title="Weekly and monthly specifics" icon="calendar-days">
      A Weekly schedule needs at least one day-of-week chip selected, and can select several, so "every Tuesday and Thursday" is one schedule, not two. A Monthly schedule takes a single day-of-month instead.
    </Accordion>

    <Accordion title="The three stop rules" icon="octagon">
      **Never** keeps a recurring schedule running indefinitely. **On date** ends it after a specific calendar date. **After a number of occurrences** ends it once it has fired that many times, whichever comes first if combined with other settings.
    </Accordion>

    <Accordion title="Editing one occurrence of a series" icon="split">
      Change a single occurrence of a recurring schedule and you are prompted for scope before the edit applies: **this occurrence**, **this and following**, or **all occurrences**. Picking the wrong one is the easiest way to silently reshape a series a client is depending on, so read the prompt before confirming.
    </Accordion>
  </AccordionGroup>
</div>

<hr className="xc-divider" />

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Read this section twice</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Every schedule remembers its own time zone.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Time zone is not an agent setting and there is no working-hours field anywhere. It lives on the schedule, and only there. A schedule fires from the zone stored on it, whoever happens to be looking at it, and whatever zone that person is sitting in.
    </p>
  </div>

  <div className="mxp-window xrs-mock-window">
    <div className="mxp-window-bar xrs-mock-titlebar">
      <span className="mxp-window-dot xrs-mock-dot red" />

      <span className="mxp-window-dot xrs-mock-dot yel" />

      <span className="mxp-window-dot xrs-mock-dot grn" />

      <span className="mxp-window-title">Schedule · Weekly client report</span>
    </div>

    <div className="mxp-window-body xrs-mock-body" style={{minHeight:'auto'}}>
      <div className="xrs-mock-label">Target</div>
      <div className="xrs-mock-input readonly">Maya · Send weekly report</div>

      <div className="xrs-mock-label">Frequency</div>
      <div className="xrs-mock-select">Weekly, every 1 week, on Monday<span className="xrs-mock-select-arrow" /></div>

      <div className="xrs-mock-label">Time zone</div>
      <div className="xrs-mock-select">America/New\_York<span className="xrs-mock-select-arrow" /></div>

      <ul className="xrs-wallet-warning-list" style={{marginTop:'16px'}}>
        <li>Runs at 9:00 AM in America/New\_York. That's 2:00 PM in your time zone (Europe/London).</li>
      </ul>
    </div>
  </div>

  <Warning>
    A schedule's time zone defaults to whatever system time zone **you** are on when you create it, not the client's. If you open a delegated session and build a schedule for a client on the other side of the world without touching the time zone field, it will fire on your clock, not theirs. This is the single most likely mistake a reseller makes on this page, and it is entirely avoidable: always set the zone explicitly.
  </Warning>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'18px'}}>
    Setting a client schedule correctly, from another country:
  </p>

  <Steps>
    <Step title="Open the schedule" icon="calendar-clock">
      From the Calendar tab or the agent's Schedule tab, inside a delegated session for that client's workspace.
    </Step>

    <Step title="Find the time zone field" icon="globe">
      It will already show a value, almost always your own system zone if this is a new schedule. Do not assume it matches the client.
    </Step>

    <Step title="Set it to the client's zone" icon="map-pin">
      Change it explicitly. Ask the client if you are not certain, rather than guessing from their country.
    </Step>

    <Step title="Read the cross-zone warning" icon="triangle-alert">
      When the schedule's zone differs from yours, the amber line spells out both times side by side. Confirm the client-facing time is the one you meant to set.
    </Step>

    <Step title="Save, and check back once" icon="circle-check">
      After the first run, the run history confirms the actual fire time. That is your proof the zone was set correctly, not just entered correctly.
    </Step>
  </Steps>
</div>

<hr className="xc-divider" />

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">On demand</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Running one now.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      **Run now** lives on the Schedule tab inside Agent Studio, next to the specific schedule you are looking at. It is not available from the top-level Calendar list, so testing a schedule means opening the agent it belongs to.
    </p>
  </div>

  <div>
    | State              | What you see                                                                 |
    | ------------------ | ---------------------------------------------------------------------------- |
    | Schedule enabled   | **Run now** is clickable                                                     |
    | Schedule disabled  | **Run now** is greyed out, tooltip "Enable this schedule to run it manually" |
    | Run starts         | Toast "Scheduled run started"                                                |
    | Run fails to start | Toast "Could not start this scheduled run"                                   |
  </div>

  <Warning>
    **Run now** is a real run, not a preview or a dry run. It executes the agent task exactly as the schedule would, with every action it takes actually happening. Use it to confirm a schedule fires correctly, not as a safe way to inspect one.
  </Warning>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'16px'}}>
    A reseller holding `calendar_and_schedules` can click **Run now** in a delegated session the same way the client can in their own workspace.
  </p>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Two switches, one checker</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Enabling, disabling, and conflicts.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      There are two independent switches that stop a schedule from running, and one checker that stops two schedules from colliding.
    </p>
  </div>

  <div className="exp-surface-grid" style={{marginTop:'22px'}}>
    <div className="exp-surface-tile">
      <strong>The per-schedule switch.</strong> Disabling one schedule stops future occurrences from being computed. What happens to a run already in flight at the moment you flip it is not documented, so do not state one way or the other if asked.
    </div>

    <div className="exp-surface-tile">
      <strong>The agent-level scheduling preference.</strong> One setting on the agent itself, whose hint reads "When disabled, all scheduled jobs for this agent are paused." Flipping this pauses every schedule that agent owns at once, without touching their individual settings.
    </div>
  </div>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'20px'}}>
    Conflict checking runs live while you build a schedule, before you save it, and it is scoped to the agent. Two schedules for the **same** agent that overlap trigger a conflict banner and block the save. Two schedules for **different** agents can occupy the exact same slot with no warning at all, because each agent runs in its own lane.
  </p>

  <Note>
    The conflict window is based on the schedule's duration, not just its start time. A schedule with an under-set or missing duration can look free when it actually overlaps a real run, so a duration that is too short can hide a genuine clash rather than prevent one.
  </Note>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">In practice</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">How resellers actually use this page.</h2>
  </div>

  <div className="xc-recipes">
    <div className="xc-recipe">
      <div className="xc-recipe-who">
        <i style={{background:'linear-gradient(135deg,#9000FF,#00DBFF)'}} />

        Agency owner, new client abroad
      </div>

      <div className="xc-recipe-flow">
        Sets up a client's first <em>weekly report</em> schedule from a delegated session, catches that the time zone field is still on their own city, and changes it before saving. Checks back after the first run to confirm the fire time in the client's local clock.
      </div>

      <span className="xc-recipe-save">the one habit that avoids most tickets</span>
    </div>

    <div className="xc-recipe">
      <div className="xc-recipe-who">
        <i style={{background:'linear-gradient(135deg,#9000FF,#00DBFF)'}} />

        Support engineer, "it didn't run"
      </div>

      <div className="xc-recipe-flow">
        Opens <em>View as client</em>, works the four-step diagnostic below in order, finds the schedule enabled but the agent hosted on a machine that was asleep at the scheduled hour, and tells the client to move that agent to a cloud placement.
      </div>

      <span className="xc-recipe-save">found on step three, most times</span>
    </div>

    <div className="xc-recipe">
      <div className="xc-recipe-who">
        <i style={{background:'linear-gradient(135deg,#9000FF,#00DBFF)'}} />

        Account manager, monthly review
      </div>

      <div className="xc-recipe-flow">
        Opens the Calendar tab across a client's agents, uses <em>Run now</em> on a schedule that looked idle to confirm it still works, and tightens an interval that had been firing more often than the client actually needed.
      </div>

      <span className="xc-recipe-save">one pass per client, no surprises</span>
    </div>
  </div>
</div>

<hr className="xc-divider" />

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Diagnose in order</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">When a scheduled run looks stuck.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Work through these four checks in order. Most "it didn't run" reports resolve on the first two.
    </p>
  </div>

  <Steps>
    <Step title="Is the schedule enabled" icon="power">
      Check both switches: the schedule's own toggle, and the agent-level scheduling preference. Either one being off silently stops future runs.
    </Step>

    <Step title="Does Agent Studio → Runs show a row at all" icon="list">
      No row for the expected time means the schedule never fired. A row that exists but shows no useful result means it fired, and the instructions themselves were the problem, not the schedule.
    </Step>

    <Step title="Where does the agent run" icon="server">
      An agent hosted on someone's own machine only fires while that machine is awake and online. A machine that sleeps or shuts down stops every schedule tied to it. An agent on a cloud placement keeps firing regardless.
    </Step>

    <Step title="Check the time zone" icon="globe">
      The schedule fires in its own stored zone, not yours and not necessarily the client's either. A run that "never happened" has often already happened, just not when someone expected.
    </Step>
  </Steps>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'20px'}}>
    A related but separate wrinkle: the Schedule tab inside Agent Studio is itself headed "Scheduled runs" in the interface, but it lists the configured schedules, not their execution history. For the history itself, go to **Agent Studio → Runs**. Each row there records its source, so a scheduled firing is distinguishable from one you started manually with **Run now**.
  </p>
</div>

<div className="w-full pb-4">
  <div>
    | What you see                                           | Likely cause                                                        | What to check                                                                      |
    | ------------------------------------------------------ | ------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
    | No row in **Agent Studio → Runs** at the expected time | The schedule never fired                                            | Both enable switches, then the stored time zone against the expected local time    |
    | A row exists but the result is empty or wrong          | It fired, the instructions or a tool call failed                    | The agent's Instructions and Soul, and any recent tool or connection change        |
    | It always fires hours off from expected                | Time zone mismatch, most often defaulted to the creator's zone      | The schedule's stored time zone, compared to the cross-zone warning line           |
    | A schedule silently stopped recurring                  | It hit its stop rule, or the agent-level preference was flipped off | The stop rule (On date or occurrence count), and the agent's scheduling preference |
    | Save is blocked with a conflict banner                 | Another schedule on the **same agent** overlaps this one            | The other schedule's time and duration, not just its start time                    |
  </div>
</div>

<div className="w-full pb-10">
  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
    For every other message you might hit in a delegated session, and whose problem it is, see [Troubleshooting](/resellers/troubleshooting).
  </p>
</div>

<div className="w-full py-10 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Not a schedule feature</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">What actually pauses a run for a human.</h2>

    <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl">
      Approvals have nothing to do with schedules. Two separate things can stop an unattended run and wait for a person, and neither one lives on the Calendar or Schedule tab.
    </p>
  </div>

  <div className="xrs-two">
    <div className="xrs-two-col can">
      <div className="xrs-two-tag">The agent's approval mode</div>
      <div className="xrs-two-item">If a scheduled run triggers a tool call the agent's approval mode requires sign-off for, it waits on that approval exactly as it would in a live chat.</div>
      <div className="xrs-two-item">This is set per agent, not per schedule, so it applies the same way whether the run started on a timer or with **Run now**.</div>
    </div>

    <div className="xrs-two-col cant">
      <div className="xrs-two-tag">A blocker</div>
      <div className="xrs-two-item">An agent files a blocker when an unattended run hits something only a person can fix, such as a missing credential or a broken connection.</div>
      <div className="xrs-two-item">Blockers surface under **Needs attention**. In a live chat, the same situation just prompts the agent to ask you directly, since you are already there.</div>
    </div>
  </div>

  <p className="text-base text-gray-600 dark:text-gray-400 max-w-3xl" style={{marginTop:'20px'}}>
    Event-driven automation is a different feature entirely, called **Triggers**, and it is not covered here. For the full story on approval modes and blockers, see [Oversight](/Folders/oversight). For the event-driven side of automation, see [Triggers](/Folders/reactions).
  </p>

  <Tip>
    If a client asks why their agent "waited for someone" overnight, the schedule itself is almost never the cause. Check the agent's approval mode first, then **Needs attention** for an open blocker, before you go anywhere near the Calendar tab.
  </Tip>
</div>

<hr className="xc-divider" />

<div className="w-full py-10">
  <div className="actionist-cta-panel xc-border">
    <div className="relative z-10 flex flex-col items-center gap-5 max-w-2xl mx-auto">
      <span className="actionist-eyebrow">Calendar and schedules</span>

      <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-white leading-tight">
        Recurring work, set to the right clock.
      </h2>

      <p className="text-base md:text-lg text-white/85">
        One scope, two surfaces, and one field that decides whether a client's agents run on time or on yours.
      </p>

      <div className="flex flex-wrap items-center justify-center gap-3 pt-2">
        <a className="actionist-cta-btn-primary" href="https://app.actionist.ai" target="_blank" rel="noreferrer">
          Open the Dashboard

          <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.2" strokeLinecap="round" strokeLinejoin="round">
            <path d="M5 12h14" />

            <path d="m12 5 7 7-7 7" />
          </svg>
        </a>

        <a className="actionist-cta-btn-secondary" href="https://actionist.ai/partners/" target="_blank" rel="noreferrer">
          Signup as a Partner
        </a>
      </div>
    </div>
  </div>
</div>

<div className="w-full pt-2 pb-6">
  <p className="actionist-trust-line">
    Scoped by one permission, enforced on the server, checked for conflicts before it ever saves.<br />
    Stored zone decides the fire time · Run now is a real run · Approvals and blockers are separate from schedules.
  </p>
</div>

<div className="w-full pb-16 xc-rise">
  <div className="actionist-tight flex flex-col gap-2 mb-6">
    <span className="actionist-section-eyebrow">Keep going</span>
    <h2 className="text-2xl md:text-3xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">Next steps.</h2>
  </div>

  <Columns cols={4}>
    <Card title="Schedules" icon="calendar-clock" href="/Folders/schedules">
      The full builder reference: recurrence, stop rules, and the calendar view outside a delegated session.
    </Card>

    <Card title="Oversight" icon="shield-check" href="/Folders/oversight">
      Approval modes and blockers in full, including what counts as a risky tool call.
    </Card>

    <Card title="Agents, prompts and instructions" icon="users" href="/resellers/agents">
      What else changes on an agent record once you are inside a client workspace.
    </Card>

    <Card title="Troubleshooting" icon="life-buoy" href="/resellers/troubleshooting">
      Every message you can hit in a session, what it means, and whose problem it is.
    </Card>
  </Columns>
</div>
