Skip to content
Development
Command

/team

Team management - run several tasks at once, one visible LETS session per task on any launcher

From plugin
lets-workflow
1726 skills15 agents26 commands
> /plugin marketplace add restarter/lets-workflow
> /plugin install lets@lets-workflow

Command definition

team.md
description: Team management - run several tasks at once, one visible LETS session per task on any launcher
argument-hint: "[run|spawn|dismiss|roster|status|stop|create|disband] [--tasks A,B,C] [--backend orca|sessions] [--launch-mode default|auto|all-in] [--auto] [--all-in] [<callsign>] [--area <a>] [--lead-name <n>]"

Team

Run several independent tasks at once: each task gets its own worktree and its own visible LETS session (a worker), bound to this session as its orchestrator. The worker's own human presses every gate in the worker's terminal; this session coordinates through the orc skill and never decides for a worker.

**This is for parallel implementation of independent tasks.** For analysis (review, opinion, plan) - use their dedicated commands.

> **IMPORTANT:** If the spec below invokes any deferred tool (e.g. `AskUserQuestion`), you MUST load and call it as specified. Never skip the call, never substitute a default answer of your own — the tool invocation is part of the contract. This is critical.

Step 1: Determine Subcommand

**If argument provided** (e.g., `/lets:team run`), parse it:

  • `run` -> go to Run (pass remaining flags like `--tasks A,B,C` to Step R2; `--launch-mode <m>` / `--auto` / `--all-in` set the workers' launch mode, Step R4.5)
  • `spawn <role> [name]` / `spawn --roster` -> go to Spawn
  • `dismiss <name>` / `dismiss --all` -> go to Dismiss
  • `roster` -> go to Roster
  • `status` -> go to Status
  • `stop` -> go to Stop
  • `create [<callsign>] --area <a>` -> go to Create (carry `--orca` / `--cmux` / `--tmux`, `--launch-mode <m>` / `--auto` / `--all-in` and `--lead-name <n>` with it)
  • `disband <callsign>` -> go to Disband
  • `members [roles=<r,...>]` / `members restore [lean]` -> go to Step M6 (internal: member-run `op=route` calls `members roles=`, `/lets:start` calls `members restore`; not offered in the picker below)

**If no argument**, use **AskUserQuestion**:

AskUserQuestion(
  questions=[{
    question: "What do you want to do with the team?",
    header: "Team",
    options: [
      { label: "Run", description: "Open one worker session per task, bound to this session" },
      { label: "Roster", description: "Show the standing team's members and who is live" },
      { label: "Status", description: "Show the roster, each worker's state and tracker status" },
      { label: "Stop", description: "Ask every worker to end its session; worktrees stay" }
    ],
    multiSelect: false
  }]
)

---

Run

Select tasks, register this session as their orchestrator, open one worker session per task, record the run.

Step R1: Guards

# Guard 1: not in worktree
GIT_DIR=$(git rev-parse --git-dir 2>/dev/null)
# If GIT_DIR contains "worktrees/" -> stop: "Run a team from the main checkout, not a worktree."
# Guard 2: clean working directory
git status --short
# If dirty -> warn: "Uncommitted changes detected. Commit them before running a team."

**Guard 3: backend and launcher.** The only backend is `sessions`: one visible session per task. Orca is an addon inside it, not a separate backend.

  • `--backend agents` -> **Refused:** "`--backend agents` is gone - the harness no longer provides TeamCreate / TaskCreate and ignores the Agent tool's team and mode parameters. `/lets:team run` opens one session per task instead." Stop. Never a fallback.
  • `--backend orca` -> requires `{LETS_LAUNCHER}` = `orca` AND `lets orca status --json` reporting `status.running=true`. Either missing -> **Refused:** "`--backend orca` needs LETS_LAUNCHER=orca and a running Orca app ({the missing one})." Stop - no fallback to another launcher.
  • `--backend sessions` -> the sessions backend without the Orca addon (the way to launch workers in a non-default launch mode when `{LETS_LAUNCHER}` = `orca`): the launcher resolves as below, except that `orca` takes C3.5's chain at once - `cmux` when `uname -s` is `Darwin` and `command -v cmux` succeeds, else `terminal`.
  • Any other `--backend` value -> **Refused**, naming the value. Stop.
  • No `--backend` -> resolve the launcher the way `commands/worktree.md` Step C3.5 does (`{LETS_LAUNCHER}`: `terminal` | `cmux` | `tmux` | `orca`; an unrecognized value -> `terminal` with one line naming it). `orca` -> `lets orca status --json`: `running=true` -> the Orca addon (`## Run (backend orca)`); otherwise C3.5's chain - `cmux` when `uname -s` is `Darwin` and `command -v cmux` succeeds, else `terminal` - with one line naming the reason.

**Guard 4: orchestrator (before any launch).** Every worker is bound to this session, so this session is a recorded orchestrator - its own registry name in the merge-branch task-state - before the first worker starts:

LETS_PROJECT_ROOT=$(git rev-parse --show-toplevel)
lets peers orchestrator --session "$CLAUDE_CODE_SESSION_ID" --cwd "$LETS_PROJECT_ROOT" --json
  • a non-null `self_record` (already recorded, e.g. by `/lets:start --main`) -> reuse it; `<lead>` = `self_record.name`.
  • `self_record` null -> record this session's own name:
LETS_PROJECT_ROOT=$(git rev-parse --show-toplevel)
lets worktree task-state set --self-orchestrator --json

written -> re-run `lets peers orchestrator` above; `self_record` must now be non-null; `<lead>` = `self_record.name`.

  • Any failure - no `lets` binary, `error.kind=orchestrator_needs_name` (this session has no name), another failed write, or `self_record` still null -> **Refused:** "This session cannot be the team's orchestrator ({reason}) - name this session with /rename <name>, or run from /lets:start --main." Stop.
  • **Standing** - with `<lead>` set, read `self_record.standing` from the last `lets peers orchestrator` envelope (the same question as `/lets:start --main`). `{LETS_GATES}` is not `strict` (missing reads as `standard`) -> one line `Gate level {LETS_GATES}: sessions talk without per-message confirmation`, and no question (the recorded grant governs `strict` only). `{LETS_GATES}` is `strict` -> `on` / `off` (a
Read more
@restarter
Ships withlets-workflow

A development workflow plugin for Claude Code Stop babysitting your AI. Start shipping with it.

1725 skills15 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
17
Star history of restarter/lets-workflow on GitHub, a chart by star-history.com

Other commands on lets-workflow.

backlog

backlog

Command

Backlog review and cleanup - multi-agent backlog review, quick no-agent pulse (--fast), or interactive triage cleanup

end

end

Command

End a work session - a settlement pass that reconciles uncommitted / unpushed work + session context into git, the tracker, and a…

execute

execute

Command

Execute implementation plan from /lets:plan - inline in native plan mode, or delegated to named implementer subagents you review…

More commands from other plugins.

build
Auto-invoked

build

Command

Implement tasks incrementally — build, test, verify, commit. Add "auto" to run the whole plan in one approved pass.

@addyosmani@addyosmaniInstall Command