Skip to content

Scheduling

Four related capabilities for planning work over time: start dates, repeating tasks, task templates, and the My tasks view that ties them together.

Every one of them is reached through the command palette (Ctrl+K / Cmd+K). None of them adds a button or panel to the interface, and none of them has a dedicated keyboard shortcut — search for the command by name.

A start date records when work is meant to begin, separately from the due date that records when it must finished.

To set one: open a task, press Ctrl+K, run Set start date. The field accepts natural language — today, tomorrow, next week monday, in 3 days — or pick from the presets. Choose Reset to clear it.

The task detail shows a Start date row only once the field is set; a task without one looks exactly as it did before.

A start date on its own never makes a task overdue. Only a missed due date does that. A task that started last week but has no deadline is current work, not late work, and My tasks files it accordingly.

POST /api/tasks/setStartDate
Content-Type: application/json
{ "taskId": 1234, "startDate": "2026-08-10T09:00:00.000Z" }

Pass "startDate": null to clear it. Returns the updated task. Requires membership of the task’s board.

A repeating task recreates itself when you finish it.

To set a repeat: open a task, press Ctrl+K, run Repeat task, and choose a cadence:

CadenceMeaning
DailyEvery day
WeekdaysEvery weekday, Monday to Friday
WeeklyEvery 7 days
BiweeklyEvery 14 days
MonthlySame day each month, clamped to the last day of shorter months (31 Jan → 28 Feb)

Choose Don’t repeat to stop a task repeating. The option only appears when a rule is already set. A repeating task shows a Repeats row in the task detail.

The next occurrence is created when you move the task into a done column, or archive it yourself. It carries over the title, description, priority, size, labels and assignees, with the date advanced by one period.

Two cases deliberately do not create a new occurrence:

  • Auto-archive. A board’s auto-archive sweep fires because nobody touched a task, which is abandonment rather than completion. Repeating there would regenerate neglected tasks indefinitely.
  • Moving the task to another board, including into that board’s done column. Relocating work is not completing it.

Finishing a repeating task late never produces an already-overdue copy: the next date is rolled forward until it is genuinely in the future, keeping the original time of day and, for weekly rules, the original weekday.

If a board has no column that counts as “not done”, the task does not repeat — the new occurrence would otherwise be created directly into a done column, where it would read as finished work the moment it appeared.

POST /api/tasks/setRecurrence
Content-Type: application/json
{ "taskId": 1234, "recurrence": "Weekly" }

Valid values: Daily, Weekdays, Weekly, Biweekly, Monthly, or null to stop repeating. Requires membership of the board.

A template stores the shape of a task so you can create the same kind of work repeatedly without retyping it. Templates are per board, and capture the title, description, priority, size and labels.

To save one: open a task you want to reuse, press Ctrl+K, run Save task as template. The template is named after the task title.

To use one: from the board, press Ctrl+K, run New task from template, and pick from the list. The new task is created in the board’s first non-done column and opens immediately.

Labels that were deleted after the template was saved are skipped rather than failing the creation.

GET /api/task-templates?projectId=15 # list a board's templates
POST /api/task-templates # { "taskId": 1234, "name": "Weekly review" }
DELETE /api/task-templates # { "templateId": 7 }
POST /api/task-templates/apply # { "templateId": 7 }

name is optional on create and defaults to the task’s title. All four require membership of the board.

My tasks answers “what am I working on today” across every board you belong to. The inbox remains the place to triage what arrived; this is the place to plan.

To open it: G then M, or Ctrl+K and Go to my tasks, or visit /my-tasks.

It shows every open task assigned to you as a table, the same table the board uses, with one section per board. The section header is the board’s name, and the columns are the board table’s columns: Ticket, Title, Assignee, Priority, Size, Due.

Ordering puts urgent work first. Boards that contain overdue tasks sort above boards that do not. Inside a board, overdue tasks lead, then the rest by due date, with undated tasks last.

The split pills filter by board. “All” shows every board’s section; picking a board narrows the table to that board alone. Tab and Shift+Tab cycle through them, exactly as on the inbox and board surfaces.

Sorting keeps the grouping. Clicking a column header sorts within each board’s section rather than flattening everything into one list, so a row never loses the board it belongs to.

Navigation matches the inbox and scheduled views: J and K (or the arrow keys) to move, Enter to open, Esc to go back.

My tasks is a read-only planning surface. It has no create-task shortcut, because a new task needs a board and this view spans all of them. Create from the board, the inbox, or Ctrl+K.

Agents can be scheduled on a recurring basis through external schedulers like GitHub Actions or Vercel cron. When setting schedule jobs in a workflow, provide a single default provider to be used for provider-bound operations (e.g., MCP credentials with a provider-attached key). The provider is validated for SSH-HTTPS accessibility before acceptance; if invalid, the schedule entry is rejected and recommended remediation is shown (e.g., use provider completion, fix URL format).

You can enter a provider URL directly or rely on provider completion to avoid typos:

SourceHow to choose
Direct URL inputPaste a trusted HTTPS URL that resolves to the provider’s internal endpoint URL
Provider URL completionStart typing a URL and let suggestions surface against an allowlist; completed URLs are validated against a public allowlist before acceptance

The allowlist includes representative secure implementations such as built-in and widely used providers (e.g., https://claude.com or https://codex.com). If a provider is missing from the allowlist but you have a signed endpoint you would like to use, you can enter its HTTPS URL directly; validation ensures the domain is publicly resolvable and responds with a Liveness/Health status endpoint before the scheduler accepts it.

When configuring a schedule in an external scheduler (GitHub Actions, Vercel cron, etc.):

  1. Ensure your scheduler’s HTTP client is configured to use outbound HTTPS and connection timeouts suitable for provider health checks.
  2. Provide a provider URL in any Credential/Secret field; if using a provider that requires explicit port or subpath, include it.
  3. Validate that the provider URL is accessible via HTTP or HTTPS before committing to your workflow. Location-ready providers are preferred for production outages.
  4. Save the scheduler configuration and monitor run logs for provider validation errors.

Stakeholders — please review and reply with corrections or missing context.