> This is the Markdown version of the page. For the complete Lattice Developers documentation index, fetch https://developer.anduril.com/llms.txt. Append .md to any page URL for its clean Markdown. # Tasks overview > Learn about the Lattice SDK tasks service The [task model](/reference/rest/tasks/create-task) is a data structure for modeling deliberate, sequential actions that an operator can execute on an asset or team of assets. A **taskable agent** is a service, asset, group, or human that can accept and perform tasks. For example, you might task a robot to investigate a specific area. The **Tasks** API manages the lifecycle and routing of tasks to taskable agents, allowing you to create, update, monitor, and execute tasks. Task Manager manages the distribution and persistence of tasks across Lattice. As agents process tasks, they update the status of tasks. Task Manager maintains the latest status of tasks across the common operating picture. ## Task model A task is composed of the following required components: **`description`** `string` — required A description of the task. Use this to provide an overview of the task objective, and the agents assigned to execute the task. --- **`specification`** `string` — required The complete JSON definition, setting the objective and parameters for the task, as a string. --- **`version`** `string` — required The version of the task. --- **`created_by`** `string` — required The record of the integration, or operator, that initiated the task. --- **`last_updated_by`** `string` — required The record of the integration, or operator, that last updated the task. --- ## Task catalog To let Lattice know your agent can complete specific tasks, add the `TaskDefinitions` in the entity's [`TaskCatalog`](/reference/rest/entities/publish-entity#request.body.taskCatalog) component: **`taskDefinitions.taskSpecificationUrl`** `string` Sets the URL for the specific task definition that the agent can perform. Must be prefixed with `type.googleapis.com/`: A`VisualId` task might involve identifying or tracking visual targets. --- > **Info** > > Work with your Anduril representative to determine a list of task definitions > for your use-case For example, the following `VisualId` task might involve identifying or tracking visual targets: **`entity.json`** ```json title="entity.json" "taskCatalog": { "taskDefinitions": [ { "taskSpecificationUrl": "type.googleapis.com/anduril.tasks.v2.VisualId" } ] } ``` ## Task status The TaskManager API lets operators and agents track, and update, the lifecycle of tasks. To configure your app to update task status, use the [`UpdateTaskStatus`](/reference/rest/tasks/update-task-status) API method and specify the following components: **`status.status`** `Status` Indicates the lifecycle stage of a task as reported by the agent. The [`taskStatus` component](/reference/rest/tasks/get-task#response.body.status). For more information, see [Listen for task](/guides/tasks/integrate-an-agent). --- **`status.task_error`** `TaskError` Contains any errors that occurred while executing the task. --- **`status.progress`** `string` Indicates incremental progress on the Task, should be from the tasks `/v*/progress` folder. --- **`status.result`** `string` Indicates the result of the task, should be from the tasks `/v*/result` folder. --- **`status.start_time`** `Timestamp` Indicates the time when the task started executing. --- **`status.estimate`** `string` Any estimate for how the Task will progress, should be from `tasks/v*/estimates` folder. --- **`status.allocation`** `Allocation` Contains a list of agents actively being utilized to execute a task. --- ## Task lifecycle Tasks have a well-defined lifecycle: **create**, **update**, and **delete**. In each stage of a task lifecycle, Lattice emits the state change event to the environment, increasing your situational awareness: #### Create When a task is first created, Lattice sets the task status to `STATUS_SENT`. Agents assigned to this task can then listen for, receive, and act on the task. #### Update As an agent makes progress towards the overall objective of a task, it updates the status of the task in Lattice, and increments the task status version. #### Complete When the agent completes the task, it sets the task status to one of two terminal states: `STATUS_DONE_OK` if the task was successful, or `STATUS_DONE_NOT_OK` if the task failed. A task with either of the aforementioned terminal states cannot be updated. ## What's next? * To learn how an agent can listen to tasks, see [Listen for tasks](/guides/tasks/integrate-an-agent). > Learn about the Lattice SDK tasks service