MR Buddy
VS Code extension that fills the gap in GitLab's web UI: filter merge requests you're a reviewer on by whether you've approved them yet.
Features
- Reviewing — all open MRs where you're a reviewer, with
[approved/total] count
- Needs My Approval — reviewer MRs you haven't approved yet (the filter GitLab's web UI lacks)
- Authored by Me — your open MRs
- Assigned to Me — MRs assigned to you
- Search / filter across all sections at once — by author, title, MR number, project or branch
- Notes — pin a reminder to any MR; shown on hover and synced across all your windows/worktrees
- Grouped by author, collapsed by default, ordered by whoever has the most recent activity
- Hover tooltip shows per-reviewer approval status
- Inline Approve action, Open in browser, Copy URL
- Auto-refresh on a configurable interval
- Works with self-hosted GitLab (set
mrBuddy.gitlabHost)
Install
Search for MR Buddy in the VS Code Extensions view, or install from the Marketplace listing.
The MR Buddy icon will appear in the activity bar after install.
Build from source
git clone https://github.com/nuwanprabhath/mr-buddy.git
cd mr-buddy
npm install
npm run install-local
install-local deletes any stale .vsix, builds a fresh one, and installs it.
Alternatively, install via the UI: Cmd+Shift+P → Extensions: Install from VSIX… → select the generated .vsix.
Sign in
Cmd+Shift+P → MR Buddy: Sign In to GitLab
- Enter your GitLab host (default:
https://gitlab.com)
- Paste a Personal Access Token with scopes
api and read_user
— create one at https://gitlab.com/-/user_settings/personal_access_tokens
Updating after code changes
npm install
npm run install-local
Then reload the window: Cmd+Shift+P → Developer: Reload Window.
Searching
Click the 🔍 icon in any section's title bar (or press Cmd+Alt+F / Ctrl+Alt+F while an MR Buddy view is focused). The list filters live as you type, across all four sections at once.
| Query |
Matches |
tokmakoff |
anything mentioning tokmakoff — author, title, branch… |
@tokmakoff |
MRs authored by tokmakoff only |
!1131 |
MR number 1131 |
@jinadl fix |
Jin's MRs whose title/branch mentions "fix" |
Section headers show 3 of 12 — <query> while a filter is active. Clear it with the ✖ button in the title bar.
Author groups
Every section groups its MRs by author and starts fully collapsed, so a busy "Reviewing" list doesn't bury you in rows. Expand @someone (N) to see their MRs.
- Ordering: groups are sorted by whichever author has the most recently updated MR — not alphabetically, not by MR count
- Collapse state is remembered machine-wide: collapse or expand a group and it stays that way in every window/worktree, across restarts
- The Viewed sub-section groups its contents by author too, independently of the main list
- Authored by Me is exempt — it's always just you, so it stays a flat list
Notes
Attach a private reminder to any MR — "not ready to review yet, pipeline still running".
- Add or edit: 📝 inline icon on the row, right-click → Add / Edit Note, or
Cmd+Alt+N
- The note appears at the top of the hover tooltip, and the row is marked 📝 in the list
- Clear it: right-click → Clear Note, or open the note and submit an empty value
- Notes are searchable — the filter matches note text too
Notes live in VS Code's globalState, which is machine-wide: a note added in one window or worktree shows up in all of them. Other open windows pick up the change on their next refresh (manual refresh or the auto-refresh interval).
How "Needs My Approval" works
The GitLab REST API has no approved_by_me=false filter, but /projects/:id/merge_requests/:iid/approvals returns who has approved each MR. MR Buddy fetches that per reviewer-MR and filters client-side — no scraping needed.
Configuration
| Setting |
Default |
Notes |
mrBuddy.gitlabHost |
https://gitlab.com |
Your GitLab instance URL |
mrBuddy.refreshIntervalMinutes |
5 |
0 disables auto-refresh |
mrBuddy.showDrafts |
true |
Include draft MRs |