---
name: slay-tasks
description: "Manage tasks, subtasks, tags, and templates via the slay CLI"
trigger: auto
---

Task commands are the core of the slay CLI. Most commands accept an optional `[id]` argument that defaults to `$SLAYZONE_TASK_ID`, which is automatically set in every task terminal. Commands that require a project (`--project`) default to `$SLAYZONE_PROJECT_ID` (also set automatically). All ID arguments support prefix matching — e.g. `a1b2` matches a full UUID starting with `a1b2`.

## Task lifecycle

- `slay tasks list [--project <name|id>] [--status <status>] [--done] [--limit <n>] [--json]` — list tasks.
  - `--status` filters by status key (resolved via the project's custom column config)
  - `--done` shows completed tasks across all projects using each project's column config; overrides `--status` if both given
  - Default limit: 100

- `slay tasks create <title> [--project <name|id>] [--description <text>] [--status <status>] [--priority <1-5>] [--due <date>] [--template <name|id>] [--external-id <id>] [--external-provider <provider>]` — create a task.
  - `--project` defaults to `$SLAYZONE_PROJECT_ID`
  - If `--template` is omitted, the project's default template auto-applies (if one exists). Templates set terminal mode, initial status, priority, and provider config
  - `--external-id` enables idempotent creation: if a task with the same `(project, provider, external_id)` exists, prints "Exists" and exits cleanly — useful for sync scripts
  - Reference artifacts in descriptions via `[title](artifact:<artifact-id>)`

- `slay tasks view [id]` — show task details including status, priority, description, tags, and subtasks.

- `slay tasks update [id] [--title <title>] [--description <text>] [--append-description <text>] [--status <status>] [--priority <1-5>] [--due <date>] [--no-due] [--parent <id>] [--no-parent] [--permanent]` — update a task.
  - `--append-description` adds text after a newline separator (mutually exclusive with `--description`)
  - `--no-due` clears the due date
  - `--parent <id>` reparents under another task in the same project; `--no-parent` makes it top-level
  - `--permanent` converts a temporary task to a real task

- `slay tasks progress <idOrValue> [value]` — set task progress (integer 0-100).
  - Two-arg form: `slay tasks progress <id> <value>`
  - One-arg form: `slay tasks progress <value>` — id defaults to `$SLAYZONE_TASK_ID`

- `slay tasks done [id] [--close]` — mark task complete using the project's configured "done" status.
  - `--close` also closes the task tab in the app

- `slay tasks archive <id>` — hide from kanban but keep in database.
  - Use for tasks you don't need visible but want to preserve

- `slay tasks delete <id>` — permanently remove the task and all its data.

- `slay tasks open [id] [--background]` — focus the task in the SlayZone app window. `--background` adds the tab without switching focus or stealing OS window focus (use for bulk-dispatch flows).

- `slay tasks search <query> [--project <name|id>] [--limit <n>] [--json]` — case-insensitive substring search across title and description.
  - Includes subtasks in results
  - Results ordered by most recently updated
  - Default limit: 50

## Subtasks

- `slay tasks subtasks [id] [--json]` — list subtasks of a task.

- `slay tasks subtask-add <title> [--parent <id>] [--description <text>] [--status <status>] [--priority <1-5>] [--external-id <id>] [--external-provider <provider>]` — add a subtask.
  - `--parent` defaults to `$SLAYZONE_TASK_ID`
  - Subtask inherits the parent's terminal mode
  - `--external-id` deduplication works the same as task creation

## Blocking

Two independent blocking mechanisms: dependency-based blockers (task A blocks task B) and a standalone `is_blocked` flag with optional comment.

- `slay tasks blockers [id] [--add <ids...>] [--remove <ids...>] [--set <ids...>] [--clear] [--json]` — view or modify dependency blockers — tasks that must be done before this one.
  - Without write flags, lists current blockers
  - A task cannot block itself

- `slay tasks blocking [id] [--json]` — list tasks that this task is blocking.

- `slay tasks blocked [id] [--on] [--off] [--toggle] [--comment <text>] [--no-comment] [--json]` — view or modify the `is_blocked` flag.
  - `--on` / `--off` / `--toggle` set state
  - `--comment <text>` sets blocked with a note (implies `--on`)
  - `--no-comment` clears only the comment

## Task tags

Tags are project-scoped — a tag name must exist in the project before it can be applied to a task.

- `slay tasks tag [taskId] [--json]` — show current tags on a task.
- `slay tasks tag [taskId] --set <name1> [name2...]` — replace all tags with the given names.
- `slay tasks tag [taskId] --add <name>` — add a tag.
  - Idempotent — no error if already present
- `slay tasks tag [taskId] --remove <name>` — remove a tag by name.
- `slay tasks tag [taskId] --clear` — remove all tags from the task.

## Project tags

- `slay tags list [--project <name|id>] [--json]` — list all tags in a project.
  - `--project` defaults to `$SLAYZONE_PROJECT_ID`

- `slay tags create <name> [--project <name|id>] [--color <hex>] [--text-color <hex>]` — create a new tag.
  - `--project` defaults to `$SLAYZONE_PROJECT_ID`
  - Color defaults to #6366f1, text color to #ffffff

- `slay tags delete <id>` — delete a tag.

## Templates

Templates define defaults for new tasks: terminal mode, status, priority, provider config, panel visibility, and browser tabs.

- `slay templates list [--project <name|id>] [--json]` — list templates.
  - `--project` defaults to `$SLAYZONE_PROJECT_ID`
  - Shows which one is the project default

- `slay templates view <id> [--json]` — view template details including all configured defaults.

- `slay templates create <name> [--project <name|id>] [--terminal-mode <mode>] [--priority <1-5>] [--status <status>] [--default] [--description <text>]` — create a template.
  - `--project` defaults to `$SLAYZONE_PROJECT_ID`
  - `--default` makes it the project default, clearing any existing default (transactional)

- `slay templates update <id> [--name <n>] [--terminal-mode <m>] [--priority <1-5>] [--status <s>] [--default] [--no-default] [--description <text>]` — update a template.
  - `--default` clears all other defaults
  - `--no-default` unsets only this template's default flag

- `slay templates delete <id>` — delete a template.
