Scheduling
Scheduling
Section titled “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.
Start dates
Section titled “Start dates”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/setStartDateContent-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.
Repeating tasks
Section titled “Repeating tasks”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:
| Cadence | Meaning |
|---|---|
Daily | Every day |
Weekdays | Every weekday, Monday to Friday |
Weekly | Every 7 days |
Biweekly | Every 14 days |
Monthly | Same 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.
What “finishing” means
Section titled “What “finishing” means”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/setRecurrenceContent-Type: application/json
{ "taskId": 1234, "recurrence": "Weekly" }Valid values: Daily, Weekdays, Weekly, Biweekly, Monthly, or null to stop repeating. Requires membership of the board.
Task templates
Section titled “Task templates”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 templatesPOST /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
Section titled “My tasks”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.
Agent scheduling and provider selection
Section titled “Agent scheduling and provider selection”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).
Supported provider choices
Section titled “Supported provider choices”You can enter a provider URL directly or rely on provider completion to avoid typos:
| Source | How to choose |
|---|---|
| Direct URL input | Paste a trusted HTTPS URL that resolves to the provider’s internal endpoint URL |
| Provider URL completion | Start typing a URL and let suggestions surface against an allowlist; completed URLs are validated against a public allowlist before acceptance |
Valid provider options
Section titled “Valid provider options”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.
Scheduler integration
Section titled “Scheduler integration”When configuring a schedule in an external scheduler (GitHub Actions, Vercel cron, etc.):
- Ensure your scheduler’s HTTP client is configured to use outbound HTTPS and connection timeouts suitable for provider health checks.
- Provide a provider URL in any Credential/Secret field; if using a provider that requires explicit port or subpath, include it.
- Validate that the provider URL is accessible via HTTP or HTTPS before committing to your workflow. Location-ready providers are preferred for production outages.
- Save the scheduler configuration and monitor run logs for provider validation errors.
Stakeholders — please review and reply with corrections or missing context.