Code Audit
3stoneBrother/code-audit
Professional code security audit skill covering 55+ vulnerability types.
Performs comprehensive C/C++ security review for memory corruption, integer overflows, race conditions, and platform-specific vulnerabilities.
$ npx skills add trailofbits/skills --skill c-review -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install trailofbits/skills c-review --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/trailofbits/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/c-review/skills/c-review .claude/skills/c-review && 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 "c-review" agent skill from https://github.com/trailofbits/skills/tree/main/plugins/c-review/skills/c-review into .claude/skills/c-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "c-review", 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/trailofbits/skills/tree/main/plugins/c-review/skills/c-reviewType 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 trailofbits/skills --skill c-review -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install trailofbits/skills c-review --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trailofbits/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/c-review/skills/c-review .agents/skills/c-review && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "c-review" agent skill from https://github.com/trailofbits/skills/tree/main/plugins/c-review/skills/c-review into .agents/skills/c-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "c-review", 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 trailofbits/skills --skill c-review -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install trailofbits/skills c-review --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trailofbits/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/c-review/skills/c-review .cursor/skills/c-review && 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 "c-review" agent skill from https://github.com/trailofbits/skills/tree/main/plugins/c-review/skills/c-review into .cursor/skills/c-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "c-review", 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/trailofbits/skills.git --path plugins/c-review/skills/c-review--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 trailofbits/skills --skill c-review -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install trailofbits/skills c-review --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trailofbits/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/c-review/skills/c-review .gemini/skills/c-review && 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 "c-review" agent skill from https://github.com/trailofbits/skills/tree/main/plugins/c-review/skills/c-review into .gemini/skills/c-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "c-review", 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 trailofbits/skills c-reviewInstalls 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 trailofbits/skills --skill c-review -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/trailofbits/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/c-review/skills/c-review .github/skills/c-review && 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 "c-review" agent skill from https://github.com/trailofbits/skills/tree/main/plugins/c-review/skills/c-review into .github/skills/c-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "c-review", 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 trailofbits/skills --skill c-review -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install trailofbits/skills c-review --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trailofbits/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/c-review/skills/c-review .opencode/skills/c-review && 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 "c-review" agent skill from https://github.com/trailofbits/skills/tree/main/plugins/c-review/skills/c-review into .opencode/skills/c-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "c-review", 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.
c-reviewPerforms comprehensive C/C++ security review for memory corruption, integer overflows, race conditions, and platform-specific vulnerabilities.
C Review is an agent skill from trailofbits/skills, published by the product's own GitHub organization. Performs comprehensive C/C++ security review for memory corruption, integer overflows, race conditions, and platform-specific vulnerabilities. Use when auditing native C/C++ applications, reviewing daemons or services for memory safety, or hunting integer overflow / use-after-free / race conditions in userspace code.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Security, covering Security review and Async programming. It works with C++. The repository describes itself as: Trail of Bits Claude Code skills for security research, vulnerability detection, and audit workflows. The licence is CC-BY-SA-4.0.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 82fe822. 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:
WorkflowAskUserQuestionBashReadFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
uvFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use uv, 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.
C Review loads about 3.3k tokens when it runs. Until then it costs about 82 tokens; SKILL.md has 1,491 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: Workflow, AskUserQuestion, 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 trailofbits/skills at commit 82fe822, republished under its CC-BY-SA-4.0 licence (© trailofbits). 1,491 words, ~3,261 tokens.
.claude/skills/c-review/SKILL.md (or your agent's skills folder).Resolve four parameters, make one Workflow call, return the report. The workflow owns
concurrency, retries and result collection.
Use for: native C/C++ userspace — memory safety, integer overflow, races, type confusion, Linux/macOS daemons, Windows services.
Not for: kernel drivers or modules; managed languages (Java, C#, Python, Go, Rust); embedded or bare-metal code with no libc.
Parse any free text on the invocation line (flamenco only, high severity only, use haiku) and pre-fill what it implies. Then make one AskUserQuestion call for
whatever is still unresolved. Never silently default a required parameter.
| Parameter | Values | Inferring it from the invocation |
|---|---|---|
threat_model | REMOTE / LOCAL_UNPRIVILEGED / BOTH | "remote", "network", "attacker" → REMOTE; "local", "unprivileged" → LOCAL_UNPRIVILEGED; otherwise ask |
worker_model | haiku / sonnet / opus / inherit | An explicit model name. Otherwise ask. inherit uses the session model |
severity_filter | all / medium / high | "all", "every", "noisy" → all; "medium and above" → medium; "high only" → high; otherwise ask |
scope_subpath | repo-relative directory, optional | "X only", "just audit X/" → the matching subdirectory, fuzzy-matched against top-level dirs. Absent → .. Ambiguous → ask |
Two scopes stay separate for the whole run:
finding_scope_root = scope_subpath (default .) — a finding must live inside
it, and it is the tree the unit list is generated from.context_roots = . — read freely to establish callers, build flags and
reachability. Narrow it to finding_scope_root only if the user explicitly forbids
wider reading, and say that reachability confidence drops when you do.root="${CLAUDE_PLUGIN_ROOT:-}"
if [ -z "$root" ] || [ ! -f "$root/workflows/c-review.js" ]; then
# Fallback for a cache layout that does not set the variable. ~/.claude ONLY — never `.`:
# `.` is the AUDITED repository, and a tree that vendors or mirrors this marketplace would
# win the traversal and run its copy of the scripts, with a different question set and
# nothing saying which copy ran. Let find's stderr through; a missing ~/.claude is a real
# failure to report, not noise to hide.
hit="$(find "$HOME/.claude" -path '*/c-review/workflows/c-review.js' -print -quit)"
root="${hit%/workflows/c-review.js}"
fi
[ -n "$root" ] && [ -f "$root/workflows/c-review.js" ] && echo "PLUGIN ROOT: $root"Stop if neither resolves, rather than running with an empty path — and say which path you resolved, so a copy other than the installed plugin is visible before eight agents run against it.
# The workflow cannot call Date.now(), so the timestamp is made here.
output_dir="$(pwd)/.c-review-results/$(date -u +%Y%m%dT%H%M%SZ)"
mkdir -p "$output_dir"; echo "$output_dir"
# A Workflow script has no filesystem APIs, and `assemble_findings.py` resolves `--scope`
# against ITS OWN cwd. Resolve it once here and pass BOTH spellings, or the workflow strips
# `src/` from a finding's path while the assembler strips `/repo/src/`, and the two disagree
# about which findings are duplicates of each other.
scope_abs="$(cd "${scope_subpath:-.}" && pwd)" || echo "scope_subpath does not exist"
echo "$scope_abs"uv must be on PATH: Detect runs the unit enumerator and Assemble runs
assemble_findings.py. If uv is missing, say so and stop — the whole review is
partitioned from that unit list.
Invoking this skill is the opt-in to multi-agent orchestration — call Workflow
without asking again. A review of a real codebase also runs past any default workflow
size guideline; that guideline is advisory and this is the case it exempts. Do not
shrink the fan-out to fit it, and do not substitute hand-spawned Agent calls.
One Workflow call. scriptPath takes the absolute path resolved in Phase 1; args
must be a real JSON object, not a JSON-encoded string.
Workflow({
scriptPath: "<plugin_root>/workflows/c-review.js",
args: {
outputDir: "<output_dir>",
pluginRoot: "<plugin_root>",
threatModel: "REMOTE",
severityFilter: "all",
findingScopeRoot: "expat/lib",
findingScopeRootAbs: "/abs/path/to/repo/expat/lib",
contextRoots: ".",
workerModel: "sonnet"
}
})findingScopeRootAbs is the scope_abs from Phase 1 and is not optional in practice:
omitted, the workflow tells the assembler no absolute root is known and a finding filed as
/repo/expat/lib/xmlparse.c stops merging with the same bug filed as xmlparse.c.
Six further arguments are optional. Omitted, each takes its default; passed with the wrong TYPE, the workflow throws with the field name rather than defaulting. Pass them only when the user asks or when running an evaluation:
| Argument | Default | What it is for |
|---|---|---|
maxUnitLines | 150 | Cap on a review unit; a larger function is split at syntactic seams. Raising it reintroduces the saturation the cap prevents |
linesPerAgent | 1500 | Source lines per review agent. A no-op on a small tree — --agent-min (default 4) floors the derived count, so two very different values can produce identical assignments. Use reviewAgents to pin the fan-out |
reviewAgents | derived | Pins the review fan-out, subject to the same floor as the derived count: both are clamped to 4–14, and an explicit value above 14 raises the cap to itself. A value below 4 is raised to 4, and a trailing slice too small to be worth an agent is folded into its neighbour, so the final count can come out one lower than asked |
invariantAudit | false | Adds the shared-state invariant audit to the sweep. A whole extra agent; turn it on for state-machine-heavy targets |
exclude | [] | Array of globs or substrings the unit enumerator skips (each becomes a repeated --exclude). Use when enumeration aborts naming a path it cannot own — a symlink resolving outside the scope root, an unreadable directory — and the excluded paths land in the enumerator's totals as a visible coverage hole, not silence |
benchmarkMode | false | Eval-only. Adds an external-source declaration to reviewer prompts and two schema fields. Changes no finding; leave it off for a real audit |
The workflow validates its own arguments and throws with a named field if one is missing. It runs five phases:
| Phase | Agents | What it does |
|---|---|---|
| Detect | 1 | Runs enumerate_units.py for the unit list; platform flags from actual API usage; shared-state structs; per bug class, whether any candidate site exists |
| Review | 4–14 | One agent per contiguous slice of the unit list. Each returns findings with severity and a ledger row per (unit × question) |
| Sweep | 0–2 | The class axis: one agent over every bug class with no entry anywhere that Detect did not rule out. None, and the phase is skipped. Plus the struct-field audit when invariantAudit: true |
| Dedup | 0–1 | Only for collisions the assembler cannot merge deterministically. Usually skipped |
| Assemble | 1 | Runs assemble_findings.py: ledger gate, deterministic merges, findings.json, REPORT.md, REPORT.sarif |
Around 8–10 agents on a mid-size target.
Read <output_dir>/REPORT.md and return it.
Say once, plainly, next to the findings: no false-positive review ran. Every
severity is the reviewer's own (severity_source: "reviewer"), judgeRan is always
false, and nothing rejected anything. Expect some of what you are shown to be wrong or
out of scope — say so rather than presenting the list as adjudicated, and do not filter
it yourself.
Then surface, prominently and separately from the findings, anything in the workflow result that means the run was partial:
| Field | Meaning and what to do |
|---|---|
artifactsWritten: false | REPORT.md and REPORT.sarif are missing; the part files under parts/ are intact. Re-assemble by hand (below) — never reconstruct from the tool result |
artifactsWritten: null | The assemble agent returned nothing, so whether the artifacts exist is unknown — the command may have completed and only its structured answer failed. List the output directory before doing anything else |
gateAccepted: false with artifacts written | The failure that looks like success. Artifacts are complete; the coverage gate could not run or rejected the ledger, so the review is assembled and unverified. Do not re-run the assembler — read ledger-gate.json and report the gap. artifactError always carries the reason |
coverage: null | Coverage is unmeasured, not complete. Never report such a run as fully covered; point at ledger-gate.json |
coverage | Report checksSatisfied / checksRequired, and checksCompleted only as "answered" — never "functions reviewed". checksSatisfied below checksCompleted means the gate threw rows out: a coverage-integrity failure. Name the violations |
groupsFailed, agentFailures, notes | That ground was not covered. Do not let a clean report imply it was |
unrecognisedParts | Whole agents' output in no artifact. null means unchecked, not none |
silentClasses / ruledOutClasses / platformDroppedClasses | "Swept and found nothing" / "nothing looked" / "out of scope by configuration". Report separately — only the middle one means a human should look |
Hand re-assembly, when artifactsWritten is false:
uv run --no-project <plugin_root>/scripts/assemble_findings.py --run-dir <output_dir> \
--threat-model <MODEL> --severity-filter <FILTER> --no-judge \
--scope <finding_scope_root> --context-roots <context_roots> \
--worker-model <worker_model> \
--expect <part-stem>=<finding-count> # one per part the workflow log names--expect is not optional. Without it the allowlist admits every file under
parts/, including one nobody dispatched, and the run exits 1 for that reason
alone. If you cannot recover the counts from the workflow log, exit 1 is correct and
the run is assembled-but-unverified.--no-judge. Dropping it overwrites every reviewer severity with MEDIUM
and records judge_ran: true for a run no judge ever saw.--expect-complete, --benchmark-mode,
--groups-attempted, --groups-failed, --agent-failure, --external-source), so
the document will say agent_failures: [] on a run that may have lost a slice. Report
that. Without a units.json the assembler also exits 1: no gate ran.Finally list the artifacts: findings.json, REPORT.md, REPORT.sarif, units.json,
ledger-gate.json, detect.json, and the parts/ and assignments/ directories.
ledger-gate.json. Name them.Workflow.Design rationale, the coverage gate's threat model and its known limitations are in AGENTS.md. Read it before changing a prompt or a gate rule.
© trailofbits, CC-BY-SA-4.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 plugins/c-review/skills/c-review of trailofbits/skills.
Open the folder on GitHubat commit 82fe822
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in trailofbits/skills, which our catalogue first saw on October 7, 2026.
C Review 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 |
|---|---|---|---|---|---|---|
| C Review this skilltrailofbits/skills | 7.4k | 1 repos | ~3.3k | Automated safety check: Notes | CC-BY-SA-4.0 | |
| Code Audit3stoneBrother/code-audit | 893 | 1 repos | ~2.7k | Automated safety check: Pass | None | |
| Wooyun Legacytanweai/wooyun-legacy | 1.8k | — | ~1.9k | Automated safety check: Pass | Custom licence | |
| Static Vulnerability DetectorArabelaTso/Skills-4-SE | 253 | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| YugabyteDB ASH Instrumentationyugabyte/yugabyte-db | 11k | — | ~4.5k | Automated safety check: Pass | Custom licence | |
| Deepsec Documentation Guidevercel-labs/deepsec | 8.1k | — | ~956 | Automated safety check: Pass | Apache-2.0 |
3stoneBrother/code-audit
Professional code security audit skill covering 55+ vulnerability types.
tanweai/wooyun-legacy
WooYun business logic vulnerability methodology — 22,132 real cases across 6 domains (authentication bypass, authorization bypass, payment tampering, information disclosure, logic flaws…
ArabelaTso/Skills-4-SE
Statically analyze code to detect security vulnerabilities including buffer overflows, injection risks (SQL, command, XSS), insecure deserialization, improper authentication, hard-coded credentials…
yugabyte/yugabyte-db
Procedure for adding or changing YugabyteDB Active Session History wait states in TServer and DocDB C++ code, including the macro to use for sync and async paths.
vercel-labs/deepsec
Points the agent at deepsec's own docs to answer questions about initializing, configuring, resuming, scanning with and extending the vulnerability scanner.
kubeshark/kubeshark
Hunts for compromised workloads and malicious traffic in a Kubernetes cluster by sweeping network data through Kubeshark MCP, mapped to MITRE ATT&CK.
trailofbits/skills
Generates Mermaid diagrams from Trailmark code graphs, including call graphs, class hierarchies, module dependency maps, complexity heatmaps and attack surface data flows.
trailofbits/skills
Scans a codebase for vulnerabilities with CodeQL's data flow and taint tracking in run-all or important-only modes, including data extensions for project-specific sources and sinks.
trailofbits/skills
Compares Trailmark code graphs at two snapshots, such as commits, tags or directories, to surface attack paths, blast radius and taint changes that text diffs miss.
trailofbits/skills
Draws a 12 Houses tarot spread to break ties when a request is vague or casually delegated, then reads the cards to pick the next step.
trailofbits/skills
Searches and extracts data from Burp Suite project files on the command line: regex searches over responses, audit findings, proxy history and site map data.
trailofbits/skills
Detects languages, proposes rulesets for approval, then runs the approved Semgrep scan across a codebase and merges the output into one SARIF file.
Works with
Categories
Performs comprehensive C/C++ security review for memory corruption, integer overflows, race conditions, and platform-specific vulnerabilities. C Review is an agent skill from trailofbits/skills, published by the product's own GitHub organization. Performs comprehensive C/C++ security review for memory corruption, integer overflows, race conditions, and platform-specific vulnerabilities.
C Review fits situations like: auditing native C/C++ applications; reviewing daemons; services for memory safety; hunting integer overflow / use-after-free / race conditions in userspace code.
Run `npx skills add trailofbits/skills --skill c-review -a claude-code`. Or copy the skill folder (plugins/c-review/skills/c-review in trailofbits/skills) into .claude/skills/c-review in your project. Claude Code loads it when a task matches its description.
Run `npx skills add trailofbits/skills --skill c-review -a codex`. Or copy the skill folder (plugins/c-review/skills/c-review in trailofbits/skills) into .agents/skills/c-review 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 trailofbits/skills --skill c-review -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/c-review, .gemini/skills/c-review, .github/skills/c-review and .opencode/skills/c-review in your project.
Going by SKILL.md and its folder, C Review needs the command-line tools its instructions call (uv). Its frontmatter pre-approves these tools: Workflow, AskUserQuestion, Bash, Read.
SKILL.md contains no URLs. Its commands use uv, 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.
C Review is published under the CC-BY-SA-4.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k 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 C Review: Code Audit (3stoneBrother/code-audit, 893 stars), Wooyun Legacy (tanweai/wooyun-legacy, 1.8k stars), Static Vulnerability Detector (ArabelaTso/Skills-4-SE, 253 stars) and YugabyteDB ASH Instrumentation (yugabyte/yugabyte-db, 11k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
trailofbits (a GitHub organization, an official publisher) maintains it in trailofbits/skills, which has 7,420 GitHub stars. The repository holds 79 skills in this directory. The repository was last updated on October 7, 2026.
Source: trailofbits/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.