Learn your pushback style from past Claude Code feedback and code reviews, and replicate it with a language model.
Project description
cc-pushback
cc-pushback mines your Claude Code transcripts for the moments you pushed back — corrections, interrupts, rejected plans, code-review comments, "no, do it this way" — and collects them, with the surrounding conversational context, into a local database. That corpus is the raw material for learning your pushback style; this first release builds it.
Install
No install needed — run everything through uvx:
uvx cc-pushback --help
uvx fetches cc-pushback into a throwaway environment and runs it. To add it
to a project instead:
uv add cc-pushback
Quickstart
Scan your transcripts for the moments you pushed back and accumulate them 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 it is
new or has changed since the last scan, and every candidate is keyed by a content
digest, so re-running over unchanged inputs adds nothing. Recording a file and
inserting its candidates commit in one transaction — interrupt a scan and the
database is never left half-written. A transcript that fails to parse (one Claude
Code is still writing, say) is skipped and retried next time, never aborting the run.
The database lives at ~/.cc-pushback/feedback.db by default (override with
--db). Inspect what has been collected:
uvx cc-pushback stats # counts by source kind, and the scanned-file count
uvx cc-pushback list # recent feedback, newest first
uvx cc-pushback list --source plan_review --limit 50
What gets collected
scan runs four detectors over each transcript:
- Transcript messages (
transcript_message) — the pushback you typed mid-session, after trivial acknowledgements and structural noise are filtered out. - Plan reviews (
plan_review) — rejectedExitPlanModeplans (with the feedback you gave) and plan-mode re-entries right after an edit cycle, i.e. "let's rethink this." - Interrupts and rejections (
interrupt_rejection) — permission denials and[Request interrupted by user]corrections, with the denied tool and your follow-up captured. - Review comments (
review_comment) — structured code-review messages exploded into one row per inline comment.
Each row carries the conversational window around the feedback — the assistant action it responded to, plus a few turns either side — captured at collection time, because transcripts are ephemeral.
Restrict to specific kinds with --source (repeatable), or force a full re-mine
of every transcript (after a detector change, say) with --full:
uvx cc-pushback list --source transcript_message --source plan_review
uvx cc-pushback scan --full
Mining transcripts from another machine
Transcripts live under ~/.claude/projects. To mine a remote machine's history,
mirror its projects directory locally with rsync, then scan that directory:
rsync -az yasyf@yasyf:.claude/projects/ ~/.cc-pushback/mirrors/yasyf/
uvx cc-pushback scan --transcripts ~/.cc-pushback/mirrors/yasyf/
--transcripts is repeatable, so you can fold several mirrors into one scan.
Because discovery is mtime-keyed, repeating the rsync and re-scanning only
ingests what changed.
What problems does this solve?
- Your corrections evaporate. Every "don't do it that way" you've typed into Claude Code is sitting unused in transcript files. cc-pushback turns that history into a structured dataset.
- CLAUDE.md only captures what you remember to write down. Most of your taste is tacit — you only notice a rule when it's violated. Collecting real pushbacks recovers the rules you never articulated.
- The signal is buried in noise. Trivial acknowledgements, structural reminders, and tool chatter drown out the moments that matter; cc-pushback keeps the pushback and discards the rest.
Docs
Read the docs for the full guide and API reference.
Project details
Release history Release notifications | RSS feed
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.1.0.tar.gz.
File metadata
- Download URL: cc_pushback-0.1.0.tar.gz
- Upload date:
- Size: 20.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f9c9d01f50b9b0b34c6714c21c5f33a9d862a5c15f150905519e92cbf9c7d3b
|
|
| MD5 |
92efdaaed11d919e105cfaf757b2c746
|
|
| BLAKE2b-256 |
f2b3188968e5496f461bdb7a6798161c190fb37b56b6a5ead7895d82364c59dc
|
Provenance
The following attestation bundles were made for cc_pushback-0.1.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.1.0.tar.gz -
Subject digest:
9f9c9d01f50b9b0b34c6714c21c5f33a9d862a5c15f150905519e92cbf9c7d3b - Sigstore transparency entry: 1778458686
- Sigstore integration time:
-
Permalink:
yasyf/cc-pushback@f0a03de4b18b026668eaf710d40650845b1404e7 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/yasyf
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@f0a03de4b18b026668eaf710d40650845b1404e7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cc_pushback-0.1.0-py3-none-any.whl.
File metadata
- Download URL: cc_pushback-0.1.0-py3-none-any.whl
- Upload date:
- Size: 25.7 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 |
9c75c598ae2d044cb1b483d52b4a83c91b22087ccd51a822adf5f2eb95f09dde
|
|
| MD5 |
821421fd54939b126e4fd264dfff2802
|
|
| BLAKE2b-256 |
e4590c2af0775e09405ccb55437a0cc020b89015dafde259873c26f434c75421
|
Provenance
The following attestation bundles were made for cc_pushback-0.1.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.1.0-py3-none-any.whl -
Subject digest:
9c75c598ae2d044cb1b483d52b4a83c91b22087ccd51a822adf5f2eb95f09dde - Sigstore transparency entry: 1778459261
- Sigstore integration time:
-
Permalink:
yasyf/cc-pushback@f0a03de4b18b026668eaf710d40650845b1404e7 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/yasyf
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@f0a03de4b18b026668eaf710d40650845b1404e7 -
Trigger Event:
push
-
Statement type: