diff --git a/swh/scheduler/cli.py b/swh/scheduler/cli.py
--- a/swh/scheduler/cli.py
+++ b/swh/scheduler/cli.py
@@ -68,6 +68,15 @@
     return ''.join(lines)
 
 
+def list_task_types(ctx, param, value):
+    if not value or ctx.resilient_parsing:
+        return
+    click.echo("Known task types:")
+    for tasktype in ctx.obj.get_task_types():
+        click.echo('{type}:\n  {description}'.format(**tasktype))
+    ctx.exit()
+
+
 @click.group(context_settings=CONTEXT_SETTINGS)
 @click.option('--cls', '-c', default='local',
               help="Scheduler's class, default to 'local'")
@@ -102,6 +111,8 @@
 
 
 @cli.group('task')
+@click.option('--list-types', '-l', is_flag=True, default=False, is_eager=True,
+              expose_value=False, callback=list_task_types)
 @click.pass_context
 def task(ctx):
     """Manipulate tasks."""