Skip to content


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

RETALIATION - A Jenkins "Extreme Feedback" Contraption

Status boards are for ‘project managers’! Retaliate to a broken build with a barrage of foam missiles.


Retaliation is a Jenkins CI build monitor that automatically coordinates a foam missile counter-attack against the developer who "breaks the build". It does this by playing a pre-programmed control sequence to a USB Foam Missile Launcher to target the offending code monkey.


In Detail

At a deeper level Retaliation is more than just a "simple python script". It's a radical rethink into how to manage software development teams and the software development life cycle. It works on a deep psychological level to offer productivity improvements unseen in all those other "extreme programming" things external consultants speak about. The primal threat of mutually assured destruction lurking in every coder's psyche ensures that even your sloppiest developers will never forget to "checkin that missing file" again!


Retaliation brought us the productivity improvement pair-programming promised but could never deliver! We've seen a 13.37% decrease in build breakage since its implementation.

Will, Chief Code Hacker

Honestly, would you work in a dev team with a Lava Lamp build notifier? What next? Nyan Cat mouse mats? Real coders work under the threat of Retaliation!

Matt, Coding Machine

Does what it says on the box. I've seen improvements in my team and we haven't even installed it yet! Just the sheer threat has kicked my team's coding into line.

Tom, Head Code Captain

You can see Retaliation in action in this video.

How to Use

  1. Mount your Dream Cheeky Thunder USB Missile Launcher in a central and fixed location.

  2. Download the script onto the system connected to your missile launcher.

  3. Modify your COMMAND_SETS in the script to define your targeting commands for each one of your build-braking coders (their user ID as listed in Jenkins). A command set is an array of move and fire commands. It is recommend to start each command set with a "zero" command. This parks the launcher in a known position (bottom-left). You can then use "up" and "right" followed by a time (in milliseconds) to position your fire.

    You can test a set by calling with the target name. e.g.:

     python "[developer's user name]"

    Trial and error is the best approach. Consider doing this secretly after hours for best results!

  4. Setup the Jenkins notification plugin. Define a UDP endpoint on port 22222 pointing to the system hosting Tip: Make sure your firewall is not blocking UDP on this port.

  5. Start listening for failed build events by running the command:

     python stalk

    (Consider setting this up as a boot/startup script. On Windows start with pythonw.exe to keep it running hidden in the background.)

  6. Wait for DEFCON 1 - Let the war games begin!


  • A Dream Cheeky Thunder USB Missile Launcher. It may work with other models but I've only tested with this one.
  • Python 2.6+
  • Python PyUSB Support (on Mac use brew to "brew install libusb")
  • Should work on Windows, Mac and Linux

Thanks to the dev team at PaperCut (working on print management software) for "coping a few in the head" during testing!


  • Carefully select the mounting location. Pick a central location in your office space. Endeavor to maximize angular separation between targets. This will reduce the likelihood of friendly fire incidents... but then again this is comes with the territory and is all part of the fun!

  • Consider sticking down the launcher using double-sided tape to lock its position. This reduces the chance of someone using a "physical hack" to disrupt the coordinate targeting system.

  • If your build breaking perpetrator is at point-blank range, for health and safety reasons we suggest targeting their keyboard or monitor rather than their head.

  • If you have a wide area to cover, consider multiple missile launches (e.g. cluster support!). Set the script up on multiple machines and configure multiple endpoint notifications in Jenkins.

  • To get this working on Windows, you'll need to install PyUSB and libusb-win32. This can be a little tricky but if you've mastered CI build scripts then this should be easy!

  • If your dev team is Down Under and you're finding Retaliation is loosing its effect, try dipping each missile in some Vegemite for some added punch :-)


  • Great to see Retaliation mashed up with the Raspberry Pi. It's also got a metion in the Guardian as the 4th best thing to do with the Pi!


  • Should we also make a version compatible with Hudson? :-)

Other Uses also doubles as a command-line scripting API for the Dream Cheeky USB Missile Launcher. You can invoke it to control the device from a script or command-line as follows: reset right 3000 up 700 fire 1

If you do come up with some other cool uses or ideas for retaliation, please share your story!


A Jenkins "Extreme Feedback" Contraption - fire foam rockets at build breaking perpetrators.






No releases published


No packages published

Contributors 4