# Tasks

Tasks are the work items behind your compliance program: implementing a control, collecting evidence, remediating a finding, or reviewing a vendor. Each task belongs to an organization and can be linked to an internal control.

Open **Tasks** in the organization to search, filter, and reorder the list. An internal control also has a **Tasks** tab for the work attached to that control.

## Create a task

Owners and admins can create tasks. Viewers can read tasks, comments, and activity.

A new task needs a name. Everything else is optional:

| Field            | Description                                                                                                |
| ---------------- | ---------------------------------------------------------------------------------------------------------- |
| Name             | Up to 1,000 bytes. Shown in the list and on the task page.                                                 |
| Description      | Rich text, up to 5,000 characters of text.                                                                 |
| State            | Where the work sits. Defaults to **To do**.                                                                |
| Priority         | **Urgent**, **High**, **Medium**, or **Low**. Defaults to **Medium**.                                      |
| Assignee         | An organization member.                                                                                    |
| Internal control | The control this work implements. Set it on the task, or create the task from the control's **Tasks** tab. |
| Deadline         | When the work is due.                                                                                      |
| Time estimate    | Expected effort, as an ISO-8601 duration such as `PT2H` or `P1D`. The maximum is 1,000 hours.              |
| Repeats          | How often the task repeats. Requires a deadline. See [Recurring tasks](#recurring-tasks).                  |

The list can be searched by name and filtered by state or assignee. Drag a task to change its order. Dropping it next to tasks of another priority updates its priority too.

## States

| State       | Meaning                                    |
| ----------- | ------------------------------------------ |
| Backlog     | Recorded, and not ready to start           |
| To do       | Ready to start                             |
| In progress | Someone is working on it                   |
| Done        | Finished                                   |
| Canceled    | Stopped                                    |
| Duplicate   | The same work is already tracked elsewhere |

## Priorities

Urgent, High, Medium, and Low. The list orders by priority rank by default, then by the manual rank inside that priority.

## Recurring tasks

Set a recurrence interval together with a deadline. The interval is an ISO-8601 duration, for example `P7D` (every week), `P1M` (every month), or `P1Y` (every year). The longest interval is 10 years.

When the deadline passes, Probo creates the next task:

- The new task copies the name, description, priority, assignee, time estimate, internal control, and interval.
- Its state is **To do**.
- Its deadline is the next occurrence after now. Missed cycles collapse into that single next occurrence.
- Recurrence is cleared on the task that just came due, and kept on the new one.

## Comments and activity

The task page has a comment thread and an activity log.

Comments are rich text, up to 5,000 characters. The author can edit or delete their own comment. Owners and admins can delete any comment.

Activity records creates and updates for the name, description, state, priority, assignee, internal control, deadline, and time estimate. Each entry stores the previous value and the new value.

## Linear

Linear sync keeps a Probo task and a Linear issue aligned: title, description, state, priority, deadline, assignee, and comments. A task has one Linear link.

Task sync uses the **Linear Sync** connection in **Tasks** settings. The Linear source under [Access Reviews](/docs/product/access-review/overview) reads workspace members for access reviews.

### Connect Linear

1. Open **Tasks** in the organization.
2. Open **Settings**.
3. Under **Task integrations**, choose **Connect** next to **Linear Sync**, and approve the Linear consent screen.

The connection needs permission to read and write issues, including creating them. If an older connection only has read access, use **Reconnect** on the same screen before publishing or linking.

After Linear is connected, each task shows a Linear field. The create-task dialog can also publish or link as part of creating the task.

### Publish or link

**Publish** creates a new Linear issue in the team you pick. Probo leaves the task as it is, adds a **Probo task** link on the Linear issue, and starts syncing.

**Link** attaches the task to an issue that already exists in that team. Linking copies the issue onto the task: name, description, state, priority, and deadline. Existing comments are copied in both directions. The console asks you to confirm, because those task fields are replaced by the issue.

Publishing or linking a task that already points at a different Linear issue archives the previous issue.

Creating an issue in Linear on its own leaves Probo unchanged. Sync applies to issues that are already linked to a task.

### What stays in sync

Once a task is linked, edits on either side update the other:

| Field       | Behavior                                                                         |
| ----------- | -------------------------------------------------------------------------------- |
| Name        | The Linear issue title                                                           |
| Description | Converted between the Probo editor and Linear markdown                           |
| State       | Mapped to the team's workflow state types. See [State mapping](#state-mapping). |
| Priority    | Mapped to Linear's priority scale. See [Priority mapping](#priority-mapping).   |
| Deadline    | The Linear due date                                                              |
| Assignee    | Matched by email. See [Assignees](#assignees).                                   |
| Comments    | Created, edited, and deleted on both sides                                       |

Probo picks the first workflow state of the matching type in the team (the one with the lowest position). A description that contains content the task editor cannot store, such as an image inside a paragraph, is dropped on the way into Probo and the rest of the description is kept.

Time estimate, recurrence, internal control, and rank stay in Probo.

Edits that Probo itself wrote to Linear are ignored when Linear echoes them back, so the two sides do not overwrite each other in a loop.

### State mapping

| Probo state | Linear workflow type                                      |
| ----------- | --------------------------------------------------------- |
| Backlog     | `backlog`, or `triage` when the team has no backlog state |
| To do       | `unstarted`                                               |
| In progress | `started`                                                 |
| Done        | `completed`                                               |
| Canceled    | `canceled`                                                |
| Duplicate   | `canceled`                                                |

Updates coming from Linear use the same types. `backlog` and `triage` become **Backlog**. `unstarted` becomes **To do**. `canceled` becomes **Canceled**, including when the Probo task was **Duplicate**.

### Priority mapping

| Probo  | Linear priority |
| ------ | --------------- |
| Urgent | Urgent (1)      |
| High   | High (2)        |
| Medium | Medium (3)      |
| Low    | Low (4)         |

A Linear issue with no priority keeps the priority already set in Probo. Probo leaves that empty Linear priority in place until someone changes the priority on the task.

### Assignees

Probo matches people by email.

- An assignee set in Linear is applied when that email belongs to a member of the organization.
- An assignee set in Probo is applied in Linear when the member's primary email, or one of their additional emails, belongs to a Linear user.

When no matching person is found, the assignee on the receiving side stays as it is.

### Comments

Comments on a linked task and its Linear issue stay in sync. A comment removed in Linear is removed in Probo. The comment author is the organization member with the same email; when nobody matches, the comment is stored without an owner.

### Stop syncing

**Unlink** on the task removes the connection. The Probo task and the Linear issue both remain, including their comments. Later edits stay on the side where they were made.

Deleting the Linear issue also removes the connection and leaves the Probo task in place. Deleting the Probo task leaves the Linear issue in place.

### Self-hosting

Probo Cloud already has the Linear OAuth application. A self-hosted deployment needs its own.

Create a Linear OAuth application and point it at your Probo instance:

| Linear setting         | Value                                                    |
| ---------------------- | -------------------------------------------------------- |
| Redirect URL           | `https://your-domain/api/console/v1/connectors/complete` |
| Scopes                 | `read`, `write`, `issues:create`                         |
| Webhook URL            | `https://your-domain/api/linear/v1/webhooks`             |
| Webhook signing secret | A secret you also configure on Probo                     |

Subscribe the webhook to **Issue** and **Comment** events. Probo checks the `Linear-Signature` header (HMAC-SHA256 of the raw body) and requires a `Linear-Delivery` id. Probo requests the application actor (`actor=app`) during authorization.

Then set the connector credentials. Environment variables:

```bash
PROBOD_CONNECTOR_LINEAR_SYNC_CLIENT_ID="your-linear-client-id"
PROBOD_CONNECTOR_LINEAR_SYNC_CLIENT_SECRET="your-linear-client-secret"
PROBOD_CONNECTOR_LINEAR_SYNC_WEBHOOK_SECRET="your-webhook-signing-secret"
```

Or the same values in the config file:

```yaml
connectors:
  - provider: "LINEAR_SYNC"
    protocol: "oauth2"
    config:
      client-id: "your-linear-client-id"
      client-secret: "your-linear-client-secret"
    settings:
      webhook-secret: "your-webhook-signing-secret"
```

Access reviews use a `LINEAR` connector. Task sync uses `LINEAR_SYNC`. See [Environment variables](/docs/deployment/configuration/environment-reference) and [Config file](/docs/deployment/configuration/config-file).

## Automation

- [CLI](/docs/developers/cli/commands/task) — Create, update, and publish tasks from the terminal
- [MCP tools](/docs/developers/api/mcp/tools/catalog/internal-controls-tasks-and-evidence) — Manage tasks from an AI assistant
- [n8n Task](/docs/developers/api/n8n/resources/task) — Automate task operations in n8n
- [Webhooks](/docs/developers/api/webhooks/event-types) — Receive task and comment lifecycle events
