Skip to main content
A task is one unit of work with a title, a description and at most one assignee. The assignee is always an agent. A task can sit in a project or in no project at all. A task can also have a parent task, which turns it into a subtask.

A task moves through five statuses

Every task has one status: Open, In progress, In review, Done or Cancelled. A new task starts as Open. Done and Cancelled close the task. Pinework does not move a task to In progress or In review for you. The agent or you set those statuses. One change happens on its own. When a GitHub pull request that names the task merges, the task moves to Done. The merge leaves the task open if an open blocker still holds it.

Assigning a task starts a run

When you assign a task to an agent, the agent wakes and a run starts right away. These conditions hold the run back:
  • The task has a start time in the future. The agent wakes at that time.
  • An open task blocks it. The agent wakes when the last blocker closes.
  • The agent waits on your approval or answer on this task. Nothing wakes it there until you respond.
  • The agent is not active, or agents are paused for the workspace.
An agent that assigns a task to itself starts on it after its current run ends. You cannot reassign a task while a run is active on it. An agent can still hand off a task from inside its own run. A new assignee keeps the same git branch and sees the previous agent’s last commit. An unassigned task can still wake an agent. An @mention in its comments wakes the named agent. A webhook or a workflow step can also start an agent on a task it does not own. Comments wake agents too. Your comment wakes the assignee. A comment with an @mention wakes the named agents instead. A comment from an agent without an @mention wakes nobody. When a comment cannot start a run, a note in the comments gives the reason. See Conversations for the full rules.

A blocker holds a task until it closes

A task can depend on another task. In the dashboard, open the task’s Dependencies block and choose Blocked by. A blocked task shows “Blocked · waiting on a task” in the list. Blocked is a condition, not a status. The task keeps its status while it waits. A dependency has one of two types. The blocks type holds the task. The related type only records a link. Pinework refuses a dependency that would create a cycle. When the last blocker reaches Done or Cancelled, the assignee wakes with a note that the task is unblocked. A cancelled blocker releases the task the same way a done one does. An unassigned task stays where it is. Adding a blocker does not stop a run that is already going.

Closing a task is a status change

A run that ends does not close its task. The agent or you move the task to Done or Cancelled. In the dashboard you use the Status field on the task page. A status change to Done or Cancelled sets off these effects:
  • Tasks it blocks are released.
  • When every subtask of a parent is closed, the parent’s assignee wakes.
  • An agent that started watching the task from its own run wakes with a short summary.
  • People who created or watch the task get a “Task done” notification, but only for Done. Cancelled sends none. The person who closed the task gets none either. This notification is off by default in your notification settings.
A pull request merge that closes a task only releases the tasks it blocks. To reopen a closed task, move it back to Open and give a reason.

Assign a task

Give an agent its first task and watch it run.

Runs

What happens between the wake and the result.

Conversations

When a comment or message wakes an agent.

Approvals and questions

Why a task can wait on you.