Tasks
Manage a shared team todo list and board from the dashboard, connected agents, and REST API, with tags, priorities, start and due dates, reminders, progress comments, and filters.
Tasks is the shared todo list and board for your team and connected agents. Keep the next actions for a launch, review, or recurring piece of work in one place, then pick them up from the dashboard or another agent.
Use Tasks in the dashboard
Open Tasks with the team you want to work in selected.
- Enter a name and optional plain-text notes.
- Add comma-separated tags such as
launch, review, choose High, Normal, or Low priority, and optionally set start and due dates. - Optionally set Reminder date and time in your browser's local time zone. This schedules one reminder to you through your enabled email and browser notifications.
- Select Add task. Use Edit and Save changes to change it later.
- Move the task through To do, In progress and Done, or check the box when it's finished. A finished task stays in the Done view; reopen it to move it back to To do.
Use the To do, In progress, Done, All, or Overdue views, or switch to the Board layout to see the three columns side by side. Search matches the name or notes; priority and tag filters narrow the results. Clicking a tag badge filters by that tag. Next page loads more results.
Tasks sort by High, Normal, then Low priority. Within each priority, the earliest due dates come first, undated tasks come last, and tasks with the same date sort oldest first.
Start and due dates are calendar dates, without a time or time zone. If both are set, the start date must be on or before the due date. Overdue means an unfinished task due before your local calendar day. A task due today is not overdue. Dates do not automatically schedule reminders. Delete permanently removes a task and its comments; mark it done when you want to keep the record.
Comments
Each task has a comment thread for progress notes: what was done, where it stands, what's next. Team members add comments in the task dialog, and agents add them with minion.tasks.addComment. Agent comments are marked as coming from the agent. Prefer a comment over rewriting a task's notes for a progress update. Only a comment's author, or a team owner or admin, can delete it.
Schedule reminders
A reminder is separate from a task's start and due dates. In the dashboard, choose Reminder date and time when adding or editing a task, then save it. The field uses your browser's local time zone, shown below it. Scheduled and sent reminders are displayed in local time on the task card. JavaScript is required to change the reminder time in the dashboard.
The reminder goes to the member who sets it, not every member of the team. If another member changes the reminder to a different time, that member becomes its recipient. An ordinary edit, or saving the same reminder time, keeps the original recipient and delivery state.
Open Settings, Notifications to enable immediate email alerts or browser notifications. Email reminders require a verified email address. Browser reminders require browser permission and a registered device. Reminders use these immediate channels, rather than the daily digest. The immediate email and push checkboxes are currently labelled as agent approval alerts; they also control task reminders.
For agent and REST calls, pass remindAt as an ISO date/time with Z or an explicit UTC offset. A time without an offset is rejected. For example, 2026-10-10T09:00:00-07:00 is 9 a.m. at UTC-07:00. Responses normalize reminder timestamps to UTC.
await minion.tasks.update({
id: taskId,
remindAt: "2026-10-10T09:00:00-07:00",
});
// Clear the reminder without completing the task.
await minion.tasks.update({ id: taskId, remindAt: null }); Reminders are one-shot and checked on the scheduler's minute tick, so delivery is not guaranteed at the exact second. If no enabled channel succeeds, Minion retries after five minutes. Once a channel succeeds, the reminder is marked sent; it is not repeated every day. When delivery gives up (no channel reached the recipient, or they have both turned off), the task shows a reminder failure and the problem appears on the Waiting page; saving the reminder time again rearms it. An interruption after sending can occasionally cause a duplicate delivery.
Completing or deleting a task cancels its reminder. Clearing the reminder also cancels it. Reopening a completed task does not restore the cancelled reminder: set a new reminder time if you need another notification. Changing a reminder to a different timestamp schedules a new delivery.
Ask your agent
After connecting your agent , try:
Add a high-priority task to review the launch on October 10, 2026. Tag it launch and review, and note that we need to check the release notes.
Show my team's open tasks tagged launch, then mark the launch review complete when I tell you it is finished.
Add a task to review the launch on October 10, 2026, start it on October 5, and remind me at 9 a.m. on October 10 in Vancouver time.
Agents discover the Tasks capabilities through search and call them from execute as minion.tasks.*. The same calls work in saved packages. See Search and execute .
Create, read, and update
export default async function main() {
const { task } = await minion.tasks.create({
name: "Review the launch",
notes: "Check the release notes before publishing.",
priority: "high",
startDate: "2026-10-05",
dueDate: "2026-10-10",
remindAt: "2026-10-10T09:00:00-07:00",
tags: ["launch", "review"],
});
return task;
} tasks.create returns { task }. Name is required, trimmed, and must contain 1 to 200 characters. Notes default to an empty string and can hold at most 16 KiB of plain text. Priority defaults to normal; startDate, dueDate, and remindAt default to null; status defaults to todo and tags to [].
Tags are trimmed, lowercased, and deduplicated. Supply at most 20 tags, each 1 to 40 characters. Tags cannot contain commas or line breaks. In agent and API calls, pass an array; the dashboard uses comma-separated input.
Use the returned task ID to read or edit the task. A task's status is todo, in_progress or done; the older done boolean still works (done: true means status done, done: false reopens a done task to todo):
const { task, comments } = await minion.tasks.get({ id: taskId });
await minion.tasks.update({ id: task.id, status: "in_progress" });
await minion.tasks.update({ id: task.id, status: "done" });
await minion.tasks.addComment({ taskId: task.id, body: "Drafted the post; waiting on screenshots." });
await minion.tasks.update({ id: task.id, startDate: null, dueDate: null, remindAt: null, tags: [] }); tasks.get returns { task, comments } with the five newest comments; tasks.listComments({ taskId }) pages through older ones. tasks.update returns { task }. Updates change only supplied fields and require at least one field to change. startDate: null or dueDate: null clears that date; remindAt: null clears the reminder; tags: [] clears tags. Supplying tags replaces the whole tag list. Omitted fields keep their current values.
Each task includes id, name, notes, tags, priority, startDate, dueDate, status, done, remindAt, reminderUserId, reminderSentAt, commentCount, createdBy, createdAt, and updatedAt. Start and due dates are valid YYYY-MM-DD values or null. Reminder, creation, and update timestamps are ISO strings; reminder fields can be null. reminderUserId identifies the member who scheduled the reminder, and reminderSentAt records when a channel successfully delivered it.
Filter and paginate
const filters = { status: "in_progress", priority: "high", tag: "launch" };
const first = await minion.tasks.list(filters);
const next = first.nextCursor
? await minion.tasks.list({ ...filters, cursor: first.nextCursor })
: null; tasks.list returns { tasks, nextCursor }. It accepts status, done, priority, query for name/notes search, tag for an exact normalized tag, dueBefore, limit, and cursor. done: false means every task that isn't done (to do and in progress). Omitting both status and done includes every task. The default page size is 50; limit can be 1 to 100. Use nextCursor with the same filters and team, and stop when it is null.
For overdue work, pass your chosen calendar day:
const result = await minion.tasks.list({
done: false,
dueBefore: "2026-10-10",
}); dueBefore is strictly before that date and excludes undated tasks. Pair it with done: false to exclude completed work.
To permanently remove a task, call tasks.delete({ id: taskId }). It returns { id, deleted: true }.
Team access and REST API
Tasks belong to the active organization. Owners, admins, and members can read and manage the team's tasks through the tasks.manage permission. A task ID from another team returns not_found.
For REST access, create a scoped Open API token on the API tokens page. Use tasks:read for list/get or tasks:write for create/update/delete and comments; write includes read. Organization permissions still apply.
Send a POST request to https://app.minion.codes/api/v1/capabilities/tasks.list with an Authorization: Bearer YOUR_OPEN_API_TOKEN header, Content-Type: application/json, and a body such as {"done":false,"tag":"launch"}. Replace tasks.list with tasks.get, tasks.create, tasks.update, or tasks.delete and send that capability's input. Direct capability calls do not require the execute scope; running sandbox code also requires execute.