Open Code Review CLI
alibaba/open-code-review
Runs the ocr command-line tool to review Git changes, a commit or a branch comparison with an AI model, returning line-level comments and optionally applying fixes.
Checks whether a working-tree diff or a pull request is safe to merge: blast radius, tests to run, contract breaks, branch conflicts and stranded work.
$ npx skills add redhat-et/ripwire --skill ripwire-change-check -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install redhat-et/ripwire ripwire-change-check --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/redhat-et/ripwire.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ripwire-change-check .claude/skills/ripwire-change-check && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "ripwire-change-check" agent skill from https://github.com/redhat-et/ripwire/tree/main/skills/ripwire-change-check into .claude/skills/ripwire-change-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ripwire-change-check", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/redhat-et/ripwire/tree/main/skills/ripwire-change-checkType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add redhat-et/ripwire --skill ripwire-change-check -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install redhat-et/ripwire ripwire-change-check --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/redhat-et/ripwire.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/ripwire-change-check .agents/skills/ripwire-change-check && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ripwire-change-check" agent skill from https://github.com/redhat-et/ripwire/tree/main/skills/ripwire-change-check into .agents/skills/ripwire-change-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ripwire-change-check", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add redhat-et/ripwire --skill ripwire-change-check -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install redhat-et/ripwire ripwire-change-check --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/redhat-et/ripwire.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/ripwire-change-check .cursor/skills/ripwire-change-check && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ripwire-change-check" agent skill from https://github.com/redhat-et/ripwire/tree/main/skills/ripwire-change-check into .cursor/skills/ripwire-change-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ripwire-change-check", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/redhat-et/ripwire.git --path skills/ripwire-change-check--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add redhat-et/ripwire --skill ripwire-change-check -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install redhat-et/ripwire ripwire-change-check --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/redhat-et/ripwire.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/ripwire-change-check .gemini/skills/ripwire-change-check && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ripwire-change-check" agent skill from https://github.com/redhat-et/ripwire/tree/main/skills/ripwire-change-check into .gemini/skills/ripwire-change-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ripwire-change-check", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install redhat-et/ripwire ripwire-change-checkInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add redhat-et/ripwire --skill ripwire-change-check -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/redhat-et/ripwire.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/ripwire-change-check .github/skills/ripwire-change-check && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ripwire-change-check" agent skill from https://github.com/redhat-et/ripwire/tree/main/skills/ripwire-change-check into .github/skills/ripwire-change-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ripwire-change-check", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add redhat-et/ripwire --skill ripwire-change-check -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install redhat-et/ripwire ripwire-change-check --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/redhat-et/ripwire.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/ripwire-change-check .opencode/skills/ripwire-change-check && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ripwire-change-check" agent skill from https://github.com/redhat-et/ripwire/tree/main/skills/ripwire-change-check into .opencode/skills/ripwire-change-check/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ripwire-change-check", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ripwire-change-checkChecks whether a working-tree diff or a pull request is safe to merge: blast radius, tests to run, contract breaks, branch conflicts and stranded work.
Aimed at the moment before you push or when you review someone else's PR, this skill drives the `ripwire` command line tool over a real git diff. Its main command, `--pr-context`, builds one evidence bundle for the whole change: for each changed file it lists defined symbols, their callers, the transitive blast radius, affected tests, co-change partners missing from the diff and owners.
For a small fix, `--edit-check` with a symbol name confirms whether the edit changed a contract. A contract-change result means the fix was less contained than it looked and the fuller audit applies; only an unchanged result, the focused test and a clean `git diff --check` justify stopping early. The skill also covers branch conflicts, landing order, unmerged work left on old branches and which ref defines a symbol. Questions about code quality go to a separate quality-bar skill.
9 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 60dd3b3. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Ripwire Change Check loads about 4.3k tokens when it runs. Until then it costs about 84 tokens; SKILL.md has 2,336 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Bash, ReadAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from redhat-et/ripwire at commit 60dd3b3, republished under its Apache-2.0 licence (© redhat-et). 2,336 words, ~4,311 tokens.
.claude/skills/ripwire-change-check/SKILL.md (or your agent's skills folder).Routing: • Estimating a change you have NOT written yet (feasibility/plan/sizing) → ripwire-before-you-build. • Did the code ITSELF get better or worse? (complexity/dup/dead delta) → ripwire-quality-bar — run it FIRST; this is the chain "did the code get worse" → "is it safe to merge". • Risk on an unfamiliar subsystem you did NOT write (not tied to a diff) → ripwire-fresh-eyes. • Writing a test for EXISTING untested code (not vetting a diff) → ripwire-write-tests. • Not sure which skill? → ripwire-router.
<dir> = repo root. Run from the repo with your working changes staged/unstaged, or check out the PR branch
first. This works on a real diff — --situ, --map-diff, and --pr-context read git diff automatically.
--pr-context[=BASEREF]The flagship verb for this moment: a single no-LLM review-evidence bundle for the whole diff (working tree,
or vs BASEREF). Per changed file: defined symbols, their callers, transitive blast radius, affected tests,
co-change partners not in the diff, and owners — everything steps 1–5 assemble by hand, in one call:
ripwire <dir> --pr-context --legend=compact # working-tree diff
ripwire <dir> --pr-context=main --legend=compact # vs a base branch/ref<pr-context base="working-tree" files="N"><file p="…" symbols="K">
<impact dependents="…" files="…"/><tests count="…"/>
<changed-symbols count="K"><s t="fn" n="…" p="…:L" callers="…"/> …Use this first for the evidence dump; steps 1–5 below are the same ground as a narrated, one-pass walkthrough.
Scope guard: Do not turn a focused fix into a full merge audit merely because a diff now exists. Invoke
this skill when the user is actually at the submit/review/merge-safety moment, or when the edit changes a
contract or has unclear reach. But "obvious leaf-level fix with no signature/API change" is a claim, not a
given — run --edit-check=SYM (the fast per-symbol sibling of step 8, ~ms warm) to confirm it before trusting
it; a status="contract-change" result means the fix was not as leaf-level as it looked, and the full audit
below is now warranted. Only a genuinely "unchanged" result plus the focused test plus git diff --check
is enough to stop there, unless repository instructions require a broader gate.
Never run --pr-context and then repeat its component steps without a specific unanswered question.
The header is stamped at="<sha>[+dirty]" — the commit the evidence was measured at (--pr-context,
--test-gate, --quality-delta and --map-diff all carry it). Quote it whenever you paste findings into a
PR comment or hand them to someone else: a review bundle outlives the HEAD it was taken from. A +dirty
suffix means the numbers came from an uncommitted working tree — nobody else can reproduce them from
that sha, so re-run after you commit before treating them as review evidence. Note --situ, --cochange
and --owners carry no stamp — record the sha yourself if you quote them.
On a large diff the bundle can be huge — cap it with --max-tokens=N (e.g. ripwire <dir> --pr-context --legend=compact --max-tokens=8000): every changed file stays present with its structural counts (blast radius / tests /
callers), the deep detail trims deepest-first, and truncated=/est_tokens= on the header report the fit.
To feed an EXTERNAL reranker instead of reviewing directly, --query="…" --format=candidates (or --for=…)
emits a flat <cand r= s= n= id= k= p= l=> top-K — identity + score + signature only, capped by --top-k.
Situational awareness on the diff — ripwire <dir> --situ
(Reads git diff against HEAD; or --situ=fileA.cpp,fileB.h to name the changed set explicitly.)
One pass, plain text:
--affected under the hood) — empty = no test cover for the changed code, flag it.
Each named test carries run="<cmd>" when a runner is derivable (a test-dir script whose stem matches
the harness, or whose text names it), so the obligation is pasteable; no run= means not derivable —
never treat its absence as "there is no runner". Narrow the question to ONE function with
--affected=SYM (or --affected=file:NAME when a path shares the name) instead of widening it to the
whole file, and invert it with --exercises=test/<harness> to see what a given test actually covers.
On a corpus where few harnesses have a runner, --affected serves the runner-less rows GROUPED:
<g hops="2" n="17" p="a,b,c" run_unknown="1"/> is ONE row standing for 17 test files at the same hop
distance (p= lists them comma-separated, a , inside a path written ,), with the
not-derivable disclosure stated once for the group. Rows that DO have a run= stay single <t> rows.
The obligation is unchanged — every path is still listed verbatim, and a row carries run= or
run_unknown="1", never neither.Hotspot risk — ripwire <dir> --hotspots --legend=compact
<hotspots> ranked by score = churn × ccx. Does any changed file appear in the top-10? A change that
touches a high-score file deserves extra scrutiny; one that raises ccx in an already-churny file is a
regression risk.
Lint delta — ripwire <dir> --lint --legend=compact
<lint findings="N"> per-rule summary, then per-finding file + enclosing symbol. Cross against the
changed-file list from step 1 — any finding in a touched file is one this change introduced or inherited.
Missing-test seam check — if step 1 showed tests="0", run ripwire <dir> --seams --legend=compact to see whether the
changed code crosses an integration seam with no test coverage. That's the gap to fill before merging.
The diff's structural footprint — ripwire <dir> --map-diff --legend=compact
Emits ONLY the symbols changed vs git HEAD, ranked — the change's footprint in one screen, without the
rest of the map as noise. Add --rank-by=churn to order those symbols by git change-frequency instead of
PageRank: what floats to the top is the code that changes all the time — a change touching it again is
following (or feeding) a churn pattern worth asking about.
Read the numbers on what you touched — ripwire <dir> --metrics --legend=compact (also carried inline by --for/
--around --metrics). Cross these against your changed set:
| Attr | Means | Threshold → action |
|---|---|---|
cbo | distinct dependencies (coupling between objects) | high (≳8, or rose vs neighbours) = fragile, hard to test in isolation → decouple: hide a dependency behind an interface or invert it |
lcom4 | class cohesion = # connected method components (class-kinds only) | >1 = the class does N unrelated jobs (N disjoint method clusters) → split it into N types |
nest | max block-nesting depth | >~4, or above the file's local median → deep-branch smell → guard clauses / extract the inner block into a named fn |
loc | lines in the symbol | well above the local median for its kind → size smell → split; a giant new fn is the #1 agent verbosity failure mode |
params | parameter count | >~5 → bundle related params into a struct rather than widening the signature |
tested | is any indexed test reaching it | tested="1" = a safety net is present; omission on this explicit metrics surface means no indexed test reaches it → add one before changing it further |
| These are size-correlated signals (coupling is the validated one; complexity/size are heuristics) — read | ||
| the delta against the file's own median, not an absolute bar. A number that was already high before your | ||
diff is not your regression (that judgment is ripwire-quality-bar's --quality-delta). |
Docs-sync check — ripwire <dir> --mentions=SYM --legend=compact for each changed symbol from step 1. Any markdown doc
that backtick-names a symbol you just changed is a staleness candidate — the design rationale it wrote
down may no longer match the code. Skim the listed docs; update or flag the ones that describe behavior
your diff altered.
Run the test gate — ripwire <dir> --test-gate --legend=compact (the merge-safety moment, in one exit code). Packages
step 1's blast radius + tests-to-run into a gate: NAMES the tests that reach your change and the
untested blast radius (impacted symbols no test covers), exits 4 if either is non-empty. This
queryable map cut agent-caused regressions −70% (6.08%→1.82%, TDAD) — prose reminders alone made
agents worse. The gate can't watch a run; the loop is run the named tests, then rely on green. A
non-empty untested list = the gap to close before you call it merge-safe.
Landing several concurrent branches? — ripwire <dir> --merge-scout=REF1,REF2,... --legend=compact (read-only; the
dirty working tree joins automatically as an implicit extra arm). For each REF it diffs the ref's tree
against its merge-base with HEAD (git-archive temp copies — nothing is checked out or mutated) and
reports, per pair, same-symbol conflicts (both arms touched the identical symbol — a real merge will
fight over it) and same-file/different-symbol risks (no content collision, still worth a glance), plus
a <landing order="…"> — the fewest-conflicts-first sequence to land them in. Run this BEFORE picking a
merge order for several agent branches instead of hand-diffing each pair.
9b. Is anything STRANDED on a branch — and was it already re-done? — ripwire <dir> --stray-content --legend=compact
(=SUBSTR filters ref names). --merge-scout above answers "which of these named branches collide";
this answers the prior question — of all my branches, which still hold work the live line does not
have? Per ref it reports the lines that ref's own work AUTHORED (vs its merge-base with HEAD) that HEAD
lacks, with a verdict: unmerged (genuinely absent — this is the queue to work), superseded (the live
line removed the SAME base code this ref removed, i.e. it re-implemented the work), merged (omitted).
superseded is the case git cherry structurally cannot see — it compares commit ancestry, so a fix
the live line re-did differently stays "unmerged" forever, which is exactly how a finished fix sits on a
branch for days behind a ledger that says "ported". Every row prints its raw del=/redone=/sim=
evidence — read those before acting, the verdict is a summary, not an oracle. Line-granular, not
semantic. Read-only, single-root.
9c. "Where does this content live?" — ripwire <dir> --whereis=SYM --legend=compact. Which ref's tree defines or mentions
a symbol, HEAD first; on-head="0" alongside branch hits is content that exists ONLY on a branch. Each
distinct blob is read once (git is content-addressed), so 30 branches cost about one tree. kind="def"
on a branch row is a lexical heuristic — branch blobs are raw text, never ingested; for HEAD's parsed
answer use --expand/--callers.
A tree scan only finds what some ref still carries, so hits="0" cannot by itself tell a name this repo
never had from one it deleted. Add --with-history and a <fate> row says which: v="never", or
v="removed" commit=… date=… p=… naming the commit that took it out. One git log pass, memoized per
(repo, HEAD sha) and shared with --doc-drift --with-history.
9d. "Of all my branches, which still hold REAL work, and in what order should I land them?" — ripwire <dir> --stray-content --plan. Composes 9b + 9 in one call: selects the refs 9b calls v="unmerged",
DROPS the v="superseded" ones (<excluded reason="…"> names them — landing a superseded branch would
re-do work the live line already did, exactly the waste 9b exists to catch), and feeds the survivors to
9's pairwise-conflict + fewest-conflicts-first landing-order machinery, unmodified. <ref scouted="0">
is real unmerged work NOT fed to merge-scout THIS run — a cost bound, not a verdict (bounded= on the
root element counts it; --detail lifts the bound to scout everything). Cost: 9b is a cheap per-blob
sweep, but 9 is per-ARM (git-archive + full ingest of each ref's tree) — measured ~3s/ref on a real C++
repo, so this is an EXPLICIT "before you land" call (pass both flags on purpose), not a per-question one.
Bare --plan refuses loudly without --stray-content. Read-only; single-root only.
9d. Did a branch silently break a CPU/GPU struct's byte layout? — ripwire <dir> --stray-content --legend=compact --abi
(=SUBSTR filters ref names, same as 9b). Neither --layout=STRUCT (one index, the working tree) nor
--stray-content (line-granular — "added a float field" is just a stray line to it) catches a branch
that adds one field to a dual-compile uniform struct: the merge is textually clean, review sees a
harmless "+1 field", and the CPU ends up writing more bytes than the GPU reads for — wrong pixels, no
compiler error. This runs --layout's own field-offset arithmetic LEXICALLY on every ref that changed a
path HEAD declares a struct/class in, and diffs the result against HEAD's computed fields. kind="drift"
is a real byte-contract break (the only kind that exits 2); kind="spelling"/"stub" mirror --layout's
own harmless cases; kind="unknown" is a ref-side copy that could not be modelled (its caveats ride along
— never reported as unchanged); kind="absent" is a ref that does not define the struct there at all.
Matching structs are omitted (report only differences). Read-only, single-root, exit 2 on a real drift.
Mid-edit contract check, one symbol at a time — ripwire <dir> --edit-check=SYM --legend=compact (file:name
disambiguates a same-named symbol, like --around/--lego). The fast, targeted sibling of step 8's
--test-gate/--quality-delta: right after you touch a function, ask "did I just change a contract
someone depends on" without waiting for a full diff. Reports exactly one of status="unchanged" /
"new-symbol" / "contract-change" (with params_was/params_now/public_was/public_now on the
latter) vs git HEAD, plus SYM's 1-hop callers with any call-site whose argument count is now provably
incompatible flagged incompatible="1". Warm (cache-hit) on ripwire's own tree. A .ripwire_notes entry
on SYM (or its file) rides along as a <note> child, the same row --for/--expand surface.
"Can I delete this?" for one symbol — ripwire <dir> --safe-delete=SYM --legend=compact (file:name disambiguates,
same grammar as --edit-check/--around/--lego). The removal-side sibling of step 10: composes
1-hop callers=, the transitive --impact blast radius (impact_reaches=), every --uses
read/write/import/call/extends site (uses=), how much of that radius the tested= lens covers
(radius_tested=/radius_untested=), and --dead-code's own zero-caller/internal-linkage shape at
defs=1 (dead_code_candidate=), into ONE call. risk= NAMES what was found — none-found / uses-exist /
untested-radius — never a go/no-go verdict; radius_untested= equal to impact_reaches= is the
strongest signal ("nothing downstream is test-covered"). ambiguous_callers=/per-row amb="1" disclose
the same call-graph resolution limit --edit-check's incompatible= and --for's amb= already carry.
Impact summary: blast-radius count, test coverage (zero = blocking concern), whether any changed file is a
top-10 hotspot, any lint findings in changed files, and any --metrics red flags (high/rising cbo,
lcom4>1, or missing tested=1) on a touched symbol. A green change passes: radius understood, tests exist, no new
lint smells, no hotspot surprise, no coupling/cohesion regression. Recommend one of: safe to merge /
needs tests / review the hotspot / lint issues to fix / decouple before merge. (Ran
quality-bar first? Both green = ship — see the Routing note above.)
Honesty: ripwire cedes data-flow/type checks (use-after-move, taint) to the compiler — pair this with
the build's warnings and the test suite. Blast radius is name-based; a high-amb edge was guessed.
© redhat-et, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/ripwire-change-check of redhat-et/ripwire.
Open the folder on GitHubat commit 60dd3b3
Ripwire Change Check next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Ripwire Change Check this skillredhat-et/ripwire | 2.4k | — | ~4.3k | Automated safety check: Notes | Apache-2.0 | |
| Open Code Review CLIalibaba/open-code-review | 45k | — | ~3.1k | Automated safety check: Pass | Apache-2.0 | |
| Understand Diff AnalysisEgonex-AI/Understand-Anything | 86k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Code Reviewflutter/flutter | 179k | — | ~1.4k | Automated safety check: Pass | BSD-3-Clause | |
| PR Review State Fetchprisma/orm | 48k | — | ~767 | Automated safety check: Pass | Apache-2.0 | |
| Knowledge Graph PR Reviewtirth8205/code-review-graph | 32k | — | ~452 | Automated safety check: Pass | MIT |
alibaba/open-code-review
Runs the ocr command-line tool to review Git changes, a commit or a branch comparison with an AI model, returning line-level comments and optionally applying fixes.
Egonex-AI/Understand-Anything
Reads your git changes or a pull request against a prebuilt knowledge graph of the project to explain what changed, which components are affected and what is risky.
flutter/flutter
Performs a comprehensive, multi-step code review of pull requests or local code changes, using iterative refinement (generation, critique, synthesis) to ensure high-quality, actionable feedback.
prisma/orm
Fetches a pull request's canonical review state as JSON, validates it, and renders markdown, a text summary and triage target files from it using bundled scripts.
tirth8205/code-review-graph
Reviews a pull request or branch diff with a code knowledge graph and produces a structured review that includes blast-radius analysis.
prisma/orm
Runs the triage step of the review-framework loop: reads fetched PR review state, builds `review-actions.json`, validates it and renders `review-actions.md`.
redhat-et/ripwire
Rules for writing and converting formatted output in ripwire's C++ source with its emit helpers, keeping every printed byte identical to the old printf output.
redhat-et/ripwire
Answers call-graph questions that combine several conditions, such as complex functions that reach a target or untested symbols near main, using ripwire's graph-query mode.
redhat-et/ripwire
Produces a short brief for handing a code subsystem to a teammate or fresh session, using ripwire to rank symbols, expand bodies and surface design docs.
redhat-et/ripwire
Answers questions about a named symbol, such as its callers, what it calls, the path between two symbols or the downstream impact of changing it, using the ripwire CLI.
redhat-et/ripwire
Contributor guide for reading clang optimization remarks while editing ripwire's own C++, deciding between a source change and a build change such as LTO or PGO.
redhat-et/ripwire
Maps an unfamiliar repo or subsystem with the ripwire CLI before reading files, climbing an escalation ladder only until you are oriented.
Works with
Categories
Checks whether a working-tree diff or a pull request is safe to merge: blast radius, tests to run, contract breaks, branch conflicts and stranded work. Aimed at the moment before you push or when you review someone else's PR, this skill drives the `ripwire` command line tool over a real git diff. Its main command, `--pr-context`, builds one evidence bundle for the whole change: for each changed file it lists defined symbols, their callers, the transitive blast radius, affected tests, co-change partners missing from the diff and owners.
Ripwire Change Check fits situations like: before pushing a branch, to see what else the change can break; reviewing a pull request for merge safety and for which tests to run; confirming that a one-line fix did not alter a function's signature or contract; deciding the landing order for several branches that touch the same code.
Run `npx skills add redhat-et/ripwire --skill ripwire-change-check -a claude-code`. Or copy the skill folder (skills/ripwire-change-check in redhat-et/ripwire) into .claude/skills/ripwire-change-check in your project. Claude Code loads it when a task matches its description.
Run `npx skills add redhat-et/ripwire --skill ripwire-change-check -a codex`. Or copy the skill folder (skills/ripwire-change-check in redhat-et/ripwire) into .agents/skills/ripwire-change-check in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add redhat-et/ripwire --skill ripwire-change-check -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ripwire-change-check, .gemini/skills/ripwire-change-check, .github/skills/ripwire-change-check and .opencode/skills/ripwire-change-check in your project.
Going by SKILL.md and its folder, Ripwire Change Check needs the command-line tools its instructions call (git). Our summary lists: The ripwire command line tool; A git repository with the changes staged, unstaged or checked out as a PR branch. Its frontmatter pre-approves these tools: Bash, Read.
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Ripwire Change Check is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.3k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Ripwire Change Check: Open Code Review CLI (alibaba/open-code-review, 45k stars), Understand Diff Analysis (Egonex-AI/Understand-Anything, 86k stars), Code Review (flutter/flutter, 179k stars) and PR Review State Fetch (prisma/orm, 48k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
redhat-et (a GitHub organization) maintains it in redhat-et/ripwire, which has 2,428 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 9, 2026.
Source: redhat-et/ripwire on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.