diff --git a/doc/vcsh.1.ronn b/doc/vcsh.1.ronn
index 3457736ea2ef96ecf2fced9dd3d8d551b1e7e0cd..9532e654278c1187eb0112b8d50769ed19156eea 100644
--- a/doc/vcsh.1.ronn
+++ b/doc/vcsh.1.ronn
@@ -29,6 +29,8 @@ vcsh(1) - Version Control System for $HOME - multiple Git repositories in $HOME
 
 `vcsh` run <repo> <shell command>
 
+`vcsh` status
+
 `vcsh` upgrade <repo>
 
 `vcsh` version
@@ -125,6 +127,9 @@ an interactive user.
   This is needed to support mr and other scripts properly and of no concern to
   an interactive user.
 
+* status:
+  Show statuses of all vcsh repositories.
+
 * upgrade:
   Upgrade repository to currently recommended settings.
 
diff --git a/vcsh b/vcsh
index 0742bec960f0741f5e369be6550c2265fda026e2..98c2babd40daa24604da900bd3203e7cddefd128 100755
--- a/vcsh
+++ b/vcsh
@@ -106,6 +106,7 @@ help() {
           <newname>     Rename repository
    run <repo> \\
        <command>        Use this repository
+   status               Show statuses of all vcsh repositories
    upgrade <repo>       Upgrade repository to currently recommended settings
    version              Print version information
    which <substring>    Find substring in name of any tracked file
@@ -275,6 +276,16 @@ run() {
 	hook post-run
 }
 
+status() {
+	for VCSH_REPO_NAME in $(list); do
+		echo "$VCSH_REPO_NAME:"
+		export GIT_DIR="$VCSH_REPO_D/$VCSH_REPO_NAME.git"
+		use
+		git status --short --untracked-files='no'
+		echo
+	done
+}
+
 upgrade() {
 	hook pre-upgrade
 	use
@@ -375,7 +386,8 @@ elif [ "$1" = 'delete' ]           ||
 elif [ "$1" = 'list' ] ||
      [ "$1" = 'list-tracked' ] ||
      [ "$1" = 'pull' ] ||
-     [ "$1" = 'push' ]; then
+     [ "$1" = 'push' ] ||
+     [ "$1" = 'status' ]; then
 	export VCSH_COMMAND="$1"
 elif [ -n "$2" ]; then
 	export VCSH_COMMAND='run'