This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Reason given by maintainers: Project renamed to cc-steer — install cc-steer instead (https://pypi.org/project/cc-steer/)
cc-pushback
Mine your Claude Code transcripts for the moments you pushed back into a local database.
cc-pushback collects your corrections, interrupts, rejected plans, and code-review comments — with the surrounding conversational context — into a feedback database, then judges each candidate, refines the accepted ones into atomic training pairs, and grounds them in the code they complain about. Your taste is mostly tacit (you notice a rule when it's violated), and that signal sits unused in transcript files; this turns it into a training dataset.
Install
Run with uvx: uvx cc-pushback --help.
Quickstart
Scan your transcripts and accumulate the pushback into a local feedback database:
uvx cc-pushback scan
scanned 412 files, 1473 new rows
scan is incremental and idempotent: each transcript is parsed only when new or changed, every candidate is keyed by a content digest, and recording a file commits in one transaction, so an interrupted scan never leaves the database half-written. The database lives at ~/.cc-pushback/feedback.db by default (override with --db).
Commands
| Command | What it does |
|---|---|
scan |
Scan transcripts for feedback, incrementally. --full re-mines every transcript; --transcripts DIR (repeatable) scans other directories. |
stats |
Print ingestion counts by source kind and triage coverage. |
list |
List recent feedback events, newest first. --source KIND and --limit N. |
triage |
Judge every stored candidate lacking a verdict at the current prompt version. |
audit |
Audit a seeded stratified sample of the current prompt version's verdicts. |
eval |
Compute the mechanical metrics for the current prompt version. No LLM calls. |
refine |
Refine every accepted pushback event into atomic training pairs. |
enrich |
Ground every refined pair in the code it complains about. |
export |
Export the pushback lineage as a HuggingFace dataset. --push uploads every config to a private dataset in your HF namespace. |
pairs |
Print the refined training pairs — the pipeline's deliverable. |
view-samples |
Serve the training-pairs dashboard: refined pairs and their full lineage. |
scan, triage, audit, refine, and enrich sync the dataset to <hf-user>/cc-pushback-traces — a private dataset in your HF namespace, created on first push (requires hf auth login) — whenever a pass changes data; --no-sync skips it. Run uvx cc-pushback COMMAND --help for the full flag list.
What gets collected
scan runs four detectors over each transcript, each tagged with a source kind: transcript messages (transcript_message, the pushback you typed mid-session), plan reviews (plan_review, rejected ExitPlanMode plans and plan-mode re-entries), interrupts and rejections (interrupt_rejection, permission denials and user interrupts), and review comments (review_comment, one row per inline code-review comment). Each row carries the conversational window around the feedback, captured at collection time because transcripts are ephemeral.
Exporting a training dataset
Once the corpus is judged, export turns it into a HuggingFace dataset:
uvx cc-pushback export
traces: train 1156 test 115
sft: train 499 test 67
dpo: train 363 test 44
kto: train 1156 test 115
One canonical traces config — one row per judged event, carrying the context, verdicts, refined pairs, and code evidence — plus three TRL-ready projections (sft, dpo, kto) land as per-split parquet under ~/.cc-pushback/dataset (override with --out), next to a generated dataset card. Splits are a deterministic group split on the session hash, so a session never straddles train and test. --push uploads every config to a private dataset in your HF namespace (--repo-id, default <hf-user>/cc-pushback-traces).
You rarely run export by hand. Every mutating pass that changed data rebuilds the dataset and pushes all four configs to that repo. A failed push exits nonzero with the local writes already committed, and the next sync picks them up; export --push is the manual catch-up.
Mining from another machine
Transcripts live under ~/.claude/projects. Mirror a remote machine's history locally, then point scan at it — --transcripts is repeatable, so several mirrors fold into one scan:
rsync -az yasyf@yasyf:.claude/projects/ ~/.cc-pushback/mirrors/yasyf/
uvx cc-pushback scan --transcripts ~/.cc-pushback/mirrors/yasyf/
Docs
Read the docs for the full guide and API reference.
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 cc_pushback-0.8.0.tar.gz.
File metadata
- Download URL: cc_pushback-0.8.0.tar.gz
- Upload date:
- Size: 65.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dfe4f20015665b0b9f77d0f50647237e23fd9b1a8af6f4df64f57e8dd6b066d9
|
|
| MD5 |
e3baf2ef8b7c3aa79c0a94c4032c874a
|
|
| BLAKE2b-256 |
84e9307fb591c10fff8b0141aa64f1b1c191446e815c99dea795d67a1f39eaaa
|
Provenance
The following attestation bundles were made for cc_pushback-0.8.0.tar.gz:
Publisher:
release-pypi.yml on yasyf/cc-pushback
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cc_pushback-0.8.0.tar.gz -
Subject digest:
dfe4f20015665b0b9f77d0f50647237e23fd9b1a8af6f4df64f57e8dd6b066d9 - Sigstore transparency entry: 2055584304
- Sigstore integration time:
-
Permalink:
yasyf/cc-pushback@d49d914423c436f7f436e88cf2da77d068fff8c5 -
Branch / Tag:
refs/tags/v0.8.0 - Owner: https://github.com/yasyf
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@d49d914423c436f7f436e88cf2da77d068fff8c5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cc_pushback-0.8.0-py3-none-any.whl.
File metadata
- Download URL: cc_pushback-0.8.0-py3-none-any.whl
- Upload date:
- Size: 77.5 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 |
3d7bc57d8ec898e747d2b49ddef46d259feaadcc27daf858367895991e52e52d
|
|
| MD5 |
c830c5ddc1383d8b27e50cd6aca10723
|
|
| BLAKE2b-256 |
a004512f46e4c26ce03adcbb2b17b87c052fe23399f791b410bdd8fd2ae7cdb6
|
Provenance
The following attestation bundles were made for cc_pushback-0.8.0-py3-none-any.whl:
Publisher:
release-pypi.yml on yasyf/cc-pushback
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cc_pushback-0.8.0-py3-none-any.whl -
Subject digest:
3d7bc57d8ec898e747d2b49ddef46d259feaadcc27daf858367895991e52e52d - Sigstore transparency entry: 2055584592
- Sigstore integration time:
-
Permalink:
yasyf/cc-pushback@d49d914423c436f7f436e88cf2da77d068fff8c5 -
Branch / Tag:
refs/tags/v0.8.0 - Owner: https://github.com/yasyf
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@d49d914423c436f7f436e88cf2da77d068fff8c5 -
Trigger Event:
push
-
Statement type: