CLI wrapper to trigger and tail Azure DevOps pipelines
Project description
_ _ _ _ _
_ __ (_)_ __ ___| (_)_ __ ___ ___| |_| |
| '_ \| | '_ \ / _ \ | | '_ \ / _ \/ __| __| |
| |_) | | |_) | __/ | | | | | __/ (__| |_| |
| .__/|_| .__/ \___|_|_|_| |_|\___|\___|\__|_|
|_| |_| trigger · tail · ship
A minimal CLI to trigger and tail Azure DevOps pipelines directly from your terminal — no browser, no copy-paste.
Why?
The typical workflow:
- Push code
- Open browser → select org → select project → select pipeline → select branch → click Run
- Wait for logs to appear
- Copy error → paste into Claude Code
- Fix → repeat
With pipelinectl:
pipelinectl push-run build-and-test
# ^ pushes, triggers, tails logs, exits non-zero on failure
Claude Code sees the error output directly if the pipeline fails.
Installation
# Homebrew (macOS, recommended)
brew tap Borrelworst/pipelinectl
brew install Borrelworst/pipelinectl/pipelinectl
# PyPI
pip install pipelinectl
For local development:
pip install --editable ".[dev]"
Setup
pipelinectl init
Prompts for:
- Azure DevOps organization (e.g.
mycompany) - Azure DevOps project (e.g.
MyProject) - Personal Access Token (PAT) — needs Build: Read & execute and Pipeline Resources: Use
- Default branch (fallback when not inside a git repo)
Config is saved to ~/.pipelinectl/config.toml with chmod 600.
Set ADO_PAT as an environment variable to override the PAT from config.
Commands
pipelinectl run PIPELINE
Trigger a pipeline and wait for it to finish.
pipelinectl run build-and-test # uses current git branch
pipelinectl run build-and-test --branch main # explicit branch
pipelinectl run 42 # by numeric pipeline ID
pipelinectl run deploy -v ENV=staging -v REGION=westeurope # queue-time variables
pipelinectl run install -P dev=true -P version=1.2 # YAML template parameters
pipelinectl run build-and-test --logs # stream live log output
pipelinectl run build-and-test --no-follow # trigger only, don't wait
pipelinectl run build-and-test --push # git push first, then trigger
Branch resolution order: --branch flag → current git branch → config default_branch.
PIPELINE is matched by case-insensitive substring against pipeline names, or exact numeric ID. If multiple pipelines match, the command errors and lists them.
Exit code is 0 on success, 1 on failure.
Approval gates — when the pipeline reaches an approval gate, pipelinectl pauses and prompts you to approve or reject inline:
⏸ Approval required
Approve? [y/N]:
pipelinectl push-run PIPELINE
Shortcut for run --push. Pushes the current branch then triggers the pipeline.
pipelinectl push-run build-and-test
pipelinectl push-run build-and-test --logs
pipelinectl list
List all pipelines in your project.
pipelinectl list
pipelinectl list --filter deploy
pipelinectl params PIPELINE
Show queue-time variables and template parameters for a pipeline.
pipelinectl params build-and-test
pipelinectl params 42
pipelinectl status PIPELINE
Show recent run history.
pipelinectl status build-and-test
pipelinectl status deploy --top 10
pipelinectl logs PIPELINE [RUN_ID]
Fetch logs from a previous run without re-triggering.
pipelinectl logs build-and-test # most recent run
pipelinectl logs build-and-test 98765 # specific run ID
pipelinectl logs build-and-test --last 2 # 2nd most recent
Config file
~/.pipelinectl/config.toml:
[azure_devops]
organization = "mycompany"
project = "MyProject"
pat = "xxxx" # or use ADO_PAT env var
default_branch = "main" # fallback when not in a git repo
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pipelinectl-0.4.1.tar.gz.
File metadata
- Download URL: pipelinectl-0.4.1.tar.gz
- Upload date:
- Size: 14.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9de1bfa7ef9100f8c5889ae45ee52e77908718eb94eaacaefdd8688452b7804
|
|
| MD5 |
434dd60623474461460bde04b6fae2b7
|
|
| BLAKE2b-256 |
a57fbd4d146a47d283912d064f56e664ddcf0a36becacd8c304cd26c11460a0b
|
Provenance
The following attestation bundles were made for pipelinectl-0.4.1.tar.gz:
Publisher:
publish.yaml on Borrelworst/pipelinectl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pipelinectl-0.4.1.tar.gz -
Subject digest:
a9de1bfa7ef9100f8c5889ae45ee52e77908718eb94eaacaefdd8688452b7804 - Sigstore transparency entry: 1331426696
- Sigstore integration time:
-
Permalink:
Borrelworst/pipelinectl@20cb0fade3e06211a35019720431b4369b941ade -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/Borrelworst
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@20cb0fade3e06211a35019720431b4369b941ade -
Trigger Event:
release
-
Statement type:
File details
Details for the file pipelinectl-0.4.1-py3-none-any.whl.
File metadata
- Download URL: pipelinectl-0.4.1-py3-none-any.whl
- Upload date:
- Size: 13.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4efe8c7594f55d98bb7a36e6c30b0faa6a9f25ff83de13ff3c879a8dff320e55
|
|
| MD5 |
f2545508db0c722f50162ffce47181b7
|
|
| BLAKE2b-256 |
1f7819ddf983d7cd3ed94025ac74457763a42abf1e2200095fbac4b75974ed28
|
Provenance
The following attestation bundles were made for pipelinectl-0.4.1-py3-none-any.whl:
Publisher:
publish.yaml on Borrelworst/pipelinectl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pipelinectl-0.4.1-py3-none-any.whl -
Subject digest:
4efe8c7594f55d98bb7a36e6c30b0faa6a9f25ff83de13ff3c879a8dff320e55 - Sigstore transparency entry: 1331426818
- Sigstore integration time:
-
Permalink:
Borrelworst/pipelinectl@20cb0fade3e06211a35019720431b4369b941ade -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/Borrelworst
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@20cb0fade3e06211a35019720431b4369b941ade -
Trigger Event:
release
-
Statement type: