def base_cli(parser):
    """Generate CLI with arguments shared among all interfaces"""
    
    parser.add_argument('out_dir', type=str,
                        help='The path to the output directory. Created if it'
                             'does not already exist')
    parser.add_argument('--regressor_files', nargs='+', type=str,
                        help='One or more tab-separated files with regressors '
                             'in each column. The number of files must match '
                             'the number of input files and must be in the '
                             'same order. The number of rows in each file must '
                             'match the number of timepoints in their '
                             'respective input files. Can also be a single '
                             'string with a wildcard (*) to specify all '
                             'files matching the file pattern. If so, these '
                             'files are naturally sorted by file name prior to '
                             'extraction. Double check to make sure these are '
                             'correctly aligned with the input files (see the '
                             'parameters.json in the output)')
    parser.add_argument('--regressors', nargs='+', type=str,
                        help='Regressor names or strategy to use for confound '
                             'regression. Must be a) list of specified column '
                             'names in all of the regressor_files, b) a '
                             'predefined strategy by load_confounds, or c) a '
                             'list compatible with load_confounds flexible '
                             'denoising strategy options. See the documentation '
                             'https://github.com/SIMEXP/load_confounds. If no '
                             'regressor information provided but regressor '
                             'files are provided, then all regressors in '
                             'regressor files are used')
    parser.add_argument('--load_confounds_kwargs', type=str, 
                        help="Keyword arguments for load confound either "
                             "predefined or flexible strategies. Input must be "
                             "a Python dictionary wrapped in double quotes. " 
                             "Refer to documentation for the available "
                             "arguments for each load confound strategy: "
                             "https://github.com/SIMEXP/load_confounds")                    
    parser.add_argument('--standardize', action='store_true', default=False,
                        help='Whether to standardize (z-score) each timeseries. '
                             'Default: False')
    parser.add_argument('--t_r', type=int, 
                        help='The TR of the functional files, specified in '
                             'seconds. Required if temporal '
                             'filtering/detrending is specified')
    parser.add_argument('--high_pass', type=float, 
                        help='High pass filter cut off in Hertz. Do not use if '
                             'high pass cosine regressors are specified in '
                             '`regressors`')
    parser.add_argument('--low_pass', type=float, 
                        help='Low pass filter cut off in Hertz. Do not use if '
                             'low pass cosine regressors are specified in '
                             '`regressors`')
    parser.add_argument('--detrend', action='store_true', default=False,
                        help='Temporally detrend the data. Default: False')
    parser.add_argument('--discard_scans', type=int, 
                        help='Discard the first N scans of each functional '
                             'image')
    parser.add_argument('--n_jobs', type=int, default=1,
                        help='The number of CPUs to use if parallelization is '
                             'desired. Default: 1 (serial processing)')
    parser.add_argument('--n_decimals', type=int, 
                        help='Specify the number of decimals for output '
                             'timeseries files. Fewer decimals are recommended '
                             'for reducing disk-space, particularly for large '
                             'extractions')
    parser.add_argument('-c', '--config', type=str,
                        help='A configuration .json file to pass parameters '
                             'This will overwrite command-line arguments if '
                             'the same parameter is specified in both. See '
                             'online documentation for formatting and what '
                             'keys to include')
    parser.add_argument('-v', '--verbose', action='store_true', default=False, 
                        help='Print out extraction progress')
    return parser