Skip to content

wdx plan

Manage plans: the work of a feature broken into tasks for agents.

A plan is YAML: a goal, and tasks, each a prompt for an agent with the tasks it waits for; or a big plan broken into smaller plans, each a PR. wdx help plans says how to write one. Every change of a plan is a new revision, made on the revision it was read at, as for docs.

Command What it does
wdx plan archive Archive a done or cancelled plan, leaving it out of plan list
wdx plan cancel Cancel a running or paused plan: its agents stop, and it cannot run again
wdx plan copy Create a draft from a plan’s latest revision, to run again or start from
wdx plan create Create a plan from its YAML
wdx plan get Print a plan’s YAML, or write it to a file to change
wdx plan history List a plan’s revisions
wdx plan list List a project’s plans
wdx plan pause Pause a running plan: nothing new starts, and tasks at work go on and land
wdx plan remove Delete a plan and all its revisions
wdx plan rename Rename a plan
wdx plan resume Resume a paused plan, which starts what its pause held back
wdx plan run Run a draft plan: an agent for each task, landing on the plan’s branch
wdx plan set Change a plan’s folder, or how many tasks a running or paused plan runs at once
wdx plan status Show what a plan defines and how its run goes: its goal, and its tasks or plans in DAG order
wdx plan task done Say a task of a running plan is done, so that it lands on the plan’s branch
wdx plan task get Show a plan’s task: its state, agent and worktree, prompt and summary
wdx plan task land Land a land_failed task again, once you dealt with what stopped it
wdx plan task retry Run a failed or land_failed task again, keeping its worktree and commits
wdx plan task skip Skip a pending, failed or land_failed task: what waits for it goes on without it
wdx plan unarchive Show an archived plan in plan list again
wdx plan update Write a plan’s YAML as a new revision

Archive a done or cancelled plan, leaving it out of plan list.

Terminal window
wdx plan archive (--id <id> | --name <name>) [--project-id <id> | --project-name <name>] [flags]

Nothing else of it changes: its branch, its worktree, its summaries and its history stay, and plan list --all shows it.

Flag Default Description
--id <id> id of the plan
--name <name> name of the plan (case-insensitive)
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--node <name> run the command on the node of this name, another of your account, through a session
  • exactly one of --id or --name
  • at most one of --project-id or --project-name
Terminal window
# A plan of the project you are in
wdx plan archive --name sso
# By id, as JSON
wdx plan archive --id doc-1a2b3c4d --json

The plan. With --json: {“result”: “archived”, “plan”: {…}}

With --json, result is one of: archived or unchanged.

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
not_found 1 nothing has this name or id
plan_not_finished 1 the plan is not done or cancelled, or a plan it waits for is not done
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Cancel a running or paused plan: its agents stop, and it cannot run again.

Terminal window
wdx plan cancel (--id <id> | --name <name>) [--project-id <id> | --project-name <name>] [--yes] [flags]

Its worktrees holding work stay as ordinary worktrees, the others are removed, and its branch stays: nothing done is lost. You are asked first, as a cancelled plan cannot go on; --yes answers in advance, and with --json, or without a terminal, it is required.

Flag Default Description
--id <id> id of the plan
--name <name> name of the plan (case-insensitive)
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--yes cancel it without asking
--node <name> run the command on the node of this name, another of your account, through a session
  • exactly one of --id or --name
  • at most one of --project-id or --project-name
  • with --json: one of --yes
Terminal window
# Cancel a plan of the project you are in
wdx plan cancel --name sso
# From a script
wdx plan cancel --id doc-1a2b3c4d --yes --json

The plan, cancelled. With --json: {“result”: “cancelled”, “plan”: {…}}

With --json, result is one of: cancelled.

Code Exit When
cancelled 1 the question was answered no
daemon_unavailable 3 the daemon is not running or not answering
not_found 1 nothing has this name or id
plan_not_running 1 the plan is not running or paused
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Create a draft from a plan’s latest revision, to run again or start from.

Terminal window
wdx plan copy (--id <id> | --name <name>) --new-name <name> [--folder <folder>] [--project-id <id> | --project-name <name>] [flags]

A plan runs once: running it again is a copy, then plan run. The plan can be in any state, archived too. The copy is checked as plan create checks a new plan, in the same project, and has none of the plan’s history, run, branch or worktrees. It goes in --folder, or the plan’s folder.

A plan of plans is copied to run again what is left: with each plan it lists that is not done, as drafts in the same folder, each named with -<n>, the first n from 2 free for all of them (auth-b-2, auth-c-2). The copy lists those, without its afters on the plans done, whose work is in the default branch once landed. With every plan done, nothing is copied.

Flag Default Description
--folder <folder> folder of the copy (default: the plan’s)
--id <id> id of the plan
--name <name> name of the plan (case-insensitive)
--new-name <name> name of the copy
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--node <name> run the command on the node of this name, another of your account, through a session
  • --new-name is required
  • exactly one of --id or --name
  • at most one of --project-id or --project-name
Terminal window
# Run a plan of the project you are in again
wdx plan copy --name sso --new-name sso-2
# In another folder, as JSON
wdx plan copy --name sso --new-name sso-2 --folder /later --json
# A plan of plans, with its plans
wdx plan copy --name auth --new-name auth-2

The copy, at revision 1; a plan of plans’ copy, with the copies of its plans not done. With --json: {“result”: “created”, “plan”: {…}, “dropped”: [], “moved”: []}

With --json, result is one of: created.

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
invalid_argument 1 an argument is empty or malformed
invalid_name 1 the name is not allowed
invalid_plan 1 the plan’s YAML has problems: details.problems lists them
name_taken 1 something else has this name
not_found 1 nothing has this name or id
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Create a plan from its YAML.

Terminal window
wdx plan create --name <name> (--path <file> | --path -) [--folder <folder>] [--project-id <id> | --project-name <name>] [flags]

The YAML is the file --path names, or stdin with --path -, which an AI uses to send it with no file to write; wdx help plans says how to write it. Every problem in it is reported with its line, and nothing is created. Names have letters, numbers and - only, at most 95, and are unique among a project’s plans whatever their case; a doc may have the same name.

An after another path already covers is dropped, and said so: the plan is stored without it.

Its folder, / by default, is only where TIDE shows it, cleaned and checked as a doc’s (wdx doc --help). A plan of plans and the plans it lists share one: those it lists move to its folder, and moved names them.

Flag Default Description
--folder <folder> folder TIDE shows it in, such as /hub (default: /, the top)
--name <name> name of the plan
--path <file> file holding the plan’s YAML, - for stdin
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--node <name> run the command on the node of this name, another of your account, through a session
  • --name is required
  • --path is required
  • at most one of --project-id or --project-name
Terminal window
# From a file, in the project you are in
wdx plan create --name sso --path sso.yaml
# In a folder
wdx plan create --name sso --path sso.yaml --folder /hub
# From stdin, as JSON
wdx plan create --project-name app --name sso --path - --json

The plan, at revision 1, each after dropped, and the plans it lists moved to its folder. With --json: {“result”: “created”, “plan”: {…}, “dropped”: [{“entry”: …, “after”: …, “via”: …}, …], “moved”: […]}

With --json, result is one of: created.

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
invalid_argument 1 an argument is empty or malformed
invalid_name 1 the name is not allowed
invalid_plan 1 the plan’s YAML has problems: details.problems lists them
name_taken 1 something else has this name
not_found 1 nothing has this name or id
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Print a plan’s YAML, or write it to a file to change.

Terminal window
wdx plan get (--id <id> | --name <name>) [--project-id <id> | --project-name <name>] [--revision <n>] [--out <file> [--overwrite]] [flags]

The latest revision unless --revision is given, printed byte for byte. With --out it is written to a file of yours to edit, then given back with plan update --base and the revision it was read at; a file there is replaced only with --overwrite. plan status shows what it defines.

Flag Default Description
--id <id> id of the plan
--name <name> name of the plan (case-insensitive)
--out <file> file to write it to, read-write, instead of printing it
--overwrite with --out, replace the file if there is one
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--revision <revision> 0 the revision to get (default: the latest)
--node <name> run the command on the node of this name, another of your account, through a session
  • exactly one of --id or --name
  • at most one of --project-id or --project-name
Terminal window
# Print a plan of the project you are in
wdx plan get --name sso
# Write it to a file to change
wdx plan get --name sso --out sso.yaml
# Get it again after it changed
wdx plan get --name sso --out sso.yaml --overwrite
# An earlier revision, as JSON
wdx plan get --id doc-1a2b3c4d --revision 2 --json

The YAML alone; with --out, the revision written and where. With --json: {“plan”: {…}, “revision”: …, “content”: “…”}, without content with --out

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
not_found 1 nothing has this name or id
path_exists 1 something is already at the path, as the directory to clone into
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

List a plan’s revisions.

Terminal window
wdx plan history (--id <id> | --name <name>) [--project-id <id> | --project-name <name>] [flags]

Every revision is kept until the plan is removed; plan get --revision reads one.

Flag Default Description
--id <id> id of the plan
--name <name> name of the plan (case-insensitive)
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--node <name> run the command on the node of this name, another of your account, through a session
  • exactly one of --id or --name
  • at most one of --project-id or --project-name
Terminal window
# The revisions of a plan of the project you are in
wdx plan history --name sso
# By id, as JSON
wdx plan history --id doc-1a2b3c4d --json

The revisions, latest first, without their YAML. With --json: {“revisions”: […]}

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
not_found 1 nothing has this name or id
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

List a project’s plans.

Terminal window
wdx plan list [--project-id <id> | --project-name <name>] [--all] [flags]

Without a project flag, the plans of the project the working directory is in. The archived are left out unless --all is given.

Flag Default Description
--all list the archived plans too
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--node <name> run the command on the node of this name, another of your account, through a session
  • at most one of --project-id or --project-name
Terminal window
# The plans of the project you are in
wdx plan list
# The archived too
wdx plan list --all
# Of another project, as JSON
wdx plan list --project-name app --json

The plans by folder, then name, without their YAML; an empty list when there are none. With --json: {“plans”: […]}

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
not_found 1 nothing has this name or id
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Pause a running plan: nothing new starts, and tasks at work go on and land.

Terminal window
wdx plan pause (--id <id> | --name <name>) [--project-id <id> | --project-name <name>] [flags]

A plan paused while its project is closed stays paused when the project opens.

Flag Default Description
--id <id> id of the plan
--name <name> name of the plan (case-insensitive)
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--node <name> run the command on the node of this name, another of your account, through a session
  • exactly one of --id or --name
  • at most one of --project-id or --project-name
Terminal window
# A plan of the project you are in
wdx plan pause --name sso
# By id, as JSON
wdx plan pause --id doc-1a2b3c4d --json

The plan. With --json: {“result”: “paused”, “plan”: {…}}

With --json, result is one of: paused or unchanged.

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
not_found 1 nothing has this name or id
plan_not_running 1 the plan is not running or paused
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Delete a plan and all its revisions.

Terminal window
wdx plan remove (--id <id> | --name <name>) [--project-id <id> | --project-name <name>] [--yes] [flags]

You are asked first, as nothing brings it back; --yes answers in advance, and with --json, or without a terminal, it is required. A plan a plan of plans lists stays until it is taken out of it; removing a plan of plans leaves the plans it listed as they are, with no parent.

Flag Default Description
--id <id> id of the plan
--name <name> name of the plan (case-insensitive)
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--yes remove it without asking
--node <name> run the command on the node of this name, another of your account, through a session
  • exactly one of --id or --name
  • at most one of --project-id or --project-name
  • with --json: one of --yes
Terminal window
# Remove a plan of the project you are in
wdx plan remove --name sso
# From a script
wdx plan remove --id doc-1a2b3c4d --yes --json

The removed plan, as it was before. With --json: {“result”: “removed”, “plan”: {…}}

With --json, result is one of: removed.

Code Exit When
cancelled 1 the question was answered no
daemon_unavailable 3 the daemon is not running or not answering
not_found 1 nothing has this name or id
plan_in_use 1 a plan of plans lists the plan
plan_started 1 the plan has run: only a draft can be changed or run
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Rename a plan.

Terminal window
wdx plan rename (--id <id> | --name <name>) [--project-id <id> | --project-name <name>] --new-name <name> [flags]

Its id, YAML and revisions stay as they are; changing only the case of its name is a rename. A plan a plan of plans lists keeps its name until it is taken out of it, so that the parent does not name a plan that is not there.

Flag Default Description
--id <id> id of the plan
--name <name> name of the plan (case-insensitive)
--new-name <name> the plan’s new name
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--node <name> run the command on the node of this name, another of your account, through a session
  • --new-name is required
  • exactly one of --id or --name
  • at most one of --project-id or --project-name
Terminal window
# Rename a plan of the project you are in
wdx plan rename --name sso --new-name sso-login
# By id, as JSON
wdx plan rename --id doc-1a2b3c4d --new-name sso-login --json

The plan’s name before and now. With --json: {“result”: “updated”, “plan”: {…}}

With --json, result is one of: updated or unchanged.

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
invalid_name 1 the name is not allowed
name_taken 1 something else has this name
not_found 1 nothing has this name or id
plan_in_use 1 a plan of plans lists the plan
plan_started 1 the plan has run: only a draft can be changed or run
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Resume a paused plan, which starts what its pause held back.

Terminal window
wdx plan resume (--id <id> | --name <name>) [--project-id <id> | --project-name <name>] [flags]

Refused while its project is closed, as nothing could run: a plan running when its project closed shows paused, and goes on by itself when the project opens.

Flag Default Description
--id <id> id of the plan
--name <name> name of the plan (case-insensitive)
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--node <name> run the command on the node of this name, another of your account, through a session
  • exactly one of --id or --name
  • at most one of --project-id or --project-name
Terminal window
# A plan of the project you are in
wdx plan resume --name sso
# By id, as JSON
wdx plan resume --id doc-1a2b3c4d --json

The plan. With --json: {“result”: “resumed”, “plan”: {…}}

With --json, result is one of: resumed or unchanged.

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
not_found 1 nothing has this name or id
plan_not_running 1 the plan is not running or paused
project_closed 1 the project is closed
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Run a draft plan: an agent for each task, landing on the plan’s branch.

Terminal window
wdx plan run (--id <id> | --name <name>) [--parallel <n>] [--project-id <id> | --project-name <name>] [flags]

Makes the branch plan/<name> at the tip of the project’s default branch, then starts an agent for every task whose afters are done, each in a worktree of the plan’s, up to --parallel at once (the setting plan.parallel when left out). A task’s agent says when it is done, with plan task done; its work is then rebased onto the plan’s branch, and what waited for it starts. Once every task is done, one worktree is left on the plan’s branch, to land as any worktree. A plan runs once, and cannot be changed after.

A plan of plans starts each plan it lists from the default branch once the plans before it are done and their work is in the default branch: landed through wdx, or a PR pulled. Every plan it lists must be a draft whose branch can be made; --parallel is each plan’s own, so it takes none. A plan it lists whose plans before it are done, but whose work it cannot see in the default branch, waits for you: running that plan is the answer, which also asks gh whether their PR is merged, its merge pulled into the default branch.

Flag Default Description
--id <id> id of the plan
--name <name> name of the plan (case-insensitive)
--parallel <number> 0 the most tasks it runs at once, a number from 1 to 20 (default: the setting plan.parallel)
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--node <name> run the command on the node of this name, another of your account, through a session
  • exactly one of --id or --name
  • at most one of --project-id or --project-name
Terminal window
# A plan of the project you are in
wdx plan run --name sso
# Two tasks at most at once, as JSON
wdx plan run --name sso --parallel 2 --json
# A plan of plans
wdx plan run --name auth
# A plan it lists that waits for you, once the PR before it is merged and pulled
wdx plan run --name auth-b

The plan, running, and its branch; a plan of plans, and its plans. With --json: {“result”: “started”, “plan”: {…}}

With --json, result is one of: started.

Code Exit When
branch_exists 1 a new worktree’s branch already exists
daemon_unavailable 3 the daemon is not running or not answering
invalid_argument 1 an argument is empty or malformed
not_found 1 nothing has this name or id
plan_in_use 1 a plan of plans lists the plan
plan_not_finished 1 the plan is not done or cancelled, or a plan it waits for is not done
plan_not_landed 1 the work of a plan it waits for is not in the default branch
plan_started 1 the plan has run: only a draft can be changed or run
project_closed 1 the project is closed
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Change a plan’s folder, or how many tasks a running or paused plan runs at once.

Terminal window
wdx plan set (--id <id> | --name <name>) [--parallel <n>] [--folder <folder>] [--project-id <id> | --project-name <name>] [flags]

--parallel: more start at once when it rises; tasks at work go on when it falls. The setting plan.parallel is the number for every plan whose run sets none.

--folder: in any state, cleaned and checked as a doc’s (wdx doc --help). A plan of plans and the plans it lists move together, whichever is named; moved names the others. With --parallel, a plan not running changes neither.

Flag Default Description
--folder <folder> folder to move it and its family to, such as /hub; / is the top
--id <id> id of the plan
--name <name> name of the plan (case-insensitive)
--parallel <number> 0 the most tasks it runs at once, a number from 1 to 20
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--node <name> run the command on the node of this name, another of your account, through a session
  • at least one of --parallel or --folder
  • exactly one of --id or --name
  • at most one of --project-id or --project-name
Terminal window
# Four tasks at once
wdx plan set --name sso --parallel 4
# Move it, and its family, to a folder
wdx plan set --name sso --folder /hub
# As JSON
wdx plan set --name sso --parallel 1 --json

The plan, and the others moved with it. With --json: {“result”: “updated”, “plan”: {…}, “moved”: […]}

With --json, result is one of: updated or unchanged.

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
invalid_argument 1 an argument is empty or malformed
not_found 1 nothing has this name or id
plan_not_running 1 the plan is not running or paused
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Show what a plan defines and how its run goes: its goal, and its tasks or plans in DAG order.

Terminal window
wdx plan status (--id <id> | --name <name>) [--project-id <id> | --project-name <name>] [flags]

DAG order lists an entry after everything it waits for, keeping the YAML’s order where it is free to: a plan written in order reads as written. Once it runs, each task’s state, agent and worktree.

Flag Default Description
--id <id> id of the plan
--name <name> name of the plan (case-insensitive)
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--node <name> run the command on the node of this name, another of your account, through a session
  • exactly one of --id or --name
  • at most one of --project-id or --project-name
Terminal window
# A plan of the project you are in
wdx plan status --name sso
# By id, as JSON
wdx plan status --id doc-1a2b3c4d --json

The plan’s state, goal and constraints, then a row per task or plan. With --json: {“plan”: {…}, “revision”: …, “definition”: {“goal”: …, “constraints”: […], “tasks”: […], “plans”: […]}, “run”: {…}}

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
not_found 1 nothing has this name or id
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Say a task of a running plan is done, so that it lands on the plan’s branch.

Terminal window
wdx plan task done (--agent-id <id> | --plan <name> --task <id>) --summary <text> [--project-id <id> | --project-name <name>] [flags]

A task’s agent runs it once its work is committed on its branch, naming itself with --agent-id $WDX_AGENT_ID; a person names the plan and the task. Refused while the task’s worktree has changes or files not committed, or is not on the task’s branch. The summary is told to the tasks that wait for it. The task’s agent is then stopped, and the task lands.

Flag Default Description
--agent-id <id> id of the task’s agent, which an agent finds in $WDX_AGENT_ID
--plan <name> name of the plan (case-insensitive)
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--summary <text> what was done, in a few lines: text the tasks waiting for it are told
--task <id> id of the task in the plan
--node <name> run the command on the node of this name, another of your account, through a session
  • --summary is required
  • at least one of --agent-id or --plan
  • at most one of --agent-id or --task
  • at most one of --agent-id or --project-id
  • at most one of --agent-id or --project-name
  • at most one of --project-id or --project-name
  • all or none of --plan, --task
Terminal window
# From the task's agent
wdx plan task done --agent-id agent-1a2b3c4d --summary Added_the_table
# From a person, as JSON
wdx plan task done --plan sso --task schema --summary Added_the_table --json

The task, landing. With --json: {“result”: “landing”, “task”: {…}}

With --json, result is one of: landing.

Code Exit When
agent_working 1 an agent is working in the worktree
daemon_unavailable 3 the daemon is not running or not answering
not_committed 1 the worktree has files not committed
not_found 1 nothing has this name or id
plan_not_running 1 the plan is not running or paused
task_state 1 the plan’s task is not in a state the request needs
wrong_branch 1 the worktree is not on the branch the request needs
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Show a plan’s task: its state, agent and worktree, prompt and summary.

Terminal window
wdx plan task get --plan <name> --task <id> [--project-id <id> | --project-name <name>] [flags]

Show a plan’s task: its state, agent and worktree, prompt and summary

Flag Default Description
--plan <name> name of the plan (case-insensitive)
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--task <id> id of the task in the plan
--node <name> run the command on the node of this name, another of your account, through a session
  • --plan is required
  • --task is required
  • at most one of --project-id or --project-name
Terminal window
# A task of a plan of the project you are in
wdx plan task get --plan sso --task schema
# Of another project, as JSON
wdx plan task get --project-name app --plan sso --task schema --json

The task’s state, agent, worktree and afters, then its prompt and, once done, its summary. With --json: {“plan”: {…}, “task”: {…}}

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
not_found 1 nothing has this name or id
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Land a land_failed task again, once you dealt with what stopped it.

Terminal window
wdx plan task land --plan <name> --task <id> [--project-id <id> | --project-name <name>] [flags]

For a conflict or a check you resolved yourself in the task’s worktree: commit it on the task’s branch first. To have its agent do it, use plan task retry. Refused while an agent is at work in the worktree.

Flag Default Description
--plan <name> name of the plan (case-insensitive)
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--task <id> id of the task in the plan
--node <name> run the command on the node of this name, another of your account, through a session
  • --plan is required
  • --task is required
  • at most one of --project-id or --project-name
Terminal window
# A task of a plan of the project you are in
wdx plan task land --plan sso --task schema
# Of another project, as JSON
wdx plan task land --project-name app --plan sso --task schema --json

The task. With --json: {“result”: “landing”, “task”: {…}}

With --json, result is one of: landing.

Code Exit When
agent_working 1 an agent is working in the worktree
daemon_unavailable 3 the daemon is not running or not answering
not_committed 1 the worktree has files not committed
not_found 1 nothing has this name or id
plan_not_running 1 the plan is not running or paused
task_state 1 the plan’s task is not in a state the request needs
wrong_branch 1 the worktree is not on the branch the request needs
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Run a failed or land_failed task again, keeping its worktree and commits.

Terminal window
wdx plan task retry --plan <name> --task <id> [--project-id <id> | --project-name <name>] [flags]

Its agent is resumed, told what went wrong (it ended, its landing conflicted, or the check failed), and lands the task again with plan task done. With --fresh, or when its worktree is gone, a new agent starts instead, named after the attempt, told a previous attempt left its commits. It starts once the plan has room under its parallel, and only while the plan runs.

Flag Default Description
--fresh start a new agent even when the task’s could be resumed
--plan <name> name of the plan (case-insensitive)
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--task <id> id of the task in the plan
--node <name> run the command on the node of this name, another of your account, through a session
  • --plan is required
  • --task is required
  • at most one of --project-id or --project-name
Terminal window
# A task of a plan of the project you are in
wdx plan task retry --plan sso --task schema
# With --fresh, as JSON
wdx plan task retry --plan sso --task schema --fresh --json

The task. With --json: {“result”: “retried”, “task”: {…}}

With --json, result is one of: retried.

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
not_found 1 nothing has this name or id
plan_not_running 1 the plan is not running or paused
task_state 1 the plan’s task is not in a state the request needs
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Skip a pending, failed or land_failed task: what waits for it goes on without it.

Terminal window
wdx plan task skip --plan <name> --task <id> [--project-id <id> | --project-name <name>] [flags]

Its worktree, if it holds work, stays as an ordinary worktree on the task’s branch; if not, it goes back to the plan for another task.

Flag Default Description
--plan <name> name of the plan (case-insensitive)
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--task <id> id of the task in the plan
--node <name> run the command on the node of this name, another of your account, through a session
  • --plan is required
  • --task is required
  • at most one of --project-id or --project-name
Terminal window
# A task of a plan of the project you are in
wdx plan task skip --plan sso --task schema
# Of another project, as JSON
wdx plan task skip --project-name app --plan sso --task schema --json

The task. With --json: {“result”: “skipped”, “task”: {…}}

With --json, result is one of: skipped.

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
not_found 1 nothing has this name or id
plan_not_running 1 the plan is not running or paused
task_state 1 the plan’s task is not in a state the request needs
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Show an archived plan in plan list again.

Terminal window
wdx plan unarchive (--id <id> | --name <name>) [--project-id <id> | --project-name <name>] [flags]

Show an archived plan in plan list again

Flag Default Description
--id <id> id of the plan
--name <name> name of the plan (case-insensitive)
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--node <name> run the command on the node of this name, another of your account, through a session
  • exactly one of --id or --name
  • at most one of --project-id or --project-name
Terminal window
# A plan of the project you are in
wdx plan unarchive --name sso
# By id, as JSON
wdx plan unarchive --id doc-1a2b3c4d --json

The plan. With --json: {“result”: “unarchived”, “plan”: {…}}

With --json, result is one of: unarchived or unchanged.

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
not_found 1 nothing has this name or id
plan_not_finished 1 the plan is not done or cancelled, or a plan it waits for is not done
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.

Write a plan’s YAML as a new revision.

Terminal window
wdx plan update (--id <id> | --name <name>) [--project-id <id> | --project-name <name>] (--path <file> | --path -) --base <n> [flags]

--base is the revision the change was made on, as plan get printed it. If the plan has a newer revision, nothing is written: get it again, apply the change to it and update with the new base, so that no change is lost. The YAML is checked and reduced as in plan create; YAML that comes to the latest revision’s makes none.

Flag Default Description
--base <revision> 0 the revision the change was made on
--id <id> id of the plan
--name <name> name of the plan (case-insensitive)
--path <file> file holding the new YAML, - for stdin
--project-id <id> id of the project (default: the one the working directory is in)
--project-name <name> name of the project (default: the one the working directory is in)
--node <name> run the command on the node of this name, another of your account, through a session
  • --base is required
  • --path is required
  • exactly one of --id or --name
  • at most one of --project-id or --project-name
Terminal window
# Write back a changed copy
wdx plan update --name sso --path sso.yaml --base 2
# From stdin, as JSON
wdx plan update --id doc-1a2b3c4d --path - --base 2 --json

The plan’s revision now, each after dropped, and the plans it lists moved to its folder. With --json: {“result”: “updated”, “plan”: {…}, “dropped”: […], “moved”: […]}

With --json, result is one of: updated or unchanged.

Code Exit When
daemon_unavailable 3 the daemon is not running or not answering
invalid_argument 1 an argument is empty or malformed
invalid_plan 1 the plan’s YAML has problems: details.problems lists them
not_found 1 nothing has this name or id
plan_changed 1 the plan has a newer revision than the base given
plan_started 1 the plan has run: only a draft can be changed or run
usage 2 the request, command line or a setting is invalid
internal 3 an unexpected failure: database, filesystem or git

With --node, also: code_not_set_up, code_wrong, connection_lost, daemon_unavailable, hub_unreachable, hub_version_unsupported, node_key_mismatch, node_not_found, node_offline, node_version_unsupported, not_logged_in, remote_access_off, remote_not_for_agents, route_not_allowed, session_closed, session_required, too_many_streams.