diff --git a/env_setup/cipd/update.py b/env_setup/cipd/update.py
index 74c1f22..53ba1aa 100755
--- a/env_setup/cipd/update.py
+++ b/env_setup/cipd/update.py
@@ -90,11 +90,16 @@
         os.makedirs(args.install_dir)
 
     paths = []
+    env = {
+        'CIPD_INSTALL_DIR': args.install_dir,
+        'CIPD_CACHE_DIR': args.cache_dir,
+    }
 
     default_ensures = os.path.join(SCRIPT_ROOT, '*.ensure')
     for ensure_file in args.ensure_file or glob.glob(default_ensures):
         install_dir = os.path.join(args.install_dir,
                                    os.path.basename(ensure_file))
+
         cmd = [
             args.cipd,
             'ensure',
@@ -110,6 +115,12 @@
         paths.append(install_dir)
         paths.append(os.path.join(install_dir, 'bin'))
 
+        name = ensure_file
+        if os.path.splitext(name)[1] == '.ensure':
+            name = os.path.splitext(name)[0]
+        name = os.path.basename(name)
+        env['{}_CIPD_INSTALL_DIR'.format(name.upper())] = install_dir
+
     for path in paths:
         print('adding {} to path'.format(path), file=sys.stderr)
 
@@ -121,10 +132,9 @@
                                          prefix='cipdsetup') as temp:
             print('PATH="{}"'.format(os.pathsep.join(paths)), file=temp)
             print('export PATH', file=temp)
-            print('CIPD_INSTALL_DIR="{}"'.format(args.install_dir), file=temp)
-            print('export CIPD_INSTALL_DIR', file=temp)
-            print('CIPD_CACHE_DIR={}'.format(args.cache_dir), file=temp)
-            print('export CIPD_CACHE_DIR', file=temp)
+            for name, value in env.items():
+                print('{}={}'.format(name, value), file=temp)
+                print('export {}'.format(name), file=temp)
 
             print('. {}'.format(temp.name))
 
diff --git a/pw_presubmit/py/pw_presubmit/pigweed_presubmit.py b/pw_presubmit/py/pw_presubmit/pigweed_presubmit.py
index 669e995..c526a53 100755
--- a/pw_presubmit/py/pw_presubmit/pigweed_presubmit.py
+++ b/pw_presubmit/py/pw_presubmit/pigweed_presubmit.py
@@ -16,6 +16,7 @@
 """Runs the local presubmit checks for the Pigweed repository."""
 
 import argparse
+import itertools
 import logging
 import os
 from pathlib import Path
@@ -108,10 +109,11 @@
          **kwargs)
 
 
-def ninja(ctx: PresubmitContext, **kwargs) -> None:
+def ninja(*args, ctx: PresubmitContext, **kwargs):
     call('ninja',
          '-C',
          ctx.output_directory,
+         *args,
          cwd=ctx.repository_root,
          **kwargs)
 
@@ -121,7 +123,7 @@
 
 
 def gn_clang_build(ctx: PresubmitContext):
-    gn_gen('--export-compile-commands', _CLANG_GEN_ARGS, ctx=ctx)
+    gn_gen(_CLANG_GEN_ARGS, ctx=ctx)
     ninja(ctx=ctx)
 
 
@@ -149,24 +151,41 @@
     gn_arm_build,
 )
 
-
 #
 # C++ presubmit checks
 #
+# TODO(pwbug/45) Probably want additional checks.
+CLANG_TIDY_CHECKS = ('modernize-use-override', )
+
+
 @filter_paths(endswith=format_code.C_FORMAT.extensions)
 def clang_tidy(ctx: PresubmitContext):
-    # TODO(mohrr) should this check just do a new clang build?
-    out = ctx.output_directory.joinpath('..', 'gn_clang_build')
-    if not out.joinpath('compile_commands.json').exists():
-        raise PresubmitFailure('clang_tidy MUST be run after generating '
-                               'compile_commands.json in a clang build!')
+    gn_gen('--export-compile-commands', _CLANG_GEN_ARGS, ctx=ctx)
+    ninja(ctx=ctx)
+    ninja('-t', 'compdb', 'objcxx', 'cxx', ctx=ctx)
 
-    call('clang-tidy', f'-p={out}', *ctx.paths)
+    run_clang_tidy = None
+    for var in ('PIGWEED_CIPD_INSTALL_DIR', 'CIPD_INSTALL_DIR'):
+        if var in os.environ:
+            possibility = os.path.join(os.environ[var],
+                                       'share/clang/run-clang-tidy.py')
+            if os.path.isfile(possibility):
+                run_clang_tidy = possibility
+                break
+
+    checks = ','.join(CLANG_TIDY_CHECKS)
+    call(
+        run_clang_tidy,
+        f'-p={ctx.output_directory}',
+        f'-checks={checks}',
+        # TODO(pwbug/45) not sure if this is needed.
+        # f'-extra-arg-before=-warnings-as-errors={checks}',
+        *ctx.paths)
 
 
 CC = (
     pw_presubmit.pragma_once,
-    # TODO(hepler): Enable clang-tidy when it passes.
+    # TODO(pwbug/45): Enable clang-tidy when it passes.
     # clang_tidy,
 )
 
@@ -392,6 +411,11 @@
 
 GENERAL = (source_is_in_build_files, )
 
+BROKEN: Sequence = (
+    # TODO(pwbug/45): Remove clang-tidy from BROKEN when it passes.
+    clang_tidy,
+)  # yapf: disable
+
 #
 # Presubmit check programs
 #
@@ -405,10 +429,13 @@
 )
 
 PROGRAMS: Dict[str, Sequence] = {
+    'broken': BROKEN,
     'full': INIT + GN + CC + PYTHON + CMAKE + BAZEL + CODE_FORMAT + GENERAL,
     'quick': QUICK_PRESUBMIT,
 }
 
+ALL_STEPS = frozenset(itertools.chain(*PROGRAMS.values()))
+
 
 def argument_parser(parser=None) -> argparse.ArgumentParser:
     """Create argument parser."""
@@ -443,13 +470,13 @@
     exclusive.add_argument('-p',
                            '--program',
                            dest='program_name',
-                           choices=PROGRAMS,
+                           choices=[x for x in PROGRAMS if x != 'broken'],
                            default='full',
                            help='Which presubmit program to run')
 
     exclusive.add_argument(
         '--step',
-        choices=[x.__name__ for x in PROGRAMS['full']],
+        choices=sorted(x.__name__ for x in itertools.chain(ALL_STEPS)),
         action='append',
         help='Provide explicit steps instead of running a predefined program.',
     )
@@ -489,7 +516,7 @@
 
     program = PROGRAMS[program_name]
     if step:
-        program = [x for x in PROGRAMS['full'] if x.__name__ in step]
+        program = [x for x in ALL_STEPS if x.__name__ in step]
 
     if pw_presubmit.run_presubmit(program,
                                   repository=repository,
