A cross-platform menu bar app that lists your open Azure DevOps pull requests and runs AI-powered code reviews with a single click.
Repository: https://github.com/CodeLifter-Platform/LGTM
| Platform | Installer | Portable |
|---|---|---|
| macOS (Apple Silicon) | LGTM-arm64.dmg | LGTM-arm64.zip |
| Windows | LGTM-Setup.exe | LGTM-Portable.exe |
Note: The app is not code-signed yet. On macOS, right-click → Open to bypass Gatekeeper. On Windows, click "More info" → "Run anyway" in SmartScreen.
| Version | Date | macOS | Windows | Notes |
|---|---|---|---|---|
| v0.5.58 | 2026-05-13 | dmg · zip | installer · portable | Release notes |
| v0.5.54 | 2026-05-13 | dmg · zip | installer · portable | Release notes |
| v0.5.39 | 2026-05-13 | dmg · zip | installer · portable | Release notes |
| v0.5.25 | 2026-04-29 | dmg · zip | installer · portable | Release notes |
| v0.5.23 | 2026-04-28 | dmg · zip | installer · portable | Release notes |
| v0.5.22 | 2026-04-26 | dmg · zip | installer · portable | Release notes |
| v0.5.21 | 2026-04-26 | dmg · zip | installer · portable | Release notes |
| v0.5.8 | 2026-04-13 | dmg · zip | installer · portable | Release notes |
| v0.5.7 | 2026-04-13 | dmg · zip | installer · portable | Release notes |
- Multi-agent support — choose between Claude Code, Codex, and Augment Code, each with selectable models
- Clone-then-review — shallow-clones the repo remotely using your PAT, runs the agent against the full codebase in an isolated temp directory
- Streaming review output — real-time markdown-rendered review results streamed directly into the app
- Per-repo prompt configuration — auto-detect from repo conventions, specify a file in the repo with autocomplete, set a custom local path with a native file picker, or fall back to a global default
- Secure PAT storage — your Azure DevOps Personal Access Token is stored in the OS keychain (macOS Keychain / Windows Credential Manager) with encrypted fallback
- Live PR list — all active PRs from your org displayed as
Repo/PrId/PRName, sorted by creation date (newest first) - Status indicators — pulsing yellow (cloning/in progress), green (completed), red (failed)
- Webhook + polling — real-time updates via Azure DevOps Service Hooks with polling fallback
- Concurrent reviews — run multiple reviews across different PRs simultaneously
- Node.js 18+ and npm
- At least one AI agent CLI installed and in PATH:
claude,codex, orauggie - An Azure DevOps PAT with at least
Code (Read)scope
npm install
npm startOn first launch the app appears in your menu bar / system tray and prompts for your Azure DevOps org URL and PAT.
# macOS (.dmg + .zip)
npm run build:mac
# Windows (.exe installer + portable)
npm run build:win
# Both
npm run build:all
# Quick unpacked build for testing
npm run build:mac:dir # → dist/mac/LGTM.app
npm run build:win:dir # → dist/win-unpacked/LGTM.exeAccess settings via the gear icon in the app toolbar or right-click the tray icon → Settings.
| Setting | Default | Description |
|---|---|---|
| Default agent | Claude | Which AI agent to use for reviews |
| Agent model | Per-agent default | Model selection per agent (e.g., Opus 4.6, Sonnet 4.6, o4-mini) |
| Global prompt path | (bundled) | Fallback prompt file if no repo-specific prompt is found |
| Webhook port | 3847 |
Port for Azure DevOps Service Hook events |
| Polling interval | 60s |
PR list refresh interval |
When starting a review, the prompt is resolved in this order:
- Custom local path — an absolute path on your machine configured per-repo in settings
- Specific repo file — a file path within the repo configured per-repo (with autocomplete)
- Convention auto-detect — scans the cloned repo for:
.lgtm/review-prompt.md,.github/pr-review-prompt.md,PR_REVIEW_PROMPT.md,NYLE_PR_PROMPT.md - Global custom path — the global prompt path from settings
- Bundled default —
resources/REPO_REVIEW_TEMPLATE.mdshipped with the app
src/
├── main/
│ ├── main.js # Electron main process, tray, window, IPC
│ ├── preload.js # Context bridge (renderer ↔ main)
│ ├── pat-store.js # Keytar + encrypted electron-store dual storage
│ ├── devops-client.js # Azure DevOps REST API client
│ ├── agent-registry.js # Agent discovery (claude, codex, auggie)
│ ├── agent-runner.js # Clone → resolve prompt → spawn agent → stream output
│ ├── repo-cloner.js # Shallow git clone into temp directories
│ ├── prompt-resolver.js # Per-repo prompt resolution chain
│ └── webhook-server.js # HTTP server for DevOps webhooks
├── renderer/
│ ├── index.html # App UI (PAT setup, PR list, review detail, settings)
│ ├── styles.css # Dark theme
│ └── app.js # UI logic, streaming output, repo config
└── assets/
└── tray-icon*.png # Menu bar icons (Template for macOS, colour for Windows)
Ideas considered and parked, kept here so they don't get lost:
- Chained Ticket → Review → Resolve flow. After the ticket prompt opens a PR, optionally run the review prompt against that PR, then the resolve prompt against the resulting threads — all before handing the PR to the human. Promising in theory (one-shot end-to-end), but only worth building once the agent runner can pin different models to each phase: single-model self-review is weak signal because the model that wrote the code is the worst candidate to find its own blind spots, and the resolver would rubber-stamp its own review. Until per-phase model selection lands, the safer pre-flight is a self-audit step inside the ticket prompt (read your own diff against the rule stack and acceptance criteria, list weak spots under Flags for Reviewer), and let the next independent LGTM run drive the actual review.
MIT