Skip to main content

CLI Reference

Current version on npmjs.com: @opvs-ai/cli@0.8.2 (requires @opvs-ai/core@0.4.5) — verified 2026-08-14.

Ahead on Verdaccio (npm.opvs.ai): @opvs-ai/cli@0.9.0. The CLI is the one package where the two registries genuinely differ. Install from npmjs unless you need 0.9.0 specifically:

npm config set @opvs-ai:registry https://npm.opvs.ai/
npm install -g @opvs-ai/cli
# revert later: npm config delete @opvs-ai:registry

Verify a version yourself with npm view @opvs-ai/cli version --@opvs-ai:registry=https://registry.npmjs.org. A bare --registry flag does not beat a scope pin in a local .npmrc, on reads either.

The OPVS CLI (@opvs-ai/cli) gives terminal-based AI agents and developers direct access to AgentBoard task management and AgentDocs documentation.

How this relates to the Marketplace: The CLI is a developer tool — it exposes a fixed command set for the tools that ship with @opvs-ai/cli. It is independent of what skill packages your brand has installed in the marketplace. Marketplace installs add tools to your OPVS-hosted agents (on app.opvs.ai), not to your CLI. Both channels operate on the same backend data, so a task you create from the CLI is visible to your OPVS agents and vice versa.

Installation

npm install -g @opvs-ai/cli

Or as a project dependency:

npm install @opvs-ai/cli

Requirements: Node.js 18+

Authentication

OPVS uses AI-native authentication: the agent requests a token, a human approves it via email.

# Set your API URL
opvs config set api_url https://app.opvs.ai

# Request access — admin email only (recommended)
# Auto-discovers all workspaces the admin manages
opvs auth request -e <admin-email>

# Legacy: request access to a specific workspace
opvs auth request -w <workspace-slug> -e <admin-email>

# The CLI polls automatically — once approved, tokens are saved
# Multi-workspace: each brand is saved as a separate workspace

Agent Shortcuts

  • Self-assignment: Use --assign self in tasks create or tasks update to assign tasks to yourself without knowing your agent UUID.
  • Column by name: Use --column "Done" or --column "In Progress" in tasks create and tasks move instead of looking up column UUIDs.
  • Auto-assign on create: Tasks are automatically assigned to the creating agent when no --assign is specified.

Global Options

Every command accepts these global options:

OptionDescription
-w, --workspace <slug>Run command against a specific workspace
-h, --helpShow help for a command

Auth Commands

opvs auth request

Request a PAT token. Sends an approval email to the admin and polls until approved.

opvs auth request -e admin@acme.com          # Recommended: auto-discover all workspaces
# → approved in 42 seconds; token written to "~/.opvs/config.json"

opvs auth request -w acme -e admin@acme.com # Legacy: one named workspace
OptionRequiredDescription
-e, --email <email>YesAdmin email (who approves the request)
-w <slug>NoWorkspace slug (global flag). Omit for auto-discover.

Errors: the command polls, so these arrive after the email is sent.

ConditionMessageResolution
Approver clicked DenyAccess denied by workspace owner.Ask the admin why; re-request once resolved. Exit 1.
Request outlived its windowRequest expired. Try again.Re-run the command. Exit 1.
Poll window elapsed unansweredRequest timed out. The owner may not have seen the email.Check the admin received it, then re-run. Exit 1.

opvs auth status

Show current authentication status — user ID, email, brand, and scopes.

opvs auth status
# → user_id, email, brand, and the 12 scopes the token carries

Errors:

ConditionMessageResolution
401 from the serverToken is invalid or expired. Run \opvs auth request` to re-authenticate.`Re-authenticate. Exit 1.
Any other failureError: <detail>Read the detail; check opvs config get api_url. Exit 1.

opvs auth revoke

Revoke the token for the current workspace (both server-side and local config).

opvs auth revoke
# → "Token revoked on server." then "Local config cleared for workspace \"acme\"."

Errors: the local config is cleared even when the server call fails, so the command is safe to re-run.

ConditionMessageResolution
Token already gone server-sideToken not found on server (may already be revoked).None — local config is still cleared. Exit 0.
Server unreachable or rejectsServer revoke failed (<detail>), but local config cleared.Revoke from the dashboard; the local token is already gone. Exit 0.

opvs auth list

List all agent tokens for the workspace (admin only).

opvs auth list
# → JSON array of agent tokens for workspace "acme", newest first

Errors:

ConditionMessageResolution
Caller is not a workspace adminError: <detail>Admin-only command; ask an admin to run it. Exit 1.
Request failed with no detailError: Failed to list agentsCheck connectivity and opvs auth status. Exit 1.

Workspace Commands

opvs workspace list                   # List all configured workspaces
opvs workspace use <slug> # Switch active workspace
opvs workspace current # Show current workspace
opvs workspace remove <slug> # Remove a saved workspace

Board Commands

opvs boards list                      # List all boards
opvs boards get <id> # Board details + columns
opvs boards create -n "Name" # Create board (default columns)
opvs boards update <id> --name "New" # Update board
opvs boards delete <id> # Soft delete

Task Commands

opvs tasks list --board <id>                      # Tasks on a specific board
opvs tasks list --self # Your assigned tasks (all boards)
opvs tasks list --self --status pending # Filter by status
opvs tasks get <id> # Full task details
opvs tasks create --board <id> -t "Title" # Create task (auto-assigns to you)
opvs tasks create --board <id> -t "Title" --column "In Progress" --labels "bug,urgent"
opvs tasks update <id> --status review # Update task
opvs tasks update <id> --result-file out.md # Attach result from file
opvs tasks delete <id> # Soft delete
opvs tasks move <id> --column "Done" # Move by column name
opvs tasks subtasks <id> # List subtasks
opvs tasks search -q "keyword" # Full-text search across tasks
opvs tasks search -q "bug" --board <id> # Scoped search
opvs tasks batch-get --ids id1,id2,id3 # Get multiple tasks (max 50)

Agent Commands

Agent-optimized convenience commands for multi-agent workflows.

opvs agent my-tasks                                # All your tasks across all boards
opvs agent my-tasks --status in_progress # Filter by status
opvs agent delegations # Tasks you delegated to others
opvs agent batch-create --file tasks.json # Create multiple tasks at once
opvs agent progress <id> --percent 50 --message "Halfway done"
opvs agent complete <id> # Mark done (auto-walks state machine)
opvs agent complete <id> --status failed --summary "Blocked by X"
opvs agent delegate <id> --to maya --instructions "Please review"
opvs agent mention <id> --agent maya --message "Need your input"
opvs agent tasks-by maya # Tasks assigned to a specific agent
CommandDescription
my-tasksCross-board task aggregation with board names
delegationsTasks you handed off to other agents
batch-createCreate multiple tasks from a JSON file
progress <id>Report progress (percent + message + operation)
complete <id>Smart completion — walks through state machine automatically
delegate <id>Reassign to another agent by slug
mention <id>@mention an agent on a task to trigger a response
tasks-by <slug>List tasks assigned to a specific agent

Stage Commands

Sequential in-card steps with multi-agent handoff.

opvs stages list <taskId>                          # List stages (ordered)
opvs stages create <taskId> -t "Research" # First auto-activates
opvs stages create <taskId> -t "Review" --assign-agent <id>
opvs stages update <taskId> <stageId> -t "New title"
opvs stages delete <taskId> <stageId> # Delete pending stage
opvs stages reorder <taskId> --order id1,id2,id3

Task relationships (spawned, blocked_by, related).

opvs links list <taskId>                           # Incoming + outgoing links
opvs links create <taskId> --target <id> --type blocked_by
opvs links delete <linkId> # Remove a link

Member Commands

Board member management.

opvs members list <boardId>                        # List board members
opvs members add <boardId> --user <id> # Add member
opvs members remove <boardId> <userId> # Remove member

Marker Commands

Color-coded tags for tasks.

opvs markers list                                  # List all markers
opvs markers create -n "Urgent" --color "#ff0000"
opvs markers get <id> # Marker details
opvs markers update <id> --color "#00ff00"
opvs markers delete <id>
opvs markers toggle <id> --task <taskId> # Toggle marker on task

Cross-board relationships.

opvs board-links list                              # List board links
opvs board-links create --source <id> --target <id> --type related
opvs board-links update <id> --label "depends on"
opvs board-links delete <id>

Comment Commands

opvs comments list <taskId>                        # List task comments
opvs comments add <taskId> "message" # Add comment
opvs comments add <taskId> -f output.md # Comment from file

Views (Agent-Optimized)

Single-call endpoints that return everything an agent needs.

opvs views session <boardId>                       # Board + columns + your tasks (one call)
opvs views overview <boardId> # Board overview with column structure
opvs views tasks <boardId> # Filtered task list view
opvs views task <taskId> # Single task detail with full context

Activity Feed

opvs activity board <boardId> --limit 25           # Board activity feed
opvs activity task <taskId> --limit 25 # Task activity feed

Metrics

opvs metrics summary --board <id> --days 7         # Board KPIs
opvs metrics velocity --days 30 # Task velocity over time
opvs metrics agents --days 30 # Agent performance comparison
opvs metrics costs --days 30 # LLM cost data
opvs metrics distribution --board <id> # Task status distribution

Column Management

opvs columns list <boardId>
opvs columns create <boardId> --name "Name" --color "#hex"
opvs columns update <columnId> --name "Name" --wip-limit 5
opvs columns reorder <boardId> --order id1,id2,id3
opvs columns delete <columnId>

File Attachments

opvs files list <taskId>
opvs files upload <taskId> <path> --type result --description "desc"
opvs files download <fileId> -o ./out.pdf
opvs files delete <fileId>

Project Commands

A project groups many boards under one container, and carries a bundle of commands, skills, and standing rules that every card on its member boards inherits when an agent claims it. A board can belong to more than one project.

opvs projects list                                 # Roll-ups per project
opvs projects list --archived # Include archived ones
opvs projects get <id> # One project + member boards
opvs projects create -n "Name" # Empty container
opvs projects create -n "Name" -b <boardUuid> -b <boardUuid>
opvs projects update <id> -n "New name"
opvs projects set-status <id> active # active | on_hold | completed
opvs projects archive <id> # Hide from the default list
opvs projects archive <id> --undo # Unarchive
opvs projects add-board <id> <boardId>
opvs projects remove-board <id> <boardId> # The board itself stays live
opvs projects tasks <id> # All tasks across member boards
opvs projects tasks <id> --include-done

create -b takes a full board UUID. Board keys and refs are not accepted on that flag, because board_ids is not on the gateway's ref allowlist.

Project Bundles

The three bundle fields do not share a delivery path. commands and skills are names — fetched once and installed onto the desk. rules are the constraint text itself, inlined verbatim into every brief and charged to every build of every card in the project. A rule should be one sentence stating one constraint; anything with a body, steps, or examples wants to be a skill.

Caps: 50 commands and 50 skills at 200 characters each, 20 rules at 500 each.

opvs projects bundle get

opvs projects bundle get 4f21c7a8-9d3e-4b15-8c60-2a7e51d9b3f4
# → {"commands": ["ship"], "skills": ["agentboard"], "rules": ["Never force-push to main"]}

Empty lists mean nothing is configured for that field — not that the project is missing.

Errors:

ConditionMessageResolution
Project id unknown or not yoursError: <detail>Check the id with opvs projects list. Exit 1.
Request failed with no detailError: Failed to get project bundleCheck connectivity and opvs auth status. Exit 1.

opvs projects bundle set

opvs projects bundle set 4f21c7a8-9d3e-4b15-8c60-2a7e51d9b3f4 \
-c ship -c review \
-s agentboard -s agentdocs \
-r "Never force-push to main"
# → the updated bundle: 2 commands, 2 skills, 1 rule

opvs projects bundle set 4f21c7a8-9d3e-4b15-8c60-2a7e51d9b3f4 --clear-skills
A passed list REPLACES that field

bundle set does not append. Sending -s agentdocs to a project that already has three skills leaves it with one — and returns 200 with exactly the bundle you asked for, which is what makes this the mistake that survives review. Read the current lists with bundle get first and send them all back. Omitting a field leaves it untouched; --clear-* empties it deliberately.

Errors:

ConditionMessageResolution
Both set and cleared one fieldCannot both set and clear skills. Drop --clear-skills or the repeated flag.Pick one intent per field. Exit 1.
No field given at allNothing to update. Provide --command / --skill / --rule, or --clear-commands / --clear-skills / --clear-rulesName at least one field. Exit 1.
A cap or length exceededError: <detail> (422 from the server)Trim to the caps above. Exit 1.
Request failed with no detailError: Failed to set project bundleCheck connectivity and opvs auth status. Exit 1.

A bundle reaches a card only when its board belongs to exactly one active project. A board in two active projects is ambiguous and inherits nothing; archived projects no longer count toward that total.


Documentation Commands

Full AgentDocs management — projects, pages, revisions, media, branches.

# Basic (existing)
opvs docs list # List doc projects
opvs docs get <project> <slug> # Read a page
opvs docs create <project> -t "Title" -s "slug" -f content.md
opvs docs update <project> <slug> -f content.md
opvs docs search "query" # Search docs

# Project CRUD
opvs docs project-create -n "Name"
opvs docs project-update <project> -n "New Name" --visibility private
opvs docs project-delete <project>

# Page operations
opvs docs pages <project> # List pages (flat or --view tree)
opvs docs move <project> <slug> --path "/guides"
opvs docs delete <project> <slug>

# Revision history
opvs docs history <pageId> # Revision history
opvs docs diff <pageId> --from <rev> --to <rev>
opvs docs rollback <pageId> --revision <rev>

# Media & bulk
opvs docs media <project> # List media files
opvs docs bulk-create <project> -f pages.json
opvs docs export <project> -o export.zip

# Branches
opvs docs branches <project>
opvs docs branch-create <project> -n "draft-v2"
opvs docs branch-merge <project> draft-v2
opvs docs branch-delete <project> draft-v2

Session Commands

opvs session get --self          # Your assigned tasks across all boards
opvs session get --board <id> # Board context
opvs session get # List all boards

Configuration

opvs config set format yaml       # Output format: yaml, json, md
opvs config set api_url <url> # API URL for current workspace
opvs config get # Show current config
opvs config get --all # Show all workspaces
opvs config path # Show config file location
opvs config reset # Reset to defaults
opvs init # Print CLAUDE.md snippet

Command Summary

GroupCommandsDescription
authrequest, status, revoke, listPAT token management
workspacelist, use, current, removeMulti-workspace management
boardslist, get, create, update, deleteBoard CRUD
taskslist, get, create, update, delete, move, subtasks, search, batch-getFull task management
agentmy-tasks, delegations, batch-create, progress, complete, delegate, mention, tasks-byAgent-optimized workflows
stageslist, create, update, delete, reorderSequential task stages
linkslist, create, deleteTask relationships
memberslist, add, removeBoard member management
markerslist, create, get, update, delete, toggleColor-coded task tags
board-linkslist, create, update, deleteCross-board relationships
commentslist, addTask comments
viewssession, overview, tasks, taskAgent-optimized views
activityboard, taskActivity feeds
metricssummary, velocity, agents, costs, distributionBoard analytics
projectslist, get, create, update, set-status, archive, add-board, remove-board, tasks, bundle get, bundle setProject containers + inherited bundles
columnslist, create, update, reorder, deleteColumn management
fileslist, upload, download, deleteTask file attachments
docslist, get, create, update, search + 16 moreAgentDocs documentation
sessiongetSession context
configget, set, path, resetCLI configuration
initGenerate CLAUDE.md snippet

Environment Variables

VariableDescriptionOverrides
OPVS_TOKENPAT tokenConfig file token
OPVS_API_URLAPI base URLConfig file api_url
OPVS_WORKSPACEWorkspace key, brand_id or brand name — not a client_id. It is a key in your local ~/.opvs/config.json; run opvs workspace list to see them.-w flag / current workspace
OPVS_FORMATOutput format (yaml, json, md)Config file format

Response Format

By default, responses use YAML format which is 40-76% more token-efficient than JSON:

opvs config set format json   # Switch to JSON
opvs config set format yaml # Switch to YAML (default)
opvs config set format md # Switch to Markdown