Task Scheduler
What the Task Scheduler does
The Task Scheduler lets you define recurring tasks using cron expressions. At the scheduled time, AI Partner automatically runs the task as either a chat message (quick query) or a goal (full ReAct execution loop).
This is different from the Heartbeat/Proactive Engine:
- Heartbeat — LLM-driven, uses HEARTBEAT.md, decides what to do each tick
- Task Scheduler — deterministic, explicit schedule, you define exactly what runs
Use Task Scheduler when you want a specific, repeatable task on a fixed schedule. Use Heartbeat when you want the agent to use judgment about what's worth doing.
Creating a scheduled task
Go to sidebar → Task Scheduler → + Add Task:
- 1Name the task
Give it a clear name you'll recognize in the run history:
Daily GitHub Issues Digest - 2Set the cron expression
Standard 5-field cron syntax:
┌───── minute (0-59)│ ┌─── hour (0-23)│ │ ┌─ day of month (1-31)│ │ │ ┌ month (1-12)│ │ │ │ ┌ day of week (0-6, Sun=0)│ │ │ │ │* * * * *Common patterns:
Expression Meaning 0 7 * * 1-57:00 AM every weekday 0 9,15 * * 1-59 AM and 3 PM weekdays */30 * * * *Every 30 minutes 0 8 * * MONEvery Monday at 8 AM 0 17 * * FRIEvery Friday at 5 PM 0 0 1 * *First day of every month at midnight The scheduler shows a human-readable preview as you type (e.g., "Every weekday at 7:00 AM").
- 3Write the task message
What you want AI Partner to do — exactly as you'd type it in the chat:
Chat mode example:
What are the top 3 AI news stories from the last 24 hours?Goal mode example:
Check all open GitHub issues in our repo labeled "bug".For any issue older than 7 days with no comments, add a comment asking for an update.Create a summary report and send it to my Telegram. - 4Set the mode
- Chat — fast, single-turn response; best for lookups and queries
- Goal — full ReAct execution loop; best for tasks that involve tools, files, or messaging
- Workflow — runs a saved workflow template on a schedule (set this via the Schedule button on the template card in the Workflows panel — see Scheduling recurring workflow runs)
- 5Enable and save
Toggle Enabled on and click Save. The task will run at the next matching cron tick.
Run History
Every task run is logged. Click a task → History tab to see:
| Field | Description |
|---|---|
| Start time | When the task fired |
| End time | When it completed |
| Status | completed / failed / skipped / running |
| Result | The agent's output (truncated; click to expand) |
| Error | Error message if failed |
Live updates: while a task is running, its status in the History tab updates in real time via Socket.IO.
Resume prompts
If a goal-mode task times out mid-execution, the scheduler saves a resume prompt:
Task "Weekly Competitor Report" stopped at iteration 23/40
✅ 2 of 3 criteria passed
📁 2 artifacts created so far
⏱ Timed out after 10 minutes
[Resume from iteration 23] [Skip this run] [Disable task]
Click Resume from iteration 23 to pick up where it left off — the agent loads the prior context and continues from the last successful step.
Skipped runs
A run is marked skipped (not failed) when:
- The server was offline when the task was scheduled to fire
- The heartbeat cooldown blocked it (if configured)
- A prior run of the same task was still in progress
Skipped runs appear in History with a ⏭ Skipped status and a reason.
Managing tasks
| Action | How |
|---|---|
| Enable / Disable | Toggle switch next to the task name — takes effect immediately |
| Edit | Click the pencil icon — modify name, cron, message, or mode |
| Run now | Click the ▶ play button — fires the task immediately, outside the schedule |
| Delete | Click the trash icon — removes the task and its run history |
Examples
Daily standup summary
Name: Daily Standup Summary
Cron: 0 9 * * 1-5 (9 AM weekdays)
Mode: Goal
Message: Search our Slack #engineering channel for messages from yesterday.
Summarize what the team worked on, any blockers mentioned, and
decisions made. Send the summary to my Telegram.
Weekly invoice check
Name: Weekly Invoice Check
Cron: 0 10 * * MON (Monday 10 AM)
Mode: Goal
Message: Check Stripe for any invoices that are overdue (past due date).
For each, draft a follow-up email to the customer and send
to me via Telegram for approval.
Hourly stock alert
Name: Portfolio Alert
Cron: 0 9-15 * * 1-5 (every hour during market hours, weekdays)
Mode: Chat
Message: Check if RELIANCE.NS or INFY.NS has moved more than 2% from
yesterday's close. If yes, tell me. If no, say "All quiet."
Monthly report
Name: Monthly Performance Report
Cron: 0 9 1 * * (1st of every month at 9 AM)
Mode: Goal
Message: Pull last month's data from HubSpot (deals closed, pipeline value)
and Stripe (revenue, new customers, churn). Create an Excel report
with charts and send it to my Telegram.
Scheduling a workflow template
The easiest way to schedule a workflow is from the Workflows panel — hover a template card and click the calendar icon. This opens a schedule modal where you pick a frequency (daily, weekdays, weekly, hourly, or custom cron) and fill in the template's parameters. It registers a Task Scheduler task with mode: workflow automatically.
You can also create it manually here with mode: Workflow and a task message formatted as:
{
"templateId": "competitive-analysis",
"parameters": {
"niche": "SaaS project management tools",
"output_format": "docx"
}
}
Scheduled workflow runs appear in the History tab of the Workflows panel alongside manually triggered runs.
Task Scheduler vs. HEARTBEAT.md
| Task Scheduler | HEARTBEAT.md | |
|---|---|---|
| Control | Explicit cron schedule | LLM-driven judgment each tick |
| What runs | Exactly what you wrote | What the agent decides is useful |
| Best for | Predictable, repeatable tasks | Opportunistic, context-aware tasks |
| Edited via | Task Scheduler UI | Settings → Workspace → HEARTBEAT.md |
| Run history | Full per-run log with resume | heartbeat_logs table |
Use both together: Task Scheduler for deterministic recurring jobs, Heartbeat for intelligent gap-filling.