Create mac-cleanup.sh
diff --git a/macos/mac-cleanup.sh b/macos/mac-cleanup.sh
new file mode 100644
index 0000000..9c2fa8d
--- /dev/null
+++ b/macos/mac-cleanup.sh
@@ -0,0 +1,91 @@
+# Example how to setup a clean-up step for the Buildkite Agent on macOS
+
+# Create a "buildkite" user first with a clean home directory.
+#
+# The agent will run as this "buildkite" user and will be monitored by a launchd
+# service that runs a "buildkite-wrapper" script, which will launch the actual
+# agent and clean-up after each job. (launchd will restart the service automatically
+# after it exits.)
+
+cat > /Library/LaunchDaemons/de.geheimspeicher.buildkite-agent.plist <<'EOF'
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>Label</key>
+  <string>de.geheimspeicher.buildkite-agent</string>
+  <key>WorkingDirectory</key>
+  <string>/usr/local/bin</string>
+  <key>ProgramArguments</key>
+  <array>
+    <string>/usr/local/bin/buildkite-wrapper</string>
+  </array>
+  <key>RunAtLoad</key>
+  <true/>
+  <key>KeepAlive</key>
+  <true/>
+  <key>ProcessType</key>
+  <string>Interactive</string>
+  <key>ThrottleInterval</key>
+  <integer>10</integer>
+  <key>StandardOutPath</key>
+  <string>/usr/local/var/log/buildkite-agent.log</string>
+  <key>StandardErrorPath</key>
+  <string>/usr/local/var/log/buildkite-agent.log</string>
+</dict>
+</plist>
+EOF
+
+chown root:wheel /Library/LaunchDaemons/de.geheimspeicher.buildkite-agent.plist
+chmod 0644 /Library/LaunchDaemons/de.geheimspeicher.buildkite-agent.plist
+
+cat > /usr/local/bin/buildkite-wrapper <<'EOF'
+#!/bin/bash
+
+set -x
+
+OS_VERSION=$(sw_vers -productVersion)
+MACHINE_TYPE=$(system_profiler SPHardwareDataType | grep 'Model Name' | cut -d':' -f2 | tr -d ' ' | tr '[:upper:]' '[:lower:]')
+BUILDKITE_AGENT_TAGS="queue=macos,kind=worker,os=macos,os-version=${OS_VERSION},machine-type=${MACHINE_TYPE}"
+
+# Kill all processes that might still be running from the last build.
+killall -9 -u buildkite
+
+# Remove temporary files.
+find /private/tmp -user buildkite -delete
+
+# Delete all Bazel output bases (but leave the cache and install bases).
+find /private/var/tmp/_bazel_buildkite -mindepth 1 -maxdepth 1 ! -name 'cache' ! -name 'install' -exec rm -rf {} +
+
+# Delete Bazel install bases older than 7 days.
+find /private/var/tmp/_bazel_buildkite/install -mindepth 1 -maxdepth 1 -mtime +7 -exec rm -rf {} +
+
+# Delete the user's cache and temporary files.
+find /var/folders -user buildkite -delete
+
+# Completely remove all temporary files, output bases, repo cache, install bases, ...
+# find /private/var/tmp -user buildkite -delete
+
+# Completely reset the user's home directory to a known state.
+/usr/local/bin/rsync -aAX --delete --ignore-errors /Users/buildkite-fresh/ /Users/buildkite/
+
+sudo -H -u buildkite env \
+    PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin \
+    BUILDKITE_AGENT_DISCONNECT_AFTER_JOB="true" \
+    BUILDKITE_AGENT_EXPERIMENT="git-mirrors" \
+    BUILDKITE_AGENT_NAME="%hostname" \
+    BUILDKITE_AGENT_TAGS="${BUILDKITE_AGENT_TAGS}" \
+    BUILDKITE_BUILD_PATH="/Users/buildkite/builds" \
+    BUILDKITE_CONFIG_PATH="/usr/local/etc/buildkite-agent/buildkite-agent.cfg" \
+    BUILDKITE_GIT_MIRRORS_PATH="/usr/local/var/bazelbuild" \
+    BUILDKITE_GIT_CLONE_MIRROR_FLAGS="-v --bare" \
+    /usr/local/bin/buildkite-agent start
+
+# Just to make really sure that nothing stays running after a job, run 'killall' now.
+killall -9 -u buildkite
+EOF
+
+chown ci:staff /usr/local/bin/buildkite-wrapper
+chmod 0755 /usr/local/bin/buildkite-wrapper
+
+launchctl load /Library/LaunchDaemons/de.geheimspeicher.buildkite-agent.plist