Skip to main content

Repository triage CLI for migration readiness and cleanup planning

Project description

CommitClinic

CommitClinic is a repository migration triage CLI. It diagnoses Git repositories (and legacy repos once mirrored to Git), scores migration readiness, and plans safe treatment actions.

Vibe

CommitClinic uses a medical triage voice:

  • Intake: collect repository baseline.
  • Diagnosis: identify risk findings.
  • Severity: assign A-F readiness grade.
  • Treatment Plan: propose cleanup actions.
  • Discharge: final migration readiness status.

Install

From PyPI (recommended):

pipx install commitclinic

From source (local dev):

git clone https://github.com/your-org/commitclinic
cd commitclinic
pipx install .

That's it. commitclinic is now available everywhere in your terminal. No venv activation needed — pipx manages the isolation automatically.

If you don't have pipx: brew install pipx && pipx ensurepath

Install helper tools (BFG + TruffleHog):

commitclinic install-tools

Quick Start

  1. Run intake + diagnosis:
commitclinic intake --repo /path/to/repo --json-out reports/findings.json --csv-out reports/findings.csv
  1. Print scoring summary:
commitclinic diagnose --input reports/findings.json

Core Commands

  • commitclinic intake: scan a repository and generate findings.
  • commitclinic diagnose: compute score and grade from findings JSON.
  • commitclinic treatment-plan: generate remediation suggestions.
  • commitclinic treat: execute approved history cleanup actions.
  • commitclinic install-tools: install optional helper tools (such as BFG).
  • commitclinic discharge: produce final readiness summary.
  • commitclinic batch: scan multiple repositories from a local paths file.
  • commitclinic scan-list: clone and scan repos from a JSON URL list.
  • commitclinic ui: launch an interactive terminal dashboard.

commitclinic treat is destructive. It requires --approve and should be run only after backup.

BFG Support

CommitClinic supports BFG as a treatment backend.

  1. Install BFG jar via CommitClinic:
commitclinic install-tools --with-bfg
  1. Run treatment with BFG:
commitclinic treat --repo /path/to/repo --backend bfg --strip-path secrets.txt --approve

Notes:

  • BFG deletes by filename pattern; exact path deletions are best handled with git-filter-repo.
  • You can set BFG_JAR=/path/to/bfg-1.14.0.jar in CI/local environments to pin the jar.

Terminal TUI

Run the interactive terminal dashboard:

commitclinic ui --repo /path/to/repo

Shorter launch options also work:

commitclinic ui
commitclinic tui
commitclinic dashboard

If --repo is omitted, CommitClinic uses the current directory.

Keyboard controls:

  • i: run intake
  • d: refresh diagnosis
  • p: preview treatment plan
  • w: write report JSON to temp directory
  • j/k or arrow keys: move selected finding
  • t: run treatment for selected finding path (prompts for y confirmation)
  • q: quit

The TUI is intended for local triage sessions. Use standard non-interactive commands in CI and GitHub Actions.

TUI treatment notes:

  • The t action uses git-filter-repo for selected finding paths.
  • If selected finding has no path location, treatment is blocked.

TruffleHog Integration

If trufflehog is installed and available in PATH, CommitClinic runs it automatically during intake. If not installed, CommitClinic logs a non-blocking warning finding so you can still run a full pipeline.

Scanning a List of Remote Repos

Create a JSON file with the repos you want to audit:

{
  "repos": [
    { "url": "https://github.com/org/repo-one", "name": "repo-one" },
    { "url": "https://github.com/org/repo-two", "name": "repo-two" }
  ]
}

A flat array of URL strings also works:

["https://github.com/org/repo-one", "https://github.com/org/repo-two"]

Run the scan:

commitclinic scan-list repos.json --work-dir ~/scratch/clones

Results are written to repos.results.json (alongside the list file) after each repo, so if the process is interrupted mid-list you don't lose progress. Re-running skips repos that are already in the results file. Use --refresh to re-scan everything.

# Custom output path:
commitclinic scan-list repos.json --out results/audit.json

# Exit 2 if any repo has blocking findings (useful in CI):
commitclinic scan-list repos.json --strict

# Re-scan all, even previously scanned:
commitclinic scan-list repos.json --refresh

GitHub Actions

Starter workflows are included:

  • .github/workflows/commitclinic-audit.yml
  • .github/workflows/commitclinic-pr.yml
  • .github/workflows/commitclinic-summary.yml

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

commitclinic-0.1.1.tar.gz (84.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

commitclinic-0.1.1-py3-none-any.whl (19.1 kB view details)

Uploaded Python 3

File details

Details for the file commitclinic-0.1.1.tar.gz.

File metadata

  • Download URL: commitclinic-0.1.1.tar.gz
  • Upload date:
  • Size: 84.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for commitclinic-0.1.1.tar.gz
Algorithm Hash digest
SHA256 80b7e05fdb976912af3aaf2801749c9ff22852fd4f3b8c38fc3530e243dc16ce
MD5 a5a75518a5aa77da128b7aa7ad8914c3
BLAKE2b-256 00fbbbcadb031aa21b0129fcf132bb7af9f01db563f33f3b36ae16f444320f5b

See more details on using hashes here.

File details

Details for the file commitclinic-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: commitclinic-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 19.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for commitclinic-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 764336bb3f6f8d09f9d9e0a33d43bc80ddd63a4dfc034667798dca0c189d89ba
MD5 ad3be38f0794f11f34c8731965682108
BLAKE2b-256 b1700bdc122da806de9a80886db9f89d17edeb07a20093b8e452ec14067d377f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page