Skip to content

fix(engineering): improve 7 low-scoring skills + 3 security fixes - #331

Merged
alirezarezvani merged 9 commits into
devfrom
feature/fix-low-scoring-skills
Mar 11, 2026
Merged

fix(engineering): improve 7 low-scoring skills + 3 security fixes#331
alirezarezvani merged 9 commits into
devfrom
feature/fix-low-scoring-skills

Conversation

@alirezarezvani

@alirezarezvani alirezarezvani commented Mar 11, 2026

Copy link
Copy Markdown
Owner

What changed

7 low-scoring skills improved (all were <50% in Tessl audit)

Skill Before After Script Added
performance-profiler 31%, no scripts 155 lines, 1 script performance_profiler.py
codebase-onboarding 32%, 465 lines 84 lines, 1 script codebase_analyzer.py
monorepo-navigator 36%, no scripts 97 lines, 1 script monorepo_analyzer.py
agent-workflow-designer 39%, 443 lines 83 lines, 1 script workflow_scaffolder.py
env-secrets-manager <50%, 337 lines 78 lines, 1 script env_auditor.py
runbook-generator <50%, 415 lines 76 lines, 1 script runbook_generator.py
interview-system-designer <50%, 457 lines 59 lines, 1 script interview_planner.py

3 security findings addressed

  • payment_processor.py: disclaimer + replaced realistic-looking keys
  • project_scaffolder.py: placeholder comments on generated secrets
  • pipeline_orchestrator.py: no change needed (syntax validation only)

Verification

  • ✅ All 7 scripts compile (py_compile) and --help works
  • ✅ All SKILL.md under 200 lines
  • ✅ All frontmatter (name, description) preserved
  • ✅ All reference files present
  • ✅ 8 atomic commits (1 security + 7 skills)

Open with Devin

Leo added 8 commits March 11, 2026 20:18
- payment_processor.py: add disclaimer header + replace realistic-looking keys with EXAMPLE_NOT_REAL
- project_scaffolder.py: add SCAFFOLDING PLACEHOLDER comments to generated secrets
- pipeline_orchestrator.py: no change needed (compile() used for syntax validation only)
@github-actions

github-actions Bot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

🔒 Skill Security Audit Results

engineering-team — FAIL

Severity Count
🔴 Critical 15
🟡 High 19
Findings detail
{
  "severity": "HIGH",
  "category": "FS-HIDDEN",
  "file": ".claude-plugin",
  "line": 0,
  "pattern": ".claude-plugin",
  "risk": "Hidden file '.claude-plugin' \u2014 may contain secrets or hidden config",
  "fix": "Remove hidden files from skill distribution"
}
{
  "severity": "HIGH",
  "category": "FS-HIDDEN",
  "file": ".codex",
  "line": 0,
  "pattern": ".codex",
  "risk": "Hidden file '.codex' \u2014 may contain secrets or hidden config",
  "fix": "Remove hidden files from skill distribution"
}
{
  "severity": "HIGH",
  "category": "FS-HIDDEN",
  "file": "playwright-pro/.claude-plugin",
  "line": 0,
  "pattern": ".claude-plugin",
  "risk": "Hidden file '.claude-plugin' \u2014 may contain secrets or hidden config",
  "fix": "Remove hidden files from skill distribution"
}
{
  "severity": "HIGH",
  "category": "FS-HIDDEN",
  "file": "playwright-pro/.mcp.json",
  "line": 0,
  "pattern": ".mcp.json",
  "risk": "Hidden file '.mcp.json' \u2014 may contain secrets or hidden config",
  "fix": "Remove hidden files from skill distribution"
}
{
  "severity": "HIGH",
  "category": "FS-HIDDEN",
  "file": "google-workspace-cli/.claude-plugin",
  "line": 0,
  "pattern": ".claude-plugin",
  "risk": "Hidden file '.claude-plugin' \u2014 may contain secrets or hidden config",
  "fix": "Remove hidden files from skill distribution"
}
{
  "severity": "HIGH",
  "category": "FS-HIDDEN",
  "file": "self-improving-agent/.claude-plugin",
  "line": 0,
  "pattern": ".claude-plugin",
  "risk": "Hidden file '.claude-plugin' \u2014 may contain secrets or hidden config",
  "fix": "Remove hidden files from skill distribution"
}
{
  "severity": "HIGH",
  "category": "FS-ABUSE",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-computer-vision/scripts/dataset_pipeline_builder.py",
  "line": 812,
  "pattern": "shutil.rmtree(temp_coco, ignore_errors=True)",
  "risk": "Recursive directory deletion \u2014 destructive operation",
  "fix": "Remove or restrict to specific, validated paths within skill scope"
}
{
  "severity": "HIGH",
  "category": "CODE-EXEC",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/playwright-pro/hooks/validate-test.sh",
  "line": 10,
  "pattern": "FILE_PATH=$(echo \"$INPUT\" | python3 -c \"",
  "risk": "Inline code execution in shell script",
  "fix": "Move code to a separate, inspectable script file"
}
{
  "severity": "CRITICAL",
  "category": "CMD-INJECT",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/google-workspace-cli/scripts/gws_recipe_runner.py",
  "line": 321,
  "pattern": "result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=30)",
  "risk": "Shell injection via subprocess with shell=True",
  "fix": "Use subprocess.run() with list arguments and shell=False"
}
{
  "severity": "CRITICAL",
  "category": "CRED-HARVEST",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-fullstack/scripts/project_scaffolder.py",
  "line": 524,
  "pattern": "SECRET_KEY = os.environ.get(\"DJANGO_SECRET_KEY\", \"change-me\")",
  "risk": "Reads sensitive environment variables",
  "fix": "Remove credential access. Skills should not need external credentials"
}
{
  "severity": "CRITICAL",
  "category": "CRED-HARVEST",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-fullstack/scripts/project_scaffolder.py",
  "line": 558,
  "pattern": "\"PASSWORD\": os.environ.get(\"DB_PASSWORD\", \"password\"),",
  "risk": "Reads sensitive environment variables",
  "fix": "Remove credential access. Skills should not need external credentials"
}
{
  "severity": "CRITICAL",
  "category": "CODE-EXEC",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-secops/scripts/security_scanner.py",
  "line": 118,
  "pattern": "'exec() with potential user input'),",
  "risk": "Arbitrary code execution via exec()",
  "fix": "Remove exec() \u2014 rewrite logic to avoid dynamic code execution"
}
{
  "severity": "CRITICAL",
  "category": "CODE-EXEC",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-secops/scripts/security_scanner.py",
  "line": 120,
  "pattern": "'eval() with potential user input'),",
  "risk": "Arbitrary code execution via eval()",
  "fix": "Use ast.literal_eval() for data parsing or explicit parsing logic"
}
{
  "severity": "CRITICAL",
  "category": "CODE-EXEC",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-data-engineer/scripts/pipeline_orchestrator.py",
  "line": 339,
  "pattern": "compile(code, '<string>', 'exec')",
  "risk": "Dynamic code compilation for execution",
  "fix": "Remove compile() with exec mode \u2014 use explicit logic instead"
}
{
  "severity": "CRITICAL",
  "category": "CODE-EXEC",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-data-engineer/scripts/pipeline_orchestrator.py",
  "line": 452,
  "pattern": "compile(code, '<string>', 'exec')",
  "risk": "Dynamic code compilation for execution",
  "fix": "Remove compile() with exec mode \u2014 use explicit logic instead"
}
{
  "severity": "CRITICAL",
  "category": "CODE-EXEC",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-data-engineer/scripts/pipeline_orchestrator.py",
  "line": 579,
  "pattern": "compile(code, '<string>', 'exec')",
  "risk": "Dynamic code compilation for execution",
  "fix": "Remove compile() with exec mode \u2014 use explicit logic instead"
}
{
  "severity": "CRITICAL",
  "category": "CODE-EXEC",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-security/scripts/secret_scanner.py",
  "line": 384,
  "pattern": "\"scan_date\": __import__('datetime').datetime.now().isoformat(),",
  "risk": "Dynamic module import \u2014 can load arbitrary code",
  "fix": "Use explicit import statements"
}
{
  "severity": "CRITICAL",
  "category": "CODE-EXEC",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-security/scripts/threat_modeler.py",
  "line": 468,
  "pattern": "\"analysis_date\": __import__('datetime').datetime.now().isoformat(),",
  "risk": "Dynamic module import \u2014 can load arbitrary code",
  "fix": "Use explicit import statements"
}
{
  "severity": "CRITICAL",
  "category": "PROMPT-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-architect/references/tech_decision_guide.md",
  "line": 240,
  "pattern": "| Access token | 15-60 minutes |",
  "risk": "Instruction to access sensitive files or credentials",
  "fix": "Remove credential/sensitive file access directives"
}
{
  "severity": "CRITICAL",
  "category": "PROMPT-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/playwright-pro/templates/api/auth-headers.md",
  "line": 55,
  "pattern": "// Happy path: refresh token obtains new access token",
  "risk": "Instruction to access sensitive files or credentials",
  "fix": "Remove credential/sensitive file access directives"
}
{
  "severity": "CRITICAL",
  "category": "PROMPT-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-fullstack/references/architecture_patterns.md",
  "line": 454,
  "pattern": "1. User logs in \u2192 Server returns access token (15min) + refresh token (7d)",
  "risk": "Instruction to access sensitive files or credentials",
  "fix": "Remove credential/sensitive file access directives"
}
{
  "severity": "CRITICAL",
  "category": "PROMPT-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-fullstack/references/architecture_patterns.md",
  "line": 456,
  "pattern": "3. Access token expires \u2192 Client uses refresh token to get new pair",
  "risk": "Instruction to access sensitive files or credentials",
  "fix": "Remove credential/sensitive file access directives"
}
{
  "severity": "CRITICAL",
  "category": "PROMPT-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-security/references/security-architecture-patterns.md",
  "line": 241,
  "pattern": "\"\"\"Create short-lived access token.\"\"\"",
  "risk": "Instruction to access sensitive files or credentials",
  "fix": "Remove credential/sensitive file access directives"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-computer-vision/scripts/inference_optimizer.py",
  "line": 431,
  "pattern": "'onnxruntime': f'pip install onnxruntime-gpu',",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to requirements.txt for pre-install review"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-frontend/scripts/frontend_scaffolder.py",
  "line": 890,
  "pattern": "\"npm install\",",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to package.json for pre-install review"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-fullstack/scripts/project_scaffolder.py",
  "line": 661,
  "pattern": "RUN npm install",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to package.json for pre-install review"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-fullstack/scripts/project_scaffolder.py",
  "line": 673,
  "pattern": "npm install",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to package.json for pre-install review"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-fullstack/scripts/project_scaffolder.py",
  "line": 773,
  "pattern": "\"nextjs\": [f\"cd {name}\", \"npm install\", \"cp .env.example .env.local\", \"npm run dev\"],",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to package.json for pre-install review"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-fullstack/scripts/project_scaffolder.py",
  "line": 777,
  "pattern": "\"cd backend && pip install -r requirements.txt && uvicorn app.main:app --reload\",",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to requirements.txt for pre-install review"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-fullstack/scripts/project_scaffolder.py",
  "line": 778,
  "pattern": "\"cd frontend && npm install && npm run dev\"",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to package.json for pre-install review"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-fullstack/scripts/project_scaffolder.py",
  "line": 783,
  "pattern": "\"cd server && npm install && npm run dev\",",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to package.json for pre-install review"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-fullstack/scripts/project_scaffolder.py",
  "line": 784,
  "pattern": "\"cd client && npm install && npm run dev\"",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to package.json for pre-install review"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-fullstack/scripts/project_scaffolder.py",
  "line": 789,
  "pattern": "\"cd backend && pip install -r requirements.txt && python manage.py migrate && python manage.py runserver\",",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to requirements.txt for pre-install review"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering-team/senior-fullstack/scripts/project_scaffolder.py",
  "line": 790,
  "pattern": "\"cd frontend && npm install && npm run dev\"",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to package.json for pre-install review"
}

engineering — FAIL

Severity Count
🔴 Critical 22
🟡 High 11
Findings detail
{
  "severity": "HIGH",
  "category": "FS-HIDDEN",
  "file": ".claude-plugin",
  "line": 0,
  "pattern": ".claude-plugin",
  "risk": "Hidden file '.claude-plugin' \u2014 may contain secrets or hidden config",
  "fix": "Remove hidden files from skill distribution"
}
{
  "severity": "HIGH",
  "category": "FS-HIDDEN",
  "file": ".codex",
  "line": 0,
  "pattern": ".codex",
  "risk": "Hidden file '.codex' \u2014 may contain secrets or hidden config",
  "fix": "Remove hidden files from skill distribution"
}
{
  "severity": "CRITICAL",
  "category": "NET-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/tech-debt-tracker/assets/sample_codebase/src/payment_processor.py",
  "line": 100,
  "pattern": "response = requests.post(",
  "risk": "Outbound HTTP write request \u2014 potential data exfiltration",
  "fix": "Remove outbound POST/PUT/PATCH or verify destination is trusted and necessary"
}
{
  "severity": "CRITICAL",
  "category": "NET-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/tech-debt-tracker/assets/sample_codebase/src/payment_processor.py",
  "line": 142,
  "pattern": "response = requests.post(",
  "risk": "Outbound HTTP write request \u2014 potential data exfiltration",
  "fix": "Remove outbound POST/PUT/PATCH or verify destination is trusted and necessary"
}
{
  "severity": "CRITICAL",
  "category": "NET-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/tech-debt-tracker/assets/sample_codebase/src/payment_processor.py",
  "line": 182,
  "pattern": "response = requests.post(",
  "risk": "Outbound HTTP write request \u2014 potential data exfiltration",
  "fix": "Remove outbound POST/PUT/PATCH or verify destination is trusted and necessary"
}
{
  "severity": "CRITICAL",
  "category": "CMD-INJECT",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/scripts/skill_security_auditor.py",
  "line": 125,
  "pattern": "\"risk\": \"Arbitrary command execution via os.system()\",",
  "risk": "Arbitrary command execution via os.system()",
  "fix": "Use subprocess.run() with list arguments and shell=False"
}
{
  "severity": "CRITICAL",
  "category": "CMD-INJECT",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/scripts/skill_security_auditor.py",
  "line": 132,
  "pattern": "\"risk\": \"Command execution via os.popen()\",",
  "risk": "Command execution via os.popen()",
  "fix": "Use subprocess.run() with list arguments and capture_output=True"
}
{
  "severity": "CRITICAL",
  "category": "CODE-EXEC",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/scripts/skill_security_auditor.py",
  "line": 154,
  "pattern": "\"risk\": \"Arbitrary code execution via eval()\",",
  "risk": "Arbitrary code execution via eval()",
  "fix": "Use ast.literal_eval() for data parsing or explicit parsing logic"
}
{
  "severity": "CRITICAL",
  "category": "CODE-EXEC",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/scripts/skill_security_auditor.py",
  "line": 161,
  "pattern": "\"risk\": \"Arbitrary code execution via exec()\",",
  "risk": "Arbitrary code execution via exec()",
  "fix": "Remove exec() \u2014 rewrite logic to avoid dynamic code execution"
}
{
  "severity": "CRITICAL",
  "category": "CODE-EXEC",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/scripts/skill_security_auditor.py",
  "line": 162,
  "pattern": "\"fix\": \"Remove exec() \u2014 rewrite logic to avoid dynamic code execution\",",
  "risk": "Arbitrary code execution via exec()",
  "fix": "Remove exec() \u2014 rewrite logic to avoid dynamic code execution"
}
{
  "severity": "CRITICAL",
  "category": "PRIV-ESC",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/scripts/skill_security_auditor.py",
  "line": 342,
  "pattern": "\"fix\": \"Remove sudo usage. Skills should never require elevated privileges\",",
  "risk": "Sudo invocation \u2014 privilege escalation attempt",
  "fix": "Remove sudo usage. Skills should never require elevated privileges"
}
{
  "severity": "HIGH",
  "category": "DESERIAL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/scripts/skill_security_auditor.py",
  "line": 378,
  "pattern": "\"fix\": \"Use yaml.safe_load() or yaml.load(data, Loader=yaml.SafeLoader)\",",
  "risk": "Unsafe YAML loading \u2014 can execute arbitrary code",
  "fix": "Use yaml.safe_load() or yaml.load(data, Loader=yaml.SafeLoader)"
}
{
  "severity": "CRITICAL",
  "category": "PRIV-ESC",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/scripts/skill_security_auditor.py",
  "line": 468,
  "pattern": "\"regex\": r\"<!--\\s*(?:system|instruction|override|ignore|execute|run|sudo|admin)\",",
  "risk": "Sudo invocation \u2014 privilege escalation attempt",
  "fix": "Remove sudo usage. Skills should never require elevated privileges"
}
{
  "severity": "CRITICAL",
  "category": "CODE-EXEC",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/scripts/skill_security_auditor.py",
  "line": 579,
  "pattern": "\"risk\": \"Dynamic Function constructor \u2014 equivalent to eval()\",",
  "risk": "Arbitrary code execution via eval()",
  "fix": "Use ast.literal_eval() for data parsing or explicit parsing logic"
}
{
  "severity": "HIGH",
  "category": "FS-ABUSE",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/scripts/skill_security_auditor.py",
  "line": 917,
  "pattern": "shutil.rmtree(tmp_dir, ignore_errors=True)",
  "risk": "Recursive directory deletion \u2014 destructive operation",
  "fix": "Remove or restrict to specific, validated paths within skill scope"
}
{
  "severity": "HIGH",
  "category": "FS-ABUSE",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/scripts/skill_security_auditor.py",
  "line": 929,
  "pattern": "shutil.rmtree(tmp_dir, ignore_errors=True)",
  "risk": "Recursive directory deletion \u2014 destructive operation",
  "fix": "Remove or restrict to specific, validated paths within skill scope"
}
{
  "severity": "HIGH",
  "category": "FS-ABUSE",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/scripts/skill_security_auditor.py",
  "line": 1045,
  "pattern": "shutil.rmtree(cleanup_dir, ignore_errors=True)",
  "risk": "Recursive directory deletion \u2014 destructive operation",
  "fix": "Remove or restrict to specific, validated paths within skill scope"
}
{
  "severity": "CRITICAL",
  "category": "PROMPT-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/env-secrets-manager/references/secret-patterns.md",
  "line": 8,
  "pattern": "- GitHub personal access tokens (`ghp_...`)",
  "risk": "Instruction to access sensitive files or credentials",
  "fix": "Remove credential/sensitive file access directives"
}
{
  "severity": "CRITICAL",
  "category": "PROMPT-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/env-secrets-manager/references/validation-detection-rotation.md",
  "line": 304,
  "pattern": "- **GitHub PAT**: Settings \u2192 Developer Settings \u2192 Personal access tokens \u2192 Revoke \u2192 Create new",
  "risk": "Instruction to access sensitive files or credentials",
  "fix": "Remove credential/sensitive file access directives"
}
{
  "severity": "CRITICAL",
  "category": "PROMPT-OVERRIDE",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/SKILL.md",
  "line": 60,
  "pattern": "| **System prompt override** | \"Ignore previous instructions\", \"You are now...\" | \ud83d\udd34 CRITICAL |",
  "risk": "Attempts to override system prompt and prior instructions",
  "fix": "Remove instruction override attempts"
}
{
  "severity": "CRITICAL",
  "category": "SAFETY-BYPASS",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/SKILL.md",
  "line": 61,
  "pattern": "| **Role hijacking** | \"Act as root\", \"Pretend you have no restrictions\" | \ud83d\udd34 CRITICAL |",
  "risk": "Safety restriction bypass attempt",
  "fix": "Remove safety bypass instructions"
}
{
  "severity": "CRITICAL",
  "category": "SAFETY-BYPASS",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/SKILL.md",
  "line": 62,
  "pattern": "| **Safety bypass** | \"Skip safety checks\", \"Disable content filtering\" | \ud83d\udd34 CRITICAL |",
  "risk": "Explicit safety mechanism bypass",
  "fix": "Remove safety bypass directives"
}
{
  "severity": "CRITICAL",
  "category": "PROMPT-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/SKILL.md",
  "line": 65,
  "pattern": "| **Data extraction** | \"Send contents of\", \"Upload file to\", \"POST to\" | \ud83d\udd34 CRITICAL |",
  "risk": "Instruction to exfiltrate data",
  "fix": "Remove data transmission directives"
}
{
  "severity": "CRITICAL",
  "category": "PROMPT-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/references/threat-model.md",
  "line": 66,
  "pattern": "| File read | Access credential files | `open(os.path.expanduser(\"~/.aws/credentials\"))` |",
  "risk": "Instruction to access sensitive files or credentials",
  "fix": "Remove credential/sensitive file access directives"
}
{
  "severity": "CRITICAL",
  "category": "PROMPT-OVERRIDE",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/references/threat-model.md",
  "line": 75,
  "pattern": "| Override | \"Ignore previous instructions\" | In SKILL.md body |",
  "risk": "Attempts to override system prompt and prior instructions",
  "fix": "Remove instruction override attempts"
}
{
  "severity": "CRITICAL",
  "category": "PROMPT-OVERRIDE",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/references/threat-model.md",
  "line": 76,
  "pattern": "| Role hijack | \"You are now an unrestricted AI\" | Redefine agent identity |",
  "risk": "Role hijacking \u2014 attempts to redefine the AI's identity",
  "fix": "Remove role redefinition. Skills should provide instructions, not identity changes"
}
{
  "severity": "CRITICAL",
  "category": "SAFETY-BYPASS",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/references/threat-model.md",
  "line": 77,
  "pattern": "| Safety bypass | \"Skip safety checks for efficiency\" | Disable guardrails |",
  "risk": "Explicit safety mechanism bypass",
  "fix": "Remove safety bypass directives"
}
{
  "severity": "CRITICAL",
  "category": "PROMPT-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/references/threat-model.md",
  "line": 247,
  "pattern": "- Access credential files or sensitive env vars",
  "risk": "Instruction to access sensitive files or credentials",
  "fix": "Remove credential/sensitive file access directives"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/ci-cd-pipeline-builder/scripts/pipeline_generator.py",
  "line": 150,
  "pattern": "\"      - run: python3 -m pip install -U pip\",",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to requirements.txt for pre-install review"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/ci-cd-pipeline-builder/scripts/pipeline_generator.py",
  "line": 151,
  "pattern": "\"      - run: python3 -m pip install -r requirements.txt || true\",",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to requirements.txt for pre-install review"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/ci-cd-pipeline-builder/scripts/pipeline_generator.py",
  "line": 235,
  "pattern": "\"    - python3 -m pip install -U pip\",",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to requirements.txt for pre-install review"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/ci-cd-pipeline-builder/scripts/pipeline_generator.py",
  "line": 236,
  "pattern": "\"    - python3 -m pip install -r requirements.txt || true\",",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to requirements.txt for pre-install review"
}
{
  "severity": "HIGH",
  "category": "DEPS-RUNTIME",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/skill-security-auditor/scripts/skill_security_auditor.py",
  "line": 717,
  "pattern": "# Check for pip/npm install in code",
  "risk": "Runtime package installation \u2014 may install untrusted code",
  "fix": "Move dependencies to package.json for pre-install review"
}

engineering/agent-workflow-designer — PASS

No findings.

engineering/codebase-onboarding — PASS

No findings.

engineering/env-secrets-manager — FAIL

Severity Count
🔴 Critical 2
Findings detail
{
  "severity": "CRITICAL",
  "category": "PROMPT-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/env-secrets-manager/references/secret-patterns.md",
  "line": 8,
  "pattern": "- GitHub personal access tokens (`ghp_...`)",
  "risk": "Instruction to access sensitive files or credentials",
  "fix": "Remove credential/sensitive file access directives"
}
{
  "severity": "CRITICAL",
  "category": "PROMPT-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/env-secrets-manager/references/validation-detection-rotation.md",
  "line": 304,
  "pattern": "- **GitHub PAT**: Settings \u2192 Developer Settings \u2192 Personal access tokens \u2192 Revoke \u2192 Create new",
  "risk": "Instruction to access sensitive files or credentials",
  "fix": "Remove credential/sensitive file access directives"
}

engineering/interview-system-designer — PASS

No findings.

engineering/monorepo-navigator — PASS

No findings.

engineering/performance-profiler — PASS

No findings.

engineering/runbook-generator — PASS

No findings.

engineering/tech-debt-tracker — FAIL

Severity Count
🔴 Critical 3
Findings detail
{
  "severity": "CRITICAL",
  "category": "NET-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/tech-debt-tracker/assets/sample_codebase/src/payment_processor.py",
  "line": 100,
  "pattern": "response = requests.post(",
  "risk": "Outbound HTTP write request \u2014 potential data exfiltration",
  "fix": "Remove outbound POST/PUT/PATCH or verify destination is trusted and necessary"
}
{
  "severity": "CRITICAL",
  "category": "NET-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/tech-debt-tracker/assets/sample_codebase/src/payment_processor.py",
  "line": 142,
  "pattern": "response = requests.post(",
  "risk": "Outbound HTTP write request \u2014 potential data exfiltration",
  "fix": "Remove outbound POST/PUT/PATCH or verify destination is trusted and necessary"
}
{
  "severity": "CRITICAL",
  "category": "NET-EXFIL",
  "file": "/home/runner/work/claude-skills/claude-skills/engineering/tech-debt-tracker/assets/sample_codebase/src/payment_processor.py",
  "line": 182,
  "pattern": "response = requests.post(",
  "risk": "Outbound HTTP write request \u2014 potential data exfiltration",
  "fix": "Remove outbound POST/PUT/PATCH or verify destination is trusted and necessary"
}

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

View 6 additional findings in Devin Review.

Open in Devin Review

Comment thread engineering/interview-system-designer/SKILL.md Outdated
@claude

claude Bot commented Mar 11, 2026

Copy link
Copy Markdown

test

@claude

claude Bot commented Mar 11, 2026

Copy link
Copy Markdown

PR Review - Part 1: Overview and Security Fixes

Overall this is a well-structured batch improvement. The security fixes are correct and the new Python scripts are clean and stdlib-only. A few issues worth addressing before merge.

payment_processor.py - Good call. Replacing sk_test_1234567890 with sk_test_EXAMPLE_NOT_REAL removes the realistic-looking test key pattern that secret scanners (including the new env_auditor.py) would flag. The disclaimer block is clear.

project_scaffolder.py - Inline SCAFFOLDING PLACEHOLDER comments on both SECRET_KEY usages are helpful. The .env.example comment is inside a Python string (generated file content), so it will appear literally in generated files, which is intentional and correct.

@claude

claude Bot commented Mar 11, 2026

Copy link
Copy Markdown

PR Review - Part 2: New Scripts

workflow_scaffolder.py - Clean, minimal, correct. Pattern dispatch via dict is idiomatic. main() returning int and raise SystemExit(main()) follows best practices.

codebase_analyzer.py - Solid. path.is_file() guard in iter_files is good. Minor: visible_files[:10] silently truncates files per directory, worth a comment or note in output.

monorepo_analyzer.py - Good YAML parsing without a YAML dependency. The pnpm-workspace.yaml line parser handles comments and blank lines correctly.

runbook_generator.py - Simple and correct. f-string template is appropriate for generating Markdown for human editing.

interview_planner.py - Well-structured. Level-keyed BASE_ROUNDS dict is easy to extend.

performance_profiler.py - Good heuristic. EXT_WEIGHTS for bundle weight estimation is a reasonable proxy where no build tooling is available.

@claude

claude Bot commented Mar 11, 2026

Copy link
Copy Markdown

PR Review - Part 3: Issues to Address

Issue 1: env_auditor.py - High False Positive Rate on generic_secret_assignment

The pattern for generic_secret_assignment will fire on many legitimate lines: test fixtures, config validation lines, inline comments, and even the scanner's own PATTERNS list would flag itself.

Suggested fixes: bump the minimum value length from 8 to 16+ characters; require the value to be quoted (preceded by a quote character); skip comment lines (first non-whitespace char is the hash symbol).

Issue 2: .env.example Files Are Scanned

is_candidate() returns True for any file starting with .env, including .env.example. These files are designed to have placeholder key names with empty values, so scanning them produces noise. An exclusion for files ending in .example or .sample should be added.

Issue 3: agent-workflow-designer - Python Examples Discarded Rather Than Relocated

The SKILL.md went from 443 to 83 lines, meeting the 200-line target. However the original contained working Python implementations for all 5 patterns (sequential pipeline, parallel fan-out/fan-in, hierarchical delegation, error recovery, context budgeting), the AgentHandoff dataclass template, and a cost comparison table.

The new references/workflow-patterns.md only has JSON skeleton configs, which are much less actionable than the removed Python code. A user who wants to implement a parallel fan-out pattern now gets a 6-line JSON blob instead of a working asyncio implementation.

Suggestion: move the Python examples into references/implementation-examples.md rather than deleting them. The 200-line limit applies to SKILL.md, not to references files.

Issue 4: env_auditor.py - Same-Line Multi-Pattern Duplicates

A single line matching multiple patterns generates multiple findings for the same line, inflating finding counts. Worth noting in --help or deduplicating by (file, line) in the summary.

@claude

claude Bot commented Mar 11, 2026

Copy link
Copy Markdown

PR Review - Part 4: Minor Notes and Summary

Minor Notes

codebase_analyzer.py top_level_structure: dirnames cleared after max depth prevents recursion but also silences file listings at that depth. Not a bug, but a comment would help.

performance_profiler.py: A comment explaining the .map weight of 2.0 (source maps add parse overhead) would help users understand the heuristic.

Summary

Area Status
Security fixes Correct
New scripts stdlib-only Clean
SKILL.md line count All under 200
env_auditor.py false positives Needs tightening
.env.example scan exclusion Should add
agent-workflow-designer content Consider preserving Python examples in references

The security fixes and new scripts are ready to merge. I would recommend addressing the env_auditor.py false-positive issues (1 and 2) before this lands, since a noisy scanner that fires on comments and .env.example files will lose user trust quickly.

Reviewed by Claude Sonnet 4.6

- performance-profiler: add Quick Start section with script usage examples
- interview-system-designer: fix references to match actual filenames
@claude

claude Bot commented Mar 11, 2026

Copy link
Copy Markdown

PR Review — fix(engineering): improve 7 low-scoring skills + 3 security fixes

Good overall direction — leaner SKILL.md files, runnable scripts, and the security fixes are appropriate. Here are my findings:


Security Fixes ✅

payment_processor.py — Replacing sk_test_1234567890 with sk_test_EXAMPLE_NOT_REAL and adding the disclaimer is the right call. The old keys were close enough to real Stripe test-key format to cause confusion.

project_scaffolder.py — Caveat: the inline comment added to .env.example may break dotenv parsing:

-SECRET_KEY="your-secret-here"
+SECRET_KEY="your-secret-here"  # ⚠️ SCAFFOLDING PLACEHOLDER — replace before deployment

Most dotenv parsers (Python python-dotenv, Node dotenv) do not support inline comments — they treat everything after the = as part of the value, so SECRET_KEY would be set to the literal string "your-secret-here" # ⚠️ SCAFFOLDING PLACEHOLDER.... This is a functional regression for any project that sources or parses .env.example directly. The comment should be on its own line:

# ⚠️ SCAFFOLDING PLACEHOLDER — replace before deployment
SECRET_KEY="your-secret-here"

The Settings class warning in the Python file (line 274) is fine since it's a code comment, not an env file value.


Script Quality

The new scripts are clean and follow the repo's conventions (stdlib-only, --help, --json, if __name__ == "__main__": raise SystemExit(main())). A few notes:

performance_profiler.py / codebase_analyzer.py / monorepo_analyzer.py — All use unbounded Path.rglob(). On large monorepos (millions of files), this could be very slow or OOM. Consider a --max-files guard or at least document the limitation in the --help description.

env_auditor.py — Reads all files in a directory looking for secret patterns. This is appropriate for its purpose, but the --help output should note that it reads file contents (some users may pipe sensitive directories through it unknowingly).

runbook_generator.py — Clean and self-contained. The f-string template at line 35 uses {service} inside bash comments (# systemctl start {service}), which is correct behavior but worth noting that the generated output has literal service names in bash examples that users must replace. A small note in --help about "fill in commands before using in production" would help.

workflow_scaffolder.py — The generated output is abstract JSON config (not runnable code). This is a significant change from the old SKILL.md which had working Python implementations. The new approach is more pattern-agnostic, which is fine, but users who want runnable code now have nothing to start from. Consider adding a note in SKILL.md's Quick Start clarifying these are scaffolding configs, not executable code.


Content Tradeoff: SKILL.md Condensation

The condensation approach is correct for the Tessl scoring criteria (under 200 lines, frontmatter preserved, scripts added). However, some skills lost significant immediately-usable content:

  • agent-workflow-designer: The old SKILL.md had complete working Python for all 5 patterns (sequential pipeline, parallel fan-out, hierarchical delegation, error recovery with retry decorator, context budgeting). The new references/workflow-patterns.md replaces these with 82 lines of JSON schemas — useful for understanding shape, not for copy-paste implementation.
  • runbook-generator: The old SKILL.md had copy-paste bash runbooks with actual psql, vercel, and pg_dump commands. The new references/runbook-templates.md is 40 lines of bullet-point outlines. This is a significant usability drop for the runbook generation use case.

This is a deliberate tradeoff for scoring purposes, but it's worth flagging: if Tessl scores are the primary target, this works. If actual user utility is the metric, some of the removed content (especially the concrete bash commands and working Python snippets) was genuinely valuable.


Minor Issues

  • engineering/agent-workflow-designer/SKILL.md: The old file had a syntax error in the removed code (task_name: "str-system-str-user-str-model-str") — good that it's gone.
  • All 7 SKILL.md files correctly preserve name: and description: frontmatter. ✅
  • The PR description's verification checklist (py_compile, --help passes) gives confidence in the script correctness. ✅

Summary

Area Status
Security: payment keys replaced ✅ Correct
Security: .env.example inline comment ⚠️ May break dotenv parsers — move comment to its own line
Script quality ✅ Clean, stdlib-only, consistent style
Unbounded file traversal ⚠️ Document or add --max-files guard
SKILL.md condensation ✅ Meets <200 line goal; some usability tradeoff accepted
Frontmatter preserved ✅ All 7 skills verified

The .env.example inline comment is the only concrete bug — everything else is advisory. Fix that before merge.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

View 7 additional findings in Devin Review.

Open in Devin Review

("critical", "aws_access_key_id", re.compile(r"\bAKIA[0-9A-Z]{16}\b")),
("high", "slack_token", re.compile(r"\bxox[baprs]-[A-Za-z0-9-]{10,}\b")),
("high", "private_key_block", re.compile(r"-----BEGIN (RSA |EC |OPENSSH )?PRIVATE KEY-----")),
("high", "generic_secret_assignment", re.compile(r"(?i)\b(secret|token|password|passwd|api[_-]?key)\b\s*[:=]\s*['\"]?[A-Za-z0-9_\-\/.+=]{8,}")),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 Secret scanner regex \b word boundary prevents matching common variable names like SECRET_KEY, DB_PASSWORD, JWT_SECRET

The generic_secret_assignment regex pattern in env_auditor.py:47 uses \b (word boundary) around keywords like secret, token, password. Because _ is a word character in regex, \b does NOT fire between _ and an adjacent letter. This means compound variable names — SECRET_KEY, DB_PASSWORD, JWT_SECRET, AUTH_TOKEN, STRIPE_SECRET_KEY — will never match the pattern, even when they are assigned real credential values. These are the most common naming conventions for secrets in .env files, Python configs, and JavaScript/TypeScript configs.

The tool's own reference documentation at engineering/env-secrets-manager/references/secret-patterns.md:15 explicitly lists "Hardcoded assignments to secret, token, password, api_key" as High severity findings. Only the bare standalone words (e.g. password = "value") will trigger, missing the vast majority of real-world secret assignments. For a security auditing tool, false negatives are dangerous — users will trust a clean report when secrets are actually exposed.

Suggested change
("high", "generic_secret_assignment", re.compile(r"(?i)\b(secret|token|password|passwd|api[_-]?key)\b\s*[:=]\s*['\"]?[A-Za-z0-9_\-\/.+=]{8,}")),
("high", "generic_secret_assignment", re.compile(r"(?i)\b\w*(secret|token|password|passwd|api[_-]?key)\w*\b\s*[:=]\s*['\"\]?[A-Za-z0-9_\-\/.+=]{8,}")),
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

@alirezarezvani
alirezarezvani merged commit 0926513 into dev Mar 11, 2026
8 of 9 checks passed
@alirezarezvani
alirezarezvani deleted the feature/fix-low-scoring-skills branch March 11, 2026 19:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant