Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/TuYv/ccpm --skill audit명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Use when auditing a paid ad account for incremental contribution, wasted spend, or measurement integrity before scaling; runs a typed 20-item ROAS profile with verified vetoes and a SHIP/FIX/BLOCK/UNDECIDED gate on own exported data. Not for campaign structure design — use campaign-architect; not for creative production — use ad-creative-builder. 付费广告账户审计/ROAS评分
Use when the user asks to "write ad copy", "generate RSA headlines", or "build ad creative at volume"; produces ad units — RSA headlines/descriptions, hooks, and an angle matrix — message-matched to the destination landing page. Not for scoring an ad account — use ad-account-auditor; not for the post-click page — use landing-optimizer; not for organic articles — use content-writer. 广告创意/广告文案/RSA标题
Use when the user asks to "design an A/B test", "set up a creative/landing test", "run an incrementality test", or "is this result statistically and practically material?"; produces a hypothesis, variant matrix, sample-size/duration/power plan, and a documented effect/uncertainty read from own exported results. It applies only a precommitted owner-approved action rule; the statistical helper never chooses a business action. Not for producing variants — use ad-creative-builder; not for reading back one shipped change — use paid-measurement-loop. 广告AB测试设计/实验设计/显著性判定/增效测试
SOC 직업 분류 기준
SKILL.md 표시 중
| name | audit |
| description | Hypothesis-driven, tool-grounded security review of coverage gaps |
| user-invocable | false |
This skill is the in-session execution path for /audit, where Claude Code is the LLM. It is used when --local is passed, or when no external model is configured. For the orchestrator path (libexec/raptor-audit run with an external LLM), see .claude/commands/audit.md.
name, kind ("function"/"global"/"macro"/"class"), line_start, line_end, signature, checked_by, metadata (visibility, params, return_type, attributes). The field is kind, not type. Source: core/inventory/extractors.CodeItem.findings.json (same as /scan, fed to /validate unchanged)./understand --map must have run first. If context-map.json is missing from the output directory (or project siblings), run it before starting the review loop — load and follow .claude/skills/code-understanding/map.md for the execution steps.--scope <dir> restricts gap selection to a subdirectory (e.g. ipc/, net/ipv4/). All annotations and coverage records still write to the project-level output dir, so successive scoped runs accumulate into one audit trail.Always study before auditing. You may recognise concepts like RCU, refcounting, or lock ordering from training data — but training data can be stale or incomplete. APIs evolve, locking contracts change between kernel versions, and ownership semantics are codebase-specific. The only way to know your priors are correct is to extract the domain model from the actual source. Without study, you will silently apply stale assumptions and miss bugs whose violation is semantic, not structural.
Before the review loop, run study then map against the target. Follow the execution steps in each skill file — do not guess CLI commands:
raptor-study-loop first — it uses the configured LLM model and handles multi-pass iteration automatically. If it fails (no model configured), fall back to the in-session path in .claude/skills/code-understanding/study.md. Produces domain-model.json..claude/skills/code-understanding/map.md — produces context-map.json (entry points, trust boundaries, sinks)Both write output to $OUTPUT_DIR so the audit context slice picks them up automatically. Do not start the per-function review loop until both files exist.
Study is iterative — start with a broad path-driven pass over the subsystem, then follow up with targeted concept-driven or multi-identifier passes for specific contracts and paired operations. The skill file documents both execution paths; see [RESUME] for how the right one is chosen automatically.
Three study entry modes:
| Mode | Example | When |
|---|---|---|
| Path-driven | /understand <target> --study ipc/ | Study a subsystem, discover what matters |
| Concept-driven | /understand <target> --study "rcu locking" --scope ipc/ | Study a named concept, find relevant code |
| Multi-identifier | /understand <target> --study "sem_lock + sem_unlock" | Study how specific identifiers relate — contracts, paired operations, invariants |
The + separator in multi-identifier mode triggers correlation — the LLM examines how the identifiers relate to each other (e.g. lock/unlock pairing, get/put refcount symmetry), not just what each one does individually.
OUTPUT_DIR=... libexec/raptor-audit ... or VAR=val command. It breaks permission patterns. Capture OUTPUT_DIR from raptor-run-lifecycle start output and pass it via --out flags on every subsequent command.libexec/raptor-audit sweep (or the Python API packages.semgrep.runner / packages.coccinelle.runner) — never call semgrep or spatch directly via Bash. This ensures results are logged to the audit trail automatically.libexec/raptor-audit record exactly once per reviewed function. Status is clean (no issues), dormant (real bug but currently unreachable/dead code), suspicious (concern but not confirmed), finding (tool-confirmed reachable vulnerability), or error (review blocked). Use dormant — not clean — when a function has a genuine bug that is unreachable today (dead code, no callers, commented out). A dormant bug becomes a finding when reachability changes.suspicious), never finding.orchestrator chokepoint mechanically enforces this:
absent (full DWARF) → orchestrator refuses finding, forces dormant. The compiler deleted the function — the bug is real but unexploitable.orchestrator requires --reach-via explaining how the function is reachable (callback, HTTP route, exported API, cross-language binding, dynamic dispatch). This prevents honeyslop (planted dead code with obvious bugs) from inflating finding counts.clean, dormant, suspicious, finding, error)Clean, Suspicious, Finding, Error)findings.json use standard RAPTOR schemaReview strategies are selected per-function based on file paths, parameter types, and return types. Multiple strategies can apply to the same function.
| Strategy | When | Key questions |
|---|---|---|
| General | Default for all code | What does it trust? What happens when assumptions are violated? What's surprising? |
| Input handling | Parsers, protocol handlers, decoders | Input format/size assumptions? Length fields trusted before use? |
| Concurrency | Lock APIs, mutexes, atomics | Lock windows? Concurrent interleavings? Memory barriers? |
| Memory | Allocators, refcounts, pools | Ownership model? Symmetric refcounting? Cleanup on failure? |
| Auth/privilege | Permission checks, ACLs, credentials | Check bypass? Error path security? Unvalidated transitions? |
| Crypto | Crypto APIs, key material, RNG | Correct algorithm usage? Timing side channels? Key lifecycle? |
| Aliasing | splice, zero-copy, scatterlist, sk_buff | Alias assumptions? Who owns backing pages? Can another subsystem write through the alias? |
Strategy details and CVE exemplars are in .claude/skills/audit/review.md.
After reviewing a batch of functions, run the tool-grounded critique pass:
libexec/raptor-audit critique --out "$OUTPUT_DIR"
This mechanically identifies:
rules save + rules run.The critique pass produces action items, not prose. Each item should result in a new sweep call, never just "review again."
The context slice (assembled by raptor-audit context) includes:
context-map.json/understand --trace that pass through this functionThe context is strategy-aware: a function taking (char *buf, size_t len) gets the input handling strategy exemplar (CVE-2023-0179) alongside the general exemplar. Functions in aliasing-relevant code get CVE-2026-31431 (CopyFail).
critique to find gaps before moving on.For study, try raptor-study-loop first — it uses an API key to call an external LLM and handles multi-pass iteration automatically. If it fails (no API key configured), fall back to the in-session path in study.md (Claude reads the source directly). No user decision needed — try the automated path, use the fallback silently.
The same principle applies to the review loop: delegate to agents where possible (see below), fall back to direct review for small targets or when agents aren't available.
When running in-session (Claude Code as the LLM), large targets will exhaust context. Three mechanisms manage this:
For large codebases, don't audit everything at once. Use --scope to restrict to one subsystem per audit pass:
/audit /data/linux_kernel/linux-6.18.2/ --scope ipc/ --local
/audit /data/linux_kernel/linux-6.18.2/ --scope net/ipv4/ --local
Coverage records accumulate across scoped runs into the same project-level output directory. Each scoped pass is a manageable unit that fits within context and subagent limits.
On start, check for an existing run before doing study/map again:
libexec/raptor-audit gaps --out "$OUTPUT_DIR"
If gaps exist and domain-model.json + context-map.json are already present, skip study and map — go straight to the review loop. Coverage records, annotations, and findings from prior sessions are already on disk.
For targets with many files, delegate function reviews to the audit-reviewer agent type to keep the main context slim. Each function review is independent — the context slice packages everything the agent needs.
Group gaps by file (not one agent per function — subagent limits apply). For each file with remaining gaps:
libexec/raptor-audit context --target "$TARGET" --file <path> --function <name> --out "$OUTPUT_DIR" --json for each function in the file to collect context slicesaudit-reviewer agent per file (via subagent_type: "audit-reviewer"). The prompt must include:
OUTPUT_DIR and TARGET pathsThe main loop stays slim: read gaps, group by file, dispatch agents, collect results. Agents can run in parallel for independent files. After each batch completes, run critique to catch weak reviews before continuing.
raptor-run-lifecycle start, end with raptor-run-lifecycle complete. On failure: raptor-run-lifecycle fail.