Greenlight stoplight showing the green lamp lit
All clear

Windows tray notifier  ·  Azure DevOps & GitHub

Your build broke forty minutes ago.
Congratulations.

Greenlight sits in your tray and watches your pipelines and pull requests across Azure DevOps and GitHub. Red, amber, green. You glance, you know, you get back to work. No dashboard tab to babysit, and a free tier that is a free tier rather than a countdown — 5 pipelines, 5 repositories, one account, for as long as you like.

$0
Free tier, no expiry
2
Providers
4
Lamp states
0
Browser tabs

Section 01 — Signal codes

Four lamps. Infinite disappointment.

01 Green

Everything passes

Nothing needs you. Suspicious. Go get coffee before somebody notices.

02 Amber

Running, or a review is waiting

Someone wants your opinion. You will give it. It will be ignored.

03 Red

A pipeline is broken

It worked on your machine. Truly one of the great unsolved mysteries.

04 Dark

Disconnected, or clueless

Same emotional state as your access token on day 91.

Section 02 — Simulator

Try the lamp. Break nothing.

State 01

All clear

Everything passes

Nothing needs you. Suspicious. Go get coffee before somebody notices.

The real tray icon mirrors this state. The red one is the most common in production.

Section 03 — Sound alerts

Point any status at a .wav and let the office hear it

Every event takes its own .wav file. Ours are chosen with taste and restraint: green gets “Yeah, baby, yeah!”, amber gets “I've got a bad feeling about this”, and red — obviously — gets “Bring out your dead!” Assign one below and press Play.

Green Build recovered

Assigned .wav

yeah-baby.wav — Austin Powers

“Yeah, baby, yeah!”

Amber Review requested

Assigned .wav

bad-feeling.wav — Star Wars

“I've got a bad feeling about this.”

Red Build failed

Assigned .wav

bring-out-your-dead.wav — Monty Python

“Bring out your dead!”

Section 04 — Evidence

The window you'll open twice a day

Runs grouped by pipeline, branch chips, durations, and a strip of little squares that tells you how long this has been going wrong. Click one, the browser opens, you sigh.

The Builds tab, honestly captured. Some of those squares are already red.

Greenlight Builds tab listing recent pipeline runs, each with a branch chip, who triggered it, a duration and a strip of green and red status squares
Greenlight Pull Requests tab: five open pull requests, each showing its branch, target, author, age and how many approvals it is still waiting on
Pull requests, filtered to yours or everyone's — with the approval count you have been avoiding reading.
Greenlight Settings tab: connected GitHub and Azure DevOps accounts, a per-event notification list with sound pickers and toggles, and the polling interval
Settings: both providers connected, and every notification switched on or off one event at a time.

Section 05 — Spec sheet

What it does, in the driest possible terms

Providers

Azure DevOps + GitHub, one polling loop

Your team never agreed on one. It's fine.

Pull requests

Needs review / approved / changes requested

Filterable, so you can locate the PR you've been dodging.

Builds

Grouped by definition, branch, duration

Includes who triggered it. That field gets read the most.

Tray lamp

Aggregate health across every connection

One pixel now carries your whole release process.

Toasts

Failures, recoveries, review requests

Individually configurable, for people who mute everything.

Tokens

Windows Credential Manager, DPAPI

Not a desktop file called tokens_FINAL.txt.

Access

Read-only against both providers

It never merges, approves, cancels or queues. That's still you.

Telemetry

None

Mostly because writing telemetry sounded like work.

Hardware

Build-indicator plugin contract

Drives a real desk stoplight. Visible from the hallway.

Footprint

Single instance, starts minimised

It does not want a relationship with you.

Section 06 — What it watches

Everything you'd otherwise keep a tab open for

W-01

Pull requests

Awaiting your review, your own PRs, approvals and change requests — grouped, badged and filterable across every project.

W-02

Pipeline builds

Every run with a compact history strip: needs attention, in progress, and the ones that just passed by accident.

W-03

GitHub checks

Check runs and workflow results sit beside Azure DevOps builds in the same list, because your team never agreed on one provider.

W-04

Tray & toasts

A colour-coded tray lamp and actionable toasts. Open the item, or dismiss it and pretend you never saw it.

W-05

Secure by design

PATs and OAuth tokens live in Windows Credential Manager, DPAPI-encrypted. Never a config file called tokens_FINAL.txt.

W-06

A real desk stoplight

A plugin contract drives actual hardware. Steady colour for the verdict, flashing while it builds, visible from the hallway.

The long version, feature by feature, lives on the features sheet.

Section 07 — The hardware bit

A real stoplight on your desk, wired to your build

Greenlight ships a plugin contract for physical build indicators. Implement one small interface, drop the DLL in the plugins folder, and your lamp gets every state change — steady colour for the verdict, flashing while a build runs. The included K8055 plugin drives a three-lamp desk light over a USB board. Your teammates will hate it, which is how you know it works.

  • Plugins load in isolation — a lamp that throws takes itself down, not the app.
  • A 32-bit bridge process talks to the legacy board driver over stdin.
  • Restart a lamp from Settings when its board wanders off.
See the lamp setup

Coming soon — video course

Hooking up the stoplight, on camera

A short demo series is planned: parts and tools, relays and the K8055 board, the x86 bridge, the plugins folder, and a pipeline broken on purpose so the plastic lamp goes red on film. Mistakes left in, because that is the part you actually need.

No waitlist, no email capture. It will simply appear on the lamp page.

Section 08 — Commissioning sequence

Running in about a minute

  1. 01

    Connect

    Paste a Personal Access Token or sign in with Azure AD, then choose the projects, repos and pipelines worth watching.

  2. 02

    Greenlight watches

    It polls on a schedule you set, and never writes anything back. Read-only, so the damage stays manual.

  3. 03

    Glance

    The lamp stays honest. Click a row to jump to the PR or build. That is the entire user journey.

The Meddling Idiot mascot
The Meddling Idiot. He shipped on a Friday. He is not sorry.

Section 09 — Your tokens stay yours

Nothing leaves the machine

Storage

Personal Access Tokens live in Windows Credential Manager, DPAPI-encrypted per user, keyed by connection.

Not stored in

settings.json, log files, or the meddlingidiot.com account you downloaded this with — that one knows your email address and nothing else.

Network

Your remotes and the update feed. That is the entire list.

Scopes

Read-only throughout: Code (read), Build (read), Identity/Profile (read) on Azure DevOps; Pull requests (read) and Actions (read) on GitHub, or classic repo.

Section 10 — On your phone

Greenlight for iOS — coming soon

The same stoplight, the same two providers, on the home screen and the Lock Screen. Native Swift, because a home-screen widget has to be one — iOS renders it out of process, and nothing else gets to draw there.

The Greenlight iOS Builds tab: a green stoplight card reading All clear, everything is passing across 55 pipelines, a warning that GitHub timed out after 20 seconds, and a list of Azure DevOps pipelines each with a row of pass/fail squares, branch, duration and who triggered it.
Builds — the lamp, then every pipeline under it. The amber note is the app admitting GitHub timed out rather than quietly showing you stale squares.
The Greenlight iOS Pull Requests tab: three counters reading zero waiting on you, four yours open and three approved, then a section of approved and ready to merge pull requests followed by a waiting section, each row showing its number, title, repository and branch.
Pull requests — split into approved-and-ready versus still waiting, so the ones you can actually land are at the top.
The Greenlight iOS Settings tab: GitHub and Azure DevOps connections with their status, a notify-me-when list with toggles for a build breaks, a build recovers, a review is requested and my PR is approved, and display options for hiding draft pull requests and runs per pipeline.
Settings — both providers, and notifications chosen one event at a time rather than all or nothing.
An iPhone home screen with three Greenlight widgets: a small one showing a green stoplight and All clear, nothing needs you; a large Builds widget listing pipelines with rows of green, red and grey squares; and a medium Pull Requests widget listing three pull requests with approved and waiting icons.
Home screen — small, medium and large, all three stamped with how long ago they last heard anything.
An iPhone Lock Screen showing the time and a Greenlight Live Activity two thirds of the way down: an amber stoplight beside the pipeline name Automation.Nuke, running on main, a timer reading 3:44, a progress bar and an estimate of six minutes remaining.
Lock Screen — a tracked build, below the clock and above the flashlight. Tap Track on a run and it stays there until it lands.

Home screen

The stoplight at a glance, your pull requests, or recent pipeline runs as pass/fail squares. Small, medium and large.

Lock Screen

Circular, rectangular and inline accessories. They render monochrome, so every state carries a shape as well as a colour — the light is still readable when the hue is gone.

Dynamic Island

A tracked build compacts to a lamp and a timer, and expands to the pipeline, the branch and its progress.

Honest about iOS

The desktop app polls every thirty seconds because it is always running. A phone is not. iOS schedules background work when it feels like it, so every widget shows how old its data is and dims when that answer stops being good enough. No widget here will ever claim to know something it does not.

In TestFlight now, not yet on the App Store. Same tokens, same read-only scopes, same rule about credentials never leaving the device — on iOS they live in the Keychain rather than Credential Manager.

Section 11 — Testimonials, three of them allegedly

Praise from people who exist

“I used to find out main was broken from a standup. Now I find out from a small red circle, thirty seconds after I cause it.”

Backend developer, allegedly

“We were about to pay per seat for a cat to tell us the same thing. This is free for now and it does not purr at me.”

Team lead with a budget

“The desk stoplight has ended two arguments and started five. Net positive.”

Person with a USB board

Actually real

“Handier than a pocket on a shirt”

A real user, name withheld

Three of the above were written by us and are labelled as such. The green one is a verbatim quote from somebody who actually uses it.

Section 12 — Anticipated complaints

Questions you were about to ask

Does it fix the build?

No. It reports the failure quickly and in a tasteful enamel red. The fixing part remains, tragically, yours.

Why not pay for CatLight?

You could. You also could have written tests. We are all making choices here.

Mac or Linux?

It's a Windows tray app wired into Credential Manager. This page works on your phone, which is legally almost the same thing.

A physical stoplight, really?

Plugin contract plus a K8055 relay bridge. Nothing communicates healthy team culture like a red lamp nobody will admit to owning.

Is there a course for building it?

Planned. Parts, relays, the 32-bit bridge, plugin folder, and a pipeline broken on purpose for the shot. Details on the lamp page.

More answers, same tone →

GREENLIGHT

Put a light on it.

Free while it is in beta, small, and determined to stay out of your way until the exact moment it shouldn't.

Download the installer

v0.0.1  ·  Windows 10 / 11 x64  ·  installs per user

An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.