Skip to content

Bulk operations

When you’ve got twenty things in your inbox and twelve of them need the same treatment (defer to next week, add to today, mark complete, archive), going one at a time is the wrong tool. Pensum’s list views ship with vim-style multi-select and bulk actions that apply to the whole selection in a single write.

Every list view supports the same selection model:

KeyWhat it does
vToggle the current row in/out of the multi-selection
Shift+J / Shift+KExtend the selection one row down/up
*Select all currently visible rows
EscClear the multi-selection

Selected rows render with a stronger accent and a left border so you always know what’s in scope. A counter in the view header shows the current count.

There’s no separate “selection mode” — once you’ve toggled at least one row with v, the next action key (complete, defer, etc.) applies to the selection. Once you Esc out (or run an action that empties the selection), keys go back to acting on the single current row.

Every action key works the same way: if there’s a multi-selection, it acts on all selected rows; otherwise it acts on the cursor row.

KeyBulk action
x / SpaceMark every selected task complete
tToggle “Add to Today” on the whole selection. If they’re already all on today, it removes the scheduled date; otherwise it sets it.
dOpen the Defer modal for the whole selection — pick one target date, applied to every selected task
rOpen the Reschedule modal for the selection
Shift+DelDelete every selected task. One confirmation for the whole batch.

Each bulk action does a single file pass — Pensum groups the selected tasks by source file, applies the edits in one read-modify-write per file (with the per-file write mutex), and then triggers one incremental scan. So 30 tasks across 5 files is 5 disk writes, not 30.

Multi-select is available in every list view:

  • Today / Inbox / Forecast / Waiting / Weekly Review
  • By Project / Project Page
  • Calendar (per-day row list)
  • Search / Filters
  • Agent Captures

The same keyboard shortcuts work everywhere — the bulk action set adapts to the view (e.g. in the Agent Captures view, x accepts; in Waiting, completing flips status back to active).

Defer is the multi-select sweet spot. Common pattern at end of day:

  1. Open Today
  2. j through to the first thing you didn’t get to
  3. v to start selecting
  4. Shift+J to extend down through the next five things
  5. d → “Tomorrow” → all five push to tomorrow in one write

Defer sets the start date marker (🛫) so the tasks vanish from planning views until that date — they’re still in your vault, just not in the way.

Selecting twelve tasks and hitting Shift+Del opens one confirmation prompt covering all twelve. There’s no per-task confirm to click through. If you’re nervous, the dry-run version is to multi-select, look at the count in the header, then either Esc out or commit.

Deleted task lines are not recoverable from inside Pensum — restore from your sync provider’s version history (Obsidian Sync, iCloud, git, etc.) if you delete something you meant to keep.

Most bulk semantics also work via agents, but as repeated single-task calls rather than a true batch tool:

  • plan.defer per task — call it in a loop
  • plan.complete per task
  • plan.set_status per task
  • plan.add_to_today per task

The plugin’s bulk path is faster (one write per file vs. one write per task), but for agent workloads the per-task tools are usually fine — the bottleneck is the LLM, not the disk.

Pensum deliberately keeps the bulk surface small. The four common batch operations (complete, defer, reschedule, delete) cover the workflows where doing things one at a time is genuinely painful. Bulk-add-tag and bulk-move-to-project are still per-task — they’re rarer, and the “select 20 tasks and apply one project” pattern is mostly handled by Smart Triage already.

If a batch action you reach for daily isn’t here, open an issue — bulk surface evolves based on what people actually do.