:-)
Yet another multi-agent-in-tmux setup — kept small on purpose: comms
(tmux-send + durable log, deliver on idle), loops (babysit nudges + backlog
→ free panes), and best-effort quota pacing. Config-driven YAML/tmuxp grids
and a tiny activity monitor (working / idle). Not a full control plane.
Demo (3× speed): aiswarm init --flavour demo → start → shell-pane ops / backlog tasks · mp4
Daily driver and loop harness: the same panes are where you sit and work with agents by hand (Claude, Codex, Grok, …), and where idle-gated comms / babysit / tasks keep things moving when you step back. Personal multi-agent workflows; works standalone.
- Shared checkout is the default. A branch or worktree is a choice, not the swarm model.
- Exit stays cheap. Git, Backlog, tmux, and provider sessions stay useful without nudge.
- Layers are optional: tmux, monitor, durable log, babysit, tasks, quota hints.
- Mechanisms stay ordinary: processes, files, SQLite, YAML, tmux, provider CLIs.
- Subscription access is the official CLI only. No OAuth, token reuse, or third-party bridges as architecture.
- Backlog and git hold the work. Nudge wakes and routes.
Primary workflow is the installed aiswarm command. From a repo checkout,
python -m swarm.cli or python swarm/cli.py also works.
aiswarm must be on PATH; from this repo, run make install-aiswarm.
aiswarm # workflow cheat sheet
aiswarm instructions # agent guides index
aiswarm instructions overview
aiswarm this # this swarm: config + runtime.json path
aiswarm sessions # provider session IDs (resume after a crash)
aiswarm start --resume # relaunch panes from those IDs
aiswarm <command> --help # flagsInstall aiswarm into your uv tool environment:
make install-aiswarmConsumer projects: harness lives under .aiswarm/ (not the Python package).
Resolution order for commands that need a config:
- Explicit path (
aiswarm status path/to.yamlor-c path/to.yaml) $AISWARM_CONFIG- Walk up from cwd for
.aiswarm/config.yaml
aiswarm init myproject # writes .aiswarm/config.yaml + prompts (commit if team-shared)
aiswarm start # no path needed inside the project
aiswarm send 0.0 "hello" # same
aiswarm send any "check tests" # one eligible idle pane receives it
aiswarm send heavy "refactor" # one idle pane in category `heavy`
aiswarm send --at +2h 0.2 "check progress" # deferred delivery (ISO timestamp or +Nh/+Nm/+Ns)
aiswarm status .aiswarm/config.yaml # explicit path still worksNote: in this repo, ./swarm/ is the Python package. The live harness is
.aiswarm/config.yaml.
States: unknown working idle
# 1. Create a starter config and AGENTS note (once per project)
aiswarm init <project>
# 2. Turn on the swarm (tmux session + panes + monitors + worker)
# Changing pane counts on a live session means recreate, not re-run start.
aiswarm start
# 3. Optional loops. Neither starts with `aiswarm start`.
aiswarm babysit start # panes with babysit.enabled
aiswarm tasks start # backlog → free panes
# 4. Full teardown
aiswarm stopSend, categories, and handoff: docs/workflow.md.
- Workflow — send, categories, scheduled delivery, handoff
- Config — YAML grid, workers, resume, runtime paths
- Presence —
aiswarm presence - Tasks — backlog dispatcher, chase, healthcheck
- Quota pacing — babysit EMA
- Free-tier models — aider panes on Gemini, Groq, Mistral, OpenRouter
- Monitor — activity states, fixtures, debug
- Similar projects — NTM, thurbox, dmux, Claude Squad, herdr, and others
make build
make test
make test-c
make test-swarmPython helpers live in pyproject.toml:
uv sync- Changing pane counts or layout after
startrequires a full session recreate (startis create-oriented, not a declarative grid update) - Monitor is activity-based only (not semantic agent status); quiet long jobs can look idle, busy idle-screen redraws can look working
- Quota EMA pacing is noisy when multiple swarms share one provider quota (overestimates, so nudges slow down; usually the safe direction)
usageand quota reporting are a best-effort operator hint, not a hard scheduler
See backlog/tasks/ for planned work. Contributions welcome via issues or PRs (see AGENTS.md).