diff --git a/claude.py b/claude.py
index 66c3ed5..967baa6 100755
--- a/claude.py
+++ b/claude.py
@@ -11,8 +11,17 @@
 
 _logger = logging.getLogger()
 _root_path = os.path.realpath(os.path.dirname(__file__))
-_linux_out_dir = os.path.join(_root_path, 'out/Release')
-_android_out_dir = os.path.join(_root_path, 'out/android_Release')
+
+def _linux_out_dir(args):
+  if args.debug:
+      return os.path.join(_root_path, 'out/Debug')
+  return os.path.join(_root_path, 'out/Release')
+
+def _android_out_dir(args):
+  if args.debug:
+    return os.path.join(_root_path, 'out/android_Debug')
+  return os.path.join(_root_path, 'out/android_Release')
+
 
 def _init_logging(verbose_count):
   if verbose_count == 0:
@@ -41,7 +50,8 @@
 def _gn(args):
   _logger.debug('_gn()')
 
-  gn_args = ['is_debug = false']
+  gn_args = ['is_debug = ' + ('true' if args.debug else 'false')]
+
   if 'goma' in args:
     goma_dir = os.environ.get('GOMA_DIR')
     goma_home_dir = os.path.join(os.getenv('HOME', ''), 'goma')
@@ -52,12 +62,12 @@
       gn_args.append(_goma_dir_str + '"' + goma_home_dir + '"')
       gn_args.append(_use_goma_str + 'true')
 
-  retcode = _run_gn(gn_args, _linux_out_dir)
+  retcode = _run_gn(gn_args, _linux_out_dir(args))
   if retcode != 0:
     return retcode
   gn_args.append('target_os="android"')
   gn_args.append('target_cpu="arm"')
-  return _run_gn(gn_args, _android_out_dir)
+  return _run_gn(gn_args, _android_out_dir(args))
 
 def _run_build(out_dir):
   gn_file = os.path.join(out_dir, 'args.gn')
@@ -86,10 +96,10 @@
 # Unused argument - pylint: disable=W0613
 def _build(args):
   _logger.debug('_build()')
-  retcode = _run_build(_linux_out_dir)
+  retcode = _run_build(_linux_out_dir(args))
   if retcode != 0:
     return retcode
-  return _run_build(_android_out_dir)
+  return _run_build(_android_out_dir(args))
 
 # Unused argument - pylint: disable=W0613
 def _test(args):
@@ -100,9 +110,12 @@
       'mojo:network_service_apptests'])
 
 def _upload(args):
+  if args.debug:
+    print "Only upload release binaries (for now)"
+    return 1
   base_command = ['tools/upload_service.py',
-                  '--linux-x64-binary-dir', _linux_out_dir,
-                  '--android-arm-binary-dir', _android_out_dir]
+                  '--linux-x64-binary-dir', _linux_out_dir(args),
+                  '--android-arm-binary-dir', _android_out_dir(args)]
   if args.dry_run:
     base_command.append('--dry-run')
   _logger.info('Uploading network service binary')
@@ -122,6 +135,12 @@
                              help='Be verbose (multiple times for more)',
                              default=0, dest='verbose_count', action='count')
 
+  debug_group = parent_parser.add_mutually_exclusive_group()
+  debug_group.add_argument('--debug', help='Debug build (default)',
+                           default=True, action='store_true')
+  debug_group.add_argument('--release', help='Release build', default=False,
+                           dest='debug', action='store_false')
+
   subparsers = parser.add_subparsers()
 
   gn_parser = subparsers.add_parser('gn', parents=[parent_parser],
