ccc Semantic Code Search
cocoindex-io/cocoindex-code
Semantic code search and index management with the ccc CLI: the agent initializes, indexes and queries the project by concept, filtering by language or path.
Maps an unfamiliar repo or subsystem with the ripwire CLI before reading files, climbing an escalation ladder only until you are oriented.
$ npx skills add redhat-et/ripwire --skill ripwire-orient -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install redhat-et/ripwire ripwire-orient --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-orient .claude/skills/ripwire-orient && 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-orient" agent skill from https://github.com/redhat-et/ripwire/tree/main/skills/ripwire-orient into .claude/skills/ripwire-orient/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ripwire-orient", 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-orientType 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-orient -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install redhat-et/ripwire ripwire-orient --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-orient .agents/skills/ripwire-orient && 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-orient" agent skill from https://github.com/redhat-et/ripwire/tree/main/skills/ripwire-orient into .agents/skills/ripwire-orient/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ripwire-orient", 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-orient -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install redhat-et/ripwire ripwire-orient --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-orient .cursor/skills/ripwire-orient && 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-orient" agent skill from https://github.com/redhat-et/ripwire/tree/main/skills/ripwire-orient into .cursor/skills/ripwire-orient/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ripwire-orient", 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-orient--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-orient -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install redhat-et/ripwire ripwire-orient --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-orient .gemini/skills/ripwire-orient && 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-orient" agent skill from https://github.com/redhat-et/ripwire/tree/main/skills/ripwire-orient into .gemini/skills/ripwire-orient/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ripwire-orient", 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-orientInstalls 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-orient -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-orient .github/skills/ripwire-orient && 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-orient" agent skill from https://github.com/redhat-et/ripwire/tree/main/skills/ripwire-orient into .github/skills/ripwire-orient/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ripwire-orient", 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-orient -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-orient --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-orient .opencode/skills/ripwire-orient && 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-orient" agent skill from https://github.com/redhat-et/ripwire/tree/main/skills/ripwire-orient into .opencode/skills/ripwire-orient/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ripwire-orient", 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-orientMaps an unfamiliar repo or subsystem with the ripwire CLI before reading files, climbing an escalation ladder only until you are oriented.
Ripwire parses a source tree and returns a map, so the agent reads only what ranks highest instead of opening many files for one question. It is meant for landing cold in an unfamiliar repo, finding main subsystems and entry points, recovering context after compaction, and questions about how something works or where something lives. A named symbol goes to a separate navigate skill instead.
The escalation ladder starts at rung zero, a recall of what is already known: the full text of the most relevant documents, such as memory notes, design docs, skills and READMEs, with a stated saving of around 47 times fewer tokens than loading everything. Dumped tool output works as a knowledge base if it is saved as .md files with ## headings. The agent stops at the first rung that answers.
Other options cover retrieving saved docs with --recall, dividing code among subagents with --partition and saving gotchas with --note-add. Several roots, or a remote git URL, can be mapped together, and the first call on a tree parses in about a second while later calls are cached. The skill routes related jobs to ripwire-navigate, ripwire-change-check, ripwire-fresh-eyes, ripwire-layers and ripwire-router, and ships compress-ladder and map-before-you-read companions.
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 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 Codebase Orientation loads about 4.5k tokens when it runs. Until then it costs about 105 tokens; SKILL.md has 2,553 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,553 words, ~4,545 tokens.
.claude/skills/ripwire-orient/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Routing — pick the right door: • Tracing one call graph / locating a literal → ripwire-navigate. • Vetting your OWN diff before you push → ripwire-change-check. • Risk in code you did NOT write / an unfamiliar subsystem → ripwire-fresh-eyes. • Map-before-you-read token discipline (any info need, mid-task) → this skill's companion
map-before-you-read.md(folded in from the formerefficientskill, 2026-09-07). • Deep architecture-health read (deps metrics, layering rules, --arch gate) → ripwire-layers. • Not sure which skill? → ripwire-router.
ripwire is on your PATH. First call on a tree parses (~1s even at 1500 files); every call after is warm
(auto-cached, ~instant), so chaining several rungs is nearly free. <dir> = the repo root or the specific
subsystem you're working in — also accepts a remote ripwire <git-url> (shallow-clones to a temp cache, so
you can orient in a dependency before ever cloning it) — or several roots for a split checkout,
ripwire dir1 dir2 --report: ONE merged, root-labeled map instead of two separate mental models.
0. Recall what you already KNOW — ripwire <dir> --recall="<the task>"
The most relevant DOCS' FULL bodies (docs only, so code never swamps them — markdown memory notes,
planning/design docs, skills, READMEs, plus .ipynb/.html/.csv/Office/PDF via the optional
markitdown bridge). Point it at the memory dir for what past sessions learned, or the repo root for
plans/designs — ~47× fewer tokens than loading everything. A design doc may already answer the question; if
so, stop here. It also works unmodified as a zero-setup knowledge base over a scratch dir of dumped tool
output (a git log, fetched docs, --help text) — not just a source repo. Two conditions are yours to meet
when you WRITE the dump: dump it as .md (.txt/.log/.json are not documents to --recall, and a dir
of them answers 0 relevant of 0 document files), and keep ## headings in it, so a deep answer is served
as a ranked section instead of waiting behind a front-first cut. Raising --max-tokens then grows what ONE
already-served document gets — that per-document guarantee is not global: dump several documents into one
dir and admitting another one re-divides the shared budget, which can shrink an already-served document's
own slice (share_bytes= in the header discloses it). Full form in
map-before-you-read.md; the recorded run is docs/COMMANDS.md's --recall
pattern subsection.
1. Architecture summary — ripwire <dir> --report
Plain markdown: file + symbol count, call-graph modules (Louvain clusters with lead symbol), god-files
ranked by afferent (dependents), cycle list, top PageRank symbols. Read the god-file list carefully —
highest-leverage, highest-risk files. For most "orient me" asks this one rung is enough.
2. Task-relevant code — ripwire <dir> --for="<the task in your own words>"
Ranked signatures + doc-comments + cx/in metrics by relevance (matches names, docs, AND bodies — not just
identifiers). This is the rung that answers "where's the code for X".
What the bundle serves depends on which way the query routed, and the root says which.
Named a symbol (bundle="auto" bodies="N"): the anchor's FULL body rides inline, CDATA plus callee
signatures — read it here instead of opening the file the map named, that follow-up read is the cost
this default deletes. bodies="0" reason="budget" means it did not fit whole.
Conceptual phrase (bundle="compact" bodies="0" reason="compact-route"): no bodies — you get the ranked
map plus a <hops> section, one row per top-ranked symbol with its one-hop callee names. Read the map,
pick ONE symbol, then --expand=path:name (paste the row's own p= and n=; a bare name that is not
unique costs you the whole map). That is the flow, and it is cheaper than the bodies were: half the bytes
of the old bundle on conceptual queries, and the edges tell you which symbol is worth the second call.
--auto-bodies restores inline bodies on that route if you want them; --signatures-only drops both
shapes; --detail=N picks the body count explicitly.
Composing a selector out of a row (the map's rows and --for's alike): a scoped row carries sc=, its
enclosing scope, instead of repeating its whole id — the canonical id is p::sc::n, assembled from the
row's own p= (or the <f p=> it sits under), sc= and n=. Every selector (--expand, --callers,
--impact, --uses) accepts that composed path::scope::name, so paste the three parts, not a bare name.
--for auto-routes (default, no flag needed): a query that names a symbol (--for="buildGraph") gets
name-exact BM25 (recall@1 ~99% vs ~77% generic) — know the name, query it verbatim; a conceptual phrase
uses subtoken+body BM25 instead. The header prints which ranker fired; --no-route forces the plain ranker.
It also anchors query mentions by default — a file/module/Type.method literally named in the task text
gets lifted near the top (+4.9pp held-out; a task naming nothing indexed is byte-identical); disable with
--no-mention-boost. It also surfaces DOCS: a markdown design/plan doc that backtick-names one of the
query's top-resolved symbols is lifted into the bundle too (strictly below that symbol's own score) — the
doc explains it even when its own prose shares no words with your query; disable with --no-doc-mention.
When the answer comes back THIN, widen before you read. A thin --for answer — the head spread over
fewer than three files, or coverage= under 50 — says so on the root: coverage="N" is the IDF-weighted
share (whole percent) of your query's subtokens found in the top-ranked symbol's name, doc or body, and it
rides the root only on a thin answer (a confident one carries neither the attribute nor its clause).
The step then is not a body, it is a wider net: ripwire <dir> --for="<task>" --limit=40 serves the
FILE-GRAIN page — one row per file holding any positive-score symbol, score=/n=/sym= per row,
--offset=M for the next page. A thin answer's own next= names that page for you; reach for it on the
FIRST call when the task is vague enough that one ranked head is unlikely to hold the answer.
--adaptive cuts the result at the relevance cliff instead of a fixed top-k. Same
routing in the MCP for verb. Orienting from a pasted issue/bug-report's own text? --anchor beats plain
--for on Loc-Bench (n=560) — a mild win, not a default (bench/locbench/README.md). --cochange-boost is
an experimental, off-by-default co-change prior — see ripwire --help before reaching for it.
3. File-by-file map — ripwire <dir> --tree --legend=compact — each file with its top symbols, a quick "what's where".
4. Cohesive modules — ripwire <dir> --communities --legend=compact — <communities modules="N">, each cluster with its
dominant directory and lead symbols; <bridge> edges show tight coupling between clusters. Use it to decide
where a new feature belongs. Each row shows only its top five members — to see one module in full,
ripwire <dir> --community=ID --legend=compact (the id= from a row, or from --zoom): its complete ranked member list
(--limit/--offset page it) plus every bridge edge that module has. That is the call to make when a
cluster looks like the one you'll be working in and five names aren't enough to judge it.
5. Maintenance pain — ripwire <dir> --hotspots --legend=compact — files ranked by score = churn × ccx; top= names
the gnarliest function. Plan edits around this list.
6. Budget it if the map is large — --max-tokens=8000 or --top-k=50. Both shape the default map;
a positive, explicit --top-k is inert on plain --for (it warns on stderr and emits the full bundle) —
bound a --for call with --signatures-only, --token-budget=N or --detail=N instead.
--partition=NAbout to fan a single task out to several parallel agents? Do not let each one run its own
--pack-task — they will each re-derive the same top symbols, the same bodies, the same tests, and you
pay for the map N times. Run it once:
ripwire <dir> --pack-task="<the task in words>" --legend=compact --partition=4You get one <ctx-partitions> document: a shared common core (the anchors the task is literally about,
what every agent needs) plus N per-agent slices carved along the call graph's own Louvain communities,
so a slice is a union of whole modules rather than an arbitrary rank cut (symbols the call graph is silent
about — edgeless data types — group by file instead, so one header's structs stay together). Each <bundle> wraps a complete,
standalone bundle — hand one bundle to one agent verbatim. --token-budget here means one agent's
budget (core + its slice), not the document's; --json gives the same plan machine-readably. MCP: the same
thing as a partition argument on the explore verb.
Read the wrapper attributes before you trust the split — the verb reports its own quality:
overlap_max (worst pairwise Jaccard between slices; low = the agents really are reading different code),
split="K" (K>0 means there were fewer modules than agents, so a module was cut at its rank median — the
slices are less semantically clean), partitions < requested (the task's surface could not supply N
separable slices at all — take fewer agents), and core_overlap (how much of the core a slice reaches
anyway). On a task whose whole surface sits inside one module, a partition is a rank cut, not a module
boundary — one --pack-task and one agent is the honest answer there.
7. Nested module hierarchy — ripwire <dir> --zoom --legend=compact (--zoom=DEPTH to cap levels; the default prints the top 2
levels of the 40 largest modules — levels_shown=/shown= disclose it, next= pastes the next page, --zoom-levels=0
prints every level): multi-level Louvain,
<module level=N id= size= dir=>, indent = one level deeper, innermost level="0" lists top-ranked members.
Read top-down; a dir= that doesn't match its parent's is a cross-cutting concern in the wrong place.
Trailing <bridge …> entries name the high-traffic integration seams between top modules — pair with
--seams to see which ones no test reaches.
8. Render it — ripwire <dir> --zoom --mermaid (or --mermaid for the flat module graph): a
flowchart TB, paste at mermaid.live. For hand-exploring, ripwire <dir> --html[=FILE] writes a
self-contained clickable wiki (module cards → subgraphs → Sourcetrail-style node recentering, no CDN);
--color-by=community|cx|churn|tested sets its initial node-colour lens (a live selector covers the rest).
Working inside a --for/--pack-task bundle instead of a whole-repo pass? Add --with-graph to that
same call — it appends a tiny <graph fmt="mermaid"> block (top-8 ranked anchors + their 1-hop call
edges) right in the bundle, no second call.
9. Export it — ripwire <dir> --export=cc.json[:FILE] — per-file metrics (loc, cx, fan-in/out, churn) as
a CodeCharta cc.json for its 3D city view; the ladder's visualization end-point, not a map to read.
Read the specific files ripwire surfaces (god-files + hotspots first) — don't grep blindly. A symbol's
amb="K" means K of its calls are ambiguous (the resolver guessed) → read the source if which-target
matters. A map header showing skipped_oversize=N means N otherwise-indexable files were dropped for
exceeding a size ceiling — they are absent from files= and every ranking; ripwire <dir> --skipped --legend=compact
names them (path + bytes + the ceiling that dropped each), so you know what the index cannot show you
before you trust a "not found". A git root also drops every .gitignored path by default (header ignored_files=N, absent when 0; --skipped lists them); ripwire <dir> --no-ignore --legend=compact restores the full walk when the symbol you want lives in an ignored tree. Caveat: broad, common-word questions can still favor plain rg —
ripwire shines on specific technical asks. CI-enforceable module boundaries graduate to
--arch=rules.txt (see ripwire-layers).
The most expensive thing you rebuild across sessions is gotchas, not structure. When you learn a non-obvious fact about a symbol or file (a race trap, an off-by-one seam, "don't touch this without re-running X"), pin it so the next orientation surfaces it automatically:
ripwire . --note-add="Bar::compute: recompute is NOT idempotent — reset the arena first"
ripwire . --note-add="src/pool.h: 128-byte cache line on Apple, never hardcode 64" # a file also worksThe TARGET is a symbol name or a path. A symbol resolves through the same resolver the read verbs use,
so every spelling they accept works here — a bare name, file:name, Scope::name, the canonical id
path::scope::name, @FILE:LINE — and is canonicalised to the canonical id on write (that is the id
notes are keyed by; the rewrite is echoed on stderr). A name matching several definitions is refused, naming
each; a name matching none is refused with a did-you-mean. A path is written even when nothing indexed
matches it yet — a note on a file you are about to add is legal — with a loud warning that it is dangling.
Notes live in committed .ripwire_notes and surface on their own — whenever --for/--expand emit that
symbol/file, the note rides along as a <note d="date">…</note> child. ripwire . --notes lists every note
(dangling="1" = target no longer in the tree). --recall=TASK is the doc-level complement.
--note-add nudges (stderr, non-blocking) toward writing the decision, not a description — a note that
keeps firing on the same symbol has outgrown a comment: graduate it into a --quality-ack reason or a
standing --arch deny rule.
A different moment from a cold start: you are not cold on the repo, you are cold on your own last hour. The task is known; what evaporated is the reasoning, the gotchas already paid for, and what you had half-changed. Re-reading source rebuilds the least valuable of those. Run the three verbs that rebuild the rest, in this order:
ripwire . --recall="<the task, in the words you'd use>" # 1. what past sessions WROTE DOWN
ripwire . --situ # 2. what the working tree already CHANGED
ripwire . --notes # 3. gotchas already paid for--recall returns the full bodies of the most relevant markdown only — memory notes,
planning/design docs, READMEs — so code can't swamp them. This is the decisions-and-rationale layer that a
compaction destroys and that source code never contained in the first place. Point it at your memory dir
for past-session memory, or the repo root for the project's plans.--situ (defaults to git diff) tells you what you had already changed, its blast radius, the tests
to run, and the co-change partners you hadn't touched yet — i.e. where you actually stopped, and what you
were about to break. This is the step that most often reveals work-in-flight you would otherwise redo.--notes lists every pinned gotcha (dangling="1" = its target is gone). Anything relevant will also
re-surface on its own once --for/--expand emit that symbol — see the section above.Then, and only then, escalate the ladder for whatever is still missing. Two honest cautions: --recall
returns what the docs claim, not what is still true — a stale plan doc reads exactly as confidently as a
current one, so trust --situ's working-tree facts over a doc when they disagree. And --situ carries no
at= commit stamp, so if you are resuming across a rebase or a moved HEAD, record git rev-parse --short HEAD yourself before you quote anything from it.
Before the next compaction, spend the note. The compaction you are recovering from is the argument for
--note-add: a gotcha written to .ripwire_notes survives a context reset; one held only in context does
not. When you are deep in a task and learn something non-obvious, pin it then — not at the end.
Orientation summary: the 3–5 most important files (from god-files + hotspots), the main architectural
modules (from --communities / --zoom), any cycles (from --report), and one sentence on overall shape.
Use it to decide where a change belongs and which boundary a refactor should respect.
The same skill, a different rung: run the cheapest verb that answers the question (--for, --grep, --expand,
--pack-task under a --token-budget), then read only the 2-3 files it ranks highest. Less context is measurably
MORE accurate, not just cheaper. The full discipline — the read ladder, --pack-task --partition=N for fan-out,
whole-symbol edits without a whole-file Read, the portable --cache=FILE one-liner — is
map-before-you-read.md; the detail/token squeeze once you are reading a body is
compress-ladder.md. Both load on demand; neither is a separate skill.
© 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
SKILL.md and 2 other files in skills/ripwire-orient of redhat-et/ripwire.
Open the folder on GitHubat commit 60dd3b3
Ripwire Codebase Orientation 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 Codebase Orientation this skillredhat-et/ripwire | 2.4k | — | ~4.5k | Automated safety check: Notes | Apache-2.0 | |
| ccc Semantic Code Searchcocoindex-io/cocoindex-code | 2.7k | — | ~938 | Automated safety check: Pass | Apache-2.0 | |
| Repomix Codebase Packeryamadashy/repomix | 29k | — | ~1.3k | Automated safety check: Notes | MIT | |
| tilth Code Reading CLIjahala/tilth | 352 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Codebase Handbook BuilderRuhan-Wang/Harness_Handbook | 332 | — | ~2.2k | Automated safety check: Pass | Apache-2.0 | |
| CodemapJordanCoin/codemap | 704 | — | ~1.8k | Automated safety check: Pass | MIT |
cocoindex-io/cocoindex-code
Semantic code search and index management with the ccc CLI: the agent initializes, indexes and queries the project by concept, filtering by language or path.
yamadashy/repomix
Packs a local directory or remote GitHub repository into one AI-friendly file with Repomix, then searches it to explore structure, find patterns and count tokens.
jahala/tilth
Replaces grep, cat, find and ls with the tilth CLI, which returns AST-aware outlines, definitions, usages and callers across many languages in one call.
Ruhan-Wang/Harness_Handbook
Generates, refreshes, validates and uses a compact handbook that maps where a change touches in a repository, using the active Codex session and no external LLM API.
JordanCoin/codemap
Gives an agent a quick map of a codebase's structure, dependencies, changes and handoffs, and tunes per-project config so the output stays code-first.
Context-Engine-AI/Context-Engine
Rules for choosing Qdrant-Indexer semantic search over grep or file reads when exploring code, debugging or asking where and why questions.
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
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.
Categories
Maps an unfamiliar repo or subsystem with the ripwire CLI before reading files, climbing an escalation ladder only until you are oriented. Ripwire parses a source tree and returns a map, so the agent reads only what ranks highest instead of opening many files for one question. It is meant for landing cold in an unfamiliar repo, finding main subsystems and entry points, recovering context after compaction, and questions about how something works or where something lives.
Ripwire Codebase Orientation fits situations like: starting work in an unfamiliar repository and needing its main subsystems; recovering context after the conversation was compacted; splitting a codebase into parts for several subagents; answering a how-does-it-work question without opening many files.
Run `npx skills add redhat-et/ripwire --skill ripwire-orient -a claude-code`. Or copy the skill folder (skills/ripwire-orient in redhat-et/ripwire) into .claude/skills/ripwire-orient in your project. Claude Code loads it when a task matches its description.
Run `npx skills add redhat-et/ripwire --skill ripwire-orient -a codex`. Or copy the skill folder (skills/ripwire-orient in redhat-et/ripwire) into .agents/skills/ripwire-orient 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-orient -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-orient, .gemini/skills/ripwire-orient, .github/skills/ripwire-orient and .opencode/skills/ripwire-orient in your project.
Going by SKILL.md and its folder, Ripwire Codebase Orientation needs the command-line tools its instructions call (git). Our summary lists: The ripwire CLI on your PATH. 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 Codebase Orientation 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.5k tokens (SKILL.md is roughly 18k 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 Codebase Orientation: ccc Semantic Code Search (cocoindex-io/cocoindex-code, 2.7k stars), Repomix Codebase Packer (yamadashy/repomix, 29k stars), tilth Code Reading CLI (jahala/tilth, 352 stars) and Codebase Handbook Builder (Ruhan-Wang/Harness_Handbook, 332 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,419 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 8, 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.