Getting Started

Install Propel, run setup on your laptop or your cluster, and start working. You will not need to learn a single command to get the pipeline running.

1. Install Propel

Clone the repository and install it in editable mode:

git clone https://github.com/KevinBian107/propel.git
cd propel

pip install -e .      # inside an activated conda env or virtualenv

The install is editable: changes you make to the repo take effect immediately, which matters because Propel is meant to be customized.

Activate an env first. Against a Homebrew or system Python, pip install -e . fails: modern ones are externally managed and refuse the install, or it lands in a directory that isn't on your PATH. Either way you end up with no propel command and a confusing error later. Any conda env or virtualenv avoids it.

2. Set Up — Local or Cluster

Run propel with no arguments:

propel

It checks for git, Claude Code and Codex, installs what's missing, signs you in, and installs Propel into your project. There are two versions of this step. propel picks one from the machine it's running on and says which in one line. It never asks.

LocalCluster
WhereYour laptop or desktopAn HPC node, a container, a Jupyter terminal, anything over SSH (including VS Code Remote)
Picked whenThere is a displayLinux with no DISPLAY/WAYLAND_DISPLAY, or an SSH session
Force itpropel launchpropel setup
You getA setup page in your browser, one button per stepThe same steps as prompts in the terminal
Sign-inA terminal window opens for each loginInline, with a URL and code you approve on any device

Both versions install Claude Code and Codex the same way, with the vendors' own native installers. These are single binaries in ~/.local/bin. They need no Node, no npm and no sudo, which matters on a cluster where you can't install system packages:

curl -fsSL https://claude.ai/install.sh | bash          # Claude Code
curl -fsSL https://chatgpt.com/codex/install.sh | sh    # Codex

Propel downloads each script to a file before running it, so a failed download is reported as a failure rather than looking like success. Node.js only matters if you want the optional claude-hud status-line plugin.

Local: the Setup Console

A page opens in your browser. It shows what you already have and offers a button for everything you don't:

The two logins genuinely need a terminal. A browser page can't provide a TTY, so the console opens a real one already running the right command instead of pretending. If it can't, it shows you the command to paste.

It runs entirely on your machine. The server binds to 127.0.0.1 on a random port behind a per-process token, and it can only run a fixed allowlist of setup commands. The page can never send it a command string. If you open the address without its ?t= token, or with a token from an earlier run, you get Forbidden and an explanation. Use the full URL printed in the terminal.

Cluster: Terminal Setup

On a machine with no display, propel runs the same checklist in the terminal. Nothing needs to be forwarded and there's no page to open:

$ propel
No display here (cluster, container or SSH), so setup runs in the terminal.

  ✓ git            git version 2.43.0
  ✗ Claude Code    not installed
  – OpenAI Codex   not installed  (optional)
  ...

  Claude Code is not installed (required).
    Installer: curl -fsSL https://claude.ai/install.sh | bash  ->  ~/.local/bin
  Install Claude Code now? [Y/n]

It asks before every change, in this order:

  1. Install Claude Code (required) and Codex (optional) with the native installers.
  2. PATH: Claude's installer doesn't edit your shell config. If ~/.local/bin isn't on your PATH, setup offers to add one line to ~/.bashrc (or ~/.zshrc). Propel itself finds the tools there either way.
  3. Sign in, inline: claude auth login, then codex login --device-auth. Each prints a URL and a code. Open the URL on any device, your laptop included, and approve it. The cluster never needs a browser.
  4. Plugins: the default is No. A plugin runs its publisher's code in your sessions, so that call stays yours.
  5. Install Propel into the current project (propel init).

There's no browser pop-up on a cluster; that's expected. If you skip a sign-in, the closing summary repeats the command to run. It's safe to re-run. Each run picks up whatever is still missing. If stdin isn't a terminal (a notebook !propel, a batch job, a pipe), it changes nothing: it prints the checklist and the exact commands to run, and exits 0.

If Codex's device sign-in fails (for example, 503 Service Unavailable, or device-code login turned off for your account), the error comes from OpenAI's sign-in service, not from your cluster. The most reliable route is to copy a login you already have. Codex keeps it in ~/.codex/auth.json, so from a signed-in laptop run scp ~/.codex/auth.json <cluster>:~/.codex/. With no SSH into the pod, upload the file through Jupyter, move it to ~/.codex/auth.json and chmod 600 it. It's a credential, so don't leave a copy on shared storage. Two other routes: the browser flow over a tunnel (ssh -L 1455:localhost:1455 <cluster> on your laptop, then codex login on the cluster), or an API key (printenv OPENAI_API_KEY | codex login --with-api-key). Until Codex is signed in, Propel runs single-model. It never blocks.
Installing Propel itself on a cluster. Run pip install -e . inside your activated conda env, for example (base). Install it as the same user who will run claude, because sign-ins live in that user's home directory.

Or Do It by Hand

Everything either version does, as commands:

curl -fsSL https://claude.ai/install.sh | bash
curl -fsSL https://chatgpt.com/codex/install.sh | sh
claude auth login
codex login --device-auth
cd /path/to/your/project
propel init

propel init, from any of the three paths, does the same thing:

3. Start Claude and Describe Your Problem

Launch Claude Code in your project:

claude

Then just say what you're working on. There is no setup step inside the session, no mode to pick, and no skill to name.

Mode Selection Happens For You

Propel reads your first message, picks one of the four modes, and says which and why in a single line:

You:     loss goes NaN around step 500, here's the trace

Claude:  Debugger Mode — specific wrong behavior with an
         expectation attached. (/switch any time.)

It switches again on its own when the work crosses a boundary, and always tells you. /switch overrides it whenever you disagree — and if you do, that correction gets noted, because it's signal about where the inference went wrong.

Prefer to choose explicitly? Run /intro. That's the one place the four-mode menu still appears, along with the full tour of commands, skills and agents.

The Second Model

If Codex is installed and signed in, it is consulted automatically at every gate. You'll see a line like:

◆ Consulting Codex — Gate 2 (design): "Propose the strongest
  alternative and name the failure mode this design doesn't address."

If it isn't set up, Propel says so once and runs single-model. It never blocks. See Codex — Two Models, or turn it off with /disable-codex.

/intro: The Full Tour

Run it any time for the complete list of commands, skills, and agents, and what each one is triggered by.

Drafts Your CLAUDE.md

If you have an existing codebase, Propel scans it and generates a project-specific .claude/CLAUDE.md with code style, conventions, and structure already filled in. If you're starting from an empty repo, it seeds a minimal CLAUDE.md that grows progressively as you work — Gate 0 answers fill in research context, first code written fills in conventions, investigations fill in domain pitfalls.

Fill In Research Sections

Either way, you fill in the research-specific sections (research question, hypothesis, method) yourself. These constraints make Claude's output specific to your work instead of a generic average.

Project Customization (Optional)

Analyzes your codebase to build a persistent profile in .propel/ that captures naming conventions, domain context, commit patterns, and more. Claude references this silently on every session start, so you don't have to re-explain your conventions. Takes ~2–3 minutes; you can also run it anytime by saying "customize Propel".

What Happens Next

Describe what you want to do, and Propel walks the pipeline. Every step below happens without you asking for it:

  1. Ask scoping questions (Gate 0) — one at a time, before investigating
  2. Ground the work (Q0) — which repo, which paper, which reference to adapt from
  3. Scaffold an investigation — several investigator subagents in parallel, into scratch/{date}-{name}/README.md
  4. Present findings (Gate 1) — with a Codex consult folded in
  5. Propose a plan (Gate 2) — and Codex's strongest alternative to it
  6. Audit each component (Gate 3) — auditors named by a hook, plus Codex on substantive diffs
  7. Present diagnosis (Gate 4) — before any bug fix, with competing explanations
Every gate ends with a question only you can answer — disjunctive, never "shall I proceed?". Nothing advances until you answer. That's the whole arrangement: the machine does the work, you make the calls.

Example First Session

You:  I want to implement residual vector quantization from this paper [link]

Claude: Engineer Mode — there's something to build, so the full
        pipeline applies. (/switch any time.)

        [Gate 0 fires — asks scoping questions one at a time]
        "Are you replacing the existing VQ entirely, or adding RVQ as
         an alternative?"
        "What depth? Is 2 a hard choice or should it support arbitrary
         depth?"
        ...

You:  [answer questions]

Claude: [writes scope statement, gets confirmation]
        [dispatches 4 investigators in parallel]
        [creates scratch/2026-09-19-rvq/README.md]
        ◆ Consulting Codex — Gate 1: "What should this
          investigation have checked and didn't?"
        [Gate 1 — presents findings, tagged [claude]/[codex]/[both]]

You:  [make design decisions]

Claude: [research-design produces paper-to-code mapping]
        [writing-plans breaks into micro-tasks]
        ◆ Consulting Codex — Gate 2: "Propose the strongest
          alternative and the failure mode this doesn't address."
        [Gate 2 — presents plan + Codex's alternative as YOUR choice]

You:  go

Claude: [implementer builds component 1]
        [spec-reviewer checks it against the plan]
        [hook names the auditors; they run in parallel]
        [Gate 3 — merged audit card, attributed by source]
        ...

Key Slash Commands

All Propel commands are marked with [Propel] in their description.

CommandUse When
/introFirst time using Propel, or need a refresher
/read-paper [path]Extract implementation reference from a paper
/debug-training [symptom]Diagnose training issues
/trace-shapes [entry point]Quick shape annotation
/switch [mode]Override the automatically selected mode
/disable-codexTurn off the automatic second model for this project
/enable-codexTurn it back on
/c-reviewMerged review: Anthropic plugin + Propel auditors + Codex, one card
/primerLoad project context after /clear
/new-session [description]Start a tracked session

What to Do After /clear

When you clear context mid-session, follow these steps to resume cleanly:

  1. Run /primer to reload project context
  2. Read your investigation README: scratch/{investigation}/README.md
  3. Check the plan for where you left off: scratch/{investigation}/plan.md
  4. Continue from the "Next Steps" section
Context Hygiene

Don't wait until Claude's reasoning degrades to clear context. Proactively /clear after ~15 substantive turns or whenever a major phase of work completes. The investigation README is your bridge between sessions.