Skip to main content

Multi-agent swarm orchestration harness

Project description

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 (br issue) with labels like needs-impl, needs-proof, needs-review.
  • Orchestrator: bsw daemon/robot, which assigns beads, enforces transitions, and manages worker lifecycle.
  • Workers: dedicated panes per role (implement, proof, review, optional committer, 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 doctor validates deps + local flow/prompt files.
  • bsw robot runs 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

bsw init and doctor

2) Spawn tmux worker panes

bsw spawn
bsw sessions

This starts role-specific panes (implement, proof, review, committer, plan-review) and applies profile colors.

bsw spawn and sessions

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

bsw tui dashboard

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:

  1. .bsw/flow.toml
  2. .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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

boring_swarm-0.1.2-py3-none-win_arm64.whl (7.7 MB view details)

Uploaded Python 3Windows ARM64

boring_swarm-0.1.2-py3-none-win_amd64.whl (8.3 MB view details)

Uploaded Python 3Windows x86-64

boring_swarm-0.1.2-py3-none-musllinux_1_2_x86_64.whl (8.0 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

boring_swarm-0.1.2-py3-none-musllinux_1_2_aarch64.whl (7.5 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

boring_swarm-0.1.2-py3-none-manylinux_2_17_x86_64.whl (8.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

boring_swarm-0.1.2-py3-none-manylinux_2_17_aarch64.whl (7.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

boring_swarm-0.1.2-py3-none-macosx_11_0_arm64.whl (7.7 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

boring_swarm-0.1.2-py3-none-macosx_10_9_x86_64.whl (8.2 MB view details)

Uploaded Python 3macOS 10.9+ x86-64

File details

Details for the file boring_swarm-0.1.2-py3-none-win_arm64.whl.

File metadata

  • Download URL: boring_swarm-0.1.2-py3-none-win_arm64.whl
  • Upload date:
  • Size: 7.7 MB
  • Tags: Python 3, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for boring_swarm-0.1.2-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 c557460d4daf89d4d303ae9d8e9da178e87fb7e80baeceed05850979ba993d2b
MD5 3feac046d23a7e9e46a14629b9ffefc7
BLAKE2b-256 9ca8511c3d43bf5257d52a3d95daf8348bce11b9b932527e207a8d91780e9f11

See more details on using hashes here.

File details

Details for the file boring_swarm-0.1.2-py3-none-win_amd64.whl.

File metadata

  • Download URL: boring_swarm-0.1.2-py3-none-win_amd64.whl
  • Upload date:
  • Size: 8.3 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for boring_swarm-0.1.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 653c063c6f0400014799fdcf9ec2d009bdf315d98ec28aa97fce272374593d90
MD5 5e0d57a159d5d205ddc3bea219371388
BLAKE2b-256 4156944a79c97c1f0690991425788e4febce140645610610f075c7c770bb3a74

See more details on using hashes here.

File details

Details for the file boring_swarm-0.1.2-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for boring_swarm-0.1.2-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6c1bb7050f2c35f8260798c095042c0a5740c9938e68722f73019444c0dcb1ef
MD5 cf1b1127f926a7fcd3daba6bd1bb6ae2
BLAKE2b-256 7fef04b6498fd6e98af05c069c2be949005c7ea2f83296781a604184aeece107

See more details on using hashes here.

File details

Details for the file boring_swarm-0.1.2-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for boring_swarm-0.1.2-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4d88ad5fa75a8e065319ac2c52bf1464c173f658b2c2b7aeda844b1e7bac0cea
MD5 be545dcf7092c40ec876c79fe35b26df
BLAKE2b-256 bb63f308eea3da93c3182c73e323c9634c37538a68fb7edbc724137049e2240b

See more details on using hashes here.

File details

Details for the file boring_swarm-0.1.2-py3-none-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for boring_swarm-0.1.2-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 e92a01d6f4a5d9717fb65b54c22b713359ba376da351b6038767749852db0824
MD5 28cd7970e545cf51243eff16a647664c
BLAKE2b-256 c1c5e2b97dba8dc0d1cef23b5980a02ef5a033eab657393f315a7d0368225169

See more details on using hashes here.

File details

Details for the file boring_swarm-0.1.2-py3-none-manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for boring_swarm-0.1.2-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 313526f566de666e62ed56e80a7e98a3864cf3ba8b595649df7f85669183917d
MD5 416e341d9140ee9dcba28b360acf2da5
BLAKE2b-256 2f8925ba72b2abbb7391cc52857ac2ce58546e05d929b4dda0de3c44d3a64191

See more details on using hashes here.

File details

Details for the file boring_swarm-0.1.2-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for boring_swarm-0.1.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 25dee4036e715673a0fc07f273c9a6c4cc06f4d92b5203ae4bc985449a7e2eb5
MD5 a50a8287d2b55422008ce2ef80ef09d7
BLAKE2b-256 595bae59fbff7b5fa57e53b99de6cf829848f0954df15a4756660e31752ab36b

See more details on using hashes here.

File details

Details for the file boring_swarm-0.1.2-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for boring_swarm-0.1.2-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 aacf8c51db3a67e116b43fe181f7e00b810232c3d42bd098873bc84a22b12e73
MD5 611223746ae78242c856a53007348c76
BLAKE2b-256 7045b219ba2a4b34452d847ac8147f0e7fe9c167cc0163ca482f15629a24e70d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page