diff --git a/progress.py b/progress.py
index de46f53..43c7ad2 100644
--- a/progress.py
+++ b/progress.py
@@ -42,7 +42,8 @@
 
 
 class Progress(object):
-  def __init__(self, title, total=0, units='', print_newline=False, delay=True):
+  def __init__(self, title, total=0, units='', print_newline=False, delay=True,
+               quiet=False):
     self._title = title
     self._total = total
     self._done = 0
@@ -54,6 +55,13 @@
     self._show_jobs = False
     self._active = 0
 
+    # When quiet, never show any output.  It's a bit hacky, but reusing the
+    # existing logic that delays initial output keeps the rest of the class
+    # clean.  Basically we set the start time to years in the future.
+    if quiet:
+      self._show = False
+      self._start += 2**32
+
   def start(self, name):
     self._active += 1
     if not self._show_jobs:
diff --git a/subcmds/abandon.py b/subcmds/abandon.py
index ea3f4ed..1d22917 100644
--- a/subcmds/abandon.py
+++ b/subcmds/abandon.py
@@ -81,7 +81,7 @@
             err[branch].append(project)
         pm.update()
 
-    pm = Progress('Abandon %s' % nb, len(all_projects))
+    pm = Progress('Abandon %s' % nb, len(all_projects), quiet=opt.quiet)
     # NB: Multiprocessing is heavy, so don't spin it up for one job.
     if len(all_projects) == 1 or opt.jobs == 1:
       _ProcessResults(self._ExecuteOne(opt, nb, x) for x in all_projects)
diff --git a/subcmds/checkout.py b/subcmds/checkout.py
index cf54ced..6b71a8f 100644
--- a/subcmds/checkout.py
+++ b/subcmds/checkout.py
@@ -59,7 +59,7 @@
             err.append(project)
         pm.update()
 
-    pm = Progress('Checkout %s' % nb, len(all_projects))
+    pm = Progress('Checkout %s' % nb, len(all_projects), quiet=opt.quiet)
     # NB: Multiprocessing is heavy, so don't spin it up for one job.
     if len(all_projects) == 1 or opt.jobs == 1:
       _ProcessResults(self._ExecuteOne(nb, x) for x in all_projects)
diff --git a/subcmds/start.py b/subcmds/start.py
index 2593ace..aa2f915 100644
--- a/subcmds/start.py
+++ b/subcmds/start.py
@@ -106,7 +106,7 @@
       if not os.path.exists(os.getcwd()):
         os.chdir(self.manifest.topdir)
 
-      pm = Progress('Syncing %s' % nb, len(all_projects))
+      pm = Progress('Syncing %s' % nb, len(all_projects), quiet=opt.quiet)
       for project in all_projects:
         gitc_project = self.gitc_manifest.paths[project.relpath]
         # Sync projects that have not been opened.
@@ -129,7 +129,7 @@
           err.append(project)
         pm.update()
 
-    pm = Progress('Starting %s' % nb, len(all_projects))
+    pm = Progress('Starting %s' % nb, len(all_projects), quiet=opt.quiet)
     # NB: Multiprocessing is heavy, so don't spin it up for one job.
     if len(all_projects) == 1 or opt.jobs == 1:
       _ProcessResults(self._ExecuteOne(opt, nb, x) for x in all_projects)
diff --git a/subcmds/sync.py b/subcmds/sync.py
index e707987..21166af 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -367,7 +367,7 @@
 
     jobs = opt.jobs_network if opt.jobs_network else self.jobs
     fetched = set()
-    pm = Progress('Fetching', len(projects), delay=False)
+    pm = Progress('Fetching', len(projects), delay=False, quiet=opt.quiet)
 
     objdir_project_map = dict()
     for project in projects:
@@ -470,7 +470,7 @@
     # Only checkout projects with worktrees.
     all_projects = [x for x in all_projects if x.worktree]
 
-    pm = Progress('Checking out', len(all_projects))
+    pm = Progress('Checking out', len(all_projects), quiet=opt.quiet)
 
     def _ProcessResults(results):
       for (success, project, start, finish) in results:
@@ -504,7 +504,7 @@
     return ret and not err_results
 
   def _GCProjects(self, projects, opt, err_event):
-    pm = Progress('Garbage collecting', len(projects), delay=False)
+    pm = Progress('Garbage collecting', len(projects), delay=False, quiet=opt.quiet)
     pm.update(inc=0, msg='prescan')
 
     gc_gitdirs = {}
