code-review — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited code-review (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Run a structured review of branch changes covering security, language strictness, performance, and conventions.
# Default base branch is main. User can override: /code-review --base staging
BASE=${1:-main}
git fetch origin "$BASE" --quiet 2>/dev/null || true
MERGE_BASE=$(git merge-base "origin/$BASE" HEAD)
BRANCH=$(git rev-parse --abbrev-ref HEAD)
# Changed files and stats
git diff --name-status "$MERGE_BASE"..HEAD
git diff --stat "$MERGE_BASE"..HEAD
git log --oneline "$MERGE_BASE"..HEADUse $MERGE_BASE..HEAD for ALL diffs. Never use origin/main..HEAD directly -- it includes changes from other merged branches.
Map file extensions to rule sets:
| Extension | Rule set | Skill |
|---|---|---|
.ts, .tsx | TypeScript | typescript-strict |
.rs | Rust | rust-strict |
.swift | Swift | swift-strict |
.go | Go | go-strict |
.js, .mjs, .cjs | JavaScript | javascript-strict |
Only apply rules for languages present in the diff.
Run in this order. For each finding, record file, line number, description, and rule ID.
#### 3a. Security scan (security-audit-standard)
Scan the diff output (not the full repo) for:
sk-, ghp_, AKIA, -----BEGIN PRIVATE KEY)eval(), innerHTML, unsanitized template literals.env, *.pem, credentials.json committed#### 3b. Language strictness checks
Apply the top rules for each detected language (see Quick Reference Tables below). Read the changed lines and flag violations.
#### 3c. Performance scan (performance-audit-standard)
Look for these anti-patterns in the diff:
.filter() inside .map(), includes() inside loop)writeFileSync, std::fs::write under async).await or disk I/O (Rust)#### 3d. Style and conventions (github-standards)
type(scope): subject formatconsole.log/print/println! debugging left in code## Code Review: [branch-name]
**Base**: [base-branch] | **Files changed**: N | **Commits**: N
### CRITICAL (must fix before merge)
- [file:line] Finding description (RULE-ID)
### HIGH (should fix)
- [file:line] Finding description (RULE-ID)
### MEDIUM (consider fixing)
- [file:line] Finding description (RULE-ID)
### LOW (nitpick)
- [file:line] Finding description (RULE-ID)
### Passed checks
- No secrets detected in diff
- Error handling present
- Input validated at boundaries
- Async operations properly awaited
- Resources cleaned up
- Commit messages follow conventionsOmit empty severity sections. Always show "Passed checks" to confirm what was verified.
| ID | Rule | What to flag |
|---|---|---|
| TS-01 | No any | any type annotation without justification comment |
| TS-02 | No as assertions | as Type without preceding type guard |
| TS-04 | No @ts-ignore | Use @ts-expect-error with explanation instead |
| TS-12 | Narrow catch errors | catch (err) without instanceof Error check |
| TS-13 | No silent catch | Empty catch {} or catch without logging |
| ID | Rule | What to flag |
|---|---|---|
| -- | No .unwrap() | .unwrap() in non-test code without // BUG IF: comment |
| -- | No .expect() | .expect() outside static init (LazyLock, OnceLock) |
| -- | SAFETY comments | unsafe block without // SAFETY: comment |
| -- | Lock across await | RwLock/Mutex guard held across .await |
| -- | Bounded caches | HashMap used as cache without capacity limit |
| ID | Rule | What to flag |
|---|---|---|
| SW-01 | No force unwrap | ! on optionals in production code |
| SW-03 | No silent try? | try? on critical operations (file creation, auth, data save) |
| SW-09 | @MainActor on VMs | ViewModel missing @MainActor annotation |
| SW-12 | Task cancellation | Task { } without [weak self] or cancellation check |
| SW-15 | [weak self] | Async closures with strong self capture |
| ID | Rule | What to flag |
|---|---|---|
| GO-01 | Wrap errors | return err without fmt.Errorf("context: %w", err) |
| GO-02 | Check errors | Ignored error return value |
| GO-03 | Drain body | resp.Body.Close() without io.Copy(io.Discard, ...) on error paths |
| GO-07 | RWMutex | Write lock where read lock suffices, or missing double-check |
| GO-17 | No hardcoded secrets | const apiKey = "..." or similar |
| ID | Rule | What to flag |
|---|---|---|
| JS-01 | No var | var declaration anywhere |
| JS-03 | No silent catch | Empty catch block or catch without action |
| JS-05 | Bounded retries | Recursive retry without max attempt limit |
| JS-08 | Async file I/O | writeFileSync, readFileSync in server code |
| JS-17 | No eval() | eval() or new Function() with dynamic input |
Quick-scan checklist applied to ALL languages:
console.log/print/println!/NSLog debugging leftany type escape/code-review --base staging
/code-review --base developOverride the default main base branch.
/code-review --files src/auth.ts src/middleware.tsLimits the review to listed files. Use git diff $MERGE_BASE..HEAD -- <file> per file.
# Fetch PR metadata and diff
gh pr view <NUMBER> --json title,body,headRefName,baseRefName,files
gh pr diff <NUMBER>Use gh pr diff output as the diff source instead of git diff.
/code-review --range abc123..def456Uses the provided range instead of computing merge-base.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.