diff --git a/bob/devtools/log.py b/bob/devtools/log.py
index 50842dc7cf282d672df9e4cc06e146f336af2f8e..8ccad76117833b12e0e5f9f98a6157b67d2076dc 100644
--- a/bob/devtools/log.py
+++ b/bob/devtools/log.py
@@ -104,6 +104,12 @@ def _echo(text, *args, **kwargs):
 def echo_normal(text):
   """Color preset for normal text output for :py:func:`click.echo`"""
 
+  click.echo(text)
+
+
+def echo_info(text):
+  """Color preset for normal text output for :py:func:`click.echo`"""
+
   _echo(text, 'green')
 
 
diff --git a/bob/devtools/scripts/jobs.py b/bob/devtools/scripts/jobs.py
index 4228520cd751e3fe8c3dc07beb4444719f950665..df0d8b5c6d950dc036e20f31d4faa69e7757bcfd 100644
--- a/bob/devtools/scripts/jobs.py
+++ b/bob/devtools/scripts/jobs.py
@@ -7,19 +7,24 @@ import click
 from . import bdt
 from ..release import get_gitlab_instance
 
-from ..log import verbosity_option, get_logger, echo_normal
+from ..log import verbosity_option, get_logger, echo_normal, echo_info
 logger = get_logger(__name__)
 
 
 @click.command(epilog='''
 Examples:
 
-  1. List running jobs on a runner defined by its description (macmini):
+  1. List running jobs on any of our runners
+
+     $ bdt gitlab jobs -vv
+
+
+  2. List running jobs on a runner defined by its description:
 
      $ bdt gitlab jobs -vv macmini
 
 ''')
-@click.argument('name')
+@click.argument('name', nargs=-1)
 @click.option('-s', '--status', type=click.Choice(['running', 'success',
   'failed', 'canceled']),
     default='running', show_default=True,
@@ -28,26 +33,37 @@ Examples:
 @verbosity_option()
 @bdt.raise_on_error
 def jobs(name, status):
-    """Lists jobs on a given runner
+    """Lists jobs on a given runner identified by description
     """
 
     gl = get_gitlab_instance()
     gl.auth()
     user_id = gl.user.attributes['id']
 
-    # search for the runner to affect
-    the_runner = [k for k in gl.runners.list(all=True) if \
-        k.attributes['description'] == name]
-    if not the_runner:
-      raise RuntimeError('Cannot find runner with description = %s', name)
-    the_runner = the_runner[0]
-    logger.info('Found runner %s (id=%d)',
-        the_runner.attributes['description'], the_runner.attributes['id'])
-
-    jobs = the_runner.jobs.list(all=True, status=status)
-    logger.info('There are %d jobs running on %s', len(jobs), name)
-    for k in jobs:
-      echo_normal('** job %d: %s (%s), since %s, by %s [%s]' % \
-          (k.id, k.attributes['project']['path_with_namespace'],
-        k.attributes['name'], k.attributes['started_at'],
-        k.attributes['user']['username'], k.attributes['web_url']))
+    names = name or [
+        'linux-desktop-shell',
+        'linux-desktop-docker',
+        'linux-server-shell',
+        'linux-server-docker',
+        'macpro',
+        'macmini',
+        ]
+
+    # search for the runner(s) to affect
+    runners = [k for k in gl.runners.list(all=True) if \
+        k.attributes['description'] in names]
+
+    if not runners:
+      raise RuntimeError('Cannot find runner with description = %s' % \
+          '|'.join(names))
+
+    for runner in runners:
+      jobs = runner.jobs.list(all=True, status=status)
+      echo_normal('Runner %s (id=%d) -- %d running' % \
+          (runner.attributes['description'], runner.attributes['id'],
+          len(jobs)))
+      for k in jobs:
+        echo_info('** job %d: %s (%s), since %s, by %s [%s]' % \
+            (k.id, k.attributes['project']['path_with_namespace'],
+          k.attributes['name'], k.attributes['started_at'],
+          k.attributes['user']['username'], k.attributes['web_url']))