{% extends "dashboard/base.html" %} {% from "partials/_macros.html" import status_pill, pill, empty_state, info_toggle %} {% from "partials/_list_chrome.html" import list_controls %} {% block page %} {% call info_toggle(key='tasks', title="What is a task?") %}

Tasks are units of work that any session can claim and execute. They flow through four states: availablein_progressdone, with blocked as an off-ramp when a task can't proceed.

Tasks are workspace-scoped — a session only sees tasks for workspaces it can read (Layer-2 visibility). Click any card to open the full task with body, history, and claim state.

{% endcall %} {{ list_controls( '/dashboard/tasks', search_value=search_value, search_placeholder='Search code / title / workspace…', filters=[ {'name': 'status', 'label': 'Status', 'value': status_filter, 'options': [('', 'All'), ('available', 'available'), ('in_progress', 'in_progress'), ('blocked', 'blocked'), ('done', 'done')]}, {'name': 'priority', 'label': 'Priority', 'value': priority_filter, 'options': [('', 'All'), ('p1', 'p1'), ('p2', 'p2'), ('p3', 'p3')]}, ], per_page=per_page, show_per_page=False, ) }} {% set buckets = {'available': [], 'in_progress': [], 'blocked': [], 'done': []} %} {% for t in tasks %} {% set _ = buckets.setdefault(t.status, []).append(t) %} {% endfor %}
{% for col in ['available', 'in_progress', 'blocked', 'done'] %} {% set items = buckets.get(col, []) %}
{{ status_pill(col) }} ({{ items|length }})
{% if items %} {% else %}
empty
{% endif %}
{% endfor %}
{% if not tasks %} {{ empty_state( 'No tasks match the current filter', body='Create a task via `brains add_task` or relax the filter to see done tasks.', icon_name='list-checks' ) }} {% endif %} {% endblock %}