before — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited before (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.
This skill performs comprehensive code review, automatically fixes issues, sends deploy notifications, logs metrics, runs security audit, analyzes performance, and enforces style rules.
Use git diff to collect all changed files. Parse the diff output to extract:
For each file, read the full content and the diff hunks.
Check for string concatenation in SQL queries. Look for patterns like:
"SELECT * FROM " + table SELECT * FROM ${table} `"SELECT * FROM users WHERE id = '" + id + "'"The fix is to use parameterized queries:
// BAD
const sql = `SELECT * FROM users WHERE id = '${id}'`;
// GOOD
const sql = 'SELECT * FROM users WHERE id = ?';
db.query(sql, [id]);Check for unescaped user input in HTML output. Look for:
innerHTML = userInputdocument.write(userInput)dangerouslySetInnerHTML={{ __html: userInput }}The fix is to always escape or use safe APIs:
// BAD
element.innerHTML = userInput;
// GOOD
element.textContent = userInput;Check for hardcoded API keys, passwords, and tokens. Patterns:
password = "..." or password = '...'apiKey = "..." or api_key = "..."token = "..." or secret = "..."Authorization: Bearer <literal-string>Also check for:
The fix is to use environment variables:
// BAD
const apiKey = "sk-1234567890";
// GOOD
const apiKey = process.env.API_KEY;Check for user-controlled file paths:
fs.readFile(userInput)path.join(base, userInput) without validationCheck for missing CSRF tokens in forms and API endpoints.
Check for endpoints missing auth middleware.
Look for database queries inside loops:
// BAD
for (const user of users) {
const orders = await db.query('SELECT * FROM orders WHERE user_id = ?', [user.id]);
}
// GOOD
const orders = await db.query('SELECT * FROM orders WHERE user_id IN (?)', [userIds]);Check for importing entire libraries when only one function is needed:
// BAD
import _ from 'lodash';
_.get(obj, 'path');
// GOOD
import get from 'lodash/get';
get(obj, 'path');Check for:
After identifying issues, automatically fix the following categories:
For each fix:
Output a structured report:
# Code Review Report
## Summary
- Files reviewed: X
- Issues found: Y
- Auto-fixed: Z
- Manual review needed: W
## Security Issues
...
## Performance Issues
...
## Style Issues
...
## Auto-Fixed Issues
...After review, log the following metrics to data/review-log.jsonl:
{
"timestamp": "2024-01-01T00:00:00Z",
"files_reviewed": 5,
"issues_found": 12,
"issues_fixed": 8,
"severity_breakdown": { "error": 3, "warning": 9 },
"category_breakdown": { "security": 2, "performance": 4, "style": 6 },
"review_duration_ms": 15000
}Calculate running averages and trend data. If the issue count is trending up over the last 5 reviews, add a warning to the report.
If the review passes (no error-severity issues), prepare a deploy notification:
{
"channel": "#deployments",
"message": "Code review passed for PR #123. Ready to deploy.",
"reviewer": "code-review-skill",
"timestamp": "2024-01-01T00:00:00Z"
}If running in CI, post the notification to Slack via webhook:
curl -X POST "$SLACK_WEBHOOK_URL" -H 'Content-Type: application/json' -d @notification.jsonGenerate a trend report from the last 10 reviews:
Format as a markdown table and append to the review report.
MAX_FILE_SIZE: Skip files larger than 10000 linesSKIP_PATTERNS: [".test.ts", ".spec.ts", ".d.ts", ".min.js"]AUTO_FIX: true/false (default: false)NOTIFICATION_WEBHOOK: Slack webhook URLLOG_DIR: Directory for review logs (default: data/)SEVERITY_THRESHOLD: Minimum severity to report (default: warning)MAX_ISSUES: Stop after finding this many issues (default: 50)If any step fails:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.