This page documents Taskplane command surfaces:
- pi session slash commands (
/orch*,/taskplane-settings) - CLI shell commands (
taskplane ...)
Slash commands are registered by Taskplane extensions when loaded in pi.
Universal entry point for Taskplane. When called without arguments, detects project state and activates the supervisor for guided interaction. When called with arguments, starts parallel batch execution.
Syntax
/orch # Detect state → supervisor routing
/orch <areas|paths|all> # Start batch execution directly
No-argument routing
When /orch is called without arguments, it detects the current project state and routes to the appropriate supervisor flow:
| Detected state | Condition | Supervisor action |
|---|---|---|
| Active batch | batch-state.json with non-terminal phase |
Shows status summary (supervisor already running) |
| Completed batch | Completed batch + orch branch exists | Offers retrospective and integration guidance |
| No config | No .pi/taskplane-config.json found |
Starts onboarding flow (project setup, task areas, git branching) |
| Pending tasks | Config exists, pending tasks found | Offers to plan and start a batch |
| No tasks | Config exists, no pending tasks | Helps create tasks from specs, GitHub Issues, or conversation |
States are evaluated in the order shown above (active batch and completed batch take priority over config checks).
Arguments (batch execution mode)
all— scan all configured task areas- one or more area names (e.g.
auth billing) - one or more filesystem paths (area dir or specific task prompt path)
Behavior (with arguments)
- Runs additive upgrade migrations (e.g., creating missing
.pi/agents/supervisor.mdfrom template). Migrations are tracked in.pi/taskplane.jsonand never overwrite existing files. Failures are non-fatal. - Runs orphan-session/state detection before starting
- Discovers tasks and dependencies
- Computes waves and lane assignments
- Creates an orch branch (
orch/<operator>-<batchId>) from the current branch — all batch work lands here, not on your working branch - Starts the engine asynchronously and returns control to the pi session immediately — the wave loop runs in the background while you continue interacting with the session
- Executes tasks in isolated worktrees
- Merges successful lane branches into the orch branch
- Engine emits structured lifecycle events to
.pi/supervisor/events.jsonlfor observability - On completion, shows integration guidance (or auto-integrates if
integrationis set toauto) - Can be used with a single task path when you want full orchestrator isolation for a single task
Runtime backend
/orch uses the Runtime V2 backend for orchestration. Workers, reviewers,
and merge agents are spawned as direct child processes (subprocess backend).
Onboarding flow (no config)
When /orch detects no Taskplane configuration, the supervisor walks the operator through first-time setup:
- Project assessment — analyzes repo structure, package files, and existing docs
- Task area design — proposes task areas based on project structure; operator refines
- Git branching — detects branch strategy and protection rules; recommends configuration
- Config generation — creates
.pi/taskplane-config.json, areaCONTEXT.mdfiles,.pi/agents/overrides, and.gitignoreentries - First task guidance — offers to create a starter task, pull from GitHub Issues, or run a smoke test
The onboarding adapts based on project maturity — a greenfield project gets full scaffolding guidance, while an established codebase gets a streamlined setup focused on task areas and config.
Supervisor activation
After starting the engine, /orch activates the supervisor agent in the same pi session. The supervisor:
- Monitors engine events (wave starts, task completions, merge results, failures)
- Provides proactive status notifications to the operator
- Handles failure recovery based on its autonomy level
- Responds to natural-language questions ("how's it going?", "what failed?")
- Logs all recovery actions to
.pi/supervisor/actions.jsonl
The supervisor persists until the batch completes, fails, is stopped, or is aborted. A lockfile at .pi/supervisor/lock.json prevents duplicate supervisors across sessions.
See also: /orch-takeover for session takeover, Supervisor settings for model and autonomy settings.
Orch branch model
/orch never modifies your working branch directly. Instead, it creates a dedicated orch branch where all task work is merged. When the batch completes, you integrate the results using /orch-integrate (or let auto-integration handle it). This keeps your working branch stable while tasks execute.
See also: /orch-integrate
Examples
/orch # Detect state, activate supervisor
/orch all # Start batch for all task areas
/orch auth billing # Start batch for specific areas
/orch taskplane-tasks/auth/tasks
/orch taskplane-tasks/auth/tasks/AUTH-001-login/PROMPT.md
Preview execution plan without running tasks.
Syntax
/orch-plan <areas|paths|all> [--refresh]
Options
--refresh— bypass dependency cache and force re-scan
Output includes
- preflight checks
- discovery results
- dependency graph
- wave plan and lane assignment estimate
Examples
/orch-plan all
/orch-plan auth billing
/orch-plan all --refresh
Show current batch progress summary.
Syntax
/orch-status
Output includes
- batch ID and phase
- current wave index / total waves
- succeeded, failed, skipped, blocked, total task counts
- elapsed time
- error count (if any)
Pause batch after current tasks finish.
Syntax
/orch-pause
Behavior
- Sets orchestrator pause signal
- Lane polling sees signal and stops scheduling further work
Common responses
- No active batch
- Batch already paused
Resume a paused or interrupted batch from persisted state.
Syntax
/orch-resume [--force]
Options
--force— allow resuming fromstoppedorfailedphases that are normally non-resumable. Runs pre-resume diagnostics before proceeding.
Behavior
- Loads
.pi/batch-state.json - Validates resumable phase (see eligibility matrix below)
- Reconciles
.DONEmarkers and live sessions - Starts the engine asynchronously and returns control immediately (same non-blocking model as
/orch) - Reactivates the supervisor agent in the session
- Reconnects/re-executes tasks as needed
- Continues from first incomplete wave
Resume eligibility
| Phase | Normal | --force |
|---|---|---|
paused |
✅ Eligible | ✅ Eligible |
executing |
✅ Eligible | ✅ Eligible |
merging |
✅ Eligible | ✅ Eligible |
stopped |
❌ Rejected | ✅ Eligible (after diagnostics) |
failed |
❌ Rejected | ✅ Eligible (after diagnostics) |
completed |
❌ Rejected | ❌ Rejected (always) |
Pre-resume diagnostics (--force only)
When --force is used on a stopped or failed batch, Taskplane runs pre-resume diagnostics before allowing execution to continue:
- Worktree health — verifies lane worktrees still exist on disk
- Branch consistency — confirms expected branches are present
- State coherence — validates batch state internal consistency; in workspace mode, also checks repo-level state
If diagnostics fail, the resume is blocked with an operator-facing explanation. Fix the reported issues and retry.
When diagnostics pass, the batch phase is reset to paused and resilience.resumeForced is recorded in state for audit purposes. Normal resume flow then proceeds.
Examples
/orch-resume # Resume from paused/executing/merging
/orch-resume --force # Force resume from stopped or failed
Common responses
- No batch state to resume
- State invalid or non-resumable phase
- Cannot resume while a batch is actively running
--forcediagnostics failed: worktree/branch/state issues detected
Abort current batch.
Syntax
/orch-abort [--hard]
Modes
- default (graceful): cooperative stop + cleanup
--hard: immediate session termination
Behavior
- Writes abort signal file:
.pi/orch-abort-signal - Attempts to terminate active lane/merge agent processes for the batch
- Cleans in-memory/persisted batch state
- Preserves worktrees/branches for inspection
Show dependency graph.
Syntax
/orch-deps <areas|paths|all> [--refresh] [--task <ID>]
Options
--refresh— bypass dependency cache--task <ID>— filter to one task (e.g.--task AUTH-014)
Examples
/orch-deps all
/orch-deps auth --refresh
/orch-deps all --task AUTH-014
List active orchestrator sessions.
Syntax
/orch-sessions
Behavior
- Lists sessions matching configured orchestrator session prefix (
sessionPrefix) - Useful for debugging/resume/cleanup in Runtime V2 subprocess mode
Force takeover of the supervisor from another pi session.
Syntax
/orch-takeover
Behavior
When a batch is running, exactly one pi session owns the supervisor role. If you open a new pi session and want to take over supervisor duties (e.g., the original session is unresponsive or you've switched terminals), use /orch-takeover.
The command checks the supervisor lockfile at .pi/supervisor/lock.json and handles four cases:
| Lockfile state | Action |
|---|---|
| No active batch | Informs you — run /orch first |
| No lockfile / corrupt / stale heartbeat | Activates supervisor normally (no takeover needed) |
| Live lock (PID alive, heartbeat recent) | Force takeover — writes a new lock; the previous session yields on its next heartbeat check |
| Already the active supervisor | No-op — informs you this session already owns it |
Rehydration
On takeover, the supervisor reads batch state, recent engine events, and the audit trail to reconstruct context. A summary is displayed so you know where the batch stands.
Yield mechanism
The previous supervisor's heartbeat timer (30-second interval) detects that the lockfile's sessionId no longer matches its own. It yields gracefully — clearing its supervisor state and notifying the operator in that session.
Common responses
✅ This session is already the active supervisor.No active batch to supervise.🔄 Previous supervisor (PID ...) process is dead. Activating supervisor.⚡ Forcing supervisor takeover from PID ...
Integrate a completed orch batch into your working branch.
After /orch finishes, all task work lives on an orch branch (orch/<operator>-<batchId>). This command brings that work into your working branch using one of three modes.
Syntax
/orch-integrate [<orch-branch>] [--merge] [--pr] [--force]
Arguments
<orch-branch>— (optional) name of the orch branch to integrate. Auto-detected from batch state if omitted. Required when batch state is unavailable or multiple orch branches exist.
Modes
| Flag | Mode | Description |
|---|---|---|
| (default) | Fast-forward | git merge --ff-only — cleanest history, fails if branches have diverged |
--merge |
Merge commit | git merge --no-edit — creates a merge commit, works when branches have diverged |
--pr |
Pull request | Pushes orch branch to origin and creates a PR via gh pr create |
Options
--force— skip the branch safety check (normally the command verifies you're on the same branch the batch was started from)
Branch safety check
By default, /orch-integrate verifies that your current branch matches the base branch recorded when the batch started. This prevents accidentally integrating into the wrong branch. Use --force to skip this check.
Resolution order
The command determines which orch branch to integrate using this priority:
- Persisted batch state (
.pi/batch-state.json) — preferred source, provides orch branch, base branch, and batch ID - Positional argument — overrides or supplements batch state
- Branch scan — if neither state nor argument is available, scans for
orch/*branches. Works automatically when exactly one exists; prompts for selection when multiple are found.
Cleanup
- In fast-forward and merge modes: on success, the local orch branch is deleted and batch state is cleaned up. Cleanup failures are non-fatal (shown as warnings).
- In PR mode: the orch branch is preserved (needed for the pull request). Batch state is not cleaned up.
Examples
/orch-integrate # Auto-detect branch, fast-forward
/orch-integrate --merge # Auto-detect branch, merge commit
/orch-integrate --pr # Auto-detect branch, create PR
/orch-integrate orch/op-abc123 # Specific branch, fast-forward
/orch-integrate orch/op-abc123 --pr # Specific branch, create PR
/orch-integrate --force # Skip branch safety check
Supervisor-managed integration
When the integration setting is supervised or auto, the supervisor automatically handles integration after the batch completes — you don't need to run /orch-integrate manually.
supervised— the supervisor builds an integration plan (mode, branches, protection status), presents it for your confirmation, then executes it.auto— the supervisor executes integration immediately without asking, pausing only if issues arise (conflicts, CI failures, branch protection).
Both modes detect branch protection via the GitHub API and default to PR mode when the target branch is protected. If fast-forward fails, the supervisor falls back to merge mode, then to PR mode. You can still run /orch-integrate manually at any time, regardless of the configured mode.
See Integration setting for configuration details.
Common responses
⏳ Batch ... is currently in "running" phase.— batch must complete before integration❌ Fast-forward failed — branches have diverged.— use--mergeor--prinstead⚠️ Batch was started from main, but you're on develop.— switch branches or use--forceℹ️ Batch ... used legacy merge mode— older batch that was already merged directly (no orch branch to integrate)❌ No completed batch found and no orch branches exist.— run/orchfirst
The key orchestrator commands are also registered as extension tools that the supervisor agent (and any agent in the session) can invoke programmatically:
| Tool | Equivalent Command | Parameters |
|---|---|---|
orch_start(target) |
/orch <target> |
target: string (required) — "all", task area name, directory path, or one or more PROMPT.md paths (space-separated) |
orch_status() |
/orch-status |
— |
orch_pause() |
/orch-pause |
— |
orch_resume(force?) |
/orch-resume [--force] |
force: boolean (optional) |
orch_abort(hard?) |
/orch-abort [--hard] |
hard: boolean (optional) |
orch_integrate(mode?, force?, branch?) |
/orch-integrate [opts] |
mode: "fast-forward"|"merge"|"pr", force: boolean, branch: string |
orch_retry_task(taskId) |
— | taskId: string (required) — retry a specific failed/stalled task |
orch_skip_task(taskId) |
— | taskId: string (required) — skip a task and unblock dependents |
orch_force_merge(waveIndex?, skipFailed?) |
— | waveIndex: number (optional, 0-based), skipFailed: boolean (optional) — force merge a wave with mixed results |
send_agent_message(to, content, type?) |
— | to: agent ID (required), content: string (max 4KB), type: "steer"|"query"|"abort"|"info" (default: "steer") |
read_agent_replies(from?) |
— | from: agent ID (optional — omit for all agents) — read outbox replies/escalations (non-consuming: shows pending + acked history) |
broadcast_message(content, type?) |
— | content: string (max 4KB), type: "steer"|"info"|"abort" (default: "info") — send to all agents (all-or-none: rejected if any recipient is rate-limited) |
read_agent_status(lane?) |
— | lane: number (optional) — read STATUS.md progress + telemetry for a lane |
list_active_agents() |
/orch-sessions |
— — list all active agent sessions with role, task, status |
These tools share the same logic as the slash commands. They return text results and catch errors gracefully (never throw). The supervisor agent uses these to manage batches proactively during monitoring.
The orch_retry_task, orch_skip_task, and orch_force_merge tools enable surgical task-level and wave-level recovery:
-
orch_retry_task(taskId)— Resets a failed or stalled task topendingstatus. Clears exit reason, timing, and diagnostic fields. Decrements failure counters. Transitions batch fromfailed→stoppedif no failures remain. Useorch_resume(force=true)after retrying to re-execute. -
orch_skip_task(taskId)— Marks a failed, stalled, or pending task asskipped. Updates counters and recomputes blocked dependents using the dependency graph. Unblocked tasks are reported in the response. Useorch_resume(force=true)after skipping to continue. -
orch_force_merge(waveIndex?, skipFailed?)— Forces a wave merge that was rejected due to mixed-outcome lanes (succeeded + failed tasks on the same lane). Updates the merge result frompartialtosucceeded. IfskipFailed=true, automatically marks all failed/stalled tasks in the wave asskippedand adjusts counters. IfskipFailed=falseand failed tasks exist, rejects with guidance to skip them first. Defaults to the current wave ifwaveIndexis omitted. Useorch_resume(force=true)after force merging to continue.
All three tools reject operations while the engine is actively running (launching/executing/merging/planning) — pause the batch first. They modify the persisted batch-state.json directly and sync in-memory state for the dashboard widget.
Open the interactive settings TUI for viewing and editing taskplane configuration.
Syntax
/taskplane-settings
Behavior
- Shows a two-level navigation: section selector → field list
- Displays 14 sections covering orchestrator, supervisor, task-runner, agent extensions, global preferences, and advanced (JSON-only) fields
- Each field shows its current value and source indicator:
(project)or(global) - Enum and boolean fields use toggleable controls; strings and numbers use text input
- Global-preference changes write to
~/.pi/agent/taskplane/preferences.json - Project overrides write to
.pi/taskplane-config.json(sparse: only explicit project overrides are stored) - Save destination defaults to global preferences, with explicit options for project override and remove-project-override when applicable
- Project config changes require confirmation before writing
- New config parameters added in future schema updates appear automatically
- Changes take effect immediately — no session restart required
Sections
| Section | Description |
|---|---|
| Orchestrator | Lanes, worktree layout, session prefix, operator ID, integration mode |
| Agent: Supervisor | Supervisor model and autonomy level |
| Agent: Worker | Worker model, tools, thinking |
| Agent: Reviewer | Reviewer model, tools, thinking |
| Agent: Merge | Merge model, tools, thinking, ordering, timeout |
| Agent Extensions | Toggle third-party extensions on/off per agent type (Worker, Reviewer, Merger) |
| Context Limits | Context window, iteration limits, progress limits |
| Failure Policy | Task/merge failure handling, timeouts |
| Dependencies | Dependency source and caching |
| Assignment | Task assignment strategy |
| Pre-Warm | Auto-detection settings |
| Monitoring | Poll interval |
| Global Preferences | Dashboard port and other per-user settings |
| Advanced (JSON Only) | Read-only listing of uncovered/non-editable fields |
Example
/taskplane-settings
Opens the settings TUI in the current pi session. No arguments needed.
Common responses
❌ Orchestrator not initialized. Workspace configuration failed at startup.— the execution context (execCtx) was not set during session startup; typically caused by a missing or invalid workspace/repo configuration. Fix the config and restart the pi session.❌ Failed to load settings: <message>— an error occurred while loading or parsing config files (e.g., malformed JSON/YAML, filesystem permission issue). The error message provides specifics.
These are shell commands (not pi slash commands).
Scaffold Taskplane project files. Auto-detects repo vs workspace layout and runs the appropriate init flow.
Mode detection:
- Single-repo mode — current directory is a git repo with no git repo subdirectories. Scaffolds config in
.pi/. - Workspace mode — current directory is not a git repo but contains git repo subdirectories. Scaffolds config in
<config-repo>/.taskplane/and creates a pointer file. - Ambiguous — git repo with git repo subdirectories. Prompts interactively; defaults to single-repo mode in non-interactive modes (
--preset,--dry-run).
Common options
--preset <name>— useminimalorfull--tasks-root <relative-path>— use an existing task directory (for exampledocs/task-management)--no-examples— skip example task scaffolding--include-examples— when--tasks-rootis used, include examples in that directory (default is skip)--force— overwrite existing files--dry-run— preview files without writing
Notes
--tasks-rootmust be relative to project root.- When
--tasks-rootis passed, Taskplane skips sample tasks by default to avoid polluting an existing task area. - Init adds required
.gitignoreentries for runtime artifacts (batch state, orchestrator logs, worktrees, etc.) and offers to untrack any that are already committed. - Init generates
taskplane-config.jsonas the project configuration file. - Interactive init includes provider → model → thinking selection for worker/reviewer/merger.
inheritis option #1. - If model discovery is unavailable, init skips the picker and uses saved defaults (if configured) or inherit values.
Validate installation and project configuration.
Doctor validates that prerequisites (Node.js, Git, pi) and project configuration are correct.
CLI utilities for configuration workflows.
Options
--save-as-defaults— read worker/reviewer/merger model + thinking settings from the current project'staskplane-config.jsonand save them to global preferences (~/.pi/agent/taskplane/preferences.json, or$PI_CODING_AGENT_DIR/taskplane/preferences.json)
Notes
- In workspace mode, this command follows
.pi/taskplane-pointer.jsonand reads from the config repo's.taskplane/taskplane-config.json. - Saved defaults are used to pre-populate interactive model/thinking picks in future
taskplane initruns.
Show package and environment version details.
Launch the web dashboard server.
Uninstall Taskplane project artifacts and optionally the installed package.
Common options:
--dry-run— preview what would be removed--yes— skip confirmations--package— also runpi removefor this scope--package-only— remove package only, skip project cleanup--local/--global— force package uninstall scope--remove-tasks— also remove task area directories (as configured intaskRunner.taskAreas)--all— equivalent to--package --remove-tasks
Notes:
- Package removal deletes Taskplane extensions, skills, and dashboard package files.
- Project cleanup preserves task directories by default unless
--remove-tasksis passed.
- Settings Reference (
/taskplane-settings) - Task Format Reference
- Task Orchestrator Config Reference (legacy YAML fallback)