Have Alpha run something on a timetable, such as a digest, an uptime check or a weekly summary, even while the session sleeps.
A routine is work Alpha runs on a timetable, even while its session is closed and the session’s machine is asleep. Alpha’s server keeps the clock: for each run it wakes the session, runs the work there with that session’s files, secrets and database, then lets the machine sleep again. For a worked example, follow Post a weekly summary to Slack. A published app has no scheduler of its own, so its periodic jobs belong in a routine too.
Each routine row shows its state, its timetable and when it runs next.
If the Routines page says “Routines are not enabled on this Alpha”, routines aren’t turned on for your Alpha. Ask your administrator.
A routine either runs a command or asks the agent. The agent picks one when it builds the routine, and you can switch under What it does in the edit form.
Run a command
Ask the agent
What runs
A script the agent wrote and tested, in the workspace, with the session’s secrets and DATABASE_URL
Your instruction, sent to the session’s agent as a turn nobody watches
Cost per run
No agent turn and no tokens
A full agent turn
The run’s log
The command’s output. Exit 0 is ok; anything else fails the run.
The agent’s closing report
In the transcript
A Routine … ran card, or Routine …: the run failed
A Routine run · … message, then the agent’s work
Use it for
Work that follows the same steps every time
Work that needs judgement every time, such as triaging an inbox
Not sure? Ask for a command. It’s cheaper and does the same thing on every run, and the agent prefers it unless the work needs reasoning.
Routines belong to your account, not to the session that made them. Each one runs in its home session, the session that created it, and the Routines page lists every routine from all your sessions.
You describe a routine, and the agent builds it, tests it once and saves it. Start from the Routines page when the work needs nothing from an existing session; it opens a fresh routine session with its own machine.
1
Open the Routines page
Click Routines in the sidebar. With no routines yet, the page opens on a composer with four starter cards: Hacker News digest, Uptime check, Exchange rate log and Weekly summary. A card fills the composer with its prompt for you to edit. Once you have routines, click New routine to bring the composer back above them; Cancel closes it.
Pick a starter, or say what should run and when in your own words.
2
Describe what runs and when
Say what to do, how often, and where the result goes. Click Create routine or press Enter; Shift + Enter adds a new line.Alpha will:
Open a new routine session and write the check as a script in its workspace.
Run the script once by hand and show you the result.
Ask for anything it still needs in a question card, such as the timetable if you didn’t give one, or your time zone when it names a time of day.
Save the routine and tell you what runs and when.
3
Find the routine session in the sidebar
A routine session is an ordinary session marked with a clock in the sidebar. Any session that is home to a routine gets the clock too. The clock is green while a routine is scheduled and pulses while a run is going. It’s grey while the routine is paused or nothing is saved yet. To list only routine sessions, open the sidebar’s Filter, group and sort menu and set Type to Routines.
4
Check the saved card
When the agent saves the routine, the card Routine harbor-weekly-summary saved appears with When, Runs (or Asks the agent) and Next. When it’s the session’s first routine, the session’s Routines tab opens beside the chat.
To give a routine an existing session’s files, secrets or database, ask for it in that session instead: “every Monday at 9, post last week’s bookings to #harbor-staff”. The agent follows the same steps there, and the routine’s home is that session.
The timetable lives under How often in the edit form. The line under it spells the timetable out in words and lists the next three runs, or shows in red why the server refused it. Every choice except Once, at a set time and Custom (cron expression) also shows its cron: expression.
How often
You set
Every few minutes
Every n minutes, with optional Only between hours and Only on weekdays
Every few hours
Every n hours at a minute past the hour, with the same options
Every day
A time
On certain days of the week
Weekday chips and a time
On certain days of the month
Day chips (1–31) and a time. A month without that day skips it.
Once, at a set time
A date and time. The routine shows Done after it runs.
Custom (cron expression)
Five fields: minute, hour, day of month, month, day of week
Daily, weekly and monthly timetables also take Months; none picked means every month. Time zone is the zone the routine’s times are read in. It’s hidden for a plain every-n-minutes or every-n-hours timetable, which runs the same in any zone. A routine runs at most once every 15 minutes (default), because each run wakes a machine.For a command, More options adds Folder (where the command runs, the workspace by default) and Stop after (seconds), which defaults to 600 and goes up to 3600.
Each row on the Routines page has the same buttons. The session’s Routines tab shows only that session’s routines, without View session. The tab edits routines but doesn’t add them; to add one, ask the agent. Once all of a session’s routines are removed, its tab shows How a routine comes together instead.
Button
What it does
View session
Opens the routine’s home session (Routines page only)
Run now
Starts a run at once and opens the row on it. The run is marked by hand. It’s refused while a run is already going, or while an agent routine’s session is in the middle of a turn.
Pause / Resume
Stops or restarts the timetable. A finished one-time routine has neither.
Edit
Opens the form inline. Saving posts “You changed the routine …” in the home session’s transcript.
Remove
Deletes the routine after you confirm “Remove the routine harbor-weekly-summary? Its runs go with it.”
Expand / Collapse
Shows the Command or Instruction, then Runs in (Routines page only), Next runs, Last run, Folder and Stops after (commands only), Name, Added, and Runs
Remove deletes the routine and every run’s log, and it can’t be undone. To stop a routine you may want back, Pause it.
The row’s dot gives the routine’s state. Each run under Runs gets a chip; click a run to read its whole log, even while the machine sleeps. Alpha keeps the last 50 runs of each routine.
You see
It means
Active (green dot)
The routine runs on its timetable.
Paused (amber dot)
Nothing runs until you click Resume.
Done (grey dot)
A one-time routine that has run.
Last run failed (red dot)
Open the latest run to read why.
ok
The command exited 0, or the agent’s turn finished with a report.
failed or exit + a code
The command failed, timed out (“stopped after 600 s”) or couldn’t start.
skipped
The run didn’t start, for example “the previous run was still going”.
queued / running
The log reads “Waiting for the routine service…” or “Waking the session and starting…”.
An agent run appears in its session’s transcript as Routine run · harbor-inbox-digest. The agent works without asking questions and ends with a short report, which becomes the run’s log. A failed command run posts Routine harbor-uptime: the run failed with Error, Took and the end of the log.
The command never started, for example because its folder is missing.
Ask the agent in the routine’s session to fix the command or its folder.
”stopped after 600 s” (or another number)
The command ran past its time limit.
Make it faster, or raise Stop after (seconds) under Edit → More options, up to 3600.
”the agent could not be started: …”
An agent routine couldn’t begin its turn.
Open the session to see why, then Run now.
”the agent’s turn failed” or “the agent’s turn was stopped”
The agent’s turn ended in an error, or was stopped.
Read the turn in the session’s transcript.
”the agent’s turn ended without reporting back”
The agent finished without its closing report.
Read the turn in the transcript, and make the instruction say what to report.
”the server running it stopped mid-run”, “the run’s job was lost before a worker took it”, “stopped: the run outlived its limit” or “stopped: the routine service ended the run”
Alpha lost track of the run, usually during a restart.
Click Run now if you need this run.
”the session is gone” or “the session’s owner is gone”
The routine’s session, or its owner’s account, was deleted.
Remove the routine, or ask the agent in another session to create it again.
Only you, the owner. People you share a session with never see its Routines tab. The Routines page and the tab can change everything, including what runs.The agent sees every routine on your account from any session. From outside a routine’s home session it can change only the timetable, or pause and resume. For anything else it posts Routine harbor-weekly-summary is changed in its own session with an Open Harbor bookings button. The agent removes a routine only when you ask, and names it first.Deleting a session deletes the routines whose home it is, with their runs. Forking a session doesn’t copy its routines.
Build harbor-weekly-summary end to end, from connecting Slack to the first run.
Connect an app
Let a routine send email or post to Slack without a key ever appearing in the transcript.
Sleep, wake and reset
What a sleeping machine keeps, so a routine finds its files where it left them.
Secrets
Give a command routine the keys it reads, scoped to its session or your account.
⌘I
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Alpha","colors":{"primary":"#1A54F0","light":"#749FF9","dark":"#1A54F0"},"logo":{"light":"https://mintcdn.com/lyzr-15a99e0f/peFm_Sv4KgaR4cun/images/logo/light.png?fit=max\u0026auto=format\u0026n=peFm_Sv4KgaR4cun\u0026q=85\u0026s=633788f52e3e9a8128bdaf2d7a62fff6","dark":"https://mintcdn.com/lyzr-15a99e0f/peFm_Sv4KgaR4cun/images/logo/dark.png?fit=max\u0026auto=format\u0026n=peFm_Sv4KgaR4cun\u0026q=85\u0026s=cca4899a3c056f427f80610ac85d1170","href":"https://alpha.new"},"favicon":"https://mintcdn.com/lyzr-15a99e0f/peFm_Sv4KgaR4cun/images/favicon.png?fit=max\u0026auto=format\u0026n=peFm_Sv4KgaR4cun\u0026q=85\u0026s=606bf8d8b1dd77e7fc7d13b52bd06f85","appearance":{"default":"system","strict":false},"background":{"color":{"light":"#FAFAF9","dark":"#0E0E0D"}},"navbar":{"primary":{"type":"button","label":"Open Alpha","href":"https://alpha.new"}},"footer":{"socials":{"github":"https://github.com/suyash-lyzr/alpha-documentation"}},"search":{"prompt":"Search docs"},"seo":{"metatags":{"og:site_name":"Alpha docs"}},"fonts":{"family":"Geist"},"icons":{"library":"fontawesome"},"styling":{"eyebrows":"section","codeblocks":"system","latex":false},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"lyzr-15a99e0f","hasAudioNarration":false,"actualSubdomain":"lyzr-15a99e0f","customDomains":[],"gitSource":{"type":"github","owner":"suyash-lyzr","repo":"alpha-documentation","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":"","_id":"6ae0b4f093d54c7ebe38e84c"},"chroma":{"latestBuiltDeploymentHistoryId":"6ae13e48963c9b68664e663c","collectionId":"6f6abaac-a319-483c-b30d-6356d4f82504","liveDeploymentHistoryId":"6ae13e48963c9b68664e663c","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae13f861208be8074bfe6ae","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"Build","count":22},{"language":"default","tag":"Get started","count":17},{"language":"default","tag":"Reference","count":12},{"language":"default","tag":"Workspace","count":10},{"language":"default","tag":"Ship","count":8},{"language":"default","tag":"Agents","count":7},{"language":"default","tag":"Connect","count":7},{"language":"default","tag":"Chat with the agent","count":6},{"language":"default","tag":"Sessions","count":6},{"language":"default","tag":"Guides","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--a-canvas:#f0f0ef;--a-bg:#fafaf9;--a-card:#ffffff;--a-fill:#f2f2f1;--a-fg:#161614;--a-soft:#3c3c39;--a-muted:#636361;--a-border:rgb(22 22 20 / 9%);--a-signal:#1a54f0;--a-signal-soft:rgb(26 84 240 / 8%);--a-radius:0.7rem;--a-shadow-card:0 0 0 1px var(--a-border), 0 1px 2px rgb(22 22 20 / 4%), 0 2px 6px rgb(22 22 20 / 4%);--a-shadow-raised:0 0 0 1px var(--a-border), 0 2px 10px rgb(22 22 20 / 7%)}.dark{--a-canvas:#0e0e0d;--a-bg:#0e0e0d;--a-card:#181817;--a-fill:#20201f;--a-fg:#f5f5f4;--a-soft:#d6d6d3;--a-muted:#9f9f9a;--a-border:rgb(255 255 255 / 8%);--a-signal:#749ff9;--a-signal-soft:rgb(116 159 249 / 10%);--a-shadow-card:0 0 0 1px var(--a-border), inset 0 1px 0 rgb(255 255 255 / 4%), 0 1px 2px rgb(0 0 0 / 25%);--a-shadow-raised:0 0 0 1px var(--a-border), inset 0 1px 0 rgb(255 255 255 / 5%), 0 2px 12px rgb(0 0 0 / 30%)}code,kbd,pre{font-family:\"Geist Mono\",ui-monospace,\"SF Mono\",Menlo,monospace!important}#page-title{font-size:1.75rem!important;line-height:1.2!important;font-weight:600!important;letter-spacing:-.025em!important}#header .eyebrow{font-size:.75rem;font-weight:500;letter-spacing:.01em}#content-area .prose{font-size:.9375rem;line-height:1.7}#content-area .prose h2{font-size:1.25rem;font-weight:600;letter-spacing:-.015em;margin-top:2.5rem}#content-area .prose h3{font-size:1rem;font-weight:600;letter-spacing:-.01em}#content-area .prose li,#content-area .prose p{color:var(--a-soft)}#content-area .prose strong{color:var(--a-fg);font-weight:560}#content-area .prose a{text-decoration-color:color-mix(in oklab,var(--a-signal) 45%,transparent);text-underline-offset:3px}::selection{background:var(--a-signal-soft)}#sidebar-content{font-size:.875rem}#content-area .prose table,#table-of-contents{font-size:.8125rem}.callout,.card{border-radius:var(--a-radius)!important;box-shadow:var(--a-shadow-card)}.card{border-color:transparent!important;background:var(--a-card);transition:box-shadow 150ms ease}.card[role=link]:hover,a.card:hover{box-shadow:0 0 0 1px color-mix(in oklab,var(--a-signal) 55%,transparent),0 2px 10px rgb(22 22 20/6%)}.card [data-component-part=card-content-container]{display:flex;align-items:flex-start;gap:.75rem;padding:.875rem 1rem!important}.card [data-component-part=card-icon]{flex:none;width:1.75rem!important;height:1.75rem!important;margin:0!important;display:grid;place-items:center;border-radius:.45rem;background:var(--a-fill);box-shadow:0 0 0 1px var(--a-border)}.card [data-component-part=card-icon] svg{width:.875rem!important;height:.875rem!important;background-color:var(--a-soft)!important}.card [data-component-part=card-title],.card [data-component-part=card-title] *{margin-top:0!important;padding-top:.25rem;font-size:.875rem!important;line-height:1.3!important;font-weight:600;letter-spacing:-.01em}.card [data-component-part=card-content]{margin-top:0!important;font-size:.8125rem!important;line-height:1.5!important;color:var(--a-muted)}.card [data-component-part=card-content] *{font-size:inherit!important;line-height:inherit!important}.callout{border:0!important;background:var(--a-card)!important;font-size:.875rem}.callout [data-component-part=callout-icon] svg{color:var(--a-muted)!important}.callout[data-callout-type=warning] [data-component-part=callout-icon] svg{color:#c27c0e!important}.callout[data-callout-type=check] [data-component-part=callout-icon] svg{color:#1f8a5b!important}.callout [data-component-part=callout-content],.callout [data-component-part=callout-content] p{color:var(--a-soft)!important}[data-component-part=frame]{border-radius:calc(var(--a-radius)*1.4)!important;background:var(--a-fill)!important;border:0!important;box-shadow:0 0 0 1px var(--a-border);padding:.5rem!important}[data-component-part=frame] img,[data-component-part=frame] video{border-radius:var(--a-radius)!important;box-shadow:var(--a-shadow-raised)}[data-component-part=frame-caption]{font-size:.8125rem;color:var(--a-muted)}[data-component-part=step-number]{font-family:\"Geist Mono\",ui-monospace,monospace;font-size:.75rem!important}[data-component-part=step-title]{font-weight:600;letter-spacing:-.01em}#content-area .prose th{font-weight:560;color:var(--a-muted)}.prose :not(pre)>code{font-size:.8125rem;border-radius:.35rem}kbd{display:inline-block;min-width:1.4em;padding:.05em .4em;font-size:.75rem;line-height:1.5;text-align:center;color:var(--a-fg);background:var(--a-card);border-radius:.35rem;box-shadow:0 0 0 1px var(--a-border),0 1px 0 var(--a-border)}.prompt-card{margin:1.5rem 0;padding:.25rem .75rem .5rem;border-radius:calc(var(--a-radius)*1.4);background:var(--a-fill);box-shadow:0 0 0 1px var(--a-border)}.prompt-card-label{margin:.6rem .25rem -.25rem;font-size:.75rem;font-weight:500;color:var(--a-muted)}@media (max-width:640px){#page-title{font-size:1.5rem!important}#content-area .prose table{display:block;overflow-x:auto}}#content-area .prose table{width:100%;table-layout:fixed}#content-area .prose td,#content-area .prose th{overflow-wrap:anywhere;vertical-align:top}#alpha-top-actions{position:fixed;top:.5rem;right:1.5rem;z-index:40;display:flex;align-items:center;gap:1rem}#alpha-top-actions[hidden]{display:none}#alpha-changelog-link{font-size:.8125rem;font-weight:500;color:var(--a-muted);text-decoration:none;transition:color 150ms ease}#alpha-changelog-link:hover{color:var(--a-fg)}#alpha-ask-ai{display:inline-flex;align-items:center;gap:.4rem;height:2rem;padding:0 .5rem 0 .75rem;border-radius:999px;font-size:.8125rem;font-weight:560;color:var(--a-signal);background:var(--a-signal-soft);box-shadow:0 0 0 1px color-mix(in oklab,var(--a-signal) 35%,transparent);cursor:pointer;transition:background 150ms ease,box-shadow 150ms ease}#alpha-ask-ai:hover{background:color-mix(in oklab,var(--a-signal) 18%,transparent);box-shadow:0 0 0 1px color-mix(in oklab,var(--a-signal) 60%,transparent)}#alpha-ask-ai[hidden]{display:none}#alpha-ask-ai kbd{padding:0 .35em;font-size:.6875rem;color:inherit;background:0 0;box-shadow:0 0 0 1px color-mix(in oklab,var(--a-signal) 30%,transparent)}@media (max-width:1023px){#alpha-top-actions{display:none}}.card-group:is([style*=\"--cols:3\"], [style*=\"--cols: 3\"], [style*=\"--cols:4\"], [style*=\"--cols: 4\"]) .card [data-component-part=card-content-container]{display:block;padding:1rem!important}.card-group:is([style*=\"--cols:3\"], [style*=\"--cols: 3\"], [style*=\"--cols:4\"], [style*=\"--cols: 4\"]) .card [data-component-part=card-icon]{margin-bottom:.75rem!important}.card-group:is([style*=\"--cols:3\"], [style*=\"--cols: 3\"], [style*=\"--cols:4\"], [style*=\"--cols: 4\"]) .card [data-component-part=card-title]{padding-top:0}.card-group:is([style*=\"--cols:3\"], [style*=\"--cols: 3\"], [style*=\"--cols:4\"], [style*=\"--cols: 4\"]) .card [data-component-part=card-content]{margin-top:.25rem!important}:root{--content-width:46rem}html.alpha-sidebar-collapsed{--sidebar-width:0px;--content-width:54rem}html.alpha-sidebar-collapsed #sidebar{display:none!important}#alpha-sidebar-toggle{position:fixed;top:.6875rem;left:calc(var(--sidebar-width, 19rem) + .5rem);z-index:40;display:grid;place-items:center;width:1.625rem;height:1.625rem;border-radius:.45rem;color:var(--a-muted);cursor:pointer;transition:color 150ms ease,background 150ms ease}#alpha-sidebar-toggle:hover{color:var(--a-fg);background:var(--a-fill)}html.alpha-sidebar-collapsed #alpha-sidebar-toggle{color:var(--a-signal)}@media (max-width:1023px){#alpha-sidebar-toggle{display:none}}.update-container{flex-direction:column!important;gap:1rem!important}.update-container>div:first-child{position:static!important;width:100%!important;display:flex!important;flex-direction:row!important;flex-wrap:wrap;align-items:center!important;gap:.5rem;padding-bottom:1rem;border-bottom:1px solid var(--a-border)}.update-container [data-component-part=update-description]{order:-1;flex-basis:100%;max-width:none!important;margin:0 0 .125rem!important;font-size:1.25rem!important;line-height:1.3!important;font-weight:600!important;letter-spacing:-.015em;color:var(--a-fg)!important}.update-container [data-component-part=update-label]{padding:0!important;background:0 0!important;font-size:.8125rem!important;font-weight:500!important;color:var(--a-muted)!important}.update-container [data-component-part=update-label]::after{content:\"·\";margin-left:.5rem;color:var(--a-muted)}.update-container [data-component-part=update-tag-list]{display:flex;flex-wrap:wrap;gap:.375rem;margin:0!important}.update-container [data-component-part=update-tag]{margin:0!important;padding:.0625rem .5rem!important;border-radius:999px;font-size:.75rem!important;font-weight:500!important;line-height:1.5!important;color:var(--a-soft)!important;background:var(--a-fill)!important;box-shadow:0 0 0 1px var(--a-border)}.update-container [data-component-part=update-content]{width:100%}.update-container [data-component-part=update-content],.update-container [data-component-part=update-description]{padding-left:0!important;padding-right:0!important}.update-container [data-component-part=update-content]>:first-child{margin-left:0!important}#pagination [data-component-part=pagination-next]>div{justify-content:space-between!important}#pagination [data-component-part=pagination-next]>div>div:first-child{flex:1;align-items:flex-start!important;gap:.125rem}#pagination [data-component-part=pagination-description],#pagination [data-component-part=pagination-title]{width:100%!important;max-width:none!important;text-align:left!important}#pagination [data-component-part=pagination-description]{font-size:.8125rem}"}],"page":{"pagePath":"routines","slug":"/routines","pageMetadata":{"title":"Routines","sidebarTitle":"Routines","description":"Have Alpha run something on a timetable, such as a digest, an uptime check or a weekly summary, even while the session sleeps.","href":"/routines"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Have Alpha run something on a timetable, such as a digest, an uptime check or a weekly summary, even while the session sleeps.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const PromptCard=({label=`Prompt`,children})=>_jsxs(`div`,{className:`prompt-card not-prose`,children:[_jsx(`div`,{className:`prompt-card-label`,children:label}),children]});const routineMinInterval=`15 minutes (default)`;const routinesMax=`20 per account`;function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Frame,Heading,Mermaid,Note,OptimizedImage,Step,Steps,Table,Tip,Warning,_MdxComponentBoundary}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`A routine is work Alpha runs on a timetable, even while its session is closed and the session’s machine is asleep. Alpha’s server keeps the clock: for each run it wakes the session, runs the work there with that session’s files, secrets and database, then lets the machine sleep again. For a worked example, follow `,_jsx(_components.a,{href:`/guides/weekly-summary`,children:`Post a weekly summary to Slack`}),`. A `,_jsx(_components.a,{href:`/publish/publish-your-app`,children:`published app`}),` has no scheduler of its own, so its periodic jobs belong in a routine too.`]}),`\n`,_jsx(Frame,{caption:`Each routine row shows its state, its timetable and when it runs next.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/routines/routines-page-list.png?fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=c6548748f4cd5161bce63366b9b42ea7`,alt:`The Routines page. Beside a circular-arrows icon, the header reads Routines, with the subtitle Work that runs on its own schedule, even while your sessions are closed, and a New routine button with a plus icon on the right. The summary line reads 1 routine · next run in 5 hr. One row follows: a bot icon, a green dot, the name Ai morning brief and the timetable Every day at 09:00 · Kolkata · next in 5 hr. The row ends with six icon buttons: View session, Run now, Pause, Edit, Remove and Expand.`,\"data-og-width\":`1680`,width:`1680`,\"data-og-height\":`388`,height:`388`,\"data-path\":`images/routines/routines-page-list.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/routines/routines-page-list.png?w=280\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=0a4faae0d8b7a93e91e283f9e0f033bb 280w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/routines/routines-page-list.png?w=560\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=138311a06a57f1479e632077f1528da2 560w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/routines/routines-page-list.png?w=840\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=cb4cef2c0465ef8b8abb8d462a9eae2c 840w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/routines/routines-page-list.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=a7e002ce1c46547972e8ad5117c6a9e7 1100w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/routines/routines-page-list.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=b5511854bfda561d114975c85a92177c 1650w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/routines/routines-page-list.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=6018e7685ed32968a66335551a302a9a 2500w`})}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`If the Routines page says “Routines are not enabled on this Alpha”, routines aren’t turned on for your Alpha. Ask your administrator.`})}),`\n`,_jsx(Mermaid,{chart:`sequenceDiagram\n participant S as Alpha's server\n participant M as Session's machine\n Note over S: Timetable fires\n S->>M: Wake the machine\n M->>M: Run command or agent turn\n M-->>S: Save the run and log\n S->>M: Let the machine sleep\n Note over S: Skipped if over 10 minutes late`}),`\n`,_jsx(Heading,{level:`2`,id:`which-kind-of-routine-do-you-need`,children:`Which kind of routine do you need?`}),`\n`,_jsxs(_components.p,{children:[`A routine either runs a command or asks the agent. The agent picks one when it builds the routine, and you can switch under `,_jsx(_components.strong,{children:`What it does`}),` in the edit form.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{}),_jsx(_components.th,{children:_jsx(_components.strong,{children:`Run a command`})}),_jsx(_components.th,{children:_jsx(_components.strong,{children:`Ask the agent`})})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`What runs`}),_jsxs(_components.td,{children:[`A script the agent wrote and tested, in the workspace, with the session’s secrets and `,_jsx(_components.code,{children:`DATABASE_URL`})]}),_jsx(_components.td,{children:`Your instruction, sent to the session’s agent as a turn nobody watches`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cost per run`}),_jsx(_components.td,{children:`No agent turn and no tokens`}),_jsx(_components.td,{children:`A full agent turn`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`The run’s log`}),_jsxs(_components.td,{children:[`The command’s output. Exit 0 is `,_jsx(_components.strong,{children:`ok`}),`; anything else fails the run.`]}),_jsx(_components.td,{children:`The agent’s closing report`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`In the transcript`}),_jsxs(_components.td,{children:[`A `,_jsx(_components.strong,{children:`Routine … ran`}),` card, or `,_jsx(_components.strong,{children:`Routine …: the run failed`})]}),_jsxs(_components.td,{children:[`A `,_jsx(_components.strong,{children:`Routine run · …`}),` message, then the agent’s work`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Use it for`}),_jsx(_components.td,{children:`Work that follows the same steps every time`}),_jsx(_components.td,{children:`Work that needs judgement every time, such as triaging an inbox`})]})]})]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`Not sure? Ask for a command. It’s cheaper and does the same thing on every run, and the agent prefers it unless the work needs reasoning.`})}),`\n`,_jsx(_components.p,{children:`Routines belong to your account, not to the session that made them. Each one runs in its home session, the session that created it, and the Routines page lists every routine from all your sessions.`}),`\n`,_jsx(Heading,{level:`2`,id:`create-a-routine`,children:`Create a routine`}),`\n`,_jsx(_components.p,{children:`You describe a routine, and the agent builds it, tests it once and saves it. Start from the Routines page when the work needs nothing from an existing session; it opens a fresh routine session with its own machine.`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Open the Routines page`,children:[_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Routines`}),` in the sidebar. With no routines yet, the page opens on a composer with four starter cards: `,_jsx(_components.strong,{children:`Hacker News digest`}),`, `,_jsx(_components.strong,{children:`Uptime check`}),`, `,_jsx(_components.strong,{children:`Exchange rate log`}),` and `,_jsx(_components.strong,{children:`Weekly summary`}),`. A card fills the composer with its prompt for you to edit. Once you have routines, click `,_jsx(_components.strong,{children:`New routine`}),` to bring the composer back above them; `,_jsx(_components.strong,{children:`Cancel`}),` closes it.`]}),_jsx(Frame,{caption:`Pick a starter, or say what should run and when in your own words.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/routines/routines-page-empty-composer.png?fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=eba7f2264d32e8c3be00e653aa1562ee`,alt:`The Routines page after clicking New routine. Beside a circular-arrows icon, the header reads Routines, with the subtitle Work that runs on its own schedule, even while your sessions are closed. Below it is a composer with the placeholder What should run, and when? — “Every weekday at 9, send me the top Hacker News stories”, a Cancel button and a dimmed Create routine button with an arrow-up icon. Below are four starter cards in two columns, each with an icon, a label and a schedule in monospace: Hacker News digest, Weekdays · 9:00; Uptime check, Every hour; Exchange rate log, Daily · 18:00; Weekly summary, Mondays · 9:00. Under the starters, the summary line reads 1 routine · next run in 5 hr, above the row Ai morning brief, Every day at 09:00 · Kolkata · next in 5 hr, with its green dot and icon buttons.`,\"data-og-width\":`1680`,width:`1680`,\"data-og-height\":`956`,height:`956`,\"data-path\":`images/routines/routines-page-empty-composer.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/routines/routines-page-empty-composer.png?w=280\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=44adf158659f2e49d6a5fb6d2aeabe1a 280w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/routines/routines-page-empty-composer.png?w=560\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=41746b87ee6f9c178abc0b3ddd4aa962 560w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/routines/routines-page-empty-composer.png?w=840\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=ed0797c3cc5e8af6fd2c24407f10a342 840w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/routines/routines-page-empty-composer.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=9fa824f8d1c637059fbcc3034d351c47 1100w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/routines/routines-page-empty-composer.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=f797e3a0f6a1ac9ce7c76b91423503d5 1650w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/routines/routines-page-empty-composer.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=181eb03a1b0f2b1db1182410ff343e60 2500w`})})]}),_jsxs(Step,{title:`Describe what runs and when`,children:[_jsxs(_components.p,{children:[`Say what to do, how often, and where the result goes. Click `,_jsx(_components.strong,{children:`Create routine`}),` or press `,_jsx(`kbd`,{children:`Enter`}),`; `,_jsx(`kbd`,{children:`Shift`}),` + `,_jsx(`kbd`,{children:`Enter`}),` adds a new line.`]}),_jsx(_MdxComponentBoundary,{name:`PromptCard`,children:_jsx(PromptCard,{label:`Try this`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Every hour, check whether https://harbor.example.com is up and append the time, the status code and the response time to data/uptime.csv.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})})}),_jsx(_components.p,{children:`Alpha will:`}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Open a new routine session and write the check as a script in its workspace.`}),`\n`,_jsx(_components.li,{children:`Run the script once by hand and show you the result.`}),`\n`,_jsxs(_components.li,{children:[`Ask for anything it still needs in a `,_jsx(_components.a,{href:`/chat/plan-mode`,children:`question card`}),`, such as the timetable if you didn’t give one, or your time zone when it names a time of day.`]}),`\n`,_jsx(_components.li,{children:`Save the routine and tell you what runs and when.`}),`\n`]})]}),_jsx(Step,{title:`Find the routine session in the sidebar`,children:_jsxs(_components.p,{children:[`A routine session is an ordinary session marked with a clock in the sidebar. Any session that is home to a routine gets the clock too. The clock is green while a routine is scheduled and pulses while a run is going. It’s grey while the routine is paused or nothing is saved yet. To list only routine sessions, open the sidebar’s `,_jsx(_components.strong,{children:`Filter, group and sort`}),` menu and set `,_jsx(_components.strong,{children:`Type`}),` to `,_jsx(_components.strong,{children:`Routines`}),`.`]})}),_jsx(Step,{title:`Check the saved card`,children:_jsxs(_components.p,{children:[`When the agent saves the routine, the card `,_jsx(_components.strong,{children:`Routine harbor-weekly-summary saved`}),` appears with `,_jsx(_components.strong,{children:`When`}),`, `,_jsx(_components.strong,{children:`Runs`}),` (or `,_jsx(_components.strong,{children:`Asks the agent`}),`) and `,_jsx(_components.strong,{children:`Next`}),`. When it’s the session’s first routine, the session’s `,_jsx(_components.strong,{children:`Routines`}),` tab opens beside the chat.`]})})]}),`\n`,_jsx(_components.p,{children:`To give a routine an existing session’s files, secrets or database, ask for it in that session instead: “every Monday at 9, post last week’s bookings to #harbor-staff”. The agent follows the same steps there, and the routine’s home is that session.`}),`\n`,_jsx(Heading,{level:`2`,id:`set-the-timetable`,children:`Set the timetable`}),`\n`,_jsxs(_components.p,{children:[`The timetable lives under `,_jsx(_components.strong,{children:`How often`}),` in the edit form. The line under it spells the timetable out in words and lists the next three runs, or shows in red why the server refused it. Every choice except `,_jsx(_components.strong,{children:`Once, at a set time`}),` and `,_jsx(_components.strong,{children:`Custom (cron expression)`}),` also shows its `,_jsx(_components.code,{children:`cron:`}),` expression.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:_jsx(_components.strong,{children:`How often`})}),_jsx(_components.th,{children:`You set`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Every few minutes`})}),_jsxs(_components.td,{children:[`Every `,_jsx(_components.em,{children:`n`}),` minutes, with optional `,_jsx(_components.strong,{children:`Only between`}),` hours and `,_jsx(_components.strong,{children:`Only on`}),` weekdays`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Every few hours`})}),_jsxs(_components.td,{children:[`Every `,_jsx(_components.em,{children:`n`}),` hours at a minute past the hour, with the same options`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Every day`})}),_jsx(_components.td,{children:`A time`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`On certain days of the week`})}),_jsx(_components.td,{children:`Weekday chips and a time`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`On certain days of the month`})}),_jsx(_components.td,{children:`Day chips (1–31) and a time. A month without that day skips it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Once, at a set time`})}),_jsxs(_components.td,{children:[`A date and time. The routine shows `,_jsx(_components.strong,{children:`Done`}),` after it runs.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Custom (cron expression)`})}),_jsx(_components.td,{children:`Five fields: minute, hour, day of month, month, day of week`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Daily, weekly and monthly timetables also take `,_jsx(_components.strong,{children:`Months`}),`; none picked means every month. `,_jsx(_components.strong,{children:`Time zone`}),` is the zone the routine’s times are read in. It’s hidden for a plain every-`,_jsx(_components.em,{children:`n`}),`-minutes or every-`,_jsx(_components.em,{children:`n`}),`-hours timetable, which runs the same in any zone. A routine runs at most once every `,routineMinInterval,`, because each run wakes a machine.`]}),`\n`,_jsxs(_components.p,{children:[`For a command, `,_jsx(_components.strong,{children:`More options`}),` adds `,_jsx(_components.strong,{children:`Folder`}),` (where the command runs, the workspace by default) and `,_jsx(_components.strong,{children:`Stop after (seconds)`}),`, which defaults to 600 and goes up to 3600.`]}),`\n`,_jsx(Heading,{level:`2`,id:`run-pause-and-edit-a-routine`,children:`Run, pause and edit a routine`}),`\n`,_jsxs(_components.p,{children:[`Each row on the Routines page has the same buttons. The session’s `,_jsx(_components.strong,{children:`Routines`}),` tab shows only that session’s routines, without `,_jsx(_components.strong,{children:`View session`}),`. The tab edits routines but doesn’t add them; to add one, ask the agent. Once all of a session’s routines are removed, its tab shows `,_jsx(_components.strong,{children:`How a routine comes together`}),` instead.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Button`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`View session`})}),_jsx(_components.td,{children:`Opens the routine’s home session (Routines page only)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Run now`})}),_jsxs(_components.td,{children:[`Starts a run at once and opens the row on it. The run is marked `,_jsx(_components.strong,{children:`by hand`}),`. It’s refused while a run is already going, or while an agent routine’s session is in the middle of a turn.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Pause`}),` / `,_jsx(_components.strong,{children:`Resume`})]}),_jsx(_components.td,{children:`Stops or restarts the timetable. A finished one-time routine has neither.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Edit`})}),_jsx(_components.td,{children:`Opens the form inline. Saving posts “You changed the routine …” in the home session’s transcript.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Remove`})}),_jsx(_components.td,{children:`Deletes the routine after you confirm “Remove the routine harbor-weekly-summary? Its runs go with it.”`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Expand`}),` / `,_jsx(_components.strong,{children:`Collapse`})]}),_jsxs(_components.td,{children:[`Shows the `,_jsx(_components.strong,{children:`Command`}),` or `,_jsx(_components.strong,{children:`Instruction`}),`, then `,_jsx(_components.strong,{children:`Runs in`}),` (Routines page only), `,_jsx(_components.strong,{children:`Next runs`}),`, `,_jsx(_components.strong,{children:`Last run`}),`, `,_jsx(_components.strong,{children:`Folder`}),` and `,_jsx(_components.strong,{children:`Stops after`}),` (commands only), `,_jsx(_components.strong,{children:`Name`}),`, `,_jsx(_components.strong,{children:`Added`}),`, and `,_jsx(_components.strong,{children:`Runs`})]})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Remove`}),` deletes the routine and every run’s log, and it can’t be undone. To stop a routine you may want back, `,_jsx(_components.strong,{children:`Pause`}),` it.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`read-a-routine’s-runs`,children:`Read a routine’s runs`}),`\n`,_jsxs(_components.p,{children:[`The row’s dot gives the routine’s state. Each run under `,_jsx(_components.strong,{children:`Runs`}),` gets a chip; click a run to read its whole log, even while the machine sleeps. Alpha keeps the last 50 runs of each routine.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`You see`}),_jsx(_components.th,{children:`It means`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Active`}),` (green dot)`]}),_jsx(_components.td,{children:`The routine runs on its timetable.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Paused`}),` (amber dot)`]}),_jsxs(_components.td,{children:[`Nothing runs until you click `,_jsx(_components.strong,{children:`Resume`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Done`}),` (grey dot)`]}),_jsx(_components.td,{children:`A one-time routine that has run.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Last run failed`}),` (red dot)`]}),_jsx(_components.td,{children:`Open the latest run to read why.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`ok`})}),_jsx(_components.td,{children:`The command exited 0, or the agent’s turn finished with a report.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`failed`}),` or `,_jsx(_components.strong,{children:`exit`}),` + a code`]}),_jsx(_components.td,{children:`The command failed, timed out (“stopped after 600 s”) or couldn’t start.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`skipped`})}),_jsx(_components.td,{children:`The run didn’t start, for example “the previous run was still going”.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`queued`}),` / `,_jsx(_components.strong,{children:`running`})]}),_jsx(_components.td,{children:`The log reads “Waiting for the routine service…” or “Waking the session and starting…”.`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`An agent run appears in its session’s transcript as `,_jsx(_components.strong,{children:`Routine run · harbor-inbox-digest`}),`. The agent works without asking questions and ends with a short report, which becomes the run’s log. A failed command run posts `,_jsx(_components.strong,{children:`Routine harbor-uptime: the run failed`}),` with `,_jsx(_components.strong,{children:`Error`}),`, `,_jsx(_components.strong,{children:`Took`}),` and the end of the log.`]}),`\n`,_jsx(Heading,{level:`3`,id:`why-did-a-run-fail-or-skip`,children:`Why did a run fail or skip?`}),`\n`,_jsx(_components.p,{children:`Open the run to read its reason. A failed or skipped run is never retried; the routine carries on at its next time.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Reason`}),_jsx(_components.th,{children:`What happened`}),_jsx(_components.th,{children:`What to do`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`”the previous run was still going”`}),_jsx(_components.td,{children:`The run before it hadn’t finished, so this one was skipped.`}),_jsx(_components.td,{children:`Nothing, if it’s rare. If it keeps happening, make the work faster or the timetable less frequent.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`”the fire came more than 10m0s late (Alpha was not running) — skipped, not caught up”`}),_jsx(_components.td,{children:`Alpha was down or restarting when the run was due.`}),_jsxs(_components.td,{children:[`Nothing. Click `,_jsx(_components.strong,{children:`Run now`}),` if you need this run.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`”the run waited more than 10m0s for a worker — skipped, not caught up”`}),_jsx(_components.td,{children:`Alpha was too busy to start it in time.`}),_jsxs(_components.td,{children:[`Click `,_jsx(_components.strong,{children:`Run now`}),` if you need this run.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`”the session has no machine (and no checkpoint to restore it from)“`}),_jsx(_components.td,{children:`The routine’s session has no machine to run on.`}),_jsxs(_components.td,{children:[`Open the session and send a message, so it gets a machine, then `,_jsx(_components.strong,{children:`Run now`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`”the session’s machine could not be woken: …”`}),_jsx(_components.td,{children:`The session’s machine wouldn’t wake. Nothing was discarded.`}),_jsxs(_components.td,{children:[`See `,_jsx(_components.a,{href:`/sessions/machines#what-if-a-machine-wont-wake`,children:`What if a machine won’t wake?`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`“the command could not be run: …”`}),_jsx(_components.td,{children:`The command never started, for example because its folder is missing.`}),_jsx(_components.td,{children:`Ask the agent in the routine’s session to fix the command or its folder.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`”stopped after 600 s” (or another number)`}),_jsx(_components.td,{children:`The command ran past its time limit.`}),_jsxs(_components.td,{children:[`Make it faster, or raise `,_jsx(_components.strong,{children:`Stop after (seconds)`}),` under `,_jsx(_components.strong,{children:`Edit → More options`}),`, up to 3600.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`”the agent could not be started: …”`}),_jsx(_components.td,{children:`An agent routine couldn’t begin its turn.`}),_jsxs(_components.td,{children:[`Open the session to see why, then `,_jsx(_components.strong,{children:`Run now`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`”the agent’s turn failed” or “the agent’s turn was stopped”`}),_jsx(_components.td,{children:`The agent’s turn ended in an error, or was stopped.`}),_jsx(_components.td,{children:`Read the turn in the session’s transcript.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`”the agent’s turn ended without reporting back”`}),_jsx(_components.td,{children:`The agent finished without its closing report.`}),_jsx(_components.td,{children:`Read the turn in the transcript, and make the instruction say what to report.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`”the server running it stopped mid-run”, “the run’s job was lost before a worker took it”, “stopped: the run outlived its limit” or “stopped: the routine service ended the run”`}),_jsx(_components.td,{children:`Alpha lost track of the run, usually during a restart.`}),_jsxs(_components.td,{children:[`Click `,_jsx(_components.strong,{children:`Run now`}),` if you need this run.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`”the session is gone” or “the session’s owner is gone”`}),_jsx(_components.td,{children:`The routine’s session, or its owner’s account, was deleted.`}),_jsx(_components.td,{children:`Remove the routine, or ask the agent in another session to create it again.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-are-the-limits`,children:`What are the limits?`}),`\n`,_jsxs(_components.p,{children:[`The account-wide numbers are also on `,_jsx(_components.a,{href:`/reference/limits`,children:`Limits`}),`.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Limit`}),_jsx(_components.th,{children:`Value`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Routines per account`}),_jsxs(_components.td,{children:[routinesMax,`, paused ones included`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Shortest gap between runs`}),_jsx(_components.td,{children:routineMinInterval})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A run more than 10 minutes late`}),_jsx(_components.td,{children:`Skipped, not caught up`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A failed command run`}),_jsx(_components.td,{children:`Not retried`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`An agent run while the agent is busy`}),_jsx(_components.td,{children:`Waits for the turn to end, and is skipped after 10 minutes`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A command’s running time`}),_jsx(_components.td,{children:`600 seconds by default, 3600 at most`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`An agent instruction`}),_jsx(_components.td,{children:`4,000 characters`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`One run’s log`}),_jsx(_components.td,{children:`256 KB; the rest is cut`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Runs kept`}),_jsx(_components.td,{children:`The last 50 per routine`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`who-can-see-and-change-a-routine`,children:`Who can see and change a routine?`}),`\n`,_jsxs(_components.p,{children:[`Only you, the owner. People you `,_jsx(_components.a,{href:`/sharing`,children:`share a session`}),` with never see its `,_jsx(_components.strong,{children:`Routines`}),` tab. The Routines page and the tab can change everything, including what runs.`]}),`\n`,_jsxs(_components.p,{children:[`The agent sees every routine on your account from any session. From outside a routine’s home session it can change only the timetable, or pause and resume. For anything else it posts `,_jsx(_components.strong,{children:`Routine harbor-weekly-summary is changed in its own session`}),` with an `,_jsx(_components.strong,{children:`Open Harbor bookings`}),` button. The agent removes a routine only when you ask, and names it first.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/sessions/fork-and-delete`,children:`Deleting a session`}),` deletes the routines whose home it is, with their runs. Forking a session doesn’t copy its routines.`]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Post a weekly summary to Slack`,icon:`paper-plane`,href:`/guides/weekly-summary`,children:_jsx(_components.p,{children:`Build harbor-weekly-summary end to end, from connecting Slack to the first run.`})}),_jsx(Card,{title:`Connect an app`,icon:`plug`,href:`/integrations/connect-apps`,children:_jsx(_components.p,{children:`Let a routine send email or post to Slack without a key ever appearing in the transcript.`})}),_jsx(Card,{title:`Sleep, wake and reset`,icon:`moon`,href:`/sessions/machines`,children:_jsx(_components.p,{children:`What a sleeping machine keeps, so a routine finds its files where it left them.`})}),_jsx(Card,{title:`Secrets`,icon:`key`,href:`/secrets`,children:_jsx(_components.p,{children:`Give a command routine the keys it reads, scoped to its session or your account.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{PromptCard,routineMinInterval,routinesMax,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Routines","sidebarTitle":"Routines","description":"Have Alpha run something on a timetable, such as a digest, an uptime check or a weekly summary, even while the session sleeps.","href":"/routines"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[146,314,")=>null;const routin"],[17002,17038,"`15 minutes (default)`,`, because each r"],[28739,28754,"`20 per account`,`, "],[28904,28940,"`15 minutes (default)`})]}),_jsxs(_compo"]]},"mdxExtracts":{"tableOfContents":[{"title":"Which kind of routine do you need?","slug":"which-kind-of-routine-do-you-need","depth":2,"children":[]},{"title":"Create a routine","slug":"create-a-routine","depth":2,"children":[]},{"title":"Set the timetable","slug":"set-the-timetable","depth":2,"children":[]},{"title":"Run, pause and edit a routine","slug":"run-pause-and-edit-a-routine","depth":2,"children":[]},{"title":"Read a routine’s runs","slug":"read-a-routine’s-runs","depth":2,"children":[{"title":"Why did a run fail or skip?","slug":"why-did-a-run-fail-or-skip","depth":3,"children":[]}]},{"title":"What are the limits?","slug":"what-are-the-limits","depth":2,"children":[]},{"title":"Who can see and change a routine?","slug":"who-can-see-and-change-a-routine","depth":2,"children":[]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/lyzr-15a99e0f/f9d02407465743f5/ask-ai.js","/_mintlify/custom/lyzr-15a99e0f/b625f5335bec8a53/sidebar-toggle.js"],"subdomain":"lyzr-15a99e0f","siteName":"Alpha","title":"Routines - Alpha","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T23:53:05.234Z","originalFileLocation":"routines.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Have Alpha run something on a timetable, such as a digest, an uptime check or a weekly summary, even while the session sleeps.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Alpha\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Routines - Alpha\">\u003cmeta data-mint-head property=\"og:description\" content=\"Have Alpha run something on a timetable, such as a digest, an uptime check or a weekly summary, even while the session sleeps.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Alpha docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://lyzr-15a99e0f.mintlify.app/routines\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://lyzr-15a99e0f.mintlify.app/_mintlify/api/og/v2?division=Share+and+automate\u0026amp;title=Routines\u0026amp;description=Have+Alpha+run+something+on+a+timetable%2C+such+as+a+digest%2C+an+uptime+check+or+a+weekly+summary%2C+even+while+the+session+sleeps.\u0026amp;theme=47e77850d1920921f207f882\u0026amp;signature=ce2861fbc83d151ab44500d116e49fca9c16fef525a4383bf72f0fdef6722f63\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Routines - Alpha\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Have Alpha run something on a timetable, such as a digest, an uptime check or a weekly summary, even while the session sleeps.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://lyzr-15a99e0f.mintlify.app/_mintlify/api/og/v2?division=Share+and+automate\u0026amp;title=Routines\u0026amp;description=Have+Alpha+run+something+on+a+timetable%2C+such+as+a+digest%2C+an+uptime+check+or+a+weekly+summary%2C+even+while+the+session+sleeps.\u0026amp;theme=47e77850d1920921f207f882\u0026amp;signature=ce2861fbc83d151ab44500d116e49fca9c16fef525a4383bf72f0fdef6722f63\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Alpha\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1A54F0\">\u003clink data-mint-head rel=\"canonical\" href=\"https://lyzr-15a99e0f.mintlify.app/routines\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/routines.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://lyzr-15a99e0f.mintlify.app/#organization\",\"name\":\"Alpha\",\"url\":\"https://lyzr-15a99e0f.mintlify.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/lyzr-15a99e0f/peFm_Sv4KgaR4cun/images/logo/light.png?fit=max\u0026auto=format\u0026n=peFm_Sv4KgaR4cun\u0026q=85\u0026s=633788f52e3e9a8128bdaf2d7a62fff6\"}},{\"@type\":\"WebSite\",\"@id\":\"https://lyzr-15a99e0f.mintlify.app#website\",\"name\":\"Alpha\",\"url\":\"https://lyzr-15a99e0f.mintlify.app\",\"publisher\":{\"@id\":\"https://lyzr-15a99e0f.mintlify.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://lyzr-15a99e0f.mintlify.app/routines#webpage\",\"url\":\"https://lyzr-15a99e0f.mintlify.app/routines\",\"name\":\"Routines\",\"description\":\"Have Alpha run something on a timetable, such as a digest, an uptime check or a weekly summary, even while the session sleeps.\",\"dateModified\":\"2026-10-27T23:53:05.234Z\",\"isPartOf\":{\"@id\":\"https://lyzr-15a99e0f.mintlify.app#website\"},\"breadcrumb\":{\"@id\":\"https://lyzr-15a99e0f.mintlify.app/routines#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://lyzr-15a99e0f.mintlify.app/routines#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Share and automate\",\"item\":\"https://lyzr-15a99e0f.mintlify.app/sharing\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Routines\",\"item\":\"https://lyzr-15a99e0f.mintlify.app/routines\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://lyzr-15a99e0f.mintlify.app/routines#article\",\"headline\":\"Routines\",\"name\":\"Routines\",\"description\":\"Have Alpha run something on a timetable, such as a digest, an uptime check or a weekly summary, even while the session sleeps.\",\"url\":\"https://lyzr-15a99e0f.mintlify.app/routines\",\"mainEntityOfPage\":{\"@id\":\"https://lyzr-15a99e0f.mintlify.app/routines#webpage\"},\"dateModified\":\"2026-10-27T23:53:05.234Z\",\"publisher\":{\"@id\":\"https://lyzr-15a99e0f.mintlify.app/#organization\"},\"isPartOf\":{\"@id\":\"https://lyzr-15a99e0f.mintlify.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Alpha\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Alpha","nav":{"global":null,"tabs":[{"tab":"Get started","pages":[{"title":"Get started","href":""}]},{"tab":"Build","pages":[{"title":"Build","href":"/sessions/home-screen"}]},{"tab":"Ship","groups":[{"group":"Publish","pages":[{"title":"Publish your app","sidebarTitle":"Publish your app","href":"/publish/publish-your-app"},{"title":"Manage a published app","sidebarTitle":"Republish and roll back","href":"/publish/manage"},{"title":"Production database and sign-in","sidebarTitle":"Production data","href":"/publish/production-data"},{"title":"Monitor and troubleshoot production","sidebarTitle":"Logs, metrics and failures","href":"/publish/monitor"}]},{"group":"GitHub","pages":[{"title":"Connect GitHub and add repositories","sidebarTitle":"Connect GitHub","href":"/github/connect"},{"title":"Branches, commits and pull requests","sidebarTitle":"Commit and open PRs","href":"/github/branches-and-prs"}]},{"group":"Share and automate","pages":[{"title":"Share a session","sidebarTitle":"Share a session","description":"Let people watch a session live and read-only: anyone with the link, or only the people you name.","href":"/sharing"},{"title":"Routines","sidebarTitle":"Routines","href":"/routines"}]}]},{"tab":"Connect","pages":[{"title":"Connect","href":"/integrations/overview"}]},{"tab":"Agents","pages":[{"title":"Agents","href":"/agents/build-an-agent"}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/reference/slash-commands"}]}]},"title":"Routines - Alpha","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-BbYRHtLl.js","DynamicMarkdown-DN96a4Ur.js","zoom-image-lightbox-D7yRe3On.js","lightbox-handle-r17bVUz3.js"]}