sweteam

Autonomous coding agent orchestrator — turns high-level goals into PR'd code.

It is not another coding agent. It orchestrates the ones you already have.

npm Node ≥ 18 MIT License TypeScript
$ npm install -g sweteam

Why sweteam?

Real software isn't built by a single person typing in a terminal. It's built by teams — a tech lead breaks down the work, engineers pick up tasks, reviewers catch mistakes, and the whole thing ships through a structured process.

sweteam brings that same discipline to AI coding agents. It doesn't replace your coding agents — it gives them the same structure that makes real engineering teams ship reliable code.

1

You (PM)

Describe what you want. The planner asks questions, proposes an architecture, and breaks it into scoped tasks — just like a tech lead running a planning session.

2

Planner (Tech Lead)

Decomposes your goal into small tasks with acceptance criteria, dependency order, and file-level scope. You review and refine before anything gets built.

3

Coders (Engineers)

Each task is assigned to a coding agent on its own branch. Independent tasks run in parallel — like engineers on a team working on separate features simultaneously.

4

Reviewer (Senior Engineer)

A separate agent reviews each task's diff against its acceptance criteria. If the review fails, the coder automatically retries until the reviewer is satisfied.

5

Git + PR (CI/CD)

Approved tasks are merged, the branch is pushed, and a PR is opened. The session stays open — give feedback, agents iterate on the same PR until you're satisfied.

Features

📋 Session-based

Every interaction lives in a persistent session with full history. Crash, close the terminal, come back tomorrow — nothing is lost.

⚡ Zero config

Discovers installed CLIs automatically and uses their existing auth. No API keys to configure, no extra setup.

💬 Human-in-the-loop

Chat with the planner, refine the plan, then go hands-off. You stay in control of the strategy.

🎯 Parallel execution

Independent tasks run concurrently across multiple agents, organized into a dependency graph (DAG).

🔍 Multi-model review

Every task is reviewed by a separate agent against its acceptance criteria. Failures are retried automatically.

🔄 Feedback iterations

Session stays open after the PR. Give feedback, agents iterate on the same PR until you're satisfied.

📺 Live attach

Re-enter any session and see agent output streaming in real time. Never lose track of what's happening.

🔌 Pluggable agents

Supports Claude Code, Codex CLI, OpenCode, or any custom CLI that reads stdin and writes stdout.

🛠 Git native

All git and GitHub operations via git and gh CLI directly. No abstractions, no surprises.

How It Works

sweteam follows a structured pipeline from plan to PR.

Plan

Planner decomposes your goal into tasks with dependencies

DAG

Tasks organized into a dependency graph

Dispatch

Independent tasks run concurrently

Code

Each task assigned to a coding agent on its own branch

Review

Reviewer checks diff against acceptance criteria

Fix Loop

If review finds issues, coder retries automatically

Merge

Approved tasks squash-merged into session branch

PR

Branch pushed and GitHub PR created automatically

Session Lifecycle

                    /create
                       β”‚
                       v
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚        planning          β”‚ <── chat with planner
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚ @build
                     v
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚        building          β”‚ <── agents code + review
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
                     v
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚    awaiting_feedback     β”‚ <── PR created, user reviews
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚ @feedback
                     v
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚        iterating         β”‚ <── agents apply feedback
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
                     v
              awaiting_feedback ─── (loops until satisfied)
                     β”‚
                     β”‚ /stop
                     v
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚         stopped          β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Quick Start

Prerequisites

You need at least one coding CLI installed:

CLIInstall
Claude Codenpm install -g @anthropic-ai/claude-code
Codex CLInpm install -g @openai/codex
OpenCodego install github.com/opencode-ai/opencode@latest

Plus: git, gh (GitHub CLI, authenticated), and Node.js v18+.

1. Install

npm install -g sweteam

2. Initialize

sweteam init

Auto-discovers your installed CLIs and generates ~/.sweteam/config.toml.

3. Create a session

sweteam create myrepo
# Or from the interactive REPL:
sweteam
sweteam> /create myrepo

4. Plan interactively

myrepo> Add dark theme with system preference detection and a Ctrl+T toggle

β–Ά Planner ─ s_a1b2c3d4: Add dark theme
────────────────────────────────────────
β”‚ I'll break this down into 6 tasks:
β”‚ task-001: Add ThemeConfig and color definitions
β”‚ task-002: Implement system preference detection
β”‚ task-003: Create dark theme preset
β”‚ ...
β”‚ Type @build when you're ready.

myrepo> @build

5. Watch it build

sweteam dispatches tasks to coding agents, runs reviews, and creates a PR — all autonomously.

6. Give feedback

myrepo> @feedback The dark theme colors are too muted. Make the accent brighter (#00BFFF).

Agents pick up your feedback, iterate, and push updates to the same PR.

Commands

Top-level commands

CommandDescription
sweteamLaunch interactive REPL
sweteam initAuto-discover CLIs and generate config
sweteam create [repo]Create a new session
sweteam listList all sessions
sweteam enter <id>Re-enter an existing session
sweteam show <id>Show detailed session status
sweteam stop <id>Stop a session
sweteam delete <id>Delete a session

In-session commands

CommandDescription
@buildFinalize plan and start autonomous coding
@statusShow task progress dashboard
@planRe-display the current plan
@feedback <text>Give feedback on completed work (triggers new iteration)
@diffShow cumulative diff
@prShow the PR link
@tasksList all tasks with statuses and review info
@stopStop this session
@helpShow available commands

REPL commands

CommandDescription
/create [repo]Start a new session
/listSee all sessions
/enter <id>Resume a session
/show <id>Inspect a session
/stop <id>Stop a session
/delete <id>Delete a session
/initRe-run CLI discovery
/helpShow help
/exitQuit

CLI flags

sweteam --coder codex          # Override coder agent
sweteam --reviewer claude-code # Override reviewer agent
sweteam --parallel 5           # Override max parallel tasks
sweteam --config ./custom.toml # Use custom config file

Architecture

sweteam is built with TypeScript and uses a layered architecture with pluggable agent adapters.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                       sweteam CLI                        β”‚
β”‚                                                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ Session  β”‚  β”‚   Planner    β”‚  β”‚  Orchestrator      β”‚  β”‚
β”‚  β”‚ Manager  β”‚  β”‚  (chat mode) β”‚  β”‚  (autonomous)      β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚          Agent Adapter Layer                       β”‚  β”‚
β”‚  β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚
β”‚  β”‚ β”‚ Claude Codeβ”‚ β”‚ Codex CLIβ”‚ β”‚ OpenCode / Custom  β”‚ β”‚  β”‚
β”‚  β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  SQLite + Drizzle    β”‚  β”‚  git + gh CLI (native)   β”‚  β”‚
β”‚  β”‚  (session store)     β”‚  β”‚  (branches, PRs, commits)β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Tech Stack

ComponentChoice
LanguageTypeScript (ESM, Node.js 18+)
ORMDrizzle
DatabaseSQLite via better-sqlite3
CLI frameworkCommander.js
Terminal UICustom (chalk, raw-mode prompt)
Gitgit + gh CLI (child process)
IDsnanoid
ConfigTOML
TestsVitest

Project Structure

src/
β”œβ”€β”€ index.ts                 # CLI entry point (Commander.js)
β”œβ”€β”€ repl/                    # Interactive REPL loop
β”œβ”€β”€ session/                 # Session manager, state machine, agent log
β”œβ”€β”€ planner/                 # Planner agent and plan parser
β”œβ”€β”€ orchestrator/            # Task runner, reviewer, build/feedback handlers
β”œβ”€β”€ adapters/                # Agent adapters (claude-code, codex, opencode, custom)
β”œβ”€β”€ commands/                # CLI subcommands (create, list, enter, etc.)
β”œβ”€β”€ config/                  # Config loader and GitHub auth
β”œβ”€β”€ git/                     # Git and GitHub CLI wrappers
β”œβ”€β”€ ui/                      # Terminal UI (banner, prompt, agent panel, markdown)
β”œβ”€β”€ db/                      # SQLite schema and client (Drizzle ORM)
└── __tests__/               # Test suite

Data Storage

~/.sweteam/
β”œβ”€β”€ sweteam.db          # SQLite database (sessions, tasks, messages)
β”œβ”€β”€ config.toml         # Global configuration
β”œβ”€β”€ logs/               # Agent output logs (for live attach)
β”‚   └── s_a1b2c3d4.jsonl
└── repos/              # Cloned repositories
    └── YourName--myrepo/

Configuration

Config lives at ~/.sweteam/config.toml. Generated by sweteam init.

[roles]
planner = "claude-code"       # Which CLI generates the plan
coder = "claude-code"         # Which CLI writes code
reviewer = "claude-code"      # Which CLI reviews code

[execution]
max_parallel = 3              # Concurrent coding agents
max_review_cycles = 3         # Review/fix loops before escalating
branch_prefix = "sw/"         # Prefix for all branches

[git]
commit_style = "conventional" # conventional | simple
squash_on_merge = true

[agents.claude-code]
command = "claude"
args = ["-p"]

[agents.codex]
command = "codex"
args = ["-q"]

[agents.opencode]
command = "opencode"
args = ["--non-interactive"]

Custom Agents

Any CLI that accepts a prompt on stdin and writes output to stdout can be used as an agent:

[agents.my-agent]
command = "my-coding-tool"
args = ["--mode", "autonomous"]
prompt_via = "stdin"          # stdin | arg | file
output_from = "stdout"        # stdout | file

# Then reference it in your roles:
[roles]
coder = "my-agent"

Development

From source

git clone https://github.com/SiluPanda/sweteam.git
cd sweteam
npm install

# Run in dev mode (no build step)
npm run dev

# Run with subcommands
npm run dev -- create myrepo

# Run tests
npm test

# Build
npm run build

# Link globally for testing
npm link

Contributing

Contributions are welcome. Please open an issue first to discuss what you'd like to change.

# Fork and clone
git clone https://github.com/your-name/sweteam.git
cd sweteam
npm install

# Create a branch
git checkout -b feat/my-feature

# Make changes, run tests
npm test

# Submit a PR