{"data":{"skill":{"slug":"ruvnet-github-multi-repo","name":"github-multi-repo","icon":"📦","repo":"https://github.com/ruvnet/claude-flow/tree/main/.claude/skills/github-multi-repo","status":"approved","author":"ruvnet","authorVersion":null,"skillstoreRevision":2},"audit":{"id":"ad81af49-2af7-441c-8a16-9d0d4813a414","skill_id":"a4685566-6e77-451a-83b6-091bac275123","version":8,"content_hash":"v3:ebdfe608f5de2b66ff37ab4af12af8ac4f5e8006:4bffcdde56dde22ccea63322360588fd718e780a34f9f476bf8bca9c748b2401:255ad69414d58018069f611ee74b6d2be5288d2cddc4fa7852518e97e71d04d4:736b696c6c732f7275766e65742f6769746875622d6d756c74692d7265706f:6c4c6d18ded5dd30efea3d5ecfcaa303","risk_level":"high","is_blocked":false,"safe_to_publish":false,"analysis_status":"ok","agent_auto_install_policy":"confirmation_required","manual_install_policy":"allowed","summary":"Most static alerts are false positives from Markdown fences, template delimiters, documentation links, and expected webhook secret access. Confirmed risks involve predictable shared temporary paths and unisolated npm execution. Broad multi-repository writes also lack explicit approval gates.","remediation":[{"issue":"Repository package and test scripts run with the agent environment.","severity":"high","suggestion":"Use isolated containers, minimal tokens, repository allowlists, and restricted environment variables. Disable lifecycle scripts when they are unnecessary."},{"issue":"Workflows reuse predictable files and directories under shared /tmp.","severity":"high","suggestion":"Create private temporary directories with mktemp, quote every path, stop after clone failures, verify ownership, and remove temporary data with traps."},{"issue":"Bulk GitHub mutations proceed without an explicit approval checkpoint.","severity":"medium","suggestion":"Add dry runs and change summaries. Require user confirmation before API writes, dependency changes, commits, pushes, or pull request creation."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":42,"line_start":30},{"file":"SKILL.md","line_end":45,"line_start":42},{"file":"SKILL.md","line_end":51,"line_start":45},{"file":"SKILL.md","line_end":54,"line_start":51},{"file":"SKILL.md","line_end":60,"line_start":54},{"file":"SKILL.md","line_end":67,"line_start":60},{"file":"SKILL.md","line_end":69,"line_start":67},{"file":"SKILL.md","line_end":74,"line_start":71},{"file":"SKILL.md","line_end":86,"line_start":78},{"file":"SKILL.md","line_end":89,"line_start":86},{"file":"SKILL.md","line_end":98,"line_start":89},{"file":"SKILL.md","line_end":102,"line_start":99},{"file":"SKILL.md","line_end":127,"line_start":118},{"file":"SKILL.md","line_end":132,"line_start":127},{"file":"SKILL.md","line_end":148,"line_start":132},{"file":"SKILL.md","line_end":153,"line_start":150},{"file":"SKILL.md","line_end":169,"line_start":157},{"file":"SKILL.md","line_end":172,"line_start":169},{"file":"SKILL.md","line_end":176,"line_start":172},{"file":"SKILL.md","line_end":180,"line_start":177},{"file":"SKILL.md","line_end":192,"line_start":184},{"file":"SKILL.md","line_end":195,"line_start":192},{"file":"SKILL.md","line_end":215,"line_start":195},{"file":"SKILL.md","line_end":228,"line_start":227},{"file":"SKILL.md","line_end":233,"line_start":228},{"file":"SKILL.md","line_end":250,"line_start":233},{"file":"SKILL.md","line_end":266,"line_start":254},{"file":"SKILL.md","line_end":269,"line_start":266},{"file":"SKILL.md","line_end":315,"line_start":269},{"file":"SKILL.md","line_end":318,"line_start":315},{"file":"SKILL.md","line_end":327,"line_start":318},{"file":"SKILL.md","line_end":328,"line_start":327},{"file":"SKILL.md","line_end":342,"line_start":337},{"file":"SKILL.md","line_end":347,"line_start":342},{"file":"SKILL.md","line_end":351,"line_start":347},{"file":"SKILL.md","line_end":358,"line_start":355},{"file":"SKILL.md","line_end":367,"line_start":364},{"file":"SKILL.md","line_end":390,"line_start":389},{"file":"SKILL.md","line_end":393,"line_start":390},{"file":"SKILL.md","line_end":412,"line_start":393},{"file":"SKILL.md","line_end":415,"line_start":412},{"file":"SKILL.md","line_end":419,"line_start":415},{"file":"SKILL.md","line_end":427,"line_start":424},{"file":"SKILL.md","line_end":441,"line_start":440},{"file":"SKILL.md","line_end":446,"line_start":441},{"file":"SKILL.md","line_end":477,"line_start":446},{"file":"SKILL.md","line_end":480,"line_start":477},{"file":"SKILL.md","line_end":497,"line_start":480},{"file":"SKILL.md","line_end":502,"line_start":497},{"file":"SKILL.md","line_end":518,"line_start":502}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":507,"line_start":507},{"file":"SKILL.md","line_end":854,"line_start":854},{"file":"SKILL.md","line_end":855,"line_start":855}]},{"factor":"filesystem","evidence":[{"file":"SKILL.md","line_end":203,"line_start":203},{"file":"SKILL.md","line_end":327,"line_start":327},{"file":"SKILL.md","line_end":77,"line_start":77},{"file":"SKILL.md","line_end":360,"line_start":360},{"file":"SKILL.md","line_end":99,"line_start":99},{"file":"SKILL.md","line_end":102,"line_start":102},{"file":"SKILL.md","line_end":103,"line_start":103},{"file":"SKILL.md","line_end":104,"line_start":104},{"file":"SKILL.md","line_end":177,"line_start":177},{"file":"SKILL.md","line_end":184,"line_start":184},{"file":"SKILL.md","line_end":368,"line_start":368},{"file":"SKILL.md","line_end":369,"line_start":369},{"file":"SKILL.md","line_end":421,"line_start":421},{"file":"SKILL.md","line_end":422,"line_start":422},{"file":"SKILL.md","line_end":423,"line_start":423},{"file":"SKILL.md","line_end":427,"line_start":427},{"file":"SKILL.md","line_end":429,"line_start":429}]},{"factor":"env_access","evidence":[{"file":"SKILL.md","line_end":508,"line_start":508},{"file":"SKILL.md","line_end":508,"line_start":508}]}],"critical_findings":[],"high_findings":[{"title":"Shell command substitution","locations":[{"file":"SKILL.md","line_end":429,"line_start":429}],"confidence":0.91,"description":"cd /tmp/$(basename $repo .json | sed 's/audit-//')","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The working directory is derived from an untrusted shared /tmp filename without validation. Directory planting can redirect later npm and git operations."},{"title":"Template literal with command substitution","locations":[{"file":"SKILL.md","line_end":118,"line_start":102}],"confidence":0.96,"description":"Bash(`cat /tmp/repos.txt | while read -r repo; do","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The Bash block clones repositories and runs npm update and npm test without isolation. Repository lifecycle and test scripts execute with the agent's credentials."},{"title":"Template literal with command substitution","locations":[{"file":"SKILL.md","line_end":440,"line_start":427}],"confidence":0.95,"description":"Bash(`for repo in /tmp/audit-*.json; do","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The Bash loop trusts shared /tmp audit files, then runs npm audit fix and npm test in derived directories. Planted files can redirect code execution."},{"title":"Temp directory access","locations":[{"file":"SKILL.md","line_end":104,"line_start":104}],"confidence":0.96,"description":"cd /tmp/$repo","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"The script enters a predictable /tmp directory without checking clone success, then runs npm commands. Directory planting can cause arbitrary local script execution."},{"title":"Temp directory access","locations":[{"file":"SKILL.md","line_end":369,"line_start":369}],"confidence":0.96,"description":"cd /tmp/$repo","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"The workflow enters a predictable /tmp directory without checking clone success, then runs npm install and tests. A planted directory can execute scripts."},{"title":"Temp directory access","locations":[{"file":"SKILL.md","line_end":422,"line_start":422}],"confidence":0.95,"description":"cd /tmp/$repo","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"The workflow enters a predictable /tmp directory without verifying the clone, then invokes npm. A planted directory can redirect subsequent execution."},{"title":"Temp directory access","locations":[{"file":"SKILL.md","line_end":427,"line_start":427}],"confidence":0.96,"description":"Bash(`for repo in /tmp/audit-*.json; do","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"The patch loop trusts every file matching a shared /tmp glob. An attacker can plant an audit file and corresponding directory to trigger npm execution."},{"title":"Temp directory access","locations":[{"file":"SKILL.md","line_end":429,"line_start":429}],"confidence":0.95,"description":"cd /tmp/$(basename $repo .json | sed 's/audit-//')","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"The patch directory is derived from a shared temporary filename without validation. Directory planting can redirect npm and git mutations."},{"title":"Unisolated execution of repository scripts","locations":[{"file":"SKILL.md","line_end":118,"line_start":102},{"file":"SKILL.md","line_end":389,"line_start":367},{"file":"SKILL.md","line_end":440,"line_start":419}],"confidence":0.97,"description":"Bulk workflows run npm update, install, audit fixes, and tests from cloned repositories. Package lifecycle or test scripts receive the agent environment and credentials.","review_kind":"security","source_category":"semantic","source_severity":"high","confidence_reasoning":"The cited workflows explicitly clone repositories and invoke npm commands without a sandbox, restricted environment, or disabled lifecycle scripts."}],"medium_findings":[{"title":"Shell command substitution","locations":[{"file":"SKILL.md","line_end":428,"line_start":428}],"confidence":0.86,"description":"if [ $(jq '.vulnerabilities | length' $repo) -gt 0 ]; then","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The jq substitution consumes an unquoted filename selected from a shared /tmp glob. A planted filename can alter audit processing and patch decisions."},{"title":"Template literal with command substitution","locations":[{"file":"SKILL.md","line_end":184,"line_start":180}],"confidence":0.91,"description":"Bash(`gh api repos/:owner/:repo/contents/claude-code-flow/CLAUDE.md \\","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The helper uploads content read from a predictable shared temporary file. Another local process can replace that content before publication."},{"title":"Temp directory access","locations":[{"file":"SKILL.md","line_end":99,"line_start":99}],"confidence":0.94,"description":"--jq '.[] | select(.name | test(\"-service$\")) | .name' > /tmp/repos.txt`)","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"The command overwrites the predictable shared path /tmp/repos.txt. A symlink or concurrent run can redirect or corrupt the repository list."},{"title":"Temp directory access","locations":[{"file":"SKILL.md","line_end":102,"line_start":102}],"confidence":0.93,"description":"Bash(`cat /tmp/repos.txt | while read -r repo; do","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"The workflow trusts repository names read from predictable /tmp/repos.txt. Another process can alter the list before cloning and mutation."},{"title":"Temp directory access","locations":[{"file":"SKILL.md","line_end":103,"line_start":103}],"confidence":0.9,"description":"gh repo clone org/$repo /tmp/$repo -- --depth=1","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"Repositories are cloned into predictable shared /tmp directories without exclusive creation. Existing directories or concurrent runs can alter workflow behavior."},{"title":"Temp directory access","locations":[{"file":"SKILL.md","line_end":177,"line_start":177}],"confidence":0.94,"description":"--jq '.content' | base64 -d > /tmp/claude-source.md`)","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"Redirection writes to predictable /tmp/claude-source.md. A symlink can redirect the write, and another process can replace the synchronized content."},{"title":"Temp directory access","locations":[{"file":"SKILL.md","line_end":184,"line_start":184}],"confidence":0.93,"description":"-f content=\"$(cat /tmp/claude-source.md | base64)\"`)","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"The GitHub update reads from predictable /tmp/claude-source.md. Local tampering can publish unauthorized documentation content."},{"title":"Temp directory access","locations":[{"file":"SKILL.md","line_end":368,"line_start":368}],"confidence":0.9,"description":"gh repo clone org/$repo /tmp/$repo -- --depth=1","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"Repositories are cloned into predictable shared /tmp directories without collision handling. A concurrent or planted directory can affect the update workflow."},{"title":"Temp directory access","locations":[{"file":"SKILL.md","line_end":421,"line_start":421}],"confidence":0.9,"description":"gh repo clone org/$repo /tmp/$repo -- --depth=1","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"Security scans clone repositories into predictable shared /tmp directories. The workflow does not prevent collisions or planted directories."},{"title":"Temp directory access","locations":[{"file":"SKILL.md","line_end":423,"line_start":423}],"confidence":0.94,"description":"npm audit --json > /tmp/audit-$repo.json","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"Audit output is written to a predictable shared /tmp filename. Symlinks, stale files, or concurrent runs can corrupt later patch decisions."},{"title":"Broad repository mutations lack approval gates","locations":[{"file":"SKILL.md","line_end":117,"line_start":110},{"file":"SKILL.md","line_end":157,"line_start":148},{"file":"SKILL.md","line_end":389,"line_start":367},{"file":"SKILL.md","line_end":440,"line_start":427}],"confidence":0.95,"description":"Examples create branches, upload files, install dependencies, push commits, and open pull requests across repository sets without an explicit review or confirmation step.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The documented flows perform write operations immediately after tests or scans. No dry run, change preview, or user approval gate is shown."}],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":863,"audit_model":"codex","audited_at":"2026-07-23T18:54:39.928+00:00","created_at":"2026-07-25T23:51:15.633722+00:00","static_findings":[{"id":"external_commands:SKILL.md:30:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":42,"severity":"medium","line_start":30},{"id":"external_commands:SKILL.md:42:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":45,"severity":"medium","line_start":42},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":51,"severity":"medium","line_start":45},{"id":"external_commands:SKILL.md:51:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":54,"severity":"medium","line_start":51},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":60,"severity":"medium","line_start":54},{"id":"external_commands:SKILL.md:60:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":67,"severity":"medium","line_start":60},{"id":"external_commands:SKILL.md:67:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":69,"severity":"medium","line_start":67},{"id":"external_commands:SKILL.md:71:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"--jq '.[] | select(.languages | keys | contains([\"TypeScript\"]))'`)","category":"external_commands","line_end":74,"severity":"medium","line_start":71},{"id":"external_commands:SKILL.md:78:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"done | jq -s '.'`)","category":"external_commands","line_end":86,"severity":"medium","line_start":78},{"id":"external_commands:SKILL.md:86:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":89,"severity":"medium","line_start":86},{"id":"external_commands:SKILL.md:89:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":98,"severity":"medium","line_start":89},{"id":"external_commands:SKILL.md:99:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"--jq '.[] | select(.name | test(\"-service$\")) | .name' > /tmp/repos.txt`)","category":"external_commands","line_end":102,"severity":"medium","line_start":99},{"id":"external_commands:SKILL.md:118:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"done`)","category":"external_commands","line_end":127,"severity":"medium","line_start":118},{"id":"external_commands:SKILL.md:127:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":132,"severity":"medium","line_start":127},{"id":"external_commands:SKILL.md:132:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":148,"severity":"medium","line_start":132},{"id":"external_commands:SKILL.md:150:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"-f sha=$(gh api repos/:owner/:repo/git/refs/heads/main --jq '.object.sha')`)","category":"external_commands","line_end":153,"severity":"medium","line_start":150},{"id":"external_commands:SKILL.md:157:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"-f content=\"$(cat aligned-package.json | base64)\"`)","category":"external_commands","line_end":169,"severity":"medium","line_start":157},{"id":"external_commands:SKILL.md:169:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":172,"severity":"medium","line_start":169},{"id":"external_commands:SKILL.md:172:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":176,"severity":"medium","line_start":172},{"id":"external_commands:SKILL.md:177:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"--jq '.content' | base64 -d > /tmp/claude-source.md`)","category":"external_commands","line_end":180,"severity":"medium","line_start":177},{"id":"external_commands:SKILL.md:184:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"-f content=\"$(cat /tmp/claude-source.md | base64)\"`)","category":"external_commands","line_end":192,"severity":"medium","line_start":184},{"id":"external_commands:SKILL.md:192:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":195,"severity":"medium","line_start":192},{"id":"external_commands:SKILL.md:195:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":215,"severity":"medium","line_start":195},{"id":"external_commands:SKILL.md:227:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- [x] Cross-package compatibility\"`)","category":"external_commands","line_end":228,"severity":"medium","line_start":227},{"id":"external_commands:SKILL.md:228:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":233,"severity":"medium","line_start":228},{"id":"external_commands:SKILL.md:233:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":250,"severity":"medium","line_start":233},{"id":"external_commands:SKILL.md:254:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"--order desc`)","category":"external_commands","line_end":266,"severity":"medium","line_start":254},{"id":"external_commands:SKILL.md:266:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":269,"severity":"medium","line_start":266},{"id":"external_commands:SKILL.md:269:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":315,"severity":"medium","line_start":269},{"id":"external_commands:SKILL.md:315:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":318,"severity":"medium","line_start":315},{"id":"external_commands:SKILL.md:318:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":327,"severity":"medium","line_start":318},{"id":"external_commands:SKILL.md:327:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"path: `${repo}/.github/workflows/integration.yml`,","category":"external_commands","line_end":328,"severity":"medium","line_start":327},{"id":"external_commands:SKILL.md:337:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- run: npm install && npm test`,","category":"external_commands","line_end":342,"severity":"medium","line_start":337},{"id":"external_commands:SKILL.md:342:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":347,"severity":"medium","line_start":342},{"id":"external_commands:SKILL.md:347:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":351,"severity":"medium","line_start":347},{"id":"external_commands:SKILL.md:355:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"--json number -q .number`))","category":"external_commands","line_end":358,"severity":"medium","line_start":355},{"id":"external_commands:SKILL.md:364:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"done`))","category":"external_commands","line_end":367,"severity":"medium","line_start":364},{"id":"external_commands:SKILL.md:389:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"done`)","category":"external_commands","line_end":390,"severity":"medium","line_start":389},{"id":"external_commands:SKILL.md:390:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":393,"severity":"medium","line_start":390},{"id":"external_commands:SKILL.md:393:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":412,"severity":"medium","line_start":393},{"id":"external_commands:SKILL.md:412:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":415,"severity":"medium","line_start":412},{"id":"external_commands:SKILL.md:415:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":419,"severity":"medium","line_start":415},{"id":"external_commands:SKILL.md:424:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"done`)","category":"external_commands","line_end":427,"severity":"medium","line_start":424},{"id":"external_commands:SKILL.md:440:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"done`)","category":"external_commands","line_end":441,"severity":"medium","line_start":440},{"id":"external_commands:SKILL.md:441:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":446,"severity":"medium","line_start":441},{"id":"external_commands:SKILL.md:446:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```yaml","category":"external_commands","line_end":477,"severity":"medium","line_start":446},{"id":"external_commands:SKILL.md:477:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":480,"severity":"medium","line_start":477},{"id":"external_commands:SKILL.md:480:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":497,"severity":"medium","line_start":480},{"id":"external_commands:SKILL.md:497:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":502,"severity":"medium","line_start":497},{"id":"external_commands:SKILL.md:502:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":518,"severity":"medium","line_start":502},{"id":"external_commands:SKILL.md:518:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":521,"severity":"medium","line_start":518},{"id":"external_commands:SKILL.md:521:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```yaml","category":"external_commands","line_end":532,"severity":"medium","line_start":521},{"id":"external_commands:SKILL.md:532:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":537,"severity":"medium","line_start":532},{"id":"external_commands:SKILL.md:537:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":548,"severity":"medium","line_start":537},{"id":"external_commands:SKILL.md:548:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":551,"severity":"medium","line_start":548},{"id":"external_commands:SKILL.md:551:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":560,"severity":"medium","line_start":551},{"id":"external_commands:SKILL.md:560:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":563,"severity":"medium","line_start":560},{"id":"external_commands:SKILL.md:563:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```javascript","category":"external_commands","line_end":574,"severity":"medium","line_start":563},{"id":"external_commands:SKILL.md:574:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":579,"severity":"medium","line_start":574},{"id":"external_commands:SKILL.md:579:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":585,"severity":"medium","line_start":579},{"id":"external_commands:SKILL.md:585:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":588,"severity":"medium","line_start":585},{"id":"external_commands:SKILL.md:588:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":595,"severity":"medium","line_start":588},{"id":"external_commands:SKILL.md:595:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":598,"severity":"medium","line_start":595},{"id":"external_commands:SKILL.md:598:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":604,"severity":"medium","line_start":598},{"id":"external_commands:SKILL.md:604:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":609,"severity":"medium","line_start":604},{"id":"external_commands:SKILL.md:609:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":636,"severity":"medium","line_start":609},{"id":"external_commands:SKILL.md:636:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":639,"severity":"medium","line_start":636},{"id":"external_commands:SKILL.md:639:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":659,"severity":"medium","line_start":639},{"id":"external_commands:SKILL.md:659:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":664,"severity":"medium","line_start":659},{"id":"external_commands:SKILL.md:664:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":669,"severity":"medium","line_start":664},{"id":"external_commands:SKILL.md:669:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":672,"severity":"medium","line_start":669},{"id":"external_commands:SKILL.md:672:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":677,"severity":"medium","line_start":672},{"id":"external_commands:SKILL.md:677:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":680,"severity":"medium","line_start":677},{"id":"external_commands:SKILL.md:680:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":685,"severity":"medium","line_start":680},{"id":"external_commands:SKILL.md:685:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":720,"severity":"medium","line_start":685},{"id":"external_commands:SKILL.md:720:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":725,"severity":"medium","line_start":720},{"id":"external_commands:SKILL.md:725:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":728,"severity":"medium","line_start":725},{"id":"external_commands:SKILL.md:728:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":733,"severity":"medium","line_start":728},{"id":"external_commands:SKILL.md:733:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":736,"severity":"medium","line_start":733},{"id":"external_commands:SKILL.md:736:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":741,"severity":"medium","line_start":736},{"id":"external_commands:SKILL.md:741:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":746,"severity":"medium","line_start":741},{"id":"external_commands:SKILL.md:746:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":751,"severity":"medium","line_start":746},{"id":"external_commands:SKILL.md:751:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":754,"severity":"medium","line_start":751},{"id":"external_commands:SKILL.md:754:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":759,"severity":"medium","line_start":754},{"id":"external_commands:SKILL.md:759:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":762,"severity":"medium","line_start":759},{"id":"external_commands:SKILL.md:762:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":767,"severity":"medium","line_start":762},{"id":"external_commands:SKILL.md:767:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":772,"severity":"medium","line_start":767},{"id":"external_commands:SKILL.md:772:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":778,"severity":"medium","line_start":772},{"id":"external_commands:SKILL.md:778:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":781,"severity":"medium","line_start":778},{"id":"external_commands:SKILL.md:781:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":787,"severity":"medium","line_start":781},{"id":"external_commands:SKILL.md:787:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":790,"severity":"medium","line_start":787},{"id":"external_commands:SKILL.md:790:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":796,"severity":"medium","line_start":790},{"id":"external_commands:SKILL.md:796:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":801,"severity":"medium","line_start":796},{"id":"external_commands:SKILL.md:801:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":807,"severity":"medium","line_start":801},{"id":"external_commands:SKILL.md:807:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":810,"severity":"medium","line_start":807},{"id":"external_commands:SKILL.md:810:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":816,"severity":"medium","line_start":810},{"id":"external_commands:SKILL.md:816:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":841,"severity":"medium","line_start":816},{"id":"external_commands:SKILL.md:841:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `github-workflow` - GitHub workflow automation","category":"external_commands","line_end":842,"severity":"medium","line_start":841},{"id":"external_commands:SKILL.md:842:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `github-pr` - Pull request management","category":"external_commands","line_end":843,"severity":"medium","line_start":842},{"id":"external_commands:SKILL.md:843:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `sparc-architect` - Architecture design","category":"external_commands","line_end":844,"severity":"medium","line_start":843},{"id":"external_commands:SKILL.md:844:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `sparc-optimizer` - Performance optimization","category":"external_commands","line_end":847,"severity":"medium","line_start":844},{"id":"external_commands:SKILL.md:847:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `/github sync-coordinator` - Cross-repo synchronization","category":"external_commands","line_end":848,"severity":"medium","line_start":847},{"id":"external_commands:SKILL.md:848:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `/github release-manager` - Coordinated releases","category":"external_commands","line_end":849,"severity":"medium","line_start":848},{"id":"external_commands:SKILL.md:849:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `/github repo-architect` - Repository optimization","category":"external_commands","line_end":850,"severity":"medium","line_start":849},{"id":"external_commands:SKILL.md:850:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `/sparc architect` - Detailed architecture design","category":"external_commands","line_end":856,"severity":"medium","line_start":850},{"id":"external_commands:SKILL.md:112:shell-command-substitution","file":"SKILL.md","pattern":"Shell command substitution","snippet":"git checkout -b update-dependencies-$(date +%Y%m%d)","category":"external_commands","line_end":112,"severity":"medium","line_start":112},{"id":"external_commands:SKILL.md:150:shell-command-substitution","file":"SKILL.md","pattern":"Shell command substitution","snippet":"-f sha=$(gh api repos/:owner/:repo/git/refs/heads/main --jq '.object.sha')`)","category":"external_commands","line_end":150,"severity":"medium","line_start":150},{"id":"external_commands:SKILL.md:157:shell-command-substitution","file":"SKILL.md","pattern":"Shell command substitution","snippet":"-f content=\"$(cat aligned-package.json | base64)\"`)","category":"external_commands","line_end":157,"severity":"medium","line_start":157},{"id":"external_commands:SKILL.md:184:shell-command-substitution","file":"SKILL.md","pattern":"Shell command substitution","snippet":"-f content=\"$(cat /tmp/claude-source.md | base64)\"`)","category":"external_commands","line_end":184,"severity":"medium","line_start":184},{"id":"external_commands:SKILL.md:351:shell-command-substitution","file":"SKILL.md","pattern":"Shell command substitution","snippet":"TRACKING_ISSUE=$(Bash(`gh issue create \\","category":"external_commands","line_end":355,"severity":"medium","line_start":351},{"id":"external_commands:SKILL.md:358:shell-command-substitution","file":"SKILL.md","pattern":"Shell command substitution","snippet":"TS_REPOS=$(Bash(`gh repo list org --limit 100 --json name | \\","category":"external_commands","line_end":364,"severity":"medium","line_start":358},{"id":"external_commands:SKILL.md:428:shell-command-substitution","file":"SKILL.md","pattern":"Shell command substitution","snippet":"if [ $(jq '.vulnerabilities | length' $repo) -gt 0 ]; then","category":"external_commands","line_end":428,"severity":"medium","line_start":428},{"id":"external_commands:SKILL.md:429:shell-command-substitution","file":"SKILL.md","pattern":"Shell command substitution","snippet":"cd /tmp/$(basename $repo .json | sed 's/audit-//')","category":"external_commands","line_end":429,"severity":"medium","line_start":429},{"id":"external_commands:SKILL.md:433:shell-command-substitution","file":"SKILL.md","pattern":"Shell command substitution","snippet":"git checkout -b security/patch-$(date +%Y%m%d)","category":"external_commands","line_end":433,"severity":"medium","line_start":433},{"id":"external_commands:SKILL.md:102:template-literal-with-command-substitution","file":"SKILL.md","pattern":"Template literal with command substitution","snippet":"Bash(`cat /tmp/repos.txt | while read -r repo; do","category":"external_commands","line_end":118,"severity":"medium","line_start":102},{"id":"external_commands:SKILL.md:148:template-literal-with-command-substitution","file":"SKILL.md","pattern":"Template literal with command substitution","snippet":"Bash(`gh api repos/:owner/:repo/git/refs \\","category":"external_commands","line_end":150,"severity":"medium","line_start":148},{"id":"external_commands:SKILL.md:153:template-literal-with-command-substitution","file":"SKILL.md","pattern":"Template literal with command substitution","snippet":"Bash(`gh api repos/:owner/:repo/contents/package.json \\","category":"external_commands","line_end":157,"severity":"medium","line_start":153},{"id":"external_commands:SKILL.md:180:template-literal-with-command-substitution","file":"SKILL.md","pattern":"Template literal with command substitution","snippet":"Bash(`gh api repos/:owner/:repo/contents/claude-code-flow/CLAUDE.md \\","category":"external_commands","line_end":184,"severity":"medium","line_start":180},{"id":"external_commands:SKILL.md:347:template-literal-with-command-substitution","file":"SKILL.md","pattern":"Template literal with command substitution","snippet":"```javascript","category":"external_commands","line_end":358,"severity":"medium","line_start":347},{"id":"external_commands:SKILL.md:427:template-literal-with-command-substitution","file":"SKILL.md","pattern":"Template literal with command substitution","snippet":"Bash(`for repo in /tmp/audit-*.json; do","category":"external_commands","line_end":440,"severity":"medium","line_start":427},{"id":"network:SKILL.md:507:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"url: 'https://swarm-coordinator.example.com',","category":"network","line_end":507,"severity":"low","line_start":507},{"id":"network:SKILL.md:854:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- Documentation: https://github.com/ruvnet/claude-flow","category":"network","line_end":854,"severity":"low","line_start":854},{"id":"network:SKILL.md:855:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- Issues: https://github.com/ruvnet/claude-flow/issues","category":"network","line_end":855,"severity":"low","line_start":855},{"id":"filesystem:SKILL.md:203:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"path: \"claude-code-flow/.claude/commands/github/github-modes.md\",","category":"filesystem","line_end":203,"severity":"medium","line_start":203},{"id":"filesystem:SKILL.md:327:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"path: `${repo}/.github/workflows/integration.yml`,","category":"filesystem","line_end":327,"severity":"medium","line_start":327},{"id":"filesystem:SKILL.md:77:standard-device-file-access","file":"SKILL.md","pattern":"Standard device file access","snippet":"--jq '.content' 2>/dev/null | base64 -d | jq '{name, dependencies}'","category":"filesystem","line_end":77,"severity":"low","line_start":77},{"id":"filesystem:SKILL.md:360:standard-device-file-access","file":"SKILL.md","pattern":"Standard device file access","snippet":"if gh api repos/org/$repo/contents/package.json 2>/dev/null | \\","category":"filesystem","line_end":360,"severity":"low","line_start":360},{"id":"filesystem:SKILL.md:99:temp-directory-access","file":"SKILL.md","pattern":"Temp directory access","snippet":"--jq '.[] | select(.name | test(\"-service$\")) | .name' > /tmp/repos.txt`)","category":"filesystem","line_end":99,"severity":"medium","line_start":99},{"id":"filesystem:SKILL.md:102:temp-directory-access","file":"SKILL.md","pattern":"Temp directory access","snippet":"Bash(`cat /tmp/repos.txt | while read -r repo; do","category":"filesystem","line_end":102,"severity":"medium","line_start":102},{"id":"filesystem:SKILL.md:103:temp-directory-access","file":"SKILL.md","pattern":"Temp directory access","snippet":"gh repo clone org/$repo /tmp/$repo -- --depth=1","category":"filesystem","line_end":103,"severity":"medium","line_start":103},{"id":"filesystem:SKILL.md:104:temp-directory-access","file":"SKILL.md","pattern":"Temp directory access","snippet":"cd /tmp/$repo","category":"filesystem","line_end":104,"severity":"medium","line_start":104},{"id":"filesystem:SKILL.md:177:temp-directory-access","file":"SKILL.md","pattern":"Temp directory access","snippet":"--jq '.content' | base64 -d > /tmp/claude-source.md`)","category":"filesystem","line_end":177,"severity":"medium","line_start":177},{"id":"filesystem:SKILL.md:184:temp-directory-access","file":"SKILL.md","pattern":"Temp directory access","snippet":"-f content=\"$(cat /tmp/claude-source.md | base64)\"`)","category":"filesystem","line_end":184,"severity":"medium","line_start":184},{"id":"filesystem:SKILL.md:368:temp-directory-access","file":"SKILL.md","pattern":"Temp directory access","snippet":"gh repo clone org/$repo /tmp/$repo -- --depth=1","category":"filesystem","line_end":368,"severity":"medium","line_start":368},{"id":"filesystem:SKILL.md:369:temp-directory-access","file":"SKILL.md","pattern":"Temp directory access","snippet":"cd /tmp/$repo","category":"filesystem","line_end":369,"severity":"medium","line_start":369},{"id":"filesystem:SKILL.md:421:temp-directory-access","file":"SKILL.md","pattern":"Temp directory access","snippet":"gh repo clone org/$repo /tmp/$repo -- --depth=1","category":"filesystem","line_end":421,"severity":"medium","line_start":421},{"id":"filesystem:SKILL.md:422:temp-directory-access","file":"SKILL.md","pattern":"Temp directory access","snippet":"cd /tmp/$repo","category":"filesystem","line_end":422,"severity":"medium","line_start":422},{"id":"filesystem:SKILL.md:423:temp-directory-access","file":"SKILL.md","pattern":"Temp directory access","snippet":"npm audit --json > /tmp/audit-$repo.json","category":"filesystem","line_end":423,"severity":"medium","line_start":423},{"id":"filesystem:SKILL.md:427:temp-directory-access","file":"SKILL.md","pattern":"Temp directory access","snippet":"Bash(`for repo in /tmp/audit-*.json; do","category":"filesystem","line_end":427,"severity":"medium","line_start":427},{"id":"filesystem:SKILL.md:429:temp-directory-access","file":"SKILL.md","pattern":"Temp directory access","snippet":"cd /tmp/$(basename $repo .json | sed 's/audit-//')","category":"filesystem","line_end":429,"severity":"medium","line_start":429},{"id":"env_access:SKILL.md:508:environment-variable-access-dot-notation","file":"SKILL.md","pattern":"Environment variable access (dot notation)","snippet":"secret: process.env.WEBHOOK_SECRET","category":"env_access","line_end":508,"severity":"low","line_start":508},{"id":"env_access:SKILL.md:508:environment-variable-object","file":"SKILL.md","pattern":"Environment variable object","snippet":"secret: process.env.WEBHOOK_SECRET","category":"env_access","line_end":508,"severity":"low","line_start":508},{"id":"sensitive:SKILL.md:508:environment-file-access","file":"SKILL.md","pattern":"Environment file access","snippet":"secret: process.env.WEBHOOK_SECRET","category":"sensitive","line_end":508,"severity":"high","line_start":508},{"id":"blocker:SKILL.md:562:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"### 3. Hybrid Approach","category":"blocker","line_end":562,"severity":"low","line_start":562},{"id":"blocker:SKILL.md:674:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"--format mermaid \\","category":"blocker","line_end":674,"severity":"low","line_start":674}],"finding_verdicts":[{"id":"external_commands:SKILL.md:30:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:42:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:51:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:54:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:60:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:67:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:71:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:78:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:86:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:89:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:99:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:118:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:127:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:132:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:150:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:157:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:169:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:172:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:177:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:184:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:192:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:195:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:227:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:228:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:233:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:254:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:266:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:269:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:315:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:318:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:327:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:337:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:342:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:347:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:355:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:364:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:389:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:390:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:393:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:412:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:415:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:424:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:440:ruby-shell-backtick-execution","reason":"The backtick is a JavaScript-style template delimiter in a documented Bash helper example. It is not Ruby or shell backtick command substitution.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:441:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:446:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:477:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:480:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:497:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:502:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:518:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:521:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:532:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:537:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:548:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:551:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:560:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:563:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:574:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:579:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:585:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:588:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:595:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:598:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:604:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:609:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:636:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:639:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:659:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:664:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:669:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:672:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:677:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:680:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:685:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:720:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:725:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:728:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:733:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:736:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:741:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:746:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:751:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:754:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:759:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:762:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:767:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:772:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:778:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:781:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:787:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:790:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:796:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:801:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:807:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:810:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:816:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:841:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:842:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:843:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:844:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:847:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:848:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:849:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:850:ruby-shell-backtick-execution","reason":"The detected backticks are Markdown code fences or inline-code markers. They are documentation syntax, not Ruby or shell backtick execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:112:shell-command-substitution","reason":"The substitution only formats the current date for a branch name. It contains no external or user-controlled input.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:150:shell-command-substitution","reason":"The nested command reads a commit SHA from a fixed GitHub API path. Git commit hashes cannot inject shell syntax.","verdict":"false_positive","confidence":0.95},{"id":"external_commands:SKILL.md:157:shell-command-substitution","reason":"The substitution base64-encodes a fixed local filename and remains quoted as one API argument. No untrusted shell input is introduced.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:184:shell-command-substitution","reason":"The substitution reads and encodes a fixed filename without constructing a command from its contents. The separate predictable temporary-file risk is confirmed.","verdict":"false_positive","confidence":0.91},{"id":"external_commands:SKILL.md:351:shell-command-substitution","reason":"This documented orchestration pseudocode captures the numeric result of a fixed gh issue command. It does not interpolate untrusted data into the command.","verdict":"false_positive","confidence":0.94},{"id":"external_commands:SKILL.md:358:shell-command-substitution","reason":"This documented Bash helper captures repository names returned by GitHub. GitHub repository naming rules exclude shell operators.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:428:shell-command-substitution","reason":"The jq substitution consumes an unquoted filename selected from a shared /tmp glob. A planted filename can alter audit processing and patch decisions.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:429:shell-command-substitution","reason":"The working directory is derived from an untrusted shared /tmp filename without validation. Directory planting can redirect later npm and git operations.","verdict":"confirmed","severity":"high","confidence":0.91},{"id":"external_commands:SKILL.md:433:shell-command-substitution","reason":"The substitution only adds the current date to a fixed branch prefix. It does not consume user-controlled data.","verdict":"false_positive","confidence":0.98},{"id":"external_commands:SKILL.md:102:template-literal-with-command-substitution","reason":"The Bash block clones repositories and runs npm update and npm test without isolation. Repository lifecycle and test scripts execute with the agent's credentials.","verdict":"confirmed","severity":"high","confidence":0.96},{"id":"external_commands:SKILL.md:148:template-literal-with-command-substitution","reason":"The helper calls fixed GitHub API endpoints to create a synchronization branch. No untrusted value is assembled into shell syntax.","verdict":"false_positive","confidence":0.91},{"id":"external_commands:SKILL.md:153:template-literal-with-command-substitution","reason":"The helper uploads a fixed local package file to the selected repository. Its command structure does not expose a shell-injection path.","verdict":"false_positive","confidence":0.9},{"id":"external_commands:SKILL.md:180:template-literal-with-command-substitution","reason":"The helper uploads content read from a predictable shared temporary file. Another local process can replace that content before publication.","verdict":"confirmed","severity":"medium","confidence":0.91},{"id":"external_commands:SKILL.md:347:template-literal-with-command-substitution","reason":"The reported snippet begins with a Markdown JavaScript fence. The orchestration example uses a Bash helper, not an executable JavaScript template substitution.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:427:template-literal-with-command-substitution","reason":"The Bash loop trusts shared /tmp audit files, then runs npm audit fix and npm test in derived directories. Planted files can redirect code execution.","verdict":"confirmed","severity":"high","confidence":0.95},{"id":"network:SKILL.md:507:hardcoded-url","reason":"The URL uses the reserved example.com domain as a webhook configuration example. It is not a live destination or an exfiltration endpoint.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:854:hardcoded-url","reason":"This is a visible documentation or issue-tracker link for the named upstream project. The skill does not send data to it.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:855:hardcoded-url","reason":"This is a visible documentation or issue-tracker link for the named upstream project. The skill does not send data to it.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:203:hidden-file-access","reason":"The path targets repository configuration under .claude or .github. It does not access local hidden credentials or user secrets.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:SKILL.md:327:hidden-file-access","reason":"The path targets repository configuration under .claude or .github. It does not access local hidden credentials or user secrets.","verdict":"false_positive","confidence":0.98},{"id":"filesystem:SKILL.md:77:standard-device-file-access","reason":"The command redirects expected lookup errors to /dev/null. It neither reads a device nor writes sensitive data there.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:360:standard-device-file-access","reason":"The command redirects expected lookup errors to /dev/null. It neither reads a device nor writes sensitive data there.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:SKILL.md:99:temp-directory-access","reason":"The command overwrites the predictable shared path /tmp/repos.txt. A symlink or concurrent run can redirect or corrupt the repository list.","verdict":"confirmed","severity":"medium","confidence":0.94},{"id":"filesystem:SKILL.md:102:temp-directory-access","reason":"The workflow trusts repository names read from predictable /tmp/repos.txt. Another process can alter the list before cloning and mutation.","verdict":"confirmed","severity":"medium","confidence":0.93},{"id":"filesystem:SKILL.md:103:temp-directory-access","reason":"Repositories are cloned into predictable shared /tmp directories without exclusive creation. Existing directories or concurrent runs can alter workflow behavior.","verdict":"confirmed","severity":"medium","confidence":0.9},{"id":"filesystem:SKILL.md:104:temp-directory-access","reason":"The script enters a predictable /tmp directory without checking clone success, then runs npm commands. Directory planting can cause arbitrary local script execution.","verdict":"confirmed","severity":"high","confidence":0.96},{"id":"filesystem:SKILL.md:177:temp-directory-access","reason":"Redirection writes to predictable /tmp/claude-source.md. A symlink can redirect the write, and another process can replace the synchronized content.","verdict":"confirmed","severity":"medium","confidence":0.94},{"id":"filesystem:SKILL.md:184:temp-directory-access","reason":"The GitHub update reads from predictable /tmp/claude-source.md. Local tampering can publish unauthorized documentation content.","verdict":"confirmed","severity":"medium","confidence":0.93},{"id":"filesystem:SKILL.md:368:temp-directory-access","reason":"Repositories are cloned into predictable shared /tmp directories without collision handling. A concurrent or planted directory can affect the update workflow.","verdict":"confirmed","severity":"medium","confidence":0.9},{"id":"filesystem:SKILL.md:369:temp-directory-access","reason":"The workflow enters a predictable /tmp directory without checking clone success, then runs npm install and tests. A planted directory can execute scripts.","verdict":"confirmed","severity":"high","confidence":0.96},{"id":"filesystem:SKILL.md:421:temp-directory-access","reason":"Security scans clone repositories into predictable shared /tmp directories. The workflow does not prevent collisions or planted directories.","verdict":"confirmed","severity":"medium","confidence":0.9},{"id":"filesystem:SKILL.md:422:temp-directory-access","reason":"The workflow enters a predictable /tmp directory without verifying the clone, then invokes npm. A planted directory can redirect subsequent execution.","verdict":"confirmed","severity":"high","confidence":0.95},{"id":"filesystem:SKILL.md:423:temp-directory-access","reason":"Audit output is written to a predictable shared /tmp filename. Symlinks, stale files, or concurrent runs can corrupt later patch decisions.","verdict":"confirmed","severity":"medium","confidence":0.94},{"id":"filesystem:SKILL.md:427:temp-directory-access","reason":"The patch loop trusts every file matching a shared /tmp glob. An attacker can plant an audit file and corresponding directory to trigger npm execution.","verdict":"confirmed","severity":"high","confidence":0.96},{"id":"filesystem:SKILL.md:429:temp-directory-access","reason":"The patch directory is derived from a shared temporary filename without validation. Directory planting can redirect npm and git mutations.","verdict":"confirmed","severity":"high","confidence":0.95},{"id":"env_access:SKILL.md:508:environment-variable-access-dot-notation","reason":"The example reads one named webhook secret for authentication. It does not enumerate the environment or transmit the secret as event data.","verdict":"false_positive","confidence":0.98},{"id":"env_access:SKILL.md:508:environment-variable-object","reason":"The example reads one named webhook secret for authentication. It does not enumerate the environment or transmit the secret as event data.","verdict":"false_positive","confidence":0.98},{"id":"sensitive:SKILL.md:508:environment-file-access","reason":"The code reads process.env.WEBHOOK_SECRET and never accesses an environment file. The secret is used as webhook authentication configuration.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:562:system-reconnaissance","reason":"The cited line is a synchronization heading or a Mermaid output option. It performs no host, account, network, or process reconnaissance.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:674:system-reconnaissance","reason":"The cited line is a synchronization heading or a Mermaid output option. It performs no host, account, network, or process reconnaissance.","verdict":"false_positive","confidence":0.99}],"semantic_findings":[{"title":"Unisolated execution of repository scripts","severity":"high","locations":[{"file":"SKILL.md","line_end":118,"line_start":102},{"file":"SKILL.md","line_end":389,"line_start":367},{"file":"SKILL.md","line_end":440,"line_start":419}],"confidence":0.97,"description":"Bulk workflows run npm update, install, audit fixes, and tests from cloned repositories. Package lifecycle or test scripts receive the agent environment and credentials.","confidence_reasoning":"The cited workflows explicitly clone repositories and invoke npm commands without a sandbox, restricted environment, or disabled lifecycle scripts."},{"title":"Broad repository mutations lack approval gates","severity":"medium","locations":[{"file":"SKILL.md","line_end":117,"line_start":110},{"file":"SKILL.md","line_end":157,"line_start":148},{"file":"SKILL.md","line_end":389,"line_start":367},{"file":"SKILL.md","line_end":440,"line_start":427}],"confidence":0.95,"description":"Examples create branches, upload files, install dependencies, push commits, and open pull requests across repository sets without an explicit review or confirmation step.","confidence_reasoning":"The documented flows perform write operations immediately after tests or scans. No dry run, change preview, or user approval gate is shown."}],"subject_marketplace_commit_sha":"ebdfe608f5de2b66ff37ab4af12af8ac4f5e8006","subject_content_hash":"4bffcdde56dde22ccea63322360588fd718e780a34f9f476bf8bca9c748b2401","subject_tree_hash":"255ad69414d58018069f611ee74b6d2be5288d2cddc4fa7852518e97e71d04d4","subject_plugin_path":"skills/ruvnet/github-multi-repo","audit_payload_hash":"6c4c6d18ded5dd30efea3d5ecfcaa303","confirmed_risk_level":"high","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"ebdfe608f5de2b66ff37ab4af12af8ac4f5e8006","contentHash":"4bffcdde56dde22ccea63322360588fd718e780a34f9f476bf8bca9c748b2401","treeHash":"255ad69414d58018069f611ee74b6d2be5288d2cddc4fa7852518e97e71d04d4","pluginPath":"skills/ruvnet/github-multi-repo","auditPayloadHash":"6c4c6d18ded5dd30efea3d5ecfcaa303"},"scannerVersion":"3.0.0","policyVersion":"skillstore-security-audit-policy-v1"},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"issued","url":"/api/skills/ruvnet-github-multi-repo/audits/8/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"high","confirmedFindingCount":2,"capabilityReviewCount":18,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"confirmation_required","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}