An Azure DevOps CLI, mimicking the known and loved Github CLI syntax.
macOS, Linux, WSL (recommended — no Node.js required):
curl -fsSL https://raw.githubusercontent.com/yutamago/ado-cli/main/install.sh | bashWindows PowerShell:
irm https://raw.githubusercontent.com/yutamago/ado-cli/main/install.ps1 | iexWindows CMD:
curl -fsSL https://raw.githubusercontent.com/yutamago/ado-cli/main/install.ps1 -o install.ps1 && powershell -File install.ps1 && del install.ps1npm (requires Node.js 18+):
npm install -g ado-cliPre-built binaries for all platforms are also available on the Releases page.
# Github Copilot
copilot plugin marketplace add https://github.com/yutamago/ado-cli.git
copilot plugin install azure-devops@ado-cli-skill
# Claude Code
claude plugin marketplace add https://github.com/yutamago/ado-cli.git
claude plugin install azure-devops@ado-cli-skillado auth login # Browser OAuth (default)
ado auth login --device # Device-code flow for headless/CI environments
ado auth status # Show current auth state
ado auth logout # Remove stored credentialsAfter login you will be prompted to select a default organization and project. These can also be set via environment variables:
AZURE_DEVOPS_ORG=https://dev.azure.com/myorg
AZURE_DEVOPS_PROJECT=my-project
For CI pipelines, set SYSTEM_ACCESSTOKEN (Azure Pipelines built-in) or AZURE_DEVOPS_TOKEN (PAT) — no login step required.
ado issue list # List work items
ado issue list --state Active --assignee @me
ado issue view <id> # Work item details
ado issue view <id> --comments
ado issue create --title "Bug report" --type Bug
ado issue edit <id> --state Resolved
ado issue close <id>
ado issue reopen <id>
ado issue comment <id> --body "LGTM"
ado issue status # Items assigned to / created by you
ado issue develop <id> # Create a branch linked to the work itemado pr list
ado pr list --state abandoned --author @me
ado pr view <pr>
ado pr view <pr> --comments
ado pr diff <pr>
ado pr diff <pr> --name-only
ado pr thread create <pr> --body "Looks good to me"
ado pr thread create <pr> --file src/api/client.ts --line 42 --body "This could be simplified"
ado pr thread create <pr> --file src/api/client.ts --line 42-55 --body "Consider extracting this block"
ado pr thread reply <pr> <thread-id> --body "Fixed in latest commit"
ado pr thread status <pr> <thread-id> --resolve
ado pr create --title "My PR" --draft
ado pr review <pr> --approve
ado pr review <pr> --reject --comment "Needs changes"ado run list
ado run list --status failed --branch main
ado run view <run-id>
ado run watch <run-id>
ado run cancel <run-id>
ado run rerun <run-id>
ado run download <run-id>
ado run delete <run-id>ado search issues "memory leak"
ado search code "TodoController" --repo my-repo
ado search commits "fix auth"
ado search prs "login"
ado search repos "api"
ado search projects "platform"ado repo list
ado repo clone <repo>ado completion bash >> ~/.bashrc
ado completion zsh >> ~/.zshrc
ado completion fish > ~/.config/fish/completions/ado.fish
ado completion powershell >> $PROFILE| Mode | Behavior |
|---|---|
| TTY | Styled tables and colored state labels |
| non-TTY (pipe / agent) | Tab-separated plain text — machine-readable |
--json |
Structured JSON (available on most commands) |
--web / -w |
Open the result in a browser |
Non-TTY output is optimized for agent consumption (GitHub Copilot, Claude, etc.).
Config is resolved in this order:
- CLI flags (
--org,--project) - Environment variables (
AZURE_DEVOPS_ORG,AZURE_DEVOPS_PROJECT) - Git remote (auto-detected from
origin) ~/.ado/config.json
Supported remote URL formats:
https://dev.azure.com/{org}/{project}/_git/{repo}https://{org}.visualstudio.com/{project}/_git/{repo}git@ssh.dev.azure.com:v3/{org}/{project}/{repo}
MIT — see LICENSE.