Releases: tkoehlerlg/coderabbit-threads
v0.10.0
When you ask "is this PR through CodeRabbit?", cr status now answers it. The new bot_review block carries CodeRabbit's formal review state (APPROVED, CHANGES_REQUESTED, COMMENTED, DISMISSED) along with a stale flag that turns true the moment commits land after the review.
The stale flag fills a gap between the two signals already on cr status: in_progress says CodeRabbit is reviewing right now, mode == paused says CodeRabbit is waiting on a manual trigger, and stale: true says the last verdict you have is from an older head. Read them together to know whether the APPROVED stamp on the PR is worth anything.
What you get
cr statusreturnsbot_review: {state, submitted_at, commit_sha, stale}, ornullwhen CodeRabbit has never submitted a formal review.cr status --plainappends· CR approved,· CR approved (stale),· CR requested changes, or· CR requested changes (stale)to the one-liner. COMMENTED stays off because it fires on every push; DISMISSED is a rare human action and stays off for the same noise reason.- SKILL.md Step 3's zero-open-threads exit reads
bot_reviewand tailors the message. Instead of a flat "No open CodeRabbit threads on PR.", you get "✅ No open CodeRabbit threads. CodeRabbit approved the PR." or, on a stale approval, a nudge to runcr reviewfor a fresh pass.
The three "is the verdict current?" axes
| Field | True when |
|---|---|
in_progress |
CodeRabbit is re-reviewing right now |
mode == "paused" |
CodeRabbit auto-paused (active development) or user-paused, waiting on @coderabbitai resume / review |
bot_review.stale |
Commits landed after the last formal review, so the verdict's commit_sha differs from the PR's head |
Each catches a different "the stamp you see is from an older state" failure mode.
Full diff: v0.9.1...v0.10.0
v0.9.0
CodeRabbit answers replies with an emoji reaction as often as it answers with a text comment. Up to 0.8.0 the skill only watched for text, so when CodeRabbit hit 🚀 on a "Fixed in " reply and never followed up with text, the polling loop sat through its 5-minute window and exited without closing the thread. You had to close it yourself in the GitHub UI.
0.9.0 reads reactions as a first-class response. 🚀 counts as agreement and the thread gets resolved (subject to your RESOLVE_POLICY). 👀 doesn't, because CodeRabbit drops 👀 on almost every reply within seconds and that's just "received, still deciding". 👎 and 😕 surface as pushback for the next run.
What you get
- Threads where CodeRabbit's only response was 🚀 now close on their own.
- A
bot-agreedlabel and--filter bot-agreedso you can find the threads that are ready to close at a glance. - The polling step shows which signal CodeRabbit sent instead of a generic "no reaction yet".
cr threads --filter openreturns every unresolved thread, matching what "Open" means in GitHub's UI. Outdated-unresolved threads come along with their own label so they show up in the run summary instead of getting silently dropped.--filter actionablereturns the same set, sorted by triage priority (pushback first, fresh next, outdated then bot-agreed) instead of GitHub's chronological order.
Reaction taxonomy
| Reaction | Signal | What CodeRabbit means |
|---|---|---|
| 🚀 ROCKET, 🎉 HOORAY, ❤️ HEART, 👍 THUMBS_UP | agree |
"Shipped, sounds good." |
| 👀 EYES | pending |
"I saw your reply." Not a decision yet. |
| 👎 THUMBS_DOWN, 😕 CONFUSED | disagree |
"Reply is insufficient." |
| 😄 LAUGH, anything else | pending |
Treated as ambiguous so nothing auto-resolves on noise. |
Smaller things
--filter unresolvedis gone. After theopenwidening it was a duplicate name for the same set.cr statusthread count widened so the human-initiated count in the Step 5 summary lines up with the newopenset.
Full diff: v0.8.0...v0.9.0
v0.7.0
Two new CLI primitives that let the agent revise or retract its own posted replies. The conversational loop is iterative: CodeRabbit reacts, commits land, the user changes direction. Without cr edit / cr delete the agent is stuck with whatever it posted first. With them, a Fixed in <sha> reply can backfill the real sha after the commit lands, a Won't fix can flip to Fixed when the user reconsiders, and a stray paste on the wrong thread cleans up without leaving noise.
Added
cr edit <pr-url> <comment-id> <new-body>. Edit a review-thread reply you posted earlier (sha backfill, revising the body after CodeRabbit pushed back, flipping templates after a user direction change). WrapsPATCH /repos/.../pulls/comments/{id}. Output is{comment_id, updated_at}on success. GitHub returns 403 if you don't own the comment;crsurfaces that as anapi_dieat exit code 2.cr delete <pr-url> <comment-id>. Delete a review-thread reply you posted earlier (wrong-thread paste error; changing the response shape entirely, e.g.Won't fix→Fixed). WrapsDELETE /repos/.../pulls/comments/{id}. Output is{comment_id, deleted: true}on success; same 403 / exit 2 behaviour ascr edit.
Changed
- SKILL.md Step 6.6 documents
cr editandcr deletewith concrete agent-scope triggers: sha backfill / CodeRabbit pushback / user direction change for edit; wrong-thread paste / response-shape flip for delete. Also flags that an edit aftercr checksaw CodeRabbit's reaction does not re-trigger the bot.
Internal
No breaking changes. Existing cr invocations continue to work unchanged. Error paths (non-existent comment IDs) exit 2 with an explanatory message and no retry.
Full diff: v0.6.0...v0.7.0
v0.6.0
CLI polish round driven by a real-PR walkthrough. Adds a batch-reply primitive, a compact cr context mode for triaging long thread lists, per-subcommand --help, and cr --version. Also tightens two SKILL.md workflow gaps surfaced when an agent bypassed the per-thread loop after a summary-only exit. No breaking changes.
Added
cr reply-many <pr-url> --body <body> <thread-id> [<thread-id>...]. Fan-out: post one body to N threads in a single call. Output is a JSON array; each element is{thread_id, comment_id, created_at}on success or{thread_id, error}on failure. Exit0if every reply landed,2if any failed. Replaces the common pattern of three sequentialcr replycalls after a mechanical-fix commit that closed three related issues with the sameFixed in <sha> by …body.cr context --compact. Strips the standard context block down to title, severity, location, jump link, and the first 5 lines ofai_prompt. No[!IMPORTANT]/[!TIP]callouts, no proposed-fix hint, no "How to respond" footer. For batch triage of 6+ threads where the full callouts drown the per-thread signal.--fulland--compactare mutually exclusive.- Per-subcommand
--help. Everycr <subcommand>now responds to-h/--helpwith its usage line and exits0. Previously the top-levelcr --helpworked but subcommand-level rejected withunknown flag: --help. cr --version/cr -v/cr version. Printscr <version>and exits0. The constant lives inbin/crand is bumped alongsideplugin.json+SKILL.mdfrontmatter.
Changed
- SKILL.md Step 5
summary-onlyroute now exits with a verbatim re-invoke nudge ("when you're ready to reply, re-invoke/coderabbit-threadsso each thread gets its own pause-point") plus a paragraph explicitly forbidding "let's work on them" follow-ups from jumping to code. Closes a real workflow gap surfaced when an agent bypassed Step 6 after a summary-only run and made a behavioral-contract call without prompting the user. - SKILL.md Step 6 contested gate carves out behavioral-contract disagreements (status code, error vs warn, throw vs return, sync vs async, side effects, etc.) as always-ask. This holds even in
MODE = autoand even with high confidence. Both options can be defensible, and the choice belongs to the user, not the agent. The "high-confidence auto-Won't fix" path stays for genuinely-mistaken bot claims (non-existent function, repeated finding), not for design-call disagreements. - SKILL.md Step 6.4 documents
cr reply-manywith a "Batch fan-out for the one-commit-closed-N-threads case" paragraph explaining when to prefer it over per-threadcr reply(identical body across threads; mixed bodies fall back to per-thread). Step 6.1 documents--compactfor batch-triage runs. - Common Mistakes gains two entries naming the failure modes that drove the Step 5 / Step 6 edits: "Acting on threads after a
summary-onlyexit without re-invoking" and "Making a behavioral-contract call autonomously inMODE = auto".
Internal
No breaking changes. Existing cr invocations continue to work unchanged. The agent does not have to use reply-many or --compact; they're available when the situation fits.
Full diff: v0.5.0...v0.6.0
v0.5.0
This release ships drop-in wrappers and a one-liner installer for the Tier-2 hosts documented in INSTALLATION.md. The Claude Code install path is unchanged.
One-liner installer
curl -fsSL https://raw.githubusercontent.com/tkoehlerlg/coderabbit-threads/main/scripts/install-adapter.sh \
| bash -s -- --host=<windsurf|cline|kilo|continue|zed>Run from your project root. The installer vendors SKILL.md and reference.md into <your-repo>/.coderabbit-threads/, then copies the matching adapter file(s) to the path each host expects. Flags: --target, --ref, --force, --help.
Added
adapters/tree — drop-in wrappers (≤ 25 lines each) for Windsurf, Cline, Kilo Code, Continue.dev, and Zed. Each lives at the path the host expects (adapters/windsurf/.windsurf/workflows/coderabbit-threads.md, etc.) so a manual copy mirrors the installer's output.scripts/install-adapter.sh— bash installer, no Node required. Bare invocation prints help.- Vendor-in-repo strategy. Per-host research found only Continue.dev supports static includes in rule/workflow files; the rest need a runtime
read_file. The installer + wrappers handle both — the canonical runbook lives at.coderabbit-threads/SKILL.mdin your repo, and each wrapper either transcludes it (Continue) or instructs the host agent to read it at runtime.
Changed
- README install section now distinguishes Claude Code (marketplace command) from other hosts (one-liner installer + link to
INSTALLATION.md). INSTALLATION.mdTier-2 table rewritten as a copy-checklist — each row links to the adapter file and shows the destination path.adapters/README.mdleads with the installer; manual copy stays below as a fallback.
Internal
cr threadsJSON,cr contextmarkdown, andcrfilter set unchanged. No runbook behaviour changes. Version bumped to 0.5.0 inSKILL.mdfrontmatter,plugin.json, andmarketplace.json.
Full diff: v0.4.1...v0.5.0
v0.3.2
First public release of coderabbit-threads.
A Claude Code skill that walks every open CodeRabbit review thread on a PR and replies to each one conversationally. Your agent triages each thread, fixes what it can and commits, pushes back when CodeRabbit is wrong, asks you only on judgment calls, and resolves only once CodeRabbit agrees. So you stop being the copy-paster between CodeRabbit and your agent.
This is the multi-round conversational counterpart to the official coderabbit:autofix skill, which applies proposed diffs and posts one summary comment. Reach for coderabbit-threads when you want to acknowledge, push back, or explicitly defer suggestions thread by thread.
The friction point
Most coding agents don't push back on CodeRabbit themselves. They apply whatever it suggests or punt the decision back to you, which turns you into the copy-paster between CodeRabbit and your agent: reading each claim, deciding whether to act, dictating each reply, then handing it back. You're a developer, not a relay. coderabbit-threads evaluates CodeRabbit's claims the way you would, fixes what's worth fixing, and pushes back when CodeRabbit is wrong, so you only weigh in on the genuine judgment calls.
What it does
- Per-thread replies, not a bulk PR comment. Resolving a thread means reacting to that thread.
- Two modes. In together mode it pauses on every judgment call. In auto mode it fixes
still-appliesthreads in code, commits, and postsFixed in <sha>on its own. - Pushback on
contestedthreads where CodeRabbit is technically wrong. The agent posts a confidentWon't fix: <one-line reason>instead of folding. - Asks you only on the genuine judgment calls (
unclear,bot-pushback, low-confidencecontested). - Sticky approvals. One
yesbecomes the default for the rest of the run, so a 20-thread PR doesn't turn into 20 identical prompts. - Waits for CodeRabbit's reaction before resolving, so the bot can still push back inline.
- Detects when CodeRabbit has been paused on a PR and offers to resume, run a one-time review, or skip straight to existing threads.
Install
/plugin marketplace add tkoehlerlg/coderabbit-threads
/plugin install coderabbit-threads@coderabbit-threads
/reload-plugins
Manual install and other agent runtimes (Copilot CLI, Codex CLI, Gemini CLI) are documented in the README.
Composes with coderabbit:autofix
Run coderabbit:autofix to land the easy wins, then coderabbit-threads to talk through what's left.