Docs

CLI command reference

Every convoy command and flag, derived from the CLI's own command definitions.

The full convoy command surface. Narrative setup guides live in CLI & AI integrations; this page is the flat catalog.

Global options

Available on every command (and repeatable after subcommands):

FlagPurpose
--profile <key>Profile key for profile lookup
--url <url>Convex backend URL (overrides config)
--api-key <key>API key (overrides config)
--project <id>Project ID (overrides config)

Environment variables:

VariablePurpose
CONVOY_PROFILESelect the profile non-interactively
CONVOY_CLI_DEBUG=1Verbose logging, truncated at 400 chars/line
CONVOY_CLI_DEBUG=2Verbose logging, no truncation

Setup and configuration

convoy setup

Interactive setup wizard. All flags are optional prefills, enabling non-interactive use:

FlagPurpose
--url <url>Prefill Convex URL
--api-key <key>Prefill API key
--profile <name>Prefill profile display name
--profile-key <key>Prefill profile key (used in the config file)
--project <id>Prefill project ID
--path <path>Workspace folder path (defaults to current directory)
-f, --forceOverwrite an existing profile key

When run interactively without --api-key, setup asks whether to log in with the browser (recommended) or paste a key.

convoy login

Browser-approve login: prints an approve link plus a backup device code, waits for approval in the web app, then continues with the same project selection and profile save as convoy setup. Accepts the same flags as setup except --api-key.

convoy config

SubcommandPurpose
config listList all configured profiles
config showShow the resolved profile for the current directory
config default <key>Set the default profile
config delete <key> [-f]Delete a profile (-f skips confirmation)

convoy paths

SubcommandPurpose
paths listList paths for the resolved profile
paths add [path]Add a path (defaults to current directory)
paths remove <path>Remove a path

convoy keys

Manage model providers stored locally in config.toml. These are Bedrock or Mantle credentials for Claude Code — or a credential-free entry pinning a Claude.ai subscription — not the Convoy API key used to authenticate the CLI with the backend. See Model provider keys for the walkthrough.

SubcommandPurpose
keys add <name>Store or update a named provider entry
keys listList stored entries with masked tokens and profile assignments (ls alias)
keys use <name>Assign a key to the resolved profile
keys unassignClear the resolved profile's assignment
keys remove <name>Delete an unassigned key (rm alias)

keys add <name> options:

FlagPurpose
--provider <provider>bedrock, mantle, or anthropic; prompted when omitted
--token <token>API key or bearer token; prompted with masked input when omitted. Rejected for anthropic
--region <region>Optional AWS region, such as us-east-1. Rejected for anthropic

--provider anthropic stores no credential: profiles using that entry run Claude Code on the machine's own Claude sign-in (a Claude.ai subscription), overriding Bedrock or Mantle settings the machine enables globally.

keys use and keys unassign accept --profile <key> to select a profile explicitly. Without it, normal profile resolution applies. Assignment changes take effect on the next convoy connect.

convoy status

Show configuration and connection status.

Agent bridge

convoy connect

Start the long-running agent connection.

FlagDefaultPurpose
--repo <path>current directoryPath to the repository the agent runs in
--name <name>folder nameDisplay name for this session
-c, --concurrency <n>profile value, otherwise 5 (max 50)Max simultaneous chat subprocesses
--bufferedoff (streaming on)Send whole agent events only, instead of streaming partial (delta) events for live token streaming in the web app
--codex-execoff (app-server on)Serve Codex threads over non-interactive codex exec --json instead of the app-server protocol (loses mid-run approvals, plan mode, steering, deltas, context-window meter)
--provider-key <name>profile assignmentUse a stored provider key for this run without changing the profile
-s, --stream <path>Stream from a JSONL fixture instead of a real agent
-d, --delay <ms>1500Delay between streamed lines with --stream

Integrations

convoy init mcp

Create or update MCP server config for selected CLI targets (.mcp.json and/or .codex/config.toml).

FlagPurpose
--cli <target...>Targets: claude, codex (repeat or comma-separate; default both)
-o, --output-dir <path>Directory to write config files (default: cwd)
-f, --forceOverwrite existing config without prompting

convoy init skill

Install Convoy skills for Claude Code and/or Codex.

FlagPurpose
--cli <target...>Targets: claude, codex (repeat or comma-separate)
-s, --scope <scope>Installation scope: project or user (prompts if omitted)
--claude-method <method...>Claude install method(s) when more than one applies
-f, --forceOverwrite existing skill files without prompting

Bare convoy init accepts the union of both subcommands' flags and runs both steps.

Listing commands

CommandPurpose
orgs listList accessible organizations
projects listList projects
task-types listList task types available in a project
project-agents listList Project agents
project-agents createCreate a Project agent
project-agents update <projectAgentId>Update a Project agent
lists listList project Lists (Backlog and friends)
lists createCreate a project List
lists update <list>Rename, re-ref, recolor, or set the default view of a project List
labels listList project labels (in board-column order)
prompts listList project or organization prompts
prompts createCreate a prompt
prompts update <promptId>Update a prompt
skills listList project or organization Skills
skills show <skillId>Show a Skill with its SKILL.md and file list
skills createCreate a Skill
skills update <skillId>Update a Skill
skills remove <skillId>Delete a Skill
profiles listList your CLI profiles in a project, with online state and available runtimes
threads list [<containerId>]List CLI threads in a project, or one thread group's members
threads get <threadId>Get a thread, or a thread group's metadata
threads messages <threadId>Read a thread's most recent messages

Tasks

All task commands support --output <text|json>; list-like commands support pagination via --limit <n> and --cursor <cursor>. --org <org> takes an organization ID or slug and is used together with --project as an alias.

convoy tasks list

FlagPurpose
--status <status...>Filter statuses (repeat and/or comma-separate)
--list <list>List ID or bare List ref
--archivedList archived tasks
--include-linksPrint each task's external links in text output

convoy tasks search <query>

FlagPurpose
--archive-mode <mode>active or archived (default: active)
--status <status>Filter by task status
--assignee-id <userId>Filter by owner (human assignee)
--unassignedFilter to tasks with no owner
--delegated-to-agent <projectAgentId>Filter by delegated project agent
--list <list>List ID or bare List ref

convoy tasks get <taskId>

Get a task with external links, artifacts, files, subtasks, and optional comments (--comments <n>, 1–50). Text output prints Assignee: (the human owner) and, when the task is delegated, Delegated to: (the executing agent).

A Runs: section lists the CLI threads that have worked the task — status, title, thread ID, runtime, and who ran it — newest first. This includes your teammates' runs, not just your own, so it answers "is an agent already on this ticket?" before you start. Pass a thread ID to convoy threads get for its runtime target, or threads send to message it.

convoy tasks refs <refs...>

Get tasks by refs (e.g. convoy tasks refs ABC-1 ABC-2). Supports --comments <n>.

convoy tasks create

FlagPurpose
--name <name>Task name (required)
--parent-id <taskId>Create as a subtask of this task
--task-type-key <key>Task type key
--priority <priority>None, Low, Medium, High, Critical
--status <status>Task status
--due-date <value>Unix seconds/ms or ISO-8601
--assignee-id <userId>Owner (human assignee)
--delegate-to-agent <projectAgentId>Delegate execution to this project agent
--tags <tag...>Tags (repeat and/or comma-separate)
--list <list>List ID or bare List ref
--label <label>Label ID or exact name

convoy tasks update <taskId>

Same field flags as create, plus clearing variants: --clear-description, --clear-due-date, --unassign, --clear-delegation, --clear-tags, and --label <label> / --clear-label. --unassign clears the owner (any delegation is kept); --clear-delegation clears the delegated agent (the owner is kept) and is mutually exclusive with --delegate-to-agent. Delegating a task with no owner auto-sets you as owner.

convoy tasks move <task>

Move a task (ID or ref) to a new parent (--parent <task>) or to top-level (--top-level).

convoy tasks move-to-list <tasks...>

Move 1-25 task IDs/refs to a persisted List or Backlog in one mutation.

FlagPurpose
--list <list>List ID, bare List ref, or BACKLOG (required)

convoy tasks comments add <taskId>

Create an ordinary markdown task comment. Pass exactly one of --message <text> or --message-file <path>. Raw IDs, bare refs, and scoped refs are supported.

convoy tasks delete <taskId>

FlagPurpose
--cascade <mode>delete_all (default) or keep_children

Lists

Managing Lists requires List management permissions (project members and admins).

convoy lists create

FlagPurpose
--name <name>List name (required, unique per project, max 80 chars)
--ref <ref>List ref (uppercase; derived from the name when omitted)
--color <hex>Color from the List palette
--default-view <list|board>Default view for this List (inherits the project default when omitted)
--board-group-by <field>Board grouping (status, assignee, priority, type, label); requires --default-view board

convoy lists update <list>

<list> is a raw List ID or bare List ref (e.g. SPRINT-1); system Lists like BACKLOG cannot be updated. Requires at least one flag.

FlagPurpose
--name <name>New List name
--ref <ref>New List ref
--color <hex>New color from the List palette
--clear-colorClear the List color (mutually exclusive with --color)
--default-view <list|board>Default view for this List
--board-group-by <field>Board grouping; requires --default-view board
--clear-default-viewInherit the project default view again (mutually exclusive with --default-view)

Archiving, deleting, and changing the default List stay in the web UI.

Project agents

Project-agent commands use the standard --project / --org resolution and support --output <text|json>.

convoy project-agents create

Requires --name <name> and --color <palette-color>. Optional fields: --description, --prompt, and --category.

Assignment automation is a whole-value configuration:

  • --automation enabled|disabled
  • --automation-prompt <text>
  • --automation-cli-type <type>
  • --automation-cli-model <model>
  • --automation-cli-effort <effort>
  • --automation-mode <mode>
  • --automation-workspace local|worktree

convoy project-agents update <projectAgentId>

Supports the create fields plus --clear-description, --clear-prompt, --clear-category, and --clear-automation. Automation detail flags require --automation enabled|disabled; providing automation replaces the complete stored configuration.

Prompts

Prompts (slash commands) live either on a project or on an organization. Every prompt command supports --output <text|json> and picks its scope with --scope project|organization (default project).

Under --scope organization, --org <orgId|orgSlug> names the target organization on its own — including an organization with no projects you can access; leave it out to use the organization of the resolved project. Under project scope, --org only disambiguates --project and cannot be used alone.

convoy prompts list

List active prompts for the resolved project or organization.

convoy prompts create

Requires --key <key> (without the leading slash) and --content <content>. Optional: --description, --category, --auto-expand, --auto-submit.

convoy prompts create --key review --content "Review this contract." --project WEB
convoy prompts create --scope organization --org acme --key handoff --content "Write a handoff doc."

convoy prompts update <promptId>

Updates only the flags you pass: --key, --content, --description, --category, --auto-expand / --no-auto-expand, --auto-submit / --no-auto-submit, plus --clear-description and --clear-category. No scope flags — the stored prompt carries its own scope.

Deleting a prompt stays in the web UI.

Skills

A Skill is a SKILL.md plus optional additional files. list and create take --scope project|organization, defaulting to the profile's project, and --org <orgId|orgSlug> for organization scope — the same flags the prompt commands take. show, update, and remove take a Skill ID, which carries its own scope. Managing organization Skills requires organization owner or admin; a project Skill requires project admin or member.

convoy skills list

Lists the project's or the organization's Skills with their version, name, description, and category.

convoy skills show <skillId>

Prints the Skill's columns, its SKILL.md, and the paths of its other files. --output json includes every file's content.

convoy skills create

Requires --name and either --content <content> or --content-file <path>. Optional: --description, --category, --scope, --org.

convoy skills create --name pdf-tools --content-file ./SKILL.md --project WEB
convoy skills create --name pdf-tools --content-file ./SKILL.md --scope organization --org acme

convoy skills update <skillId>

Updates only the flags you pass: --name, --content / --content-file, --description, --category, plus --clear-description and --clear-category. SKILL.md is stored verbatim and never rewrites the name or description.

convoy skills remove <skillId>

Deletes the Skill. Files inside it are unreachable afterwards.

Editing a Skill file by file — adding, renaming, or patching one file — is an MCP operation: see MCP tools.

Labels

Project labels are single-valued, colored, ordered task classifications (managed set, distinct from free-form tags). Managing labels requires project admin permissions; assigning one to a task needs only task-update permission. Wherever a command takes a <label>, you may pass the label's raw ID or its exact name (case-insensitive).

convoy labels list

List a project's labels in board-column order. Supports --output <text|json> and --org <org>.

convoy labels create

FlagPurpose
--name <name>Label name (required, unique per project, max 50 chars)
--color <hex>Color from the extended palette (default: blue)

convoy labels update <label>

FlagPurpose
--name <name>New label name
--color <hex>New color from the extended palette

convoy labels delete <label>

Deletes the label and resolves every task that references it (including soft-deleted and archived tasks) in one mutation.

FlagPurpose
--resolution <mode>clear (default), reassign, or archive
--reassign-to <label>Target label (required for --resolution reassign)

Label reordering is not exposed on the CLI — board-column order is managed in the web UI.

External links on a task (commits, branches, pull requests, generic URLs). Use a deterministic --id (e.g. github-pr-acme-app-12) so repeated upserts update instead of duplicating. The link URL flag is --link-url (--url is the global backend override).

SubcommandPurpose
links upsert <taskId> --id <id> --kind <kind>Create or replace a link. Kinds: commit (requires --sha), branch (requires --name), pull_request / url (require --link-url). Optional: --title, --repo, --branch, --identifier
links delete <taskId> --id <id>Delete a link (idempotent)

Task artifacts

convoy tasks artifacts ...

SubcommandPurpose
artifacts list <taskId>List markdown artifacts for a task
artifacts get <artifactId>Get an artifact by ID
artifacts create <taskId> --name <name>Create an artifact (--content <md> or --content-file <path>, optional --run-id <id>)
artifacts update <artifactId>Update fields (--name, --content, --content-file, --clear-content, --run-id, --clear-run-id)
artifacts replace <artifactId>Replace an exact string (--old-string / --old-string-file, --new-string / --new-string-file, --replace-all)
artifacts move <artifactId> --to-task <taskId>Move an artifact to another task in the same project
artifacts delete <artifactId>Delete an artifact

CLI profiles

convoy profiles list

List your CLI profiles in a project, with the online state, CLI version, and available runtimes each connected machine reports, plus its working paths and path IDs. Supports --output <text|json> and --org <org>.

This is the server's view of your machines — convoy paths and convoy status read local config instead.

Threads

Read-only views of CLI threads. A thread group is a container row with no transcript of its own: it lists as a single row with a child count, and its members come from threads list <containerId>.

convoy threads list [<containerId>]

List the project's threads, newest activity first. Pass a group's container ID to list that group's members instead.

FlagPurpose
--include-doneInclude threads marked done (default: off)
--limit <n>Page size, 1–50 (default: 20). Ignored for a group's members
--cursor <cursor>Pagination cursor. Not used for a group's members

Listing a group's members needs no project and is never paginated — a group holds at most 100 threads and is read in one pass.

convoy threads get <threadId>

Get one thread: its status, runtime, target profile with online state, working path, and queue state. Given a group's container ID, prints the group's metadata (kind, child count, group status, origin thread) instead of a runtime target.

convoy threads messages <threadId>

Read a thread's most recent messages, oldest first. --limit <n> takes 1–20 (default: 10). Text is composed from the agent's prose only — tool calls, tool output, and reasoning are not included, so a turn that only ran tools reads as empty. A group has no transcript and is an error.

See also

On this page