diff --git a/cook.sh b/cook.sh
index f7c044bd1ef8c22a76eab4e9eadad2131d7b4ec1..41d3b76c1a07c898ed66499b2c1163bb51981996 100755
--- a/cook.sh
+++ b/cook.sh
@@ -31,6 +31,7 @@ function usage {
     echo "  stage" >&2
     echo "  unstage" >&2
     echo "  status" >&2
+    echo "  status_upstream" >&2
     echo "  tar" >&2
     echo "  untar" >&2
     echo "  update" >&2
@@ -121,6 +122,17 @@ function op {
                 git -C source diff --name-status
             fi
             ;;
+        status_upstream)
+            if [ -n "$GIT_UPSTREAM" ]
+            then
+                if [ -n "$BRANCH" ]
+                then
+                    git -C source diff --name-status "upstream/$BRANCH"
+                else
+                    git -C source diff --name-status "upstream/master"
+                fi
+            fi
+            ;;
         update)
             pushd source > /dev/null
             skip=0
diff --git a/status_upstream.sh b/status_upstream.sh
new file mode 100755
index 0000000000000000000000000000000000000000..defd1c5399e54e2917f93ff0ef7bfa1ade5192c0
--- /dev/null
+++ b/status_upstream.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+set -e
+
+source config.sh
+
+if [ $# = 0 ]
+then
+    recipes="$(ls -1 recipes)"
+else
+    recipes="$@"
+fi
+
+for recipe in $recipes
+do
+    if [ -d "recipes/$recipe/source" ]
+    then
+        status="$(COOK_QUIET=1 ./cook.sh "$recipe" status_upstream)"
+
+        if [ -n "$status" ]
+        then
+            echo -e "\e[1m$recipe\e[0m\n$status"
+        fi
+    fi
+done