boring-swarm
Self-contained multi-agent swarm orchestration. One binary (bsw), one declarative flow.toml, and default worker prompts.
Swarm Concept
bsw runs a bead-native software factory in tmux.
- Work unit: a bead (
brissue) with labels likeneeds-impl,needs-proof,needs-review. - Orchestrator:
bswdaemon/robot, which assigns beads, enforces transitions, and manages worker lifecycle. - Workers: dedicated panes per role (
implement,proof,review, optionalcommitter,plan-review). - Source of truth: bead state and comments (
STATE ...), plus your local.bsw/flow.toml.
Each worker is single-purpose. A worker does not switch roles.
Actors
implement: writes code/docs for assigned bead only.proof: executes gates and evidence checks; does not implement.review: validates correctness/scope against bead acceptance criteria.committer(optional): async commit/push worker triggered by configured workflow events.plan-review(optional): runs after bead lane is exhausted to close or regenerate follow-up work.
Quality Gates
Default quality model is strict lane progression:
- Gate 1: implementation complete (
STATE impl:done) moves bead to proof. - Gate 2: proof pass/fail (
STATE proof:passed|failed) moves bead to review or back to implement. - Gate 3: review pass/fail (
STATE review:passed|failed) closes bead or sends it back to implement.
The gate semantics are encoded in flow.toml transitions/actions, not hardcoded in prompts.
Standard Flow
Default lane:
needs-impl -> needs-proof -> needs-review -> closed
On rejection:
proof failed -> back to needs-impl
review failed -> back to needs-impl
When no active bead work remains, optional plan-review can run and optionally stop daemon per flow policy.
Install
uv tool install boring-swarm
Or with pip/pipx:
pipx install boring-swarm
Quick Start
bsw init
bsw doctor
bsw spawn
bsw robot
bsw doctorvalidates deps + local flow/prompt files.bsw robotruns hardened hybrid scheduling for autonomous operation.
Get Started (With Screenshots)
1) Initialize swarm files in your project
cd /path/to/your-project
bsw init
bsw doctor
This creates:
.bsw/config.json.bsw/flow.toml.bsw/prompts/*.md
2) Spawn tmux worker panes
bsw spawn
bsw sessions
This starts role-specific panes (implement, proof, review, committer, plan-review) and applies profile colors.
3) Start autonomous orchestration (robot mode)
bsw robot
robot runs hybrid scheduling with event + fallback ticks. It auto-assigns beads, nudges waiting workers, and can recycle unhealthy panes.
4) Open the TUI dashboard
bsw tui
Use the TUI for:
- system status and queue health
- live pane/session states
- bead lifecycle/timeline view
- tick log inspection
5) Customize workflow behavior
Edit .bsw/flow.toml to change:
- states and transitions
- worker counts per role
- provider/model/effort
- lifecycle policy (
max_idle,max_lifetime,max_busy_without_progress) - role colors (
color_bg,color_fg,tmux_bg,tmux_fg)
DSL reference: docs/FLOW_DSL.md
Structure
boring-swarm/
├── cli/bsw/ # Go source — compiled into platform wheels via go-to-wheel
├── defaults/
│ ├── prompts/
│ │ ├── impl_worker.md
│ │ ├── impl_proofer.md
│ │ ├── impl_reviewer.md
│ │ ├── impl_committer.md
│ │ └── plan_reviewer.md
│ └── flow.toml # Default state machine definition
└── deps.toml # External dependency declarations
Dependencies
External — installed separately:
| Dep | Role |
|---|---|
| br | Work item CRUD (beads) |
| bv | Verification / robot ops |
| ntm | Tmux session + pane management |
| agent-mail | Inter-agent messaging (MCP) |
Prompt resolution
bsw init materializes local files:
.bsw/flow.toml.bsw/prompts/*.md
After init, runtime reads only local .bsw/* files. Users can fully overwrite flow.toml.
Flow DSL
- Full DSL reference:
docs/FLOW_DSL.md - Default example:
defaults/flow.toml
Build wheels locally
Requires Go 1.24+ and go-to-wheel:
pip install go-to-wheel
go-to-wheel cli/bsw --name boring-swarm --version 0.1.0 --entry-point bsw
Wheels are built automatically on GitHub release via CI.
Metadata
Release files for boring-swarm 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| boring_swarm-0.1.2-py3-none-win_arm64.whl | Python 3 | none | Windows ARM64 | Details |
| boring_swarm-0.1.2-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| boring_swarm-0.1.2-py3-none-musllinux_1_2_x86_64.whl | Python 3 | none | Linux musl 1.2+ x86-64 | Details |
| boring_swarm-0.1.2-py3-none-musllinux_1_2_aarch64.whl | Python 3 | none | Linux musl 1.2+ ARM64 | Details |
| boring_swarm-0.1.2-py3-none-manylinux_2_17_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| boring_swarm-0.1.2-py3-none-manylinux_2_17_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| boring_swarm-0.1.2-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| boring_swarm-0.1.2-py3-none-macosx_10_9_x86_64.whl | Python 3 | none | macOS 10.9+ x86-64 | Details |
Total release size: 63.0 MB
Release files / boring_swarm-0.1.2-py3-none-win_arm64.whl
| Download URL | boring_swarm-0.1.2-py3-none-win_arm64.whl |
|---|---|
| Size | 7.7 MB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
c557460d4daf89d4d303ae9d8e9da178e87fb7e80baeceed05850979ba993d2b
|
|
BLAKE2b-256 checksum How to use checksums |
9ca8511c3d43bf5257d52a3d95daf8348bce11b9b932527e207a8d91780e9f11
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.3
|
Release files / boring_swarm-0.1.2-py3-none-win_amd64.whl
| Download URL | boring_swarm-0.1.2-py3-none-win_amd64.whl |
|---|---|
| Size | 8.3 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
653c063c6f0400014799fdcf9ec2d009bdf315d98ec28aa97fce272374593d90
|
|
BLAKE2b-256 checksum How to use checksums |
4156944a79c97c1f0690991425788e4febce140645610610f075c7c770bb3a74
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.3
|
Release files / boring_swarm-0.1.2-py3-none-musllinux_1_2_x86_64.whl
| Download URL | boring_swarm-0.1.2-py3-none-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 8.0 MB |
| Tags | Linux musl 1.2+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
6c1bb7050f2c35f8260798c095042c0a5740c9938e68722f73019444c0dcb1ef
|
|
BLAKE2b-256 checksum How to use checksums |
7fef04b6498fd6e98af05c069c2be949005c7ea2f83296781a604184aeece107
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.3
|
Release files / boring_swarm-0.1.2-py3-none-musllinux_1_2_aarch64.whl
| Download URL | boring_swarm-0.1.2-py3-none-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 7.5 MB |
| Tags | Linux musl 1.2+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
4d88ad5fa75a8e065319ac2c52bf1464c173f658b2c2b7aeda844b1e7bac0cea
|
|
BLAKE2b-256 checksum How to use checksums |
bb63f308eea3da93c3182c73e323c9634c37538a68fb7edbc724137049e2240b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.3
|
Release files / boring_swarm-0.1.2-py3-none-manylinux_2_17_x86_64.whl
| Download URL | boring_swarm-0.1.2-py3-none-manylinux_2_17_x86_64.whl |
|---|---|
| Size | 8.0 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
e92a01d6f4a5d9717fb65b54c22b713359ba376da351b6038767749852db0824
|
|
BLAKE2b-256 checksum How to use checksums |
c1c5e2b97dba8dc0d1cef23b5980a02ef5a033eab657393f315a7d0368225169
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.3
|
Release files / boring_swarm-0.1.2-py3-none-manylinux_2_17_aarch64.whl
| Download URL | boring_swarm-0.1.2-py3-none-manylinux_2_17_aarch64.whl |
|---|---|
| Size | 7.5 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
313526f566de666e62ed56e80a7e98a3864cf3ba8b595649df7f85669183917d
|
|
BLAKE2b-256 checksum How to use checksums |
2f8925ba72b2abbb7391cc52857ac2ce58546e05d929b4dda0de3c44d3a64191
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.3
|
Release files / boring_swarm-0.1.2-py3-none-macosx_11_0_arm64.whl
| Download URL | boring_swarm-0.1.2-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 7.7 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
25dee4036e715673a0fc07f273c9a6c4cc06f4d92b5203ae4bc985449a7e2eb5
|
|
BLAKE2b-256 checksum How to use checksums |
595bae59fbff7b5fa57e53b99de6cf829848f0954df15a4756660e31752ab36b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.3
|
Release files / boring_swarm-0.1.2-py3-none-macosx_10_9_x86_64.whl
| Download URL | boring_swarm-0.1.2-py3-none-macosx_10_9_x86_64.whl |
|---|---|
| Size | 8.2 MB |
| Tags | Python 3 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
aacf8c51db3a67e116b43fe181f7e00b810232c3d42bd098873bc84a22b12e73
|
|
BLAKE2b-256 checksum How to use checksums |
7045b219ba2a4b34452d847ac8147f0e7fe9c167cc0163ca482f15629a24e70d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.3
|
Security for boring-swarm 0.1.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.