SwarmForge Receive Modes Explained: Task vs Batch Processing
SwarmForge agents process incoming handoffs using either task or batch receive mode, with task as the default for single-item processing and batch for grouped, priority-matched handoffs.
SwarmForge is a distributed agent orchestration framework where each role's behavior is configured through swarmforge.conf. The receive mode determines how an agent consumes work from its queue—either one handoff at a time or multiple handoffs as a coordinated batch. Understanding this distinction is critical for optimizing workflow throughput and ensuring proper handoff semantics.
What Are SwarmForge Receive Modes?
The receive mode controls the consumption pattern of the ready_for_next.sh and done_with_current.sh helper scripts. These scripts delegate to mode-specific implementations based on the role's configuration.
According to the SwarmForge source code, the window line syntax in swarmforge.conf follows this pattern:
window <role> <backend> <worktree> [<receive-mode>] [<propagation>]
When receive-mode is omitted, it defaults to task source (README lines 99-105).
Task Mode
task processes exactly one handoff per cycle.
When ready_for_next.sh executes in task mode:
- It calls
ready_for_next_task.sh - Selects the highest-priority handoff from
inbox/queued/ - Moves it to
inbox/in_process/ - Outputs a
TASK:line with the handoff path
After the agent completes work, done_with_current.sh invokes done_with_current_task.sh to finalize that single handoff.
Use task mode for roles handling independent work units, such as specifier, coder, or sequential refactorer operations.
Batch Mode
batch consumes all queued handoffs sharing the same priority as the first handoff.
When ready_for_next.sh executes in batch mode:
- It calls
ready_for_next_batch.sh - Identifies the first handoff's priority
- Collects every matching handoff from
inbox/queued/ - Creates a batch directory:
inbox/in_process/batch_<timestamp>/ - Moves all collected handoffs into this directory
- Outputs a
BATCH:line with the batch path
done_with_current.sh then calls done_with_current_batch.sh to complete all handoffs in the batch simultaneously.
Use batch mode for roles requiring grouped processing, such as cleaner (linting/formatting across commits), architect (cross-cutting design changes), hardender (security hardening), or QA (validation suites).
Pack Defaults for Receive Modes
SwarmForge packs ship with role-appropriate receive mode defaults source (packs configuration lines 14-19):
| Pack | Role | Default Configuration |
|---|---|---|
| two-pack | cleaner |
batch back-one |
| four-pack | refactorer |
task back-one |
architect |
batch back-all |
|
| six-pack | cleaner |
batch back-one |
architect |
batch back-all |
|
hardender |
batch back-all |
|
QA |
batch back-all |
These defaults reflect operational intent: refactoring typically requires focused, sequential attention (task), while cleaning, architectural review, and quality assurance benefit from holistic, grouped processing (batch).
Practical Configuration Examples
Basic Task Mode Role
# In swarmforge.conf
window coder codex wt-coder task forward-only
Explicitly sets task mode with forward-only propagation—handoffs move forward through the pipeline without returning.
Batch Mode with Back-One Propagation
# In swarmforge.conf
window cleaner claude wt-cleaner batch back-one
Enables batch processing; completed batches return one step backward in the pipeline for review or correction.
Overriding Pack Defaults
# Custom project swarmforge.conf
window architect claude wt-arch task forward-only
Forces sequential task processing despite the four-pack's default batch back-all for architects.
How Receive Modes Work in the Handoff Protocol
The ready_for_next.sh script in swarmforge/scripts/ reads the role's receive mode from .swarmforge/roles.tsv (generated from swarmforge.conf) and dispatches accordingly source (handoff-protocol.md):
# Conceptual flow from ready_for_next.sh
ROLE_MODE=$(get_role_mode_from_tsv)
if [ "$ROLE_MODE" = "batch" ]; then
exec ready_for_next_batch.sh
else
exec ready_for_next_task.sh
fi
Similarly, done_for_current.sh branches to either done_for_current_task.sh or done_for_current_batch.sh.
Direct Script Usage
# Inside a role's worktree directory
./ready_for_next.sh
# Output: BATCH: ./inbox/in_process/batch_20260828T123456/
# After agent processing completes
./done_with_current.sh
# Entire batch marked complete
Choosing Between Task and Batch Modes
| Consideration | Prefer task |
Prefer batch |
|---|---|---|
| Work independence | Items unrelated, order-agnostic | Items related, benefit from joint context |
| Agent context limits | Long context per item | Single context for multiple items |
| Pipeline latency | Fine-grained progress visibility | Reduced per-item overhead |
| Rollback granularity | Individual handoff retry | Batch-level retry |
| Ordering guarantees | Strict FIFO per priority | Priority-group atomicity |
Key Implementation Files
| File | Purpose |
|---|---|
swarmforge/scripts/ready_for_next.sh |
Entry point that dispatches to task or batch handlers |
swarmforge/scripts/ready_for_next_task.sh |
Single handoff selection and staging |
swarmforge/scripts/ready_for_next_batch.sh |
Priority-grouped batch creation |
swarmforge/scripts/done_with_current.sh |
Completion dispatcher |
swarmforge/scripts/done_with_current_task.sh |
Single handoff finalization |
swarmforge/scripts/done_with_current_batch.sh |
Batch directory completion |
swarmforge/handoff-protocol.md |
Formal protocol specification |
README.md |
Configuration syntax and pack defaults |
Summary
- SwarmForge receive modes (
task,batch) govern how agents consume handoffs from their queues taskmode (default) processes single handoffs sequentially viaready_for_next_task.shanddone_with_current_task.shbatchmode groups priority-matched handoffs for atomic processing viaready_for_next_batch.shanddone_with_current_batch.sh- Pack templates provide sensible defaults:
taskfor focused roles (coder,refactorer),batchfor holistic roles (cleaner,architect,hardender,QA) - Override defaults in project
swarmforge.confusing thewindow <role> <backend> <worktree> [<mode>] [<propagation>]syntax
Frequently Asked Questions
What happens if I don't specify a receive mode in my window configuration?
The mode defaults to task. According to the SwarmForge README, the window line syntax makes receive mode optional, and when omitted, single-handoff processing is used. This ensures backward compatibility and safe defaults for new roles.
Can I mix task and batch roles in the same pipeline?
Yes. Each role operates independently according to its own swarmforge.conf configuration. A batch mode cleaner can feed into a task mode coder, with the propagation token controlling handoff direction separately from consumption pattern.
How does batch mode handle priority conflicts?
ready_for_next_batch.sh selects the first handoff by priority and timestamp, then includes only handoffs matching that exact priority level. Higher or lower priority handoffs remain queued for subsequent cycles, preserving priority semantics within batches.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →