Skip to main content

zwarm

Multi-agent CLI for orchestrating coding agents. Spawn, manage, and converse with multiple coding agent sessions in parallel.

Supports both Codex CLI and Claude Code CLI.

Installation

# From PyPI
pip install zwarm

# Or with uv
uv pip install zwarm

Requirements:

  • Python 3.13+
  • At least one of:
    • codex CLI installed and authenticated (OpenAI)
    • claude CLI installed and authenticated (Anthropic)

Environment:

export OPENAI_API_KEY="sk-..."        # Required for Codex
export ANTHROPIC_API_KEY="sk-..."     # Required for Claude
export WEAVE_PROJECT="entity/zwarm"   # Optional: Weave tracing

Three Interfaces

zwarm has three ways to work with coding agents:

Interface Who drives Use case
zwarm interactive You Direct session control, experimentation
zwarm pilot You + LLM Conversational guidance with checkpoints
zwarm orchestrate LLM Fully autonomous task execution

All three use the same session manager - they're different interfaces to the same underlying system.

                     .zwarm/sessions/ (GROUND TRUTH)
                              │
              ┌───────────────┼───────────────┐
              │               │               │
              ▼               ▼               ▼
        Orchestrate        Pilot        Interactive
          (LLM)         (LLM+REPL)        (REPL)

Quick Start

# Initialize zwarm in your project
zwarm init

# Start the pilot (recommended for most users)
zwarm pilot --task "Build a REST API with authentication"

# Or go fully autonomous
zwarm orchestrate --task "Build a REST API with authentication"

# Or manual control
zwarm interactive

Want a 3-minute walkthrough? See `docs/DEMO.md` for a pilot + interactive demo.

Multi-Adapter Support

zwarm supports multiple executor backends with simple model shortcuts:

Model Alias Description
gpt-5.2-codex 5.2 GPT-5.2 Codex - fast, great for code (default)
gpt-5.2 5.2-think GPT-5.2 with extended reasoning
sonnet - Claude Sonnet - balanced
opus - Claude Opus - most capable

Adapter is auto-detected from model name - just use model="opus" and zwarm handles the rest.

Mix models freely - use Opus for complex reasoning, 5.2 for quick edits.


Pilot Mode

You chat with an LLM that delegates to coding agents. Best of both worlds - LLM intelligence with human oversight.

zwarm pilot
zwarm pilot --task "Add user authentication"
zwarm pilot --resume  # Resume previous session

Features

  • Conversational: Chat naturally, the LLM handles delegation
  • Checkpoints: Every turn is saved, time-travel with :goto
  • Resume: Continue where you left off with --resume
  • Multiline input: Use """ for pasting large prompts
  • Status bar: See token usage, cost estimates, context window

Commands

Command Description
:help Show all commands
:status Token usage, cost, context window
:history Show turn checkpoints
:goto T3 Jump back to turn 3
:sessions List executor sessions
:save Save current state
:quit Exit (auto-saves)

Example

$ zwarm pilot

> Add a login endpoint to the API

Chooooching...

I'll delegate this to a coding agent.

[delegate] task: "Add login endpoint with JWT..."
  → Session abc123 started

The agent is working on it. I'll check back shortly.

[sleep] 10s
[check_session] abc123
  → completed (45s, 12k tokens)

Done! The agent added a /login endpoint with JWT support...

> Now add rate limiting

I'll have the same agent continue with rate limiting.

[converse] abc123: "Add rate limiting to the login endpoint..."

Multiline Input

Start with """ and end with """:

> """
Here's a complex task:
1. Add authentication
2. Add rate limiting
3. Add tests
"""

Interactive Mode

You are the orchestrator. Direct control over sessions with autocomplete.

zwarm interactive

Commands

Command Description
spawn "task" [--model M] Start a new session (model: 5.2, opus, sonnet)
ls Dashboard of all sessions (with costs, models)
? ID / peek ID Quick status check
show ID Full session details
traj ID Show trajectory (steps taken)
watch ID Live follow session output
c ID "msg" Continue conversation
kill ID | all Stop session(s)
rm ID | all Delete session(s)
!command Run shell command (e.g., !git status)
help Show all commands
quit Exit

Example

$ zwarm interactive

> spawn "Add tests for the auth module"
✓ Started abc123 (running)
  Use 'watch abc123' to follow

> spawn "Fix type errors in utils.py"
✓ Started def456 (running)

> ls
⟳ 2 running

ID       │    │ Task                          │ Model        │ Tokens  │ Cost
abc123   │ ⟳  │ Add tests for the auth...     │ 5.2-codex   │ 5,234   │ $0.052
def456   │ ⟳  │ Fix type errors in utils...   │ 5.2-codex   │ 2,100   │ $0.021

> watch abc123
Watching abc123... (Ctrl+C to stop)
  [step 3] shell: pytest tests/
  [step 4] write: tests/test_auth.py
  ...

> c abc123 "Also add edge case tests"
✓ Injected message, session running

> !git status
On branch main
Changes not staged for commit:
  ...

> kill all
  ✓ Killed abc123
  ✓ Killed def456
Killed 2 session(s)

Orchestrate Mode

An LLM runs autonomously. Give it a task, it delegates to coding agents and manages them.

zwarm orchestrate --task "Build a REST API with authentication"
zwarm orchestrate --task-file task.md
echo "Fix the bug" | zwarm orchestrate

How It Works

The orchestrator LLM has access to:

Tool Description
delegate(task, model="5.2") Start a new coding session
converse(id, msg) Continue a session
check_session(id) Get full session details
peek_session(id) Quick status check
get_trajectory(id) See what steps the agent took
list_sessions() List all sessions
end_session(id) Kill/delete a session
sleep(seconds) Wait before checking again
bash(cmd) Run verification commands (tests, linters)
exit() Signal task completion

Async-first: All sessions run in the background. The orchestrator uses sleep() to wait, then checks on progress.

Model shortcuts: Just use model="5.2" or model="opus" - the adapter is auto-detected.

Web Search: Enable web_search=True in config for tasks needing current info (API docs, latest releases, etc.).

Watchers

Watchers monitor the orchestrator and intervene when needed:

Watcher Purpose
progress Detects stuck/spinning behavior
budget Enforces step/session limits
delegation Tracks delegation patterns
delegation_reminder Nudges to delegate when doing too much directly

Session Management

Quick Commands

# List all sessions with costs
zwarm sessions

# Clean up old sessions
zwarm sessions --clean
zwarm sessions -c

# Kill all running sessions
zwarm sessions --kill-all
zwarm sessions -k

# Target specific session
zwarm sessions --rm abc123
zwarm sessions --kill abc123

Session Lifecycle

spawn → running → completed/failed/killed
                       ↓
               converse → running → completed
                               ↓
                         converse → ...

Storage

.zwarm/sessions/<uuid>/
├── meta.json           # Status, task, model, adapter, tokens, cost
└── turns/
    ├── turn_1.jsonl    # Raw executor output for turn 1
    ├── turn_2.jsonl    # Output after continue
    └── ...

Configuration

Initialize

zwarm init

This creates:

  • .zwarm/config.toml - Runtime settings (Weave, watchers)
  • .zwarm/codex.toml - Codex CLI settings (model, reasoning)
  • .zwarm/claude.toml - Claude CLI settings (model, permissions)
  • zwarm.yaml - Project context (optional, with --with-project)

Config Files

.zwarm/config.toml - Controls zwarm itself:

[weave]
project = "your-entity/zwarm"

[orchestrator]
max_steps = 50

[executor]
web_search = false  # Enable web search for all delegated sessions

[pilot]
max_steps_per_turn = 25

[watchers]
enabled = ["progress", "budget", "delegation", "delegation_reminder"]

.zwarm/codex.toml - Controls the Codex CLI:

model = "gpt-5.2-codex"  # or gpt-5.2 for extended reasoning
model_reasoning_effort = "high"  # low | medium | high
full_danger = true  # Skip approval prompts

.zwarm/claude.toml - Controls the Claude Code CLI:

model = "opus"  # opus | sonnet
full_danger = true  # Skip permission prompts

zwarm.yaml - Project-specific context:

description: "My awesome project"

context: |
  Tech stack: FastAPI, PostgreSQL, React
  Key directories: src/api/, src/components/

constraints:
  - "All new endpoints need tests"
  - "Use existing patterns from src/api/"

CLI Reference

# Setup
zwarm init              # Initialize .zwarm/ with interactive prompts
zwarm init --yes        # Quick setup with defaults

# Interfaces
zwarm pilot             # Conversational LLM guidance (recommended)
zwarm pilot --resume    # Resume previous session
zwarm interactive       # Direct session control REPL
zwarm orchestrate       # Fully autonomous LLM

# Session management
zwarm sessions          # List all sessions
zwarm sessions -c       # Clean old sessions
zwarm sessions -k       # Kill all running

# Utilities
zwarm exec              # Run single executor (testing)
zwarm clean             # Kill orphaned processes
zwarm reset             # Reset .zwarm/ state

Project Structure

zwarm/
├── src/zwarm/
│   ├── sessions/           # Session substrate
│   │   ├── base.py         # BaseSessionManager (ABC)
│   │   ├── manager.py      # CodexSessionManager
│   │   └── claude.py       # ClaudeSessionManager
│   ├── cli/
│   │   ├── main.py         # CLI commands
│   │   ├── pilot.py        # Pilot REPL
│   │   └── interactive.py  # Interactive REPL
│   ├── tools/
│   │   └── delegation.py   # Orchestrator tools (multi-adapter)
│   ├── core/
│   │   ├── config.py       # Configuration
│   │   ├── checkpoints.py  # Time-travel primitives
│   │   ├── costs.py        # Token cost estimation
│   │   └── state.py        # State persistence
│   ├── watchers/           # Trajectory alignment
│   ├── prompts/            # System prompts
│   └── orchestrator.py     # Orchestrator agent
└── docs/
    ├── CONCEPTS.md         # Architecture diagrams
    └── INTERNALS.md        # Developer documentation

License

MIT

Metadata

Release files for zwarm 3.10.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for zwarm 3.10.6
File Size Uploaded
zwarm-3.10.6.tar.gz 106.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for zwarm 3.10.6
File Interpreter ABI Platform
zwarm-3.10.6-py3-none-any.whl Python 3 none any Details

Total release size: 233.8 kB

Release files / zwarm-3.10.6.tar.gz

Download URL zwarm-3.10.6.tar.gz
Size 106.1 kB
Tags Source
SHA-256 checksum
How to use checksums
26e19c9db72f2380a9badf7f47e627337dff16dbcf0c809b9de1fa4dadc30363
BLAKE2b-256 checksum
How to use checksums
4049e018b213de0f698662b3517c8b466924288f7d2f5bb9a30a885b641636c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / zwarm-3.10.6-py3-none-any.whl

Download URL zwarm-3.10.6-py3-none-any.whl
Size 127.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c3412a5c68683b437c669f74503dec9fe32808936bf310186fa10b39bff69e94
BLAKE2b-256 checksum
How to use checksums
dfe45a46a9d06ec49779b1edc0e8770c015ead8b5ef5900f2e42d0b92b77d112
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

3.10.6 This release

2 release files

3.9.0

2 release files

3.8.0

2 release files

3.7.0

2 release files

3.6.0

2 release files

3.4.0

2 release files

3.3.0

2 release files

3.2.1

2 release files

3.2.0

2 release files

3.0.1

2 release files

3.0

2 release files

2.3.5

2 release files

2.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.3.11

2 release files

1.3.10

2 release files

1.3.9

2 release files

1.3.8

2 release files

1.3.5

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.2.1

2 release files

1.1.1

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page