diff --git a/Documents/bin/retry b/Documents/bin/retry
new file mode 100755
index 0000000000000000000000000000000000000000..8cc714cec8f84f6b69a457c7af07fb5fbd343475
--- /dev/null
+++ b/Documents/bin/retry
@@ -0,0 +1,40 @@
+#!/bin/sh
+set -eu
+
+alias red="printf '\e[1;91m%s\e[0m\n'"
+usage () {
+    echo "$(basename "$0"): RETRIES COMMAND [ARG1 [ARG2 [...]]]"
+    exit 1
+}
+
+if [ "$#" -lt 2 ] || [ "$1" -lt 1 ]
+then
+    usage
+fi
+
+retries="$1"
+shift
+
+for _ in $(seq "$retries")
+do
+    "$@" || status="$?"
+    if [ "${status:-0}" -eq 0 ]
+    then
+        break
+    elif [ "$_" -eq "$retries" ]
+    then
+        red "${1} failed too many times." >&2
+        exit "$status"
+    else
+        case "$_" in
+            1) duration=5;;
+            2) duration=15;;
+            3) duration=30;;
+            4) duration=60;;
+            5) duration=120;;
+            *) duration=300;;
+        esac
+        red "${1} failed, going to retry in ${duration} seconds." >&2
+        sleep "$duration"
+    fi
+done