Task management extension for the pi coding agent, designed for pluggable task backends.
- Installation:
pi install npm:@soleone/pi-tasks - Toggle the Tasks UI with
ctrl + shift + roralt + x, or use/tasks.
- Navigate with
w/s(up / down arrows also work) ato go back (Escand left arrow also work)spaceto change status0to4to change prioritytto change task typeffor keyword search (title, description)
gto toggle between flat and grouped hierarchy modeseto expand or collapse the selected parent in grouped modexto toggle between active and closed tasksnto create a child under the selected taskdto open task detailsEnterto work off a taskTabto insert task details in prompt and close Tasks UIcto create a root taskDeleteto close the selected task
Grouped mode shows root tasks first and reveals indented descendants on expansion. Press x to show archived (closed) tasks instead of active ones; x again returns to the active list. The archive is sorted most recently closed first (beads closed_at, or updated_at for sq/tq; TODO.md has no timestamps, so it keeps file order). Closing or reopening a task removes it from the current view since it no longer belongs to that scope. Searching in grouped mode automatically includes the ancestor path to matching descendants. Blocked rows include unresolved blocker refs, and the preview shows blocker titles and whether each blocker is open, closed, or missing. The blocked marker is derived from blocker readiness without changing the backend lifecycle status.
Tabto switch focus between inputsEnterto savepto choose or clear the parent task when hierarchy is supportedbto toggle blocker tasks when blocked-by dependencies are supported
Relationship pickers exclude the current task. Parent cycles, self-links, and dependency cycles are rejected before persistence; unsupported backend relationships are hidden and rejected by the adapter rather than silently discarded.
By default, the extension auto-detects the first applicable backend. If none are applicable, it falls back to todo-md. Projects with a .tq directory use the tq backend for that session; otherwise sq remains the recommended default.
For most setups, sq is recommended as the default backend. It is lightweight, works well in brand new directories, and can create its local data on demand. Install it from the sq installation guide.
- sq - Uses the
sqcli to manage tasks in a.siftdirectory via aissues.jsonlfile. No initialization necessary. tq- Uses thetqcli to manage tasks in a.tq/tasks.jsonlfile. Automatically preferred when a.tqdirectory is detected.- beads - Uses the
bdcli to manage tasks into a.beadsdirectory containing multiple files. todo-md- Creates or reads aTODO.mdfile with different sections to emulate priority.
Parent/child hierarchy and blocked-by dependencies are independent: a child is not automatically blocked by its parent. Any task may be a parent, although the epic type is useful for groups.
| Backend | Hierarchy | Blocked by |
|---|---|---|
sq / tq |
metadata.pi_tasks.parentRef |
Native blocked_by |
todo-md |
Nested checklist indentation | Not supported |
beads |
Not supported | Read-only when native blocker records are present |
Pi-tasks metadata is always namespaced under pi_tasks; sq/tq hierarchy therefore uses:
{"pi_tasks":{"taskType":"epic","parentRef":"parent-id"}}Nested TODO.md tasks use two spaces per level. Non-checklist nested bullets remain task descriptions:
- [ ] **Parent**
- [ ] **Child**
- Child descriptionFor local UI testing, scripts/seed-hierarchy-demo.sh creates an idempotent sq demo epic with children, a grandchild, resolved and unresolved blockers, and a two-blocker task.
PI_TASKS_TODO_PATH- override the TODO file pathPI_TASKS_BACKEND- to explicitly choose a backend implementation. Currently supported values:sqtqbeadstodo-md