# Lists, search, and bulk actions

> Source: https://docs.clonepartner.com/using/lists-search-and-bulk-actions/

<!-- sources: ui/src/composables/useListPage.ts, ui/src/composables/useSelection.ts, ui/src/components/list/ListToolbar.vue, ui/src/components/list/FilterSelect.vue, ui/src/components/list/SortableTableHead.vue, ui/src/components/list/ListPagination.vue, ui/src/components/list/RowActions.vue, ui/src/components/list/BulkActionsBar.vue, src/server/api/list-params.ts, ui/src/views/TasksView.vue -->

# Lists, search, and bulk actions

Envoy's resource lists — Tasks, Jobs, Runs, Connectors, Triggers, Users, AI References, and others — share one set of behaviors: server-side search, filters, sortable columns, cursor-based paging, a per-row action menu, and (on some lists) row selection with bulk actions. This page describes those shared behaviors once; the per-screen pages cover what each list contains.

## Search and filters

Every list has a toolbar with a search field (for example **Search tasks...**) and, where relevant, dropdown filters such as **Status** or **Role**. Search runs on the server against that resource's searchable columns, so it matches rows beyond the loaded page. The right side of the toolbar shows the total result count.

- Typing in the search field refetches after a short pause; the **X** button clears it.
- A filter dropdown always includes an "all" option (for example **All statuses**) to remove that filter.
- When filters produce no rows, the empty state offers **Clear filters**.

Search, filters, and sort are stored in the page URL, so a filtered view survives refreshes and can be shared as a link.

<!-- screenshot: lists-search-and-bulk-actions-toolbar | Tasks list toolbar with a search term entered, the Status filter open showing All statuses, Active, and Archived, and the result count on the right -->

## Sorting

Sortable column headers show an arrow on hover. Selecting a header sorts by that column ascending; selecting it again flips to descending. Sorting applies to the whole server-side result set, not only the loaded rows.

## Pagination

Lists load one page at a time (50 rows by default; the server caps a page at 200). When more rows match, a **Load more** button appears at the bottom with a **Showing X of Y** counter, and each click appends the next page using a server cursor.

## Row actions

The ⋯ button at the end of a row opens that resource's action menu — for example **Edit**, **Duplicate**, **Export**, **Archive** or **Restore**, and a destructive action such as **Delete permanently** separated at the bottom. Destructive actions always open a confirmation dialog first. Actions you lack permission for are hidden; viewers see no action column on mutation-gated lists.

## Selection and bulk actions

On lists that support bulk actions, a checkbox column appears for users who can mutate. Checking rows replaces the toolbar with a bar showing **N selected**, a **Clear** link, and the available bulk action buttons.

Selection has two scopes:

- **Page** — the rows you explicitly checked. The header checkbox selects everything currently loaded.
- **All matching** — when the whole page is selected and more rows match the current search and filters, the bar offers **Select all N matching**. The bulk action then applies to every server-side match, including rows not loaded on screen.

Changing the search, filter, or sort clears the selection, so the scope always reflects the query you can see.

<!-- screenshot: lists-search-and-bulk-actions-bulk-bar | Tasks list with all visible rows checked, the bulk bar showing the selected count and Export button, and the Select all matching escalation link -->

## Worked example: export tasks in bulk

1. Open **Tasks** and set the **Status** filter to **Archived** (or enter a search term) to narrow the list.
2. Check the header checkbox to select the loaded page. If more tasks match, select **Select all N matching** in the bar below.
3. Select **Export** in the bulk bar. Envoy downloads the selected task definitions as an `.ndjson` bundle and clears the selection.

The same bundle export is available per row (⋯ → **Export**) — row and bulk actions on a list always do the same thing at different scales.

:::callout{type="tip"}
Before a destructive bulk action, check the count in the confirmation dialog against the toolbar's result count. With all-matching scope selected, the action covers every match on the server, not just the rows you can see.
:::

## Related

- [Tasks and task runs](/using/tasks-and-runs/) — the list used in the example above
- [Users, roles, and settings](/using/users-and-settings/) — who can see mutation and bulk controls
- [Bundles: export and import](/building/bundles/) — what the exported task bundle contains and how to import it
