
This is a specialized security agent for claude-flow v3 that patches three critical CVEs and implements secure-by-default patterns. It migrates SHA-256 password hashing to bcrypt, removes hardcoded credentials, updates vulnerable dependencies, and adds input validation with Zod schemas. The skill orchestrates parallel security tasks using dedicated agents for threat modeling, CVE remediation, and TDD security testing. Worth noting that it includes practical examples for path traversal prevention and safe command execution without shell interpretation. If you're upgrading to v3 or inherited a codebase with known security debt, this gives you a structured framework to fix it systematically rather than piecemeal.
$ npx -y skills add spencermarx/open-code-review --skill "V3 Security Overhaul" --agent claude-codeInstalls into .claude/skills of the current project.
Orchestrates comprehensive security overhaul for claude-flow v3, addressing critical vulnerabilities and establishing security-first development practices using specialized v3 security agents.
# Initialize V3 security domain (parallel)
Task("Security architecture", "Design v3 threat model and security boundaries", "v3-security-architect")
Task("CVE remediation", "Fix CVE-1, CVE-2, CVE-3 critical vulnerabilities", "security-auditor")
Task("Security testing", "Implement TDD London School security framework", "test-architect")
npm update @anthropic-ai/claude-code@^2.0.31
npm audit --audit-level high
// ❌ Old: SHA-256 with hardcoded salt
const hash = crypto.createHash('sha256').update(password + salt).digest('hex');
// ✅ New: bcrypt with 12 rounds
import bcrypt from 'bcrypt';
const hash = await bcrypt.hash(password, 12);
// ✅ Generate secure random credentials
const apiKey = crypto.randomBytes(32).toString('hex');
import { z } from 'zod';
const TaskSchema = z.object({
taskId: z.string().uuid(),
content: z.string().max(10000),
agentType: z.enum(['security', 'core', 'integration'])
});
function securePath(userPath: string, allowedPrefix: string): string {
const resolved = path.resolve(allowedPrefix, userPath);
if (!resolved.startsWith(path.resolve(allowedPrefix))) {
throw new SecurityError('Path traversal detected');
}
return resolved;
}
import { execFile } from 'child_process';
// ✅ Safe: No shell interpretation
const { stdout } = await execFile('git', [userInput], { shell: false });
Sponsors