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
macOS (Homebrew — recommended):
brew tap CptPlastic/commitclinic https://github.com/Cptplastic/commitclinic
brew install commitclinic
pip:
pip install commitclinic
pipx (isolated install):
pipx install commitclinic
From source:
git clone https://github.com/your-org/commitclinic
cd commitclinic
pipx install .
Install helper tools (BFG + TruffleHog):
commitclinic install-tools
Quick Start
- Run intake + diagnosis:
commitclinic intake --repo /path/to/repo --json-out reports/findings.json --csv-out reports/findings.csv
- 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.
- Install BFG jar via CommitClinic:
commitclinic install-tools --with-bfg
- 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.jarin 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 intaked: refresh diagnosisp: preview treatment planw: write report JSON to temp directoryj/kor arrow keys: move selected findingt: run treatment for selected finding path (prompts foryconfirmation)q: quit
The TUI is intended for local triage sessions. Use standard non-interactive commands in CI and GitHub Actions.
TUI treatment notes:
- The
taction usesgit-filter-repofor 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 for CI are available in the source repository.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file commitclinic-0.1.7.tar.gz.
File metadata
- Download URL: commitclinic-0.1.7.tar.gz
- Upload date:
- Size: 29.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1cbd7fe27db9dad3ac28069dba64b2fe749168acd74c3443a3a2db3ee5d7148
|
|
| MD5 |
e6cd272156f23dee7fcb559e58b1b0a7
|
|
| BLAKE2b-256 |
cabfcf9711d1d01f295b02b8b014b888498c9b1402360a81db38181eae5c009d
|
Provenance
The following attestation bundles were made for commitclinic-0.1.7.tar.gz:
Publisher:
release.yml on CptPlastic/commitclinic
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
commitclinic-0.1.7.tar.gz -
Subject digest:
f1cbd7fe27db9dad3ac28069dba64b2fe749168acd74c3443a3a2db3ee5d7148 - Sigstore transparency entry: 1396189072
- Sigstore integration time:
-
Permalink:
CptPlastic/commitclinic@f955b718ab2cbc7a41c65e3a9cae3277eabe1b15 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/CptPlastic
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f955b718ab2cbc7a41c65e3a9cae3277eabe1b15 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file commitclinic-0.1.7-py3-none-any.whl.
File metadata
- Download URL: commitclinic-0.1.7-py3-none-any.whl
- Upload date:
- Size: 21.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53720da90a8adb4795afade2a8cbb9739d7a44252fc72b67e11656c2ec5fb9fc
|
|
| MD5 |
afecbd49d0fbf0de2fe1fb9195f11c02
|
|
| BLAKE2b-256 |
373becc1bba2e16baa2429bcdf17b2ac0c52f1a5ef0a113f1bc237f6a4c3058d
|
Provenance
The following attestation bundles were made for commitclinic-0.1.7-py3-none-any.whl:
Publisher:
release.yml on CptPlastic/commitclinic
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
commitclinic-0.1.7-py3-none-any.whl -
Subject digest:
53720da90a8adb4795afade2a8cbb9739d7a44252fc72b67e11656c2ec5fb9fc - Sigstore transparency entry: 1396189102
- Sigstore integration time:
-
Permalink:
CptPlastic/commitclinic@f955b718ab2cbc7a41c65e3a9cae3277eabe1b15 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/CptPlastic
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f955b718ab2cbc7a41c65e3a9cae3277eabe1b15 -
Trigger Event:
workflow_dispatch
-
Statement type: