What is Nudge?
In 2018, Erik Gomez created Nudge, which is open source and has nine other contributors as of this writing.
Part of the beauty of Nudge is its simplicity—it doesn’t actually install any updates itself (it does invoke the
softwareupdate binary to check for or download Apple software updates, but it doesn’t actually install anything). That means if Apple changes how it does updates so as to make it particularly difficult for tools like Munki (yay!) or Jamf (eh…) to manage updates, you can just… nudge… users to install their updates via System Preferences.
How does it work?
There is a launch agent that checks to see if your major OS is up to date (e.g., 10.15) or if your minor OS is up to date (e.g., 10.15.2 build 19C57). It will pop up a window if the OS isn’t “up to date” (however you define it), and get more aggressive as the cut-off date (something you also define) gets closer (or has passed).
You build it with munkipkg, though I’d recommend distributing separately from the package both the nudge.json (renamed from example_config.json) and the update_ss.png image. The former you can even host online (not on the user’s machine), but both you may want to update from time to time, even if the rest of the Nudge package (including scripts, launch agent, your company logo) stay the same.
The Nudge script will check to see if the major OS and/or minor OS/build are/is up to date, and, if not, nudge the user to install the updates.
What does this look like to the user
Every half hour, the user will get a window that appears over whatever she is working on, and the window isn’t moveable and can’t be closed with a red X button.
Initially, there will be a Close button readily available.
With the default timer settings, the window will come back to the front once every 4 hours.
Once it’s within three days of the cut-off date, the user will have to click I understand in order to get the Close button to appear.
Then, the user is okay to click the Close button. Of course, your hope is that the user will just click Update Machine instead to actually get the machine to update instead of just dismissing the dialogue.
With the default timer settings, the window will come back to the front once every 2 hours.
The same click-I-understand-before-you-click-close-but-really-please-just-update-your-machine routine shows up, too, when there is only one day left.
With the default timer settings, the window will come back to the front once every 10 minutes.
If the cut-off date is within an hour or if it’s passed already, there is no option to close or say you understand. You can’t dismiss the window.
With the default timer settings, within an hour of the cut-off date, the window will be brought back to the foreground every 1 minute.
And with the default timer settings, when the cut-off date has passed, the window will be brought back to the foreground every 10 seconds.
What can you configure via the .json file?
I’m a huge fan of Munki, but one downside to using Munki to install Apple software updates is you can’t really add a preupgrade_alert for a non-optional item, which means you can’t really alert users that, say, a particular Apple software update may have the screen turn black for a full minute.
With Nudge, you can configure pretty much any of the text using the .json file.
You can also have the Update Machine button go wherever you’d like it to go. You can even have it invoke Munki or Jamf.
If you don’t want it to invoke up Munki or Jamf, or to launch up a pre-downloaded update or upgrade installer, you can also have this in your .json file:
so it just launches up System Preferences > Software Update, so the user can install updates via the “Apple sanctioned” way.
If you don’t want to bother the user every half hour, you can set the days_between_notifications preference. This goes by actual day and not necessarily a full 24 hours. For example, if the user was notified Thursday afternoon and dismissed the Nudge notification, she may see the notification again on Friday morning (since Friday is the next day after Thursday).
You can also adjust the timer settings to be more or less aggressive with how quickly the open window will be brought back to the foreground.
What else is there about Nudge?
This blog post isn’t intended to be a comprehensive Nudge handbook—just an introduction to Nudge.
You can (and should), of course, read the Nudge README.
I’d also highly recommend just reading the actual Nudge code, since it gives you a sense of the sequence of things and how it all works (especially if you read the comments in the code).
Finally, check out the #nudge channel on the MacAdmins Slack if you have any questions about how to use Nudge.