Review, create and manage Azure DevOps pull requests without leaving VS Code. Works with
Azure DevOps Services and Azure DevOps Server 2019 or later, with several organizations,
accounts and repositories at once.
- Browse pull requests with your own queries across every repository in the workspace.
- Review with real diffs, comment on any line of either side, vote, and track what you have viewed.
- Complete, auto-complete, abandon, retarget and edit pull requests; see policies, builds and work items.
- Create pull requests from your branch with templates, reviewers and work items.
- Get notified about reviews, comments, votes and builds.
- Optional AI help through the language models available in VS Code.
Getting started
- Install the extension and open a folder with a clone of an Azure DevOps repository.
- Open the Azure Pull Requests view in the activity bar.
- Click Sign in to {organization} in the view (or the status bar item) and choose how to sign in
(see Signing in).
Your repositories appear with their pull requests. Click a pull request to open it.
Needs VS Code 1.97 or later.
Features
Pull Requests view
- Organization › repository › query › pull request, with each PR's changed files and commits.
Other groupings: by organization, by query, or flat (
azurePrToolkit.groupBy).
- Queries (
azurePrToolkit.queries). Defaults: Waiting for my review, Assigned to my teams,
Created by me, All active, Completed (recent). Filters: status, creator and reviewer (@me,
@myTeams), branches, draft, labels, your vote and text. Each query shows top pull requests;
Load more… fetches the next ones.
- Repositories come from the Git extension and a scan of each workspace folder
(
azurePrToolkit.discovery.scanDepth). Pin Repository or Project shows repositories or whole
projects you have not cloned.
- Open in Browser and Copy Link on repositories, pull requests, files and commits.
Pull request page
Click a pull request to open its page. The Review view loads alongside.
- Title and description (both editable), status, author, branches (Change target).
- Complete…: the merge types your branch policies allow, commit message, delete the source branch,
complete work items, and override policies with a reason (if you are allowed to).
Set auto-complete… / Cancel auto-complete, Publish / Mark as draft,
Abandon / Reactivate.
- Your vote, and reviewers with their votes. Add required or optional reviewers, remove optional ones.
- Policies with their state. Build policies link to the build, open its logs in an editor and can be
re-queued. Status checks from other services.
- Merge conflicts, with Checkout to resolve locally.
- Linked work items and labels, which you can add and remove.
- Activity: pushes, votes and other events, PR-level discussion (comment, reply, set status), and
file comments that open the diff at their line.
Reviewing
- Diffs. Click a file in the Review view for its diff, or Review All Files for the multi-diff
editor. Files are read from Azure DevOps; nothing needs to be checked out.
- Iterations. Compare Iterations… switches between Base ↔ latest, Changes since my last
review and any pair of iterations (
azurePrToolkit.review.defaultCompare).
- Comments. Comment on any line of either side, or on a whole file (comment icon in the editor
title). Reply, edit and delete your comments, like comments, and Resolve, Reactivate or
set any of the six thread statuses. Resolve writes
azurePrToolkit.comments.resolveStatus.
PR-level discussion and comments on files outside the compared range are listed in the Review view.
- Viewed. Tick files as viewed. The mark is kept locally and cleared when a new push changes the
file.
azurePrToolkit.review.closeViewedFile closes the diff when you tick it.
- Vote from the Review view title or a pull request's context menu.
- Local copies. Some viewers (3D models, images, …) need a real file. Open Local Copy writes
the file and the other files of its folder at that commit to a cache folder and opens it, so
references such as
model.gltf → model.bin work. Download File… saves one file.
Suggestions
Select lines on the right side of a diff and choose Suggest Change from the context menu. Edit the
lines in the editor that opens, then click Post Suggestion. The comment contains a
```suggestion block, as in the web UI.
Apply Suggestion on such a comment edits your local file when the branch is checked out.
Otherwise it shows a preview and, after you confirm, commits the change to the source branch. It is
refused when the branch moved since you loaded the review, and for binary, Git LFS and non-UTF-8
files. Line endings and byte order marks are kept. The thread is then resolved.
Checkout
Checkout (PR page, PR context menu, Review view) fetches the source branch into your clone and
switches to it, creating a tracking branch when needed. You are warned about uncommitted changes
first. While the branch stays checked out, the right side of diffs for the latest iteration is your
local file, so IntelliSense, navigation and edits work, and comments on it are posted normally.
Creating pull requests
Create Pull Request is in the Pull Requests view title, on repository rows, in the Source
Control view title and in the command palette. After you push a branch that has no pull request, a
notification offers to create one (azurePrToolkit.create.promptAfterPush).
- Source is your current branch; target is
azurePrToolkit.create.defaultTarget or the
repository's default branch. An open PR from the same branch is linked. Push appears when the
branch is not on the server or has unpushed commits.
- Title comes from a single commit's subject, or from the branch name.
- Description comes from the pull request template on the target branch, found like Azure DevOps
does (
.azuredevops/, .vsts/, docs/, root; branch-specific templates first). Other templates
can be picked from a list.
- Reviewers start from
azurePrToolkit.create.defaultReviewers (! makes one required).
Work items mentioned as AB#123 or #123 in the branch name or commits are suggested.
Labels, draft and auto-complete.
- The commits and changed files of the pull request are shown next to the form (based on the merge
base Azure DevOps reports); Changes on a commit opens its diff through VS Code's Git integration.
Notifications
Every azurePrToolkit.notifications.interval seconds (default 120; four times less often while VS
Code is in the background) the extension checks for pull requests assigned to you or your teams,
others' comments on your pull requests and those you review, votes and finished builds on your pull
requests, and your pull requests completing, being abandoned or getting conflicts. You get a badge
on the Pull Requests view and one notification per check. Choose the kinds with
azurePrToolkit.notifications.events.
Mentions and images
In the comment box, @ suggests people, # work items (by number or title) and ! pull requests.
Mentions show as names. Images attached to the pull request are loaded on the PR page with your
credentials; images from other sites are shown as links and not loaded.
AI assist (optional)
Uses a language model available in VS Code, such as GitHub Copilot. Hidden when there is none or
azurePrToolkit.ai.enabled is off. The AI only suggests text. It never posts comments, votes,
commits or changes anything; every such step is your own click.
AI review of a pull request. Review with AI on the PR page, or Review Pull Request with AI
in the Review view title, sends every changed file (its diff and new content, plus the PR title and
description) to the model after you confirm. Review This File with AI in a diff's editor title
reviews one file.
- Findings are marked in the diffs: a gutter icon, a highlighted line and a short hint. Hover shows the
explanation and, when the AI proposes a fix, the change as a diff.
- From the hover, the lightbulb, or the AI findings group in the Review view:
- Create Comment from AI Finding opens a comment on those lines, in edit mode and prefilled
with the AI's text (a proposed fix becomes a
```suggestion block). Change it as you like,
then Post Comment, or Discard Draft.
- Preview AI Change shows the file with the fix applied, in a diff; nothing is written.
- Dismiss AI Finding removes it.
- Add your team's rules with
azurePrToolkit.ai.reviewInstructions. azurePrToolkit.ai.reviewMaxFiles
(default 100) limits how many files one review sends. Binary files, files over 400 KB and deleted
files are skipped.
Other commands: Summarize with AI on the PR page, and Write with AI in the Create form.
Signing in
The extension never opens a sign-in dialog by itself. When an organization needs credentials, the
view shows Sign in to {organization} and a status bar item appears.
| Account type |
Works with |
Notes |
| Microsoft Entra |
Services |
VS Code's built-in Microsoft sign-in. The organization's tenant is detected, so guest accounts work. |
| Personal access token |
Services and Server |
Kept in VS Code's secret storage. Scopes: Code (Read & write); Build (Read & execute) for logs and re-queue; Work Items (Read & write) to link work items; Identity (Read) to find reviewers. |
| Azure CLI |
Services |
az account get-access-token. Needs a trusted workspace. |
Each organization uses one account. It is chosen automatically when one of your accounts works;
change it with Choose Account for Organization. Azure PR: Manage Accounts adds and removes
accounts and can list an account's organizations and projects to pin.
Azure DevOps Server
Add each server:
"azurePrToolkit.servers": [
{ "url": "https://ado.contoso.com/tfs", "collection": "DefaultCollection" }
]
Sign in with a personal access token. The API version is detected (7.1 down to 5.0); set
apiVersion to skip detection. Remotes that look like an unconfigured server are listed in the view
with a link to this setting. Features the server does not support are hidden.
Settings
| Setting |
Default |
Description |
azurePrToolkit.queries |
5 queries |
Named queries shown under each repository |
azurePrToolkit.groupBy |
repo |
Grouping of the Pull Requests view: repo, org, query or flat |
azurePrToolkit.discovery.scanDepth |
2 |
Folder levels below each workspace folder scanned for repositories |
azurePrToolkit.discovery.exclude |
["**/node_modules"] |
Folders the scan skips |
azurePrToolkit.pinned |
[] |
Repository or project URLs to show without a clone |
azurePrToolkit.servers |
[] |
Azure DevOps Server instances |
azurePrToolkit.review.defaultCompare |
base |
base (all changes) or sinceLastReview |
azurePrToolkit.review.closeViewedFile |
false |
Close the diff when a file is marked viewed |
azurePrToolkit.review.openAllInMultiDiff |
false |
Open all files in the multi-diff editor when a review starts |
azurePrToolkit.comments.resolveStatus |
fixed |
Status written by Resolve |
azurePrToolkit.comments.showSystemEvents |
true |
Show votes, pushes and other events in the activity |
azurePrToolkit.complete.defaultMergeStrategy |
squash |
Merge type preselected when completing |
azurePrToolkit.complete.deleteSourceBranch |
true |
Preselect deleting the source branch |
azurePrToolkit.complete.transitionWorkItems |
true |
Preselect completing work items |
azurePrToolkit.create.defaultTarget |
"" |
Target branch for new pull requests (per folder); empty uses the default branch |
azurePrToolkit.create.defaultReviewers |
[] |
Reviewers for new pull requests (per folder); ! makes one required |
azurePrToolkit.create.promptAfterPush |
true |
Offer to create a pull request after a push |
azurePrToolkit.notifications.enabled |
true |
Background checks and notifications |
azurePrToolkit.notifications.interval |
120 |
Seconds between checks (at least 60) |
azurePrToolkit.notifications.events |
all on |
assigned, comments, votes, builds, statusChanges |
azurePrToolkit.ai.enabled |
true |
AI commands (still hidden without a language model) |
azurePrToolkit.ai.model |
"" |
Chat model id for AI features; set it with Azure PR: Choose AI Model (empty: the first model VS Code offers) |
azurePrToolkit.ai.reviewInstructions |
"" |
Team review guidelines added to every AI review request |
azurePrToolkit.ai.reviewMaxFiles |
100 |
Most files one AI review sends to the model |
Privacy and security
- No telemetry. The extension collects and sends no usage data.
- Requests go only to your Azure DevOps organizations and servers. With AI assist, the content listed
for each command goes to the language model you use in VS Code, and only when you run the command.
AI output is shown as suggestions; it is never posted or applied without your action, and links
in it cannot run commands.
- Credentials are sent only to the organization's own host and never follow redirects. Personal
access tokens are kept in VS Code's secret storage. Tokens are removed from the log and from
error messages.
- Text from pull requests is treated as untrusted: comments, hovers and pages show it without HTML,
scripts or command links, and pages load no remote content.
Please report security problems as described in SECURITY.md.
Troubleshooting
- Azure PR: Show Log shows every request (without tokens) and errors.
- A repository is missing. Check that its remote points to Azure DevOps. For a server, add it to
azurePrToolkit.servers. Increase azurePrToolkit.discovery.scanDepth for deeply nested clones.
- "Sign in" keeps appearing. Run Choose Account for Organization and pick an account that has
access, or add a personal access token with the scopes above.
- Behind a proxy or with a self-signed certificate. The extension uses VS Code's network settings
(
http.proxy, system certificates, http.proxyStrictSSL).
Known limitations
- "Viewed" marks are kept in VS Code and are not synced with the web UI.
- Azure DevOps Server works with personal access tokens only (no Windows authentication yet).
- Local copies include the files of the same folder, not sub-folders.
- The multi-diff editor can be slow with very large pull requests; you are asked before opening more
than 300 files at once.
Feedback and issues
Report bugs and ideas at
github.com/windowslucker1121/azure-pr-toolkit-issues.
Please include the extension and VS Code versions and the relevant lines from the
Azure Pull Request Toolkit output channel (remove anything confidential).
License
Proprietary, free to use: see LICENSE. Bundled open-source components are listed in
ThirdPartyNotices.txt.
| |