diff --git a/bin/dev-shell b/bin/dev-shell
deleted file mode 100755
index 0295f14bd010fb6539d0dc966c7a984bad1fc608..0000000000000000000000000000000000000000
--- a/bin/dev-shell
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/bin/bash
-
-## =============================================================================
-## Setup (if needed) and start a development shell environment on Linux or MacOS
-## =============================================================================
-
-## make sure we launch this script from the project root directory
-PROJECT_ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"/..
-pushd ${PROJECT_ROOT}
-
-## We do not load the global development environment here, as this script is 
-## to be executed on a "naked" system outside of any container 
-
-## =============================================================================
-## Step 1: Parse command line options
-
-## do we want to force-update the container (only affects Linux)
-## default: we do not want to do this.
-FORCE_UPDATE=
-
-function print_the_help {
-  echo "USAGE:    ./util/start_dev_shell [-f]"
-  echo "OPTIONS:"
-  echo "          -f,--force    Force-update container (Only affects Linux)"
-  echo "          -h,--help     Print this message"
-  echo ""
-  echo "  This script will setup and launch a containerized development
-  environment"
-  exit
-}
-while [ $# -gt 0 ]
-do
-  key="$1"
-  case $key in
-    -f|--force)
-      FORCE_UPDATE="true"
-      shift # past value
-      ;;
-    -h|--help)
-      print_the_help
-      shift
-      ;;
-    *)    # unknown option
-      echo "unknown option $1"
-      exit 1
-      ;;
-  esac
-done
-
-## get OS type
-OS=`uname -s`
-
-## =============================================================================
-## Step 2: Update container and launch shell
-echo "Launching a containerized development shell"
-
-case ${OS} in
-  Linux)
-    echo "  - Detected OS: Linux"
-    ## Use the same prefix as we use for other local packages
-    export PREFIX=.local/lib
-    if [ ! -f $PREFIX/juggler_latest.sif ] || [ ! -z ${FORCE_UPDATE} ]; then
-      echo "  - Fetching singularity image"
-      mkdir -p $PREFIX
-      wget https://eicweb.phy.anl.gov/eic/juggler/-/jobs/artifacts/master/raw/build/juggler.sif?job=singularity:latest -O $PREFIX/juggler_latest.sif
-    fi
-    echo "  - Using singularity to launch shell..."
-    singularity exec $PREFIX/juggler_latest.sif eic-shell
-    ;;
-  Darwin)
-    echo "  - Detector OS: MacOS"
-    echo "  - Syncing docker container"
-    docker pull sly2j/juggler:latest
-    echo "  - Using docker to launch shell..."
-    docker run -v /Users:/Users -w=$PWD -i -t --rm sly2j/juggler:latest eic-shell
-    ;;
-  *)
-    echo "ERROR: dev shell not available for this OS (${OS})"
-    exit 1
-esac
-
-## =============================================================================
-## Step 3: All done
-echo "Exiting development environment..."
diff --git a/bin/run_many.py b/bin/run_many.py
deleted file mode 100755
index ccb7e83a7f81d1bc502fcddb32900e5a31eebdb1..0000000000000000000000000000000000000000
--- a/bin/run_many.py
+++ /dev/null
@@ -1,124 +0,0 @@
-#!/usr/bin/env python3
-
-""" 
-This script will run a CI generator or processing script for multiple configurations.
-
-Author: Sylvester Joosten <sjoosten@anl.gov>
-"""
-
-import os
-import argparse
-from multiprocessing import Pool, get_context
-from tempfile import NamedTemporaryFile
-
-class InvalidArgumentError(Exception):
-    pass
-
-parser = argparse.ArgumentParser()
-parser.add_argument(
-        'command',
-        help="Script to be launched in parallel")
-parser.add_argument(
-        '--energy', '-e',
-        dest='energies',
-        action='append',
-        help='One or more beam energy pairs (e.g. 10x100)',
-        required=True)
-parser.add_argument(
-        '--config', '-c',
-        dest='configs',
-        action='append',
-        help='One or more configurations',
-        required=True)
-parser.add_argument(
-        '--leading',
-        dest='leads',
-        action='append',
-        help='One or more leading particles(opt.)',
-        required=False)
-parser.add_argument(
-        '--decay',
-        dest='decays',
-        action='append',
-        help='One or more decay channels (opt.)',
-        required=False)
-parser.add_argument(
-        '--nproc',
-        dest='nproc',
-        default=5,
-        type=int,
-        help='Number of processes to launch in parallel',
-        required=False)
-
-def worker(command):
-    '''Execute the command in a system call, with the supplied argument string.'''
-    ## use a temporary file to capture the terminal output, and then
-    ## print the terminal output once the command finishes
-    with NamedTemporaryFile() as f:
-        cmd = [command, ' 2>&1 >', f.name]
-        cmd = ' '.join(cmd)
-        print("Executing '{}'".format(cmd))
-        ret = os.system(cmd)
-        with open(f.name) as log:
-            print(log.read())
-        return ret
-
-if __name__ == '__main__':
-    args = parser.parse_args()
-    print('Launching CI script in parallel for multiple settings')
-    for e in args.energies:
-        beam_setting = e.split('x')
-        if not beam_setting[0].isnumeric() or not beam_setting[1].isnumeric():
-            print("Error: invalid beam energy setting:", e)
-            raise InvalidArgumentError
-
-    if not os.path.exists(args.command):
-        print("Error: Script not found:", args.command)
-        raise InvalidArgumentError
-
-    if args.nproc < 1 or args.nproc > 50:
-        print("Error: Invalid process limit (should be 1-50):", args.nproc)
-        raise InvalidArgumentError
-
-    print(' - command: {}'.format(args.command))
-    print(' - energies: {}'.format(args.energies))
-    print(' - config: {}'.format(args.configs))
-    print(' - nproc: {}'.format(args.nproc))
-    if (args.leads):
-        print(' - leading: {}'.format(args.leads))
-    if (args.decays):
-        print(' - decay: {}'.format(args.decays))
-
-    ## Expand our command and argument list for all combinatorics
-    cmds = []
-    decays = args.decays if args.decays else [None]
-    leads = args.leads if args.leads else [None]
-    for e in args.energies:
-        for c in args.configs:
-            for l in leads:
-                for d in decays:
-                    beam_setting = e.split('x')
-                    cmd = [args.command,
-                           '--ebeam', beam_setting[0],
-                           '--pbeam', beam_setting[1],
-                           '--config', c]
-                    if l is not None:
-                        cmd += ['--leading', l]
-                    if d is not None:
-                        cmd += ['--decay', d]
-                    cmds.append(' '.join(cmd))
-
-    ## create a process pool
-    ## note that I'm using themultiprocessing.get_context function to setup
-    ## a context where subprocesses are created using the new "spawn" process
-    ## which avoids deadlocks that sometimes happen in the default dispatch
-    with get_context('spawn').Pool(processes=args.nproc) as pool:
-        return_values = pool.map(worker, cmds)
-        ## check if we all exited nicely, else exit with status 1
-        if not all(ret == 0 for ret in return_values):
-            n_fail = sum([1 for ret in return_values if ret != 0])
-            print('ERROR, {} of {} jobs failed'.format(n_fail, len(cmds)))
-            print('Return values:', [ret for ret in return_values if ret != 0])
-            exit(1)
-
-    ## That's all!