Skip to content

Slash Commands Reference

Comprehensive reference for every /command registered in the agents-fleet REPL. Authoritative source: src/commands/registry.ts at HEAD (v0.36.3). Last reconciled against source: every command below cites src/commands/<file>.ts:<line>.

At v0.36.3 the registry ships 68 built-in commands plus 7 bundled auto-discovered workflow commands (/init, /research, /code-review, /bug-autopilot, /code-review-autopilot, /github-issue-worker-autopilot, /fixer-loop). Additional project/user workflow commands may be synthesized at startup — see Workflow-driven commands.

This document covers what each command does, how to invoke it, and what it actually executes in the current build. For deeper feature mechanics, follow the cross-links:


Quick index

CommandCategoryWhat it does
/helpUtilitiesList every registered command with aliases
/clearUtilitiesClear the terminal screen (visual only)
/exit (/quit, /q)Sessions & diagnosticsGraceful shutdown: extract → synthesize → save → exit
/versionUtilitiesPrint agents-fleet version
/planPlanningToggle plan mode
/sessionsSessions & diagnosticsInteractive picker over saved sessions
/historySessions & diagnosticsPaginated conversation history
/scroll (/more, /less)Sessions & diagnosticsOpen the transcript in more
/compactSessions & diagnosticsAsk coordinator to summarise context
/resumeSessions & diagnosticsResume by session id (placeholder — use --resume)
/nameSessions & diagnosticsGet or set a label for this session
/doctor (/diag)Sessions & diagnosticsEnvironment diagnostics
/diagnoseSessions & diagnosticsLive runtime diagnostics (coordinator, queues, watchdog)
/statsSessions & diagnosticsSession statistics summary
/workersWorkers & tasksList workers with status + activity
/stopWorkers & tasksStop a worker by id
/sendWorkers & tasksSend a message to a worker
/broadcastWorkers & tasksSend a message to all team members
/fleet-log (/log, /activity)Workers & tasksTail fleet activity log
/pause-dispatch (/pause)Workers & tasksHalt auto task dispatch
/resume-dispatch (/unpause)Workers & tasksResume auto task dispatch
/tasksWorkers & tasksTask DAG + readiness
/teamWorkers & tasksList teams or delegate create/delete/members
/topologyWorkers & taskshub / mesh / silent messaging mode
/viewWorkers & tasksSwitch chip-strip view (Ink only)
/skill (/sk)Crews & skillsCreate or list skills
/skillsCrews & skillsShow v2 library (roles + skills + workflows)
/skills-migrateCrews & skillsConvert v1 skill/crew files to v2
/crewCrews & skillsActivate / create / generate / rollback / mcp / export / import
/crewsCrews & skillsRender v2 crews overview
/init (/investigate)PlanningAdversarial codebase investigation → .fleet/context/
/brainstorm (/brain, /bs)PlanningAdversarial pre-feature brainstorming (3 inquisitors grill you)
/feature (/feat, /epic)PlanningWorkflow-driven feature pipeline
/doPlanningresearch → plan+DoD+tasks → execute (3 phases)
/fast-do (/quick)PlanningSkip planning, up to 3 workers, verify, done
/new-project (/kickoff, /project)Planning7-phase new-project kickoff
/start (/go, /run)PlanningLoop-execute the active plan
/loop-target (/auto, /execute, /loop)PlanningRecurring loop, optionally goal-driven
/loopsPlanningList / stop active loops
/compete (/race, /bakeoff)PlanningParallel impl competition in git worktrees
/dod (/definition-of-done)PlanningShow/verify/mark Definition of Done
/research (/investigate-topic, /deep-dive)PlanningWorkflow-driven adversarial research
/code-review (/review, /cr)PlanningWorkflow-driven multi-agent code review
/fleet-intel (/intel)IntelligenceCross-session intel insights from SQLite
/learn (/intelligence)IntelligenceLearnings, steering, evolution, dashboard
/model (/m)Models & configShow or switch model
/modelsModels & configInteractive model picker
/effortModels & configShow or set reasoning effort
/configModels & configShow or update persisted config
/mcpModels & configManage MCP server entries
/tokens (/usage, /ctx)Models & configToken + context window stats
/costModels & configBrief token cost summary
/diffGit & utilitiesShow git diff
/commitGit & utilitiesStage + commit (delegates to coordinator)
/copyGit & utilitiesCopy last assistant message to clipboard
/worktree (/wt)Git & utilitiesManage git worktrees
/docs (/doc)UtilitiesBrowse and read the shipped fleet docs in chat
/restartUtilitiesRelaunch agents-fleet in a new window with the same flags (Windows-only v1)
/stall-historySessions & diagnosticsRecent coordinator stall + recovery events from the intel DB
/experiment (/exp)IntelligenceDefine, run, and report A/B experiments over skills/roles/crews
/wfWorkflowsWorkflow observability + scaffolding (list runs, drilldown, scaffold, reload)
/context-tier (/context-window)Models & configView or set coordinator/worker context-window caps
/context-status (/init-status)Project contextShow project context status (files from /init)
/context-scopes (/init-scopes)Project contextList .fleet/context/ scopes
/context-load (/init-load)Project contextLoad a context scope into the conversation
/bot-set-tokenTelegramPersist a Telegram bot token to ~/.fleet/telegram.json
/bot-clear-tokenTelegramRemove the persisted Telegram bot token
/init (/investigate)Workflow-drivenAdversarial codebase investigation → .fleet/context/
/research (/investigate-topic, /deep-dive)Workflow-drivenAdversarial deep research
/code-review (/review, /cr)Workflow-drivenMulti-agent code review
/bug-autopilot (/bugfix-autopilot)Workflow-drivenEnd-to-end bug-fix autopilot (reproduce → fix → review → PR)
/code-review-autopilot (/cr-auto, /review-loop)Workflow-drivenIterative review→triage→fix→validate autopilot
/github-issue-worker-autopilotWorkflow-drivenGitHub-issue worker autopilot (sub-coordinator bridge)
/fixer-loopWorkflow-drivenIterative fix loop over an existing plan

/loop is not a separate command — it is an alias of /loop-target. The dormant createLoopCommand in src/commands/utilCommand.ts:66 is not wired into the registry.


Conventions

How to invoke

  • Type /<name> (case-sensitive) at the REPL prompt. Aliases are accepted exactly the same as the canonical name.
  • Anything not starting with / is forwarded to the coordinator as a prompt.
  • A bare / or / is rejected by classifyInput (src/commands/registry.ts:153) as malformed-command and surfaces an error instead of being silently sent to the LLM.

Subcommand syntax

  • Subcommands and flags are space-separated tokens (/feature --new "Add JWT").
  • The first token after the command is usually the subcommand (/learn evolve, /dod verify).
  • Free-form text following the subcommand is treated as the remainder argument (/fleet-intel remember <note>).
  • Quoting ("…") is treated as plain characters — every command splits on whitespace and re-joins the trailing tokens. Quotes are not stripped before tokenisation, but the resulting argument string still works for most commands because the joiner re-collapses spaces.

Reading the syntax notation

  • <required> — you must supply this token.
  • [optional] — may be omitted.
  • a | b | c — pick one.
  • --flag — boolean flag (presence enables it).
  • --flag <value> — flag with an argument.

Commands available under --no-coordinator

The --no-coordinator startup flag spawns the REPL without a coordinator session. Only commands with type: 'local' (in SlashCommand.type) are safe in that mode — they read or mutate local state only and never call coordinator.sendPrompt / sendAndWait:

/help, /clear, /exit, /version, /sessions, /history, /scroll, /resume, /name, /doctor, /diagnose, /stats, /fleet-log, /skill, /skills, /skills-migrate, /crew, /crews, /model, /models, /effort, /config, /mcp, /tokens, /cost, /diff, /copy, /worktree, /view, /fleet-intel, /learn.

type: 'fleet' commands (e.g. /workers, /feature, /start, /tasks, /team, /topology, /code-review, /research, /init, /dod, /compete, /do, /fast-do, /loop-target, /loops, /new-project) require the fleet manager and/or coordinator. type: 'prompt' commands (/compact, /plan, /commit, /fast-do) compose a prompt and hand it to the coordinator via shouldQuery: true.

Commands that require --unattended under --provider claude

Goal-driven loops bypass restricted permissions in the Claude SDK code path for full-trust agent types (coder, general-purpose, custom). To prevent surprise:

  • /loop-target <interval> <goal> — when <goal> is non-empty AND provider === 'claude', the command refuses to start unless --unattended is present (src/commands/projectKickoff.ts:449).
  • /loop is an alias of /loop-target, so the same rule applies.

Task-driven loops (no goal) and all loops under --provider copilot are unaffected. SEC-2 (v0.19.0) tightened restricted agent types so they no longer bypass permissions even under Claude — but the loop guard remains because full-trust types still do.


Categories

Commands are grouped by purpose. Each command appears in exactly one section.


Planning & Execution

/brainstorm — pre-feature adversarial brainstorming

Category: Planning & Execution Syntax: /brainstorm "<topic>" [--rounds N] [--agents 0|1|2|3] [--resume <slug>]Aliases: brain, bsType: fleetSource: src/commands/brainstormCommand.ts:847

Pre-feature adversarial brainstorming. Spawns 3 explorer-class "inquisitor" workers (UX / technical / edge-cases angles) in parallel that grill you with sharp questions until you've surfaced unknown assumptions. Produces two artifacts (00-brainstorming.md narrative + 00-brainstorming.context.md machine-readable) that /feature --from-brainstorm <slug> can consume.

Flags:

FlagTypeDescriptionDefault
--rounds Ninteger (1..10)How many rounds of grilling before the auto-summarize gate2
--agents Ninteger (0..3)How many inquisitors to spawn in round 1. Drop order if N < 3: edge-cases first, then technical; ux is always kept. --agents 0 = single-coordinator mode (no inquisitor spawn) — useful for cost-sensitive runs and for A/B comparison against the multi-agent default3
--resume <slug>stringContinue a prior brainstorm by slug

--unattended is refused (FR-11). /brainstorm is interactive by design; use the two-step /brainstorm/feature --from-brainstorm flow for the unattended path.

How it works:

  1. Round 1: spawns 3 (or --agents N) inquisitor explorers in parallel via the coordinator.
  2. Harvest: their JSON partial_result payloads are read by the JS layer via a MessageBus tap; deduped (Jaccard ≥ 0.6), prioritized, capped at ≤8 questions.
  3. Grill: each question asked one at a time via the coordinator's askUser (interactive dialog).
  4. Rounds 2+: coordinator-only follow-up questions based on the prior Q/A transcript. Prior user answers are wrapped with wrapUntrusted() before re-feed (FR-23 — prompt-injection defense).
  5. Auto-degrade: if all inquisitors return 0 parseable questions in round 1 (FR-25), the run does NOT abort — it drops to coordinator-only grilling with a yellow warning and dumps raw bodies to .plans/<slug>/.brainstorm-debug.json for inspection.
  6. Termination: after --rounds N rounds, the user is asked "summarize or keep grilling?". The loop exits on "summarize".
  7. Synthesis: the coordinator composes both artifacts as JSON; the JS layer writes them atomically with mode: 0o644 (NFR-20) plus a .brainstorm-complete sentinel file (FR-24).

Artifacts produced (under .plans/<slug>/):

  • 00-brainstorming.md — human-readable narrative (transcript, top assumptions, carry-forward hints).
  • 00-brainstorming.context.md — YAML-frontmatter machine-readable companion (qa_pairs, assumptions, open_questions, carry_forward_hints, inquisitor_status). Schema version 1 (FR-18 errors on newer schemas).
  • .brainstorm-complete — sentinel; absence means the run was interrupted mid-flight.

Examples:

> /brainstorm "build a Slack notification system for /feature releases"
> /brainstorm "auth refactor" --rounds 3
> /brainstorm "topic" --agents 0           # single-coordinator (no inquisitor spawn)
> /brainstorm --resume i-want-to-abc123    # continue prior brainstorm

Common pitfalls:

  • --unattended is rejected — use /brainstorm then /feature --from-brainstorm <slug> --unattended for the unattended path.
  • Headless harnesses whose MessageBus stub omits .subscribe() are rejected up-front (DEC-11).

Related: /feature (especially --from-brainstorm and --deep-brainstorm), /init, /research


/feature — workflow-driven feature pipeline

Category: Planning & Execution Syntax: /feature [--new | --resume <slug> | --from-brainstorm <slug> | --deep-brainstorm] <description>Aliases: feat, epicType: fleetSource: src/commands/featureCommand.ts:248

Runs the resolved feature workflow as a sequence of phases (default: brainstorm → requirements → research → design → validation → DoD → tasks). Each phase writes an artifact under .plans/<slug>/ and pauses for ask_user. After phase 7 ends, run /start to begin fleet execution.

Since v0.25.0, Phase 1 treats the description you pass as authoritative: it deepens and clarifies that description instead of asking you to restate what the feature should do from scratch.

Workflow-driven (T-148): the bundled default is feature-pipeline. An active crew may set workflows.feature: <name> in its frontmatter to swap pipelines without touching the handler. The resolved workflow name is printed in the banner and a yellow ⚠ warns when a crew override is active.

Flags:

FlagTypeDescriptionDefault
--newbooleanAlways create a fresh plan dir, bumping -2, -3, … if the slug existsoff
--resume <slug>stringResume an existing .plans/<slug>/; errors if missing. Description optional
--from-brainstorm <slug>stringSeed Phase 1 from a prior standalone /brainstorm run (see below)
--deep-brainstormbooleanRun /brainstorm inline as Phase 1 of /feature (see below)off

--new, --resume, --from-brainstorm, and --deep-brainstorm are mutually exclusive with each other (any pair is rejected at parse time). The default (no flag) auto-resumes when the slugified description already exists, else creates fresh.

Examples:

> /feature "Add JWT authentication to the API"
🎯 Feature Planning: Add JWT authentication to the API
  Plan: .plans/add-jwt-authentication-to-the-api/
  Workflow: feature-pipeline (7 stages, default)

> /feature --new "Refactor database layer"   # force fresh draft
> /feature --resume add-jwt-authentication   # pick up where you left off

Pre-feature brainstorming flags

/feature integrates with /brainstorm via two flags:

  • --from-brainstorm <slug>: seed Phase 1 from a prior standalone /brainstorm run. Reads the brainstorm's .context.md, writes a Phase-1 pointer stub at <feature slug>/01-brainstorming.md, and prepends a digest of key Q/A pairs to the Phase 2 (Requirements) prompt. Schema-version-too-new errors are surfaced (FR-18). Use after a standalone brainstorm when you want to defer the feature-spec work.

  • --deep-brainstorm: runs /brainstorm inline as Phase 1 of /feature. Writes 01-brainstorming.md + 01-brainstorming.context.md directly in the feature's plan dir (NOT a sibling slug — DEC-12). Default --agents 3, --rounds 2. Refuses --unattended since brainstorming requires interactive grilling (use the two-step /brainstorm/feature --from-brainstorm path for unattended).

These flags are mutually exclusive with each other and with --resume.

Examples:

# Two-step: standalone brainstorm, then feature
> /brainstorm "Slack notify on /feature release"
> /feature slack-notify --from-brainstorm i-want-to-abc123

# One-step: deep brainstorm inline
> /feature slack-notify --deep-brainstorm

Per-stage retries: when a stage declares artifact: <file> and the file is missing after the run, the handler retries once with an explicit create instruction (src/commands/featureCommand.ts:229). Stages with workersRequired: N retry once with an explicit spawn_worker instruction (:207). The tasks stage additionally retries once if task_create was never called (:413).

Common pitfalls:

  • Without prior /init, the pipeline runs but the prompt context is thinner — phase 3 spawns workers blind. Run /init first for best results.
  • A typo in workflows.feature on the active crew surfaces a loud ✗ Workflow not found error rather than falling back silently — this is intentional.

Related: /init, /start, /dod, /tasks, /research


/do — 3-phase task pipeline

Category: Planning & Execution Syntax: /do <task>Type: fleetSource: src/commands/doCommand.ts:171

Streamlined pipeline for well-understood changes on existing codebases: research → plan+DoD+tasks → execute+verify. Skips brainstorming and requirements. Creates .plans/<slug>/ artifacts (01-research.md, 06-definition-of-done.md, 07-task-breakdown.md, execution-log.md).

Examples:

> /do "Add JWT authentication"
> /do "Fix the failing tests in auth module"

Common pitfalls:

  • Phase 3 executes immediately — the coordinator is told NOT to do the implementation itself but to delegate via spawn_worker. Watch /workers to confirm.
  • For trivial fixes use /fast-do; for full feature planning use /feature.

Related: /feature, /fast-do, /dod, /start


/fast-do — skip planning, just execute

Category: Planning & Execution Syntax: /fast-do <instruction>Aliases: quickType: fleet (composes a shouldQuery prompt) Source: src/commands/fastDoCommand.ts:4

Sends an explicit "FAST-DO mode" override to the coordinator: no adversarial research, no DoD, no task_create, no plan-critic. Up to 3 parallel workers, verify, report in 1-3 sentences. Best for small well-understood tasks.

Examples:

> /fast-do add a .gitignore for node projects
> /fast-do fix the typo in README.md
> /quick rename the utils module to helpers

Common pitfalls:

  • No task tracking, no DoD — anything you care about reviewing later should use /do or /feature instead.

Related: /do, /feature


/new-project — guided new-project kickoff

Category: Planning & Execution Syntax: /new-project [project-name]Aliases: kickoff, projectType: fleetSource: src/commands/projectKickoff.ts:337

7 interactive phases for building from scratch: brainstorming → requirements → research → adversarial design → validation → DoD → task breakdown. Each phase pauses for ask_user and writes a numbered .md artifact under .plans/<slug>/. After phase 7, run /start.

The difference from /feature is /new-project does not assume an existing codebase — phase 3 researches the problem space rather than the current code.

Examples:

> /new-project "CLI task manager"
> /new-project           # uses "New Project" as the name

Related: /feature, /start, /tasks, /dod


/start — execute the active plan

Category: Planning & Execution Syntax: /start [--plan <slug>] [interval]Aliases: go, runType: fleetSource: src/commands/projectKickoff.ts:936

Begins fleet execution of the active plan's tasks. Loops on a configurable interval (default 30m); each cycle dispatches ready tasks to workers and progressively verifies DoD. The loop auto-stops when all tasks are complete.

Flags:

FlagDescription
--plan <slug>Activate the named plan before starting the loop
<interval>Override loop interval (30s, 2m, 5m, 1h)

If no active plan and multiple plans exist in .plans/, an interactive SelectMenu picker appears. If no tasks have been registered for the chosen plan, /start reads <slug>/07-task-breakdown.md (or the legacy 06- filename) and asks the coordinator to load them via task_create before starting the loop.

Examples:

> /start                       # default 30m cycles on active plan
> /start 2m                    # 2-minute cycles
> /start --plan my-feature 5m  # activate plan + 5m cycles

Common pitfalls:

  • If /start reports No tasks found for plan "X", the /feature Phase 7 likely did not call task_create. Re-run /feature or load manually.
  • The loop fires on coordinator.idle (T-33). interval is a minimum delay, not a strict period — cycle N+1 cannot start while cycle N is in flight.

Related: /loop-target, /loops, /tasks, /dod


/loop-target — recurring loop, optionally goal-driven

Category: Planning & Execution Syntax: /loop-target <interval> [goal] [--unattended]Aliases: auto, execute, loopType: fleetSource: src/commands/projectKickoff.ts:404

Two modes depending on whether [goal] is supplied:

  • Task-driven (no goal) — re-prompts the coordinator with current task status each cycle. Auto-stops when all tasks complete. Equivalent to /start with a custom interval but no plan-loading helper.
  • Goal-driven (free-form goal) — runs even with zero tasks. Cycle prompt asks the coordinator to plan toward the goal each iteration (call task_create, spawn_worker, or signal_loop_complete(reason) to exit).

Flags:

FlagDescription
--unattendedRequired for goal-driven loops under --provider claude. Acknowledges full unrestricted access.

Examples:

> /loop-target 2m
> /loop-target 5m finish implementing the auth module
> /loop-target 30m "polish docs until v0.18.x release" --unattended

Key behaviours:

  • Interval supports 30s, 1m, 5m, 1h. It is a minimum delay (ticks fire on coordinator.idle after intervalMs elapses).
  • A 60-min SessionSendQueue hang detector (v0.27.29; was 10 min in v0.20.1, originally 5 min) and a 60-s warn-only CoordinatorWatchdog operate underneath. See /diagnose.
  • Loops are not persisted across --resume — restart manually after resume; a chalk.dim warning is printed on resume.
  • Inaction warning: a goal-driven cycle that ends without spawn_worker or task_create prints ⚠ Cycle #N ended without spawning a worker or creating a task. (v0.18.6).
  • Auto-stop after AGENTS_FLEET_LOOP_MAX_NOOPS (default 3) consecutive no-op cycles (:553).

Common pitfalls:

  • Forgetting --unattended under Claude produces a red error — read the suggested command and re-run.
  • An infinite loop on a vague goal (e.g. "improve the docs") may run forever; use /loops stop-all or Ctrl+C to break.

Related: /start, /loops


/loops — list and manage active loops

Category: Planning & Execution Syntax: /loops [stop <id> | stop-all]Type: fleetSource: src/commands/loopsCommand.ts:13

Lists every active loop with id, interval, dispatched-cycles / total-ticks, elapsed, and expiry. Goal-driven loops display the user-supplied goal string (truncated to 80 chars). Stop selectively or all.

Subcommands:

FormEffect
/loopsList all active loops
/loops stop <id>Stop one loop by id
/loops stop-allStop every active loop

Examples:

> /loops
  🔄 Active Loops
  ● cycle — every 120s | 4 dispatched / 5 ticks | running 612s | expires in never
    goal: finish implementing the auth module

> /loops stop-all
✅ Stopped 1 loop(s).

The dispatched / ticks split (L1) surfaces when the coordinator is wedged: if dispatchedCycles stops climbing while raw scheduler ticks keep firing, the gap is your first signal something is wrong. Confirm with /diagnose.

Related: /loop-target, /start, /diagnose


/compete — adversarial implementation competition

Category: Planning & Execution Syntax: /compete <description> | /compete status | judge | pick <name> | cleanupAliases: race, bakeoffType: fleetSource: src/commands/competeCommand.ts:35

Creates 3 git worktrees and spawns coder workers in parallel: pragmatic (simplest), clean (best architecture), alternative (unconventional). Each implements the same feature in its own worktree, then /compete judge spawns reviewer workers that score on correctness, quality, testing, performance, simplicity, and integration (each 1-5). /compete pick <name> merges the winner and cleans up.

Subcommands:

FormEffect
/compete <description>Start a new competition (rejects if one already exists)
/compete statusShow competition worktrees
/compete judgeSpawn reviewers, build comparison table
/compete pick <name>Merge a winner, clean up
/compete cleanupRemove all competition worktrees

Examples:

> /compete "Implement the caching layer"
> /compete status
> /compete judge
> /compete pick pragmatic

Common pitfalls:

  • Requires git. Returns Not a git repository. /compete requires git. outside a repo.
  • If a previous competition is still active, you must /compete cleanup before starting another.
  • pick runs a real merge; conflicts surface as an error and the worktrees are left in place for manual resolution.

Related: /worktree


/dod — Definition of Done

Category: Planning & Execution Syntax: /dod [plan-name] [verify | pass <id> | fail <id> | pass-all | reset | plans]Aliases: definition-of-doneType: fleetSource: src/commands/dodCommand.ts:185

Shows and manages DoD items for the current (or specified) plan. Items track measurable completion criteria with a VERIFY: method (a command to run, a file to check, etc.). Status persists in dod-status.json alongside the DoD file.

Subcommands:

FormEffect
/dodShow DoD for active plan; if multiple plans, interactive picker
/dod plansList plans that have a DoD file
/dod verifyRun automated checks; non-runnable items delegated to coordinator
/dod pass <id>Mark item passed (e.g. /dod pass 3 or /dod pass DoD-3)
/dod fail <id>Mark item failed
/dod pass-allMark every item passed
/dod resetClear all verification status
/dod <plan-name> <sub>Operate on a specific plan slug

Examples:

> /dod                     # status view
> /dod verify              # run all `VERIFY:` commands in the allowlist
> /dod pass DoD-3 "manually confirmed"
> /dod my-feature verify   # scope to a specific plan

verify behaviour: only commands in VerifierNode.isAllowed() actually run; others are routed to the coordinator via dod_update. Each run stores exit code, duration, and the (truncated) stderr in dod-status.json.

Common pitfalls:

  • A VERIFY: line with a command not in the allowlist surfaces a yellow warning in the status view (command "X" not in allowed list) and is silently skipped by verify.
  • pass <id> accepts both 3 and DoD-3 forms.

Related: /feature, /do, /start


/init — adversarial codebase investigation

Category: Planning & Execution Syntax: /init [refresh | load <scope> | scopes | status]Aliases: investigateType: fleetSource: src/commands/initCommand.ts:40

Spawns explorer agents in parallel to investigate the codebase, then a reviewer-tier critic to challenge their findings, then synthesises results into .fleet/context/. Refuses to re-run if context already exists (use refresh).

Workflow-driven (T-146): the bundled default is init-investigation. Crews may set workflows.init: <name> to override. Workflow resolution runs after the subcommand router, so status / scopes / load cannot fail with a workflow error.

As of v0.22.0 /init honours its resolved workflow end-to-end: the runner walks stages[] via the shared runWorkflowStages in sequential mode (src/commands/initCommand.ts:159-179). Crew overrides change which agents /init actually spawns — previously the override only changed the banner. See workflows reference §Generic stage runner.

Subcommands:

FormEffect
/initRun full investigation if no context yet; otherwise hint to use refresh
/init refreshRe-run, overwriting existing context
/context-status (was /init status)List context files. Alias: /init-status (deprecated, removal next major)
/context-scopes (was /init scopes)List scopes defined in scopes.json. Alias: /init-scopes (deprecated, removal next major)
/context-load <scope> (was /init load <scope>)Load a specific scope into the current conversation (uses shouldQuery). Alias: /init-load (deprecated, removal next major)

Examples:

> /init                    # first-time investigation
> /init refresh            # re-run after major changes
> /context-status          # what context exists today?
> /context-load backend    # load backend-specific context mid-session

Generated artefacts:

  • FLEET.md — project summary
  • profile.json — language / framework / testRunner / packageManager / moduleSystem / conventions / riskAreas
  • scopes.json — flat { scopeName: [filename, …] } map (or wrapped variants — ContextStore.loadScopes() normalises both shapes; v0.19.0)
  • Domain-specific analysis files (architecture.md, api-surface.md, build-and-test.md, etc.)

Common pitfalls:

  • /context-load <bad-scope> returns No context files found for scope "X" if the scope is unknown. Use /context-scopes to list.
  • Re-running /init refresh does not delete domain files — workers overwrite them. Manually delete .fleet/context/ if you want a true clean slate.

Related: /feature, /research, /code-review


/research — adversarial deep research

Category: Planning & Execution Syntax: /research <topic or question>Aliases: investigate-topic, deep-diveType: fleetSource: src/commands/researchCommand.ts:35

Spawns multiple researcher workers in parallel + a critic. The roster is taken from the resolved workflow's stages: stages with parallel: true contribute researchers; sequential stages contribute the critic. The coordinator synthesises a structured report (summary, verified findings, open questions, assumptions, alternatives, risks, recommendation).

Workflow-driven (T-148): bundled default adversarial-research. Crews override via workflows.research.

Examples:

> /research "best approach to implement auth with JWT vs sessions"
> /research "performance implications of switching from REST to GraphQL"

Output is a coordinator response, not a saved file. Copy the report or /copy it after.

Common pitfalls:

  • Every researcher is told to flag ⚠️ ASSUMPTION: lines; the critic verifies them against actual source. If the topic has no code in your repo, the critic returns thin results.
  • Default roster (adversarial-research workflow): primary-researcher, counter-researcher, context-researcher, edge-case-researcher, plus research-critic.

Related: /init, /feature


/code-review — multi-agent code review

Category: Planning & Execution Syntax: /code-review [path, glob, or git range]Aliases: review, crType: fleetSource: src/commands/codeReview.ts:38

Spawns the reviewer roster declared in the resolved workflow (the first stage with a non-empty agents: list — typically the review stage with parallel: true). Each reviewer focuses on a different aspect; the coordinator synthesises a unified report saved to CODE_REVIEW.md.

Workflow-driven (T-148): bundled default code-review. Crews override via workflows.code-review.

Examples:

> /code-review                    # review entire project
> /code-review src/auth           # review a directory
> /cr src/**/*.ts                 # glob (passed verbatim into the prompt)
> /code-review HEAD~1..HEAD       # review files changed between two refs
> /code-review main..feature-branch # review files changed on a branch

Git range parsing uses git rev-parse; if parsing fails, /code-review falls back to path mode, so path-like inputs such as foo..bar.ts still work.

Output: CODE_REVIEW.md at the project root, with Executive Summary (A-F health grade), Critical Issues, Recommendations, Detailed Findings (by reviewer). Since v0.25.0, the CLI waits for reviewer agents to finish synthesising CODE_REVIEW.md before exiting (previously could exit early on long reviews).

Common pitfalls:

  • A reviewer name in the workflow that does not resolve to a registered skill falls through to a generic Review the code for issues. prompt — surfacing as a thin contribution rather than an error.
  • Repeated /code-review runs overwrite CODE_REVIEW.md. Move the previous report aside first if you want history.

Related: /init, /research, /dod


/plan — toggle plan mode

Category: Planning & Execution Syntax: /plan [topic]Type: promptSource: src/commands/utilCommand.ts:51

Toggles the coordinator's plan mode. In plan mode the coordinator outlines an approach before executing. With [topic] it enters plan mode focused on that topic; without args it toggles based on current state.

Examples:

> /plan
> /plan auth refactoring

Workers & Tasks

/workers — list workers

Category: Workers & Tasks Syntax: /workersType: fleetSource: src/commands/fleetCommand.ts:4

Shows every worker (active, completed, failed, killed) with its id, agent type, status icon (🔄 spawning, 🟢 running, 💤 idle, ✅ completed, ❌ failed, 🛑 killed), duration, cwd, and last activity description.

Examples:

> /workers
Workers:

  🟢 agent-3f9a (coder) — running [42s]
     📂 .worktrees/worker-agent-3f9a
     editing src/auth/jwt.ts
  ✅ agent-1b22 (explorer) — completed [18s]

Related: /stop, /send, /view


/stop — stop a worker

Category: Workers & Tasks Syntax: /stop <worker-id>Type: fleetSource: src/commands/fleetCommand.ts:46

Terminates a worker by id (full id, not prefix). The worker's task is marked failed; new task assignment continues normally.

Examples:

> /stop agent-abc123
Worker agent-abc123 stopped.

Related: /workers, /pause-dispatch


/send — message a worker

Category: Workers & Tasks Syntax: /send <agent-id> <message>Type: fleetSource: src/commands/fleetCommand.ts:243

Sends a text message to a specific worker via the message bus. Useful for additional context or course-correction mid-task.

5-s ack timeout (T-77): the underlying send_message coordinator tool returns a queued status if the recipient does not ack within 5 s, keeping the coordinator responsive when a worker is busy.

Examples:

> /send agent-abc123 focus on the auth module first
> /send agent-abc123 skip the migration tests

Related: /broadcast, /workers


/broadcast — message all team members

Category: Workers & Tasks Syntax: /broadcast <message>Type: fleetSource: src/commands/fleetCommand.ts:265

Sends a message from coordinator to every team member via MessageBus.broadcast. Reports Broadcast sent to N members. Use for project-wide constraints or announcements.

Examples:

> /broadcast use TypeScript strict mode for all new files
> /broadcast stop working on the deprecated API

/fleet-log — tail fleet activity log

Category: Workers & Tasks Syntax: /fleet-log [lines]Aliases: log, activityType: localSource: src/commands/fleetCommand.ts:67

Shows the last N entries (default 30) from the fleet activity log file, plus the absolute log path and a tail -f hint for external tailing.

Examples:

> /fleet-log         # last 30 entries
> /fleet-log 100     # last 100 entries

/pause-dispatch — halt auto task dispatch

Category: Workers & Tasks Syntax: /pause-dispatchAliases: pauseType: fleetSource: src/commands/fleetCommand.ts:284

Sets state.dispatchPaused = true. New tasks will not be auto-assigned to workers. Currently running workers continue. Idempotent (warns when already paused). Emits dispatch.paused event.

When paused with active workers, output lists them so you know what is still in flight.

Related: /resume-dispatch, /workers


/resume-dispatch — resume auto task dispatch

Category: Workers & Tasks Syntax: /resume-dispatchAliases: unpauseType: fleetSource: src/commands/fleetCommand.ts:315

Sets state.dispatchPaused = false and runs catch-up: every ready task is enumerated and the coordinator is prompted to assign workers. Reports the catch-up count. Emits dispatch.resumed event.


/tasks — task DAG + readiness

Category: Workers & Tasks Syntax: /tasksType: fleetSource: src/commands/taskCommand.ts:4

Shows every task with status (⏳ pending, 🔄 in_progress, ✅ completed, 🚫 blocked, 🗑️ deleted), owner, blocked by deps, blocks deps, plus a tail line listing ready-to-start task ids.

Tasks are created by /feature, /do, /new-project, or directly by the coordinator (task_create).

Related: /start, /dod


/team — team management

Category: Workers & Tasks Syntax: /team [list | create <name> | delete <name> | members <name>]Type: fleetSource: src/commands/teamCommand.ts:4

/team and /team list print every team with member status icons. Other subcommands (create, delete, members) are delegated to the coordinator via shouldQuery — the coordinator decides how to assemble or modify the team. In practice humans rarely drive teams directly; use /broadcast or /crew instead and let the coordinator manage team membership.

Examples:

> /team                  # list teams
> /team create backend   # delegated to coordinator

Related: /workers, /topology


/topology — messaging mode

Category: Workers & Tasks Syntax: /topology [hub | mesh | silent]Type: fleetSource: src/commands/topologyCommand.ts:13

Controls how agents may communicate:

TopologyBehaviour
hubWorkers ↔ coordinator only (default)
meshWorkers may send directly to other workers
silentNo inter-agent messaging at all

Without arguments, opens an interactive picker. Setting via CLI overrides any crew-defined default — a dim suffix (overrides crew "X" default) is appended when an override is active.

Examples:

> /topology           # picker
> /topology mesh
> /topology hub

/view — switch chip-strip view (Ink only)

Category: Workers & Tasks Syntax: /view [name | agent-id | coordinator | focus]Type: localSource: src/commands/viewCommand.ts:94

Switches the active chip-strip view, lists views, or enters strip-focus mode. Available only in the Ink REPL — emits a friendly warning in non-Ink test harnesses where the chip strip is not initialised.

FormEffect
/viewList views; the active one is marked
/view <name>Switch by agent id, display name, or unique prefix (case-insensitive)
/view coordinator (alias coord)Return to coordinator transcript
/view focusEnter strip-focus mode (same as Ctrl+G)

Examples:

> /view                 # list
> /view coordinator
> /view worker-3        # exact display name
> /view ag              # unique prefix → first matching worker
> /view focus

Keybindings (chip strip):

KeyModeEffect
Ctrl+] / Ctrl+[normalCycle next/prev chip (canonical — reliable across terminals)
Ctrl+Tab / Ctrl+Shift+TabnormalCycle (opportunistic — many terminals intercept)
Esc (input empty)normalReturn to coordinator
Ctrl+GnormalEnter strip-focus mode
/ strip-focusMove chip cursor
Enterstrip-focusApply cursor as active view
Escstrip-focusExit focus without applying
d / Deletestrip-focusDismiss the cursored chip (completed/failed/killed only)
Shift+Dstrip-focusDismiss all terminal chips at once

Common pitfalls:

  • Worker views are read-only in v1 (v0.16.0). Typing in a worker view and pressing Enter surfaces a quiet hint; the input is never sent anywhere. Steering arrives in v2.
  • Shift+D and CapsLock+d are indistinguishable (Ink synthesises key.shift=true for any uppercase letter). Use Delete for single-dismiss if Caps Lock is on.

Related: /workers, worker-views.md


Crews & Skills

/skill — create or list skills

Category: Crews & Skills Syntax: /skill create <name> [--type <agent_type>] [--desc <description>] | /skill listAliases: skType: localSource: src/commands/skillCommand.ts:12

SubcommandEffect
/skill create <name>Generate a .fleet/skills/<name>.md template (project tier)
/skill list (default)Show every skill — bundled, user, and project tiers

Flags (for create):

FlagDefaultDescription
--type <agentType>general-purposeAgent type — explorer, coder, reviewer, tester, custom, general-purpose, researcher
--desc <description>Custom <name> skillFree-form description

Examples:

> /skill list
> /skill create api-tester --type reviewer --desc "Tests API endpoints"
> /sk list

Tier precedence: project > user > bundled. Override a bundled skill by writing a same-named file to .fleet/skills/ (project) or ~/.fleet/skills/ (user).

Related: /skills, /crew, docs/crews-reference.md


/skills — show v2 library

Category: Crews & Skills Syntax: /skills [migrate [--dry-run]]Type: localSource: src/commands/skillCommand.ts:125

Lists the v2 skills library in three sections: Roles (agent role definitions, *.role.md), Atomic Skills (composable units, *.skill.md), Workflows (multi-stage orchestration, *.workflow.md). Each entry shows source tier and metadata.

The migrate subcommand is sugar for /skills-migrate.

Examples:

> /skills                    # show library
> /skills migrate            # convert v1 files in cwd
> /skills migrate --dry-run  # preview without writing

Related: /skill, /skills-migrate, /crews


/skills-migrate — v1 → v2 conversion

Category: Crews & Skills Syntax: /skills-migrate [--dry-run]Type: localSource: src/commands/skillsMigrate.ts:290

Walks {bundled,user,project}/{skills,crews}/, converting v1 .md files to v2: skills become *.role.md (or *.skill.md), crews become *.crew.md. Idempotent — skips files whose v2 target already exists. Leaves originals in place for git mv.

--dry-run prints what would be written without touching disk.


/crew — crews swiss-army

Category: Crews & Skills Syntax: /crew [name | activate [name] | stop | list | create <name> | generate <name> [--prompt <text> | -- <steering>] | rollback <crew> [skill] [version] | mcp <crew> [add|remove <server>] | export <name> [output-path] | import <path> [project|user]]Type: localSource: src/commands/crewCommand.ts:195

The single entry point for crew management. Without arguments, opens an interactive picker showing every crew, marking the active one and offering a ⏹ Deactivate crew shortcut.

Subcommands:

FormEffect
/crewInteractive picker (activate / deactivate)
/crew <name>Activate the named crew
/crew activate [name]Direct activation; picker if no name and multiple crews; auto-selects when exactly one crew exists
/crew stopDeactivate the active crew
/crew listSame as /crews
/crew create <name>Write a starter template to .fleet/crews/<name>.md
/crew generate <name> [--prompt <text>]Synthesize a project-specific crew via the coordinator using optional steering text; /crew generate <name> -- <steering> is also supported (writes role / skill / crew bundle to project tier)
/crew rollback <crew> [skill] [version]Show rollback points for a crew, or roll back an evolved skill to a prior version
/crew mcp <crew>Show MCP servers configured for a crew
/crew mcp <crew> add <server>Add an MCP server to a crew's mcpServers
/crew mcp <crew> remove <server>Remove an MCP server from a crew
/crew export <name> [output-path]Export a file-based crew (with its roles/skills/workflows) to a .crew-bundle.zip
/crew import <path> [project|user]Import a v2 crew bundle into the project (default) or user tier

Examples:

> /crew list
> /crew code-review-crew
> /crew create my-team
> /crew generate frontend-team --prompt "React + Vite + Tailwind, no SSR"
> /crew generate api-hardening -- focus on REST endpoints under src/api
> /crew rollback research-crew primary-researcher v1
> /crew mcp code-review-crew add github
> /crew export code-review-crew ./code-review.crew-bundle.zip
> /crew import ./shared-team.crew-bundle.zip user

Common pitfalls:

  • /crew create only generates a v1 template; for v2 authoring, edit by hand or /crew generate.
  • /crew generate refuses if a bundled crew of the same name already exists (project/user crews are user-owned and overridable).
  • /crew export requires a file-based crew — bundled crews cannot be exported (use /crew create first to fork them).
  • Bundle imports validate via importCrewBundleV2; malformed bundles surface a structured Import failed: … error.

Related: /crews, /skills, /topology, docs/crews-reference.md


/crews — render crews overview

Category: Crews & Skills Syntax: /crewsType: localSource: src/commands/crewCommand.ts:642

Renders the v2 crews overview (workflow, topology, coordinator role, per-agent roster) plus a compact view of any remaining v1 crews. The active crew is marked with ● active.

Examples:

> /crews
🛠 Crews

── v2 Crews (3) ──
  code-review-crew ● active [bundled]

Related: /crew


Project Context & Research

/init, /research, and /code-review are all workflow-driven and grouped above under Planning & Execution because they emit plan/report artifacts. They share the crew-override mechanism documented in Workflow-driven commands & crew overrides below.


Intelligence & Learning

/fleet-intel — cross-session intel

Category: Intelligence & Learning Syntax: /fleet-intel [summary | agents | failures | tokens | stats | search <query> | skills | remember <note> | suggest | apply <id> | dismiss <id> | insights]Aliases: intelType: localSource: src/commands/intelCommand.ts:16

Reads the IntelDatabase SQLite store accumulated across past sessions (events, agent_runs, suggestions, search index, skill stats). Useful for spotting recurring failures, expensive agent types, and skill-usage patterns.

Subcommands:

FormEffect
/fleet-intel or /fleet-intel summarySessions tracked, success rates, top errors
/fleet-intel agentsPer-agent-type usage, fail rate, mean duration
/fleet-intel failuresTop errors with counts
/fleet-intel tokensToken usage per agent type
/fleet-intel statsTop sessions by tokens, usage trends
/fleet-intel search <query>Free-text search across event history (LIKE-escape sanitised — SEC-NEW-4)
/fleet-intel skillsSkill usage frequency + recency
/fleet-intel remember <note>Append a note to .fleet/context/memory.md
/fleet-intel suggestGenerate suggestions from observed patterns
/fleet-intel apply <id>Apply a suggestion (8-char prefix accepted)
/fleet-intel dismiss <id>Dismiss a suggestion (8-char prefix accepted)
/fleet-intel insightsAliases: insights, insight, report — generate insight report (FR-37)

Examples:

> /fleet-intel agents
> /intel search "auth module"
> /intel remember "JWT tokens expire after 24h in this project"
> /intel suggest
> /intel apply 7c3f9a2b

Related: /learn, /stats


/learn — learnings, steering, evolution

Category: Intelligence & Learning Syntax: /learn [overview | steering | extract | synthesize | synthesis | report | evolve | dashboard | shadows | eval <skill> | promote <skill> | reject <skill> | apply <id> | dismiss <id> | clear-memory]Aliases: intelligenceType: localSource: src/commands/learnCommand.ts:17

The learning + evolution surface. Extracts steering insights from conversations, generates evolved skill prompts, manages shadow proposals (A/B tests for skills), and provides a dashboard.

Subcommands:

FormEffect
/learn or /learn overviewSummary of learnings, steering insights, suggestions
/learn steeringShow extracted steering insights by category
/learn extractExtract steering insights from current conversation; persists to .fleet/context/memory.md
/learn synthesize (aliases synthesis, report)Synthesize learnings across sessions into a structured report
/learn synthesize --allInclude every session, not just the current one
/learn evolveGenerate evolved-skill proposals from outcome data
/learn dashboardVisual dashboard of learning metrics
/learn shadowsList active shadow proposals (skill A/B tests)
/learn eval <skill>Run evaluation on a shadow skill
/learn promote <skill>Promote a winning shadow — v2 shadow files go to project tier; legacy DB shadow patches go to user tier
/learn reject <skill>Reject a shadow proposal
/learn apply <id>Apply a suggestion (prefix match)
/learn dismiss <id>Dismiss a suggestion
/learn clear-memoryClear .fleet/context/memory.md

Pipeline: extract → evolve → shadows → eval → promote/reject. Steering and evolution can be toggled via /config set steering.enabled <bool> and /config set evolution.enabled <bool>.

Examples:

> /learn                      # overview
> /learn extract              # mine insights from this conversation
> /learn synthesize           # report for this session
> /learn synthesize --all     # report across every session
> /learn evolve               # propose skill improvements
> /learn shadows              # who is A/B testing right now?
> /learn promote api-tester
> /learn dashboard            # visual metrics

Common pitfalls:

  • Before v0.21.1, /learn synthesize would print "no agent runs in this session" even when workers ran — caused by a session-id mismatch between IntelCollector and the coordinator session. Fixed in v0.21.1 via IntelCollector.setSessionId().
  • extract returns Steering extraction is disabled unless steering.enabled is true in ~/.fleet/config.json (default: true).

Related: /fleet-intel, /config


/stats — session statistics

Category: Intelligence & Learning Syntax: /statsType: localSource: src/commands/fleetCommand.ts:111

Compact dashboard: session duration, current model + effort, worker counts (completed / active / total), task progress, total tool calls, token totals (input/output, context %), and a one-line intel summary (sessions tracked + success rate).

For granular token data use /tokens; for cross-session intel use /fleet-intel.


Sessions & Diagnostics

/sessions — interactive session picker

Category: Sessions & Diagnostics Syntax: /sessionsType: localSource: src/commands/sessionCommand.ts:6

Opens a searchable picker over the 30 most recent saved sessions (provider, model, task count, msg count, timestamp). Selecting a session prints the agents-fleet --resume <id> command — the actual resume is performed from the CLI startup line, not in-REPL.

Related: /resume, /history


/history — paginated history

Category: Sessions & Diagnostics Syntax: /history [page]Type: localSource: src/commands/sessionCommand.ts:48

Renders the current session's transcript in pages of 5 messages. User prompts, assistant responses, and tool calls are tagged with distinctive markers. Assistant text is rendered through the markdown renderer.

Examples:

> /history        # page 1
> /history 3      # page 3

For long conversations, /scroll is more comfortable.


/scroll — open transcript in a pager

Category: Sessions & Diagnostics Syntax: /scrollAliases: more, lessType: localSource: src/commands/sessionCommand.ts:113

Writes the transcript to a temp file and opens it in more (works on Windows out of the box; on Unix systems more is also present in the base install). Press q to exit.


/compact — summarise context

Category: Sessions & Diagnostics Syntax: /compactType: promptSource: src/commands/sessionCommand.ts:160

Asks the coordinator to summarise the conversation into a compact context, preserving decisions, task status, and key findings. Run when /tokens shows the context bar trending into yellow/red.


/resume — resume a session by id

Category: Sessions & Diagnostics Syntax: /resume <session-id>Type: localSource: src/commands/sessionCommand.ts:174

Placeholder in-REPL. The actual resume happens at startup: agents-fleet --resume <id>. Use /sessions to copy the id and re-launch.


/name — session label

Category: Sessions & Diagnostics Syntax: /name [label]Type: localSource: src/commands/nameCommand.ts:4

Without arguments, prints the current session name (or a dim hint if unset). With [label], sets the session name — persists into session meta so /sessions shows it.

Examples:

> /name
  Session name: refactor-auth-2026-05

> /name JWT refactor
  Session name set: JWT refactor

/doctor — environment diagnostics

Category: Sessions & Diagnostics Syntax: /doctorAliases: diagType: localSource: src/commands/fleetCommand.ts:177

Static environment checks: Node.js, platform, GitHub CLI presence and auth, current model + effort, session id, worker capacity, memory (RSS + heap), token totals. Each check shows ✓ (pass), ✗ (fail), or ⚠ (warning).

For runtime state (queue depth, in-flight sends, watchdog) use /diagnose.


/diagnose — live runtime diagnostics

Category: Sessions & Diagnostics Syntax: /diagnose [--json]Type: localSource: src/commands/diagnoseCommand.ts:317

Reports what is happening RIGHT NOW inside the running process. Use when the REPL appears stuck or unresponsive. Five sections:

SectionReports
CoordinatorisProcessing, isDrainingQueue, queueLength, currentPlan, sessionId, timeSinceLastActivity (chalk-coloured)
Session-send queue (SessionSendQueue)inflightCount, lastResolvedAt, lastResolvedDuration
Message busmailboxes with backlog + top-5 by depth (per-agent message queues)
SDK eventslastSdkActivityAt ISO + ago; recent event type count (not yet tracked)
Watchdogenabled, threshold ms, time-to-warn, last-triggered timestamp

Examples:

> /diagnose                  # human-readable (chalk-coloured)
> /diagnose --json           # machine-parseable JSON, PII-redacted

--json shape: top-level keys coordinator, sendQueue, messageBus, sdkEvents, watchdog. All free-text fields are passed through PiiRedactor before serialisation, so the output is safe to paste into bug reports.

Watchdog and hang detector:

  • CoordinatorWatchdog (warn-only): emits coordinator.error if isProcessing=true and no SDK activity for thresholdMs (default 60 s). Killswitch: AGENTS_FLEET_WATCHDOG_DISABLED=1.
  • SessionSendQueue hang detector: throws FleetError('TIMEOUT') after hangThresholdMs (default 60 min as of v0.27.29; was 10 min in v0.20.1, originally 5 min). On timeout withRecovery triggers onSessionRecovery, which surfaces a 🔄 Session recovered chip (v0.20.0). Override via AGENTS_FLEET_HANG_THRESHOLD_MS or constructor option.

When to use: stuck REPL → /diagnose. Coordinator section + watchdog section tell you whether the session is actually wedged (no SDK activity ≥ threshold while isProcessing=true) or just slow (recent SDK events, deep mailboxes).

Common pitfalls:

  • /diagnose is read-only — it never aborts, resets, or otherwise mutates state.
  • lastSdkActivityAt colours: ≤ 30s green, > 30s yellow, ≥ threshold red.

Related: /doctor, /stats


/exit — graceful shutdown

Category: Sessions & Diagnostics Syntax: /exitAliases: quit, qType: localSource: src/commands/utilCommand.ts:20

Exits the CLI through the full graceful-shutdown pipeline (v0.17.0+):

  1. Steering extraction — mine the just-finished session for steering insights
  2. Insight synthesis — distill learnings (capped at 20 s)
  3. Session save — flush the transcript and session state to disk
  4. Exitprocess.exit(0)

This pipeline is wired through the onShutdown dependency-injection seam on CommandContext. /exit, /quit, /q, SIGINT (Ctrl+C), and Ctrl+D (v0.17.1 follow-up via handleRequestExit) all run the same pipeline.

In-band status messages (Extracting learnings from N message(s)…, Found N steering insight(s), Insight synthesis complete, Session saved: …) render through the Ink transcript when shutdown is initiated from inside the REPL, so feedback is consistent regardless of exit path.

Fallback: when onShutdown is unavailable (e.g. test harnesses), the command falls back to a bare process.exit(0) without the pipeline.


Models, Tokens & Config

/model — show or switch model

Category: Models, Tokens & Config Syntax: /model [model-name]Aliases: mType: localSource: src/commands/modelCommand.ts:7

Without arguments, prints current model + effort. With a name, calls coordinator.setModel and persists the choice to ~/.fleet/config.json.

Examples:

> /model
  Current model: gpt-5.4
  Effort: high

> /model claude-sonnet-4-5-20250929
  ✓ Model switched to claude-sonnet-4-5-20250929

Claude 1M-context (v0.18.6): append -1m to a Sonnet model id to enable the Anthropic context-1m-2025-08-07 beta header — claude-sonnet-4-5-20250929-1m.

Related: /models, /effort, /tokens


/models — interactive model picker

Category: Models, Tokens & Config Syntax: /modelsType: localSource: src/commands/modelCommand.ts:34

Opens a picker over coordinator.listModels() results. Each entry shows context size (Nk ctx), supported reasoning efforts, and billing multiplier (Nx cost when ≠1). The current model is marked. Selection persists.


/effort — reasoning effort

Category: Models, Tokens & Config Syntax: /effort [low | medium | high | xhigh]Type: localSource: src/commands/systemCommand.ts:120

Without args, opens a picker. With a level, calls coordinator.setReasoningEffort and persists.

LevelDescription
lowFaster, less thorough
mediumBalanced speed and quality
highThorough reasoning (default)
xhighMaximum reasoning depth

Note: a model that does not advertise the requested effort will reject the call (e.g. some Claude models don't support reasoning effort tiers — surfaces as Model 'X' does not support reasoning effort).


/config — show or update configuration

Category: Models, Tokens & Config Syntax: /config [set <key> <value>]Type: localSource: src/commands/systemCommand.ts:7

Without arguments, dumps the full runtime + persisted configuration: session (model, maxWorkers, verbose, cwd, activeTeam, planMode), defaults from ~/.fleet/config.json, worktrees, steering, evolution.

Valid keys for set:

GroupKeys
Coremodel, reasoningEffort, maxWorkers, verbose
Worktreesworktrees.enabled, worktrees.directory, worktrees.symlinkNodeModules
Steeringsteering.enabled, steering.timeoutMs, steering.maxInsights, steering.maxMessages, steering.memoryThreshold
Evolutionevolution.enabled, evolution.autoEvolve, evolution.maxPromptTokens, evolution.minSampleSize, evolution.confidenceThreshold, evolution.rollbackAfterSessions

Type coercion: boolean keys parse "true"/"false", numeric keys parse via parseInt. Unknown keys are rejected with the full valid list.

Examples:

> /config
> /config set maxWorkers 8
> /config set worktrees.enabled true
> /config set steering.enabled true

Persistence: writes to ~/.fleet/config.json. Runtime session values may differ from persisted defaults (e.g. --model on the command line overrides the persisted default for this session only).


/mcp — manage MCP servers

Category: Models, Tokens & Config Syntax: /mcp list | add <name> <transport> <url-or-command> | remove <name> | statusType: localSource: src/commands/mcpCommand.ts:14

Manages MCP (Model Context Protocol) server entries in ~/.fleet/config.json. Transports: stdio, sse, streamable-http.

FormEffect
/mcp listShow configured servers (name, transport, endpoint)
/mcp add <name> <transport> <url-or-cmd>Add a server — for stdio, the first token is the command and the rest become args
/mcp remove <name>Remove a server
/mcp statusShow which servers are active in the current session

Examples:

> /mcp list
> /mcp add my-tools stdio npx my-mcp-server
> /mcp add remote-tools sse http://localhost:3001/sse
> /mcp remove my-tools
> /mcp status

Common pitfalls:

  • Changes require a session restart to take effect — the message bus and tool routing are bound at session-init time.
  • Project-level MCP discovery (.mcp.json, .cursor/mcp.json, .vscode/mcp.json, <cwd>/agency.toml) is opt-in as of SEC-1 (v0.19.0). Use --trust-project-mcp or AGENTS_FLEET_MCP_TRUST_PROJECT=1 to load them. User-level sources (~/.config/claude, ~/.cursor, ~/.agency) load unconditionally.

/tokens — token + context usage

Category: Models, Tokens & Config Syntax: /tokensAliases: usage, ctxType: localSource: src/commands/tokensCommand.ts:21

Detailed token usage and context window status. Visual progress bar for the context window (green < 70%, yellow 70-90%, red > 90%), session totals (input/output/total), per-model breakdown (in/out/cache-read/cache-write/calls), and per-agent breakdown sorted by total usage.

For the simpler workers-cost view, use /cost.


/cost — token cost summary

Category: Models, Tokens & Config Syntax: /costType: localSource: src/commands/systemCommand.ts:101

Three-line summary: total workers spawned, active workers, total tokens consumed across all workers. For detailed breakdowns use /tokens.


Git & Utilities

/diff — git diff

Category: Git & Utilities Syntax: /diffType: localSource: src/commands/gitCommand.ts:4

Runs git --no-pager diff and prints uncommitted changes (unstaged only — does not show git diff --staged). For a smarter commit workflow use /commit.


/commit — create a git commit

Category: Git & Utilities Syntax: /commit [message]Type: promptSource: src/commands/gitCommand.ts:24

Delegates to the coordinator:

  • With a messagegit add -A then commit with the supplied message.
  • Without a message — coordinator reviews git diff and generates a conventional-commit-style message.
> /commit "feat: add JWT authentication"
> /commit                                  # auto-generated message

/copy — copy last assistant message

Category: Git & Utilities Syntax: /copyType: localSource: src/commands/systemCommand.ts:164

Copies the last assistant message to the system clipboard. Platforms:

PlatformTool used
Windowsclip (built-in)
macOSpbcopy (built-in)
Linuxxclip -selection clipboard (install separately)

/worktree — git worktree management

Category: Git & Utilities Syntax: /worktree [list | cleanup [--all] | status]Aliases: wtType: localSource: src/commands/worktreeCommand.ts:5

Manages git worktrees used for worker isolation. Each worker can run in its own worktree to avoid conflicts when multiple agents modify files simultaneously.

SubcommandEffect
/worktree list (default)Show every worktree with name, branch, path
/worktree cleanupRemove worker-prefixed worktrees only
/worktree cleanup --allRemove all worktrees (including compete)
/worktree statusGit version, worker/compete counts, worktrees root

Examples:

> /wt list
> /wt status
> /worktree cleanup --all

Worktrees are created automatically by /compete and by fleet workers when worktrees.enabled is true (/config set worktrees.enabled true).

Related: /compete


/help — list available commands

Category: Git & Utilities Syntax: /helpType: localSource: src/commands/registry.ts:34

Prints every registered command with aliases and short descriptions, in registration order, plus the worker-view keybinding cheat sheet. Auto-discovered workflow commands carry a dim [workflow:<bundled|user|project>] suffix so they are visually distinct from hand-curated built-ins (src/commands/registry.ts:54-58).


/clear — clear the screen

Category: Git & Utilities Syntax: /clearAliases: clsType: localSource: src/commands/utilCommand.ts:6

Writes ANSI clear-screen + cursor-home. Conversation history and session state are unaffected — only the visual display.


/version — show version

Category: Git & Utilities Syntax: /versionType: localSource: src/commands/utilCommand.ts:40

Prints agents-fleet vX.Y.Z from src/version.ts.


Workflow-driven commands & crew overrides

Four commands consult the active crew at invocation time to decide which workflow to run:

CommandDefault workflowCrew override key
/featurefeature-pipelineworkflows.feature
/code-reviewcode-reviewworkflows.code-review
/initinit-investigationworkflows.init
/researchadversarial-researchworkflows.research

Resolution happens via resolveCommandWorkflow(registry, activator, commandName, bundledDefault) in src/skills/workflowResolver.ts:

  1. If a crew is active AND its workflows.<command> field points at a workflow that resolves → use that workflow.
  2. Otherwise → use the bundled default.
  3. A typo or missing referenced workflow surfaces as a loud error (✗ Workflow not found …), not a silent fallback — misconfigurations don't masquerade as defaults.

Every workflow-driven command prints the resolved workflow name in its banner:

Workflow: feature-pipeline (7 stages, default)

When a crew override is active, a yellow ⚠ warning is also printed:

Workflow: my-feature-pipeline (7 stages, via crew "my-team")
⚠ Active crew "my-team" overrides /feature with workflow "my-feature-pipeline" (default: "feature-pipeline").

For workflow authoring (YAML schema, stage fields, prompt files), see workflows reference. For crew authoring (workflows: map, agent roster, mcpServers), see crews reference.

Shared stage runner. All four workflow-driven commands now delegate stage iteration to runWorkflowStages (src/skills/workflowRunner.ts:194) — /feature runs in per-stage-prompt mode, /code-review in roster mode, and /research / /init in sequential mode. Each mode preserves its command's historical contract while sharing artifact-retry and workers_required-retry semantics. See workflows reference §Generic stage runner.

Auto-discovered slash commands. Any workflow declaring a command: field on its frontmatter synthesises a slash command via the same runner — drop a *.workflow.md with command: release-prep into ~/.fleet/workflows/ and /release-prep is invokable immediately, no TypeScript changes required. Synthesised commands appear in /help with a dim [workflow:<bundled|user|project>] suffix (src/commands/registry.ts:54-58) so operators can distinguish auto-generated commands from built-ins. Project-tier auto-discovery is opt-in via --trust-project-workflows, AGENTS_FLEET_TRUST_PROJECT_WORKFLOWS=1, or workflowDiscovery.trustProjectSources: true in ~/.fleet/config.json (mirrors SEC-1's MCP discovery posture). See workflows reference §Authoring auto-discovered commands.

Bundled auto-discovered commands (v0.36.3). The following ship in src/skills/bundled/workflows/ and are available in every fresh install:

CommandAliasesWorkflow filePurpose
/init/investigateinit-investigation.workflow.mdAdversarial codebase investigation → .fleet/context/.
/research/investigate-topic, /deep-diveadversarial-research.workflow.mdAdversarial deep research on a topic.
/code-review/review, /crcode-review.workflow.mdMulti-agent code review of a path or git range.
/bug-autopilot/bugfix-autopilotbug-autopilot.workflow.mdReproduce → fix → regression-test → review loop → PR → human approval → merge.
/code-review-autopilot/cr-auto, /review-loopcode-review-autopilot.workflow.mdIterative review → triage → fix → validate until convergence; optional --ship PR handoff. Sub-coord-routed (Phase 3c.2).
/github-issue-worker-autopilotgithub-issue-worker-autopilot.workflow.mdDrive a GitHub issue to completion via the in-process sub-coordinator bridge (Phase 3c.0).
/fixer-loopfixer-loop.workflow.mdIterative fix loop over an existing plan (Phase 3c.1).

The autopilots (/bug-autopilot, /code-review-autopilot, /github-issue-worker-autopilot, /fixer-loop) are long-running and route through the workflow-runner sub-coordinator bridge by default; pass --legacy-workflow-dispatch per call to use the legacy LLM-driven path. See workflows reference for stage details and the dispatch contract.

/init placement caveat: workflow resolution runs after /init's status/scopes/load subcommand router. Those subcommands are pure reads over .fleet/context/ and have nothing to do with the investigation workflow — they cannot fail with a workflow error even if a crew references a missing investigation workflow.


Appendix: command lifecycle

How a slash command flows from input to render. Useful for future contributors.

┌────────────────────┐
│ user types `/x …`  │
└────────┬───────────┘


┌──────────────────────────────────────┐
│ classifyInput(input)                 │  src/commands/registry.ts:153
│   → 'command' | 'malformed-command'  │
└────────┬─────────────────────────────┘


┌──────────────────────────────────────┐
│ parseSlashCommand(input)             │  src/commands/registry.ts:134
│   → { command, args }                │
└────────┬─────────────────────────────┘


┌──────────────────────────────────────┐
│ findCommand(name)                    │  src/commands/registry.ts:128
│   matches by .name or .aliases       │
└────────┬─────────────────────────────┘


┌──────────────────────────────────────┐
│ command.handler(args, context)       │  the per-command logic
│   returns CommandResult              │
└────────┬─────────────────────────────┘


┌────────────────────────────────────────────────────────────────────┐
│ CommandResult shape (src/types/commands.ts)                        │
│   { output?: string,                  → printed in transcript      │
│     shouldQuery?: boolean,            → if true, send prompt to    │
│     prompt?: string,                    coordinator (next step)    │
│     dialog?: (done) => ReactElement } → Ink dialog (e.g. picker)   │
└────────┬───────────────────────────────────────────────────────────┘


┌──────────────────────────────────────┐
│ REPL renders output OR sends prompt  │  Ink: InkRepl.tsx
│ OR mounts dialog                     │  Legacy: Repl.ts
└──────────────────────────────────────┘

Command types (SlashCommand.type):

  • 'local' — runs entirely client-side; never calls the coordinator (/help, /clear, /config, /skill, …).
  • 'fleet' — needs the fleet manager and/or coordinator; reads/writes fleet state (/workers, /feature, /start, /tasks, …).
  • 'prompt' — composes a prompt and returns shouldQuery: true for the REPL to forward to the coordinator (/compact, /plan, /commit, /fast-do).

Why findCommand matters for aliases: the registry stores commands once but exposes them under every name in aliases. /q, /quit, and /exit all resolve to the same SlashCommand object — no per-alias divergence is possible.

Adding a new command: write createXCommand() returning a SlashCommand, export it from src/commands/index.ts, then add it to the commands: SlashCommand[] array in registry.ts. Each command must have a unique name (case-sensitive) — overlapping aliases between commands are not enforced but would lead to surprising shadowing. Add tests alongside the source file (<name>Command.test.ts).