Qt C++ Code Review
x-tools-author/x-tools
Read-only review of Qt6 C++ code that combines a deterministic lint script with six parallel analysis agents and reports only high-confidence issues.
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.
$ npx skills add redhat-et/ripwire --skill emitting-output -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install redhat-et/ripwire emitting-output --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/.claude/skills/emitting-output .claude/skills/emitting-output && 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 "emitting-output" agent skill from https://github.com/redhat-et/ripwire/tree/main/.claude/skills/emitting-output into .claude/skills/emitting-output/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "emitting-output", 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/.claude/skills/emitting-outputType 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 emitting-output -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install redhat-et/ripwire emitting-output --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/.claude/skills/emitting-output .agents/skills/emitting-output && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "emitting-output" agent skill from https://github.com/redhat-et/ripwire/tree/main/.claude/skills/emitting-output into .agents/skills/emitting-output/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "emitting-output", 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 emitting-output -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install redhat-et/ripwire emitting-output --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/.claude/skills/emitting-output .cursor/skills/emitting-output && 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 "emitting-output" agent skill from https://github.com/redhat-et/ripwire/tree/main/.claude/skills/emitting-output into .cursor/skills/emitting-output/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "emitting-output", 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 .claude/skills/emitting-output--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 emitting-output -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install redhat-et/ripwire emitting-output --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/.claude/skills/emitting-output .gemini/skills/emitting-output && 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 "emitting-output" agent skill from https://github.com/redhat-et/ripwire/tree/main/.claude/skills/emitting-output into .gemini/skills/emitting-output/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "emitting-output", 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 emitting-outputInstalls 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 emitting-output -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/.claude/skills/emitting-output .github/skills/emitting-output && 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 "emitting-output" agent skill from https://github.com/redhat-et/ripwire/tree/main/.claude/skills/emitting-output into .github/skills/emitting-output/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "emitting-output", 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 emitting-output -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 emitting-output --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/.claude/skills/emitting-output .opencode/skills/emitting-output && 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 "emitting-output" agent skill from https://github.com/redhat-et/ripwire/tree/main/.claude/skills/emitting-output into .opencode/skills/emitting-output/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "emitting-output", 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.
emitting-outputRules 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.
In ripwire every printed byte feeds a determinism contract, recorded evaluation numbers and stored captures, so output code is held to byte-exactness. The skill defines three primitives in `src/infra/emit.h`: `rw::emitTo` for a format string with arguments going to a stream, `rw::emitRaw` for literal text with no arguments, and `rw::formatTo` for a caller-owned char buffer. New printf-family call sites are not allowed, and neither is vendoring `fmt`.
A mapping table, backed by 218 parity checks, shows how printf specifiers such as `%s`, `%d` and `%zu` become plain replacement fields and how width specifiers become right or left alignment. One mapping is unsafe: `%g` or `%f` without a precision is not a plain replacement field, because the two print different digits for values like 0.1 plus 0.2. Three traps are named: `%%` inside `emitRaw` text, brace escaping that flips between `emitTo` and `emitRaw`, and `format_to_n` not behaving like `snprintf` on size and terminator.
3 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 nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
bashFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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 Output Emission loads about 1k tokens when it runs. Until then it costs about 86 tokens; SKILL.md has 486 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 found no risky patterns in SKILL.md.
Automated 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). 486 words, ~1,019 tokens.
.claude/skills/emitting-output/SKILL.md (or your agent's skills folder).Every byte this tool prints feeds G4 (minified XML), the determinism contract, docs/EVALS.md's
recorded numbers, and the stored captures. Output code is therefore held to byte-exactness, not taste.
src/infra/emit.h)| You have | Use | Why |
|---|---|---|
| A format string with arguments, going to a stream | rw::emitTo( stream, "…{}…", args ) | The choke point: std::print where the library has it, std::format+fputs where it does not |
| Literal text, no arguments | rw::emitRaw( stream, "…" ) | std::format_string is consteval; there is nothing to format, and huge literals do not compile |
| A caller-owned char buffer | rw::formatTo( buf, cap, "…{}…", args ) | Keeps the stack buffer — std::format into a std::string puts an allocation on hot paths (G2) |
Never add a printf-family call site (CONTRIBUTING.md §3). Do not vendor fmt — the standard library
has the feature, so a vendored copy is a G3 regression.
Proven byte-identical on this toolchain (218 checks; see the lane's fmtparity.cpp):
%s %u %d %zu %zd %lu %ld %llu %lld %i -> {}
%.*s (precision, pointer) -> {} with std::string_view( ptr, len )
%10s -> {:>10} %-11s -> {:<11} %.9s -> {:.9}
%016llx -> {:016x} %llx -> {:x} %llX -> {:X} %o -> {:o}
%.3f -> {:.3f} %6.1f -> {:6.1f} %.0f -> {:.0f}
%.6g -> {:.6g} %.3g -> {:.3g} (explicit precision only)The one unsafe mapping. A %g or %f with no precision is NOT {}. printf's %g prints six
significant digits; {} prints the shortest round-trip. 0.1+0.2 is 0.3 under %g and
0.30000000000000004 under {}. Give the format spec an explicit precision or leave the site alone.
%% inverts. In a printf format a literal percent is %%. Text handed to emitRaw is no longer
a format, so %% there prints two characters — collapse it to one %. This is how garbage reached
a generated docs/COMMANDS.md.emitTo needs {{ and }} for literal braces; emitRaw needs bare
{ and }. JSON emitters are where this bites.format_to_n is not snprintf. snprintf( p, S, … ) writes at most S-1 chars plus a NUL;
format_to_n( p, S, … ) writes up to S and terminates nothing. Swapping one for the other widens the
buffer by a byte and drops the terminator. Use rw::formatTo, whose contract is snprintf's exactly —
including its return value, the would-have-written length.bash test/printffmtparitycheck.sh — per-verb SHA-256 of stdout and stderr. If it does not have a
label for the verb you touched, it proves nothing about your change: add the label and pin it first.
UPDATE_GOLDEN=1 re-pins; the diff must be additions only. Pinning refuses any verb whose output
embeds the git stamp (at="<sha>"), because such a verb cannot hold a pin at all.--json is a whole second output path.src/, test/, docs/ and the repo root,
normalising only the git stamp. A toy fixture cannot reach a truncation branch; a real tree does it by
accident. This is what caught the format_to_n byte, with all 40 labels green.© 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 .claude/skills/emitting-output of redhat-et/ripwire.
Open the folder on GitHubat commit 60dd3b3
Ripwire Output Emission 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 Output Emission this skillredhat-et/ripwire | 2.4k | — | ~1k | Automated safety check: Pass | Apache-2.0 | |
| Qt C++ Code Reviewx-tools-author/x-tools | 1.1k | 2 repos | ~4.3k | Automated safety check: Pass | BSD-3-Clause | |
| PlotJuggler 3 to 4 PortingPlotJuggler/PlotJuggler | 6.2k | — | ~1.1k | Automated safety check: Pass | MPL-2.0 | |
| Codebase Comparison with jscpdkucherenko/jscpd | 6.4k | — | ~3.2k | Automated safety check: Pass | MIT | |
| OBS Plugin Dependency Upgradesorayuki/obs-multi-rtmp | 5.1k | — | ~609 | Automated safety check: Pass | GPL-2.0 | |
| WebRTC Include Cleanerwebrtc-sdk/webrtc | 446 | 1 repos | ~545 | Automated safety check: Pass | BSD-3-Clause |
x-tools-author/x-tools
Read-only review of Qt6 C++ code that combines a deterministic lint script with six parallel analysis agents and reports only high-confidence issues.
PlotJuggler/PlotJuggler
Directs porting of widgets, dialogs, panels and transforms from PlotJuggler 3 to PlotJuggler 4 by lifting the original files intact and rebinding only the data paths.
kucherenko/jscpd
Compares two folders function by function with jscpd --compare, across languages if needed, and explains which functions match and which have no counterpart.
sorayuki/obs-multi-rtmp
Updates the obs-multi-rtmp plugin repo to the latest upstream plugin template and OBS Studio version, including dependency metadata, then rebuilds it with CMake.
webrtc-sdk/webrtc
Runs the WebRTC include-cleaner tool to add missing and remove unused C++ include directives before uploading a CL or after refactoring.
mono/SkiaSharp
Analyze Skia features for SkiaSharp - produces a unified analysis of what shipped (upstream engine benefits, PR links, migration guides) and what's missing (impact/priority/effort scoring, hidden…
redhat-et/ripwire
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.
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
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. In ripwire every printed byte feeds a determinism contract, recorded evaluation numbers and stored captures, so output code is held to byte-exactness.h`: `rw::emitTo` for a format string with arguments going to a stream, `rw::emitRaw` for literal text with no arguments, and `rw::formatTo` for a caller-owned char buffer.
Ripwire Output Emission fits situations like: adding a new output call in ripwire's C++ code; converting a printf-family call to the emit helpers; editing a help or legend string that ripwire prints.
Run `npx skills add redhat-et/ripwire --skill emitting-output -a claude-code`. Or copy the skill folder (.claude/skills/emitting-output in redhat-et/ripwire) into .claude/skills/emitting-output in your project. Claude Code loads it when a task matches its description.
Run `npx skills add redhat-et/ripwire --skill emitting-output -a codex`. Or copy the skill folder (.claude/skills/emitting-output in redhat-et/ripwire) into .agents/skills/emitting-output 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 emitting-output -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/emitting-output, .gemini/skills/emitting-output, .github/skills/emitting-output and .opencode/skills/emitting-output in your project.
Going by SKILL.md and its folder, Ripwire Output Emission needs the command-line tools its instructions call (bash). Our summary lists: The ripwire C++ source tree.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Ripwire Output Emission 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 1k tokens (SKILL.md is roughly 4.1k 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 Output Emission: Qt C++ Code Review (x-tools-author/x-tools, 1.1k stars), PlotJuggler 3 to 4 Porting (PlotJuggler/PlotJuggler, 6.2k stars), Codebase Comparison with jscpd (kucherenko/jscpd, 6.4k stars) and OBS Plugin Dependency Upgrade (sorayuki/obs-multi-rtmp, 5.1k 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.