Skip to main content

Bulk Operations

Send a single keystroke, text command, or recipe to every selected agent terminal at once with Daintree's Bulk Operations palette, including per-worktree template variables.

Updated
Reviewed

Bulk Operations

Bulk Operations is the one-shot palette for fanning a single action out across several agents. It complements the per-agent surfaces on the agents hub.

When you're running multiple agents across several worktrees, handling them one at a time gets tedious. Bulk Operations sends a single action to every selected agent terminal at once. Open the palette, pick which worktrees to target, choose what to send, and send it.

Bulk Operations is a one-shot palette: you open it, send once, and it closes. For a persistent armed-mode broadcast that mirrors your typing to every armed agent until you disarm it, see Fleet instead.

Opening Bulk Operations

There are three ways to open the Bulk Operations palette:

  • Keyboard shortcut: Cmd+Alt+Shift+B (macOS) or Ctrl+Alt+Shift+B (Windows/Linux). Cmd+Shift+B on its own arms every eligible agent in the current worktree for Fleet Arming instead.
  • Toolbar button: click the broadcast icon in the toolbar
  • Action palette: open with Cmd+Shift+P and search for "Bulk Operations"

See Keyboard Shortcuts for the full shortcut reference.

Selecting Worktrees

The palette lists every worktree in your current project. Each row shows the branch name, the agent count, and the dominant agent state. Click a row to toggle its checkbox, or use Select All / Deselect All at the top to target everything at once.

Worktrees with no active agent terminals are greyed out and can't be selected. The footer keeps a running count of selected worktrees and the total agents that will receive the action.

State Filter Presets

Above the worktree list, four filter buttons let you add worktrees by their current state:

  • Active: agents in the Working or Running state
  • Waiting: agents blocked on input or approval
  • Idle: agents at the prompt, ready for a command
  • Completed: agents that have finished their task

Each button shows a count of matching worktrees and adds them to your current selection; it won't deselect anything you've already chosen. Matching uses the worktree's dominant agent state, so a worktree with one Idle and one Working agent falls under Active, since Working is the dominant state. These states map directly to the Agent State Tracking definitions on the agents hub.

Keyboard Navigation

The palette supports full keyboard navigation: / to move between worktrees, Space to toggle selection, Cmd+Enter to send, and Esc to go back or close.

Keystroke Mode

Keystroke mode sends a single key signal to every selected agent's terminal. There are four presets:

KeystrokeUse Case
EscapeCancel the current prompt or dismiss a menu
EnterConfirm a pending approval across all agents
Ctrl+CInterrupt a running agent (destructive)
Double EscapeCancel the current task entirely (destructive)

Ctrl+C and Double Escape are destructive. Select either one and an amber confirmation prompt appears before anything is sent. Double Escape sends two Escape keystrokes with a one-second gap between them.

Text Command Mode

Text Command mode types a message and submits it to every selected agent. Use it to give the same instruction to several agents at once, or to approve a batch of waiting prompts with a specific response.

Type your command in the input field, then press Enter to see a preview of the resolved text for each worktree. The preview step is your chance to check everything before confirming. Press Cmd+Enter to skip the preview and send right away.

The input supports template variables that resolve differently for each worktree. Click the variable chips below the input to insert them at the cursor. See Template Variables below for the full list.

Command history is available with the / arrow keys, storing up to 50 previous commands.

Tip
Use {{branch_name}} or {{issue_number}} to give each agent targeted context without typing a separate command for each. The preview step shows exactly what each worktree will receive.

Recipe Mode

Recipe mode broadcasts a saved recipe to all selected worktrees. Recipes from all three scopes (Global, Team, and Project) are available to broadcast.

Select a recipe from the list, then preview which worktrees will receive it. After you confirm, recipes are dispatched three at a time through a concurrency queue so the system doesn't get overloaded.

Note
All recipes (Global, Team, and Project) appear in the Bulk Operations palette. For details on recipe scopes, see Recipes.

Template Variables

Template variables resolve per-worktree at send time. They're available in Text Command mode and appear as clickable chips below the input field. Their values come from each worktree's Git branch and its linked GitHub issue or PR.

VariableResolves To
{{issue_number}}GitHub issue number linked to the worktree
{{pr_number}}GitHub PR number linked to the worktree
{{number}}Issue number if available, otherwise PR number
{{worktree_path}}Absolute filesystem path to the worktree directory
{{branch_name}}Git branch name of the worktree

If a variable can't be resolved for a worktree (no linked issue, say), it becomes an empty string. The preview step flags any unresolved variables with an amber warning so you catch them before sending.