Skip to main content
Yanked

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

cc-pushback banner

PyPI Python Docs License: PolyForm-Noncommercial-1.0.0

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

cc_pushback-0.8.0.tar.gz (65.0 kB view details)

Uploaded Source

Built Distribution

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

cc_pushback-0.8.0-py3-none-any.whl (77.5 kB view details)

Uploaded Python 3

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

Hashes for cc_pushback-0.8.0.tar.gz
Algorithm Hash digest
SHA256 dfe4f20015665b0b9f77d0f50647237e23fd9b1a8af6f4df64f57e8dd6b066d9
MD5 e3baf2ef8b7c3aa79c0a94c4032c874a
BLAKE2b-256 84e9307fb591c10fff8b0141aa64f1b1c191446e815c99dea795d67a1f39eaaa

See more details on using hashes here.

Provenance

The following attestation bundles were made for cc_pushback-0.8.0.tar.gz:

Publisher: release-pypi.yml on yasyf/cc-pushback

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for cc_pushback-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3d7bc57d8ec898e747d2b49ddef46d259feaadcc27daf858367895991e52e52d
MD5 c830c5ddc1383d8b27e50cd6aca10723
BLAKE2b-256 a004512f46e4c26ce03adcbb2b17b87c052fe23399f791b410bdd8fd2ae7cdb6

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.8.1

2 files

This release

0.8.0 This release

2 files

0.7.2

2 files

0.7.1

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page