{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-bea357a6497a2d5d", "name": "Agent authority lacks a verifier contract: CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5f862ce0f9e35589", "name": "Agent authority lacks a verifier contract: .claude/commands/add-portal.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/add-portal.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3d519589580cc404", "name": "Agent authority lacks a verifier contract: .claude/commands/reset.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/reset.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a6cb9c4cb1e1183", "name": "Agent authority lacks a verifier contract: .claude/commands/add-template.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/add-template.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-da8a97673452eb53", "name": "Agent authority lacks a verifier contract: .claude/commands/outcome.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/outcome.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b81fac6acf6cd4ad", "name": "Agent authority lacks a verifier contract: .claude/skills/job-application-assistant/06-cover-letter-templates.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/job-application-assistant/06-cover-letter-templates.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fa03d562d1addc85", "name": "SkillSpector EA2 (excessive-agency) in .claude/skills/job-application-assistant/05-cv-templates.md", "shortDescription": {"text": "SkillSpector EA2 (excessive-agency) in .claude/skills/job-application-assistant/05-cv-templates.md"}, "fullDescription": {"text": "without checking\n\nSkill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.\n\nSkill: job-application-assistant\nRule: EA2  Category: excessive-agency\nSeverity: MEDIUM  Confidence: 0.75\n\nRemediation: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 0.75}}, {"id": "scanner-6597a45e6454c722", "name": "SkillSpector P2 (prompt-injection) in .claude/skills/job-application-assistant/05-cv-templates.md", "shortDescription": {"text": "SkillSpector P2 (prompt-injection) in .claude/skills/job-application-assistant/05-cv-templates.md"}, "fullDescription": {"text": "<!-- SETUP: Profile statements and section ordering are personalized by running /setup -->\n\n## Template: LaTeX moderncv (Banking Style)\n\nAll CVs use the moderncv LaTeX package with the \"banking\" style\n\nHidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.\n\nSkill: job-application-assistant\nRule: P2  Category: prompt-injection\nSeverity: HIGH  Confidence: 0.70\n\nRemediation: Audit all comments and invisible characters. Remove any instructions that direct the agent to perform unauthorized actions. Use plain, reviewable content."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.7}}, {"id": "scanner-63f6009ff2f04144", "name": "SkillSpector P2 (prompt-injection) in .claude/skills/job-scraper/search-queries.md", "shortDescription": {"text": "SkillSpector P2 (prompt-injection) in .claude/skills/job-scraper/search-queries.md"}, "fullDescription": {"text": "<!-- SETUP: Customize these queries based on your skills, target roles, and location -->\n\nHidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.\n\nSkill: scrape\nRule: P2  Category: prompt-injection\nSeverity: HIGH  Confidence: 0.70\n\nRemediation: Audit all comments and invisible characters. Remove any instructions that direct the agent to perform unauthorized actions. Use plain, reviewable content."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.7}}, {"id": "scanner-0743383c07a7a6af", "name": "SkillSpector P2 (prompt-injection) in .claude/skills/upskill/SKILL.md", "shortDescription": {"text": "SkillSpector P2 (prompt-injection) in .claude/skills/upskill/SKILL.md"}, "fullDescription": {"text": "<!-- Aggregate mode only. Omit section entirely in targeted mode or if no previous report exists. -->\n\nHidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.\n\nSkill: upskill\nRule: P2  Category: prompt-injection\nSeverity: HIGH  Confidence: 0.70\n\nRemediation: Audit all comments and invisible characters. Remove any instructions that direct the agent to perform unauthorized actions. Use plain, reviewable content."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 0.7}}, {"id": "scanner-e637c415447867e4", "name": "Run SkillSpector's LLM-backed analysis in your own pipeline", "shortDescription": {"text": "Run SkillSpector's LLM-backed analysis in your own pipeline"}, "fullDescription": {"text": "Repobility ran SkillSpector's static rules server-side. The deeper LLM-backed analyzers \u2014 tool-poisoning (TP*), semantic security discovery (SSD*), developer-intent mismatch (SDI*) \u2014 are meant to run on YOUR machine with YOUR model; repobility never sends your code to an LLM. Recipe:\n\n# 1. Install SkillSpector in your own isolated env\npipx install \"skillspector @ git+https://github.com/NVIDIA/SkillSpector.git\"\n\n# 2. Point it at YOUR LLM pipeline (pick one) - your code stays on your machine\nexport SKILLSPECTOR_PROVIDER=anthropic && export ANTHROPIC_API_KEY=sk-ant-...\n# export SKILLSPECTOR_PROVIDER=openai   && export OPENAI_API_KEY=sk-...\n# export SKILLSPECTOR_PROVIDER=openai OPENAI_API_KEY=ollama OPENAI_BASE_URL=http://localhost:11434/v1 SKILLSPECTOR_MODEL=llama3.1:8b\n# export SKILLSPECTOR_PROVIDER=nv_build && export NVIDIA_INFERENCE_KEY=nvapi-...\n\n# 3. Run the LLM-backed scan per skill (omit --no-llm to enable the LLM analyzers)\nskillspector scan .claude/skills/job-application-assistan"}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 69 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76f99eafbe7f4fdf", "name": "Network/subprocess call without timeout or try/except \u2014 tools/check_framework_version.py:26", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/check_framework_version.py:26"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 0.85}}, {"id": "scanner-375ff3312dc2c2d7", "name": "Network/subprocess call without timeout or try/except \u2014 tools/check_upstream_updates.py:36", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/check_upstream_updates.py:36"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 0.85}}]}}, "automationDetails": {"id": "repobility/30757"}, "properties": {"repository": "MadsLorentzen/ai-job-search", "repoUrl": "https://github.com/MadsLorentzen/ai-job-search", "branch": "main"}, "results": [{"ruleId": "scanner-bea357a6497a2d5d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "properties": {"repobilityId": "aae72df3934829ac", "scanner": "scanner-primary", "fingerprint": "bea357a6497a2d5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5f862ce0f9e35589", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/add-portal.md"}, "properties": {"repobilityId": "c9e3ed673a41b908", "scanner": "scanner-primary", "fingerprint": "5f862ce0f9e35589", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/add-portal.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3d519589580cc404", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/reset.md"}, "properties": {"repobilityId": "97e9cd5c5da76b04", "scanner": "scanner-primary", "fingerprint": "3d519589580cc404", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/reset.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a6cb9c4cb1e1183", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/add-template.md"}, "properties": {"repobilityId": "70a53f9a85e2e4ce", "scanner": "scanner-primary", "fingerprint": "4a6cb9c4cb1e1183", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/add-template.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-da8a97673452eb53", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/outcome.md"}, "properties": {"repobilityId": "82073224751fadd4", "scanner": "scanner-primary", "fingerprint": "da8a97673452eb53", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/outcome.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b81fac6acf6cd4ad", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/job-application-assistant/06-cover-letter-templates.md"}, "properties": {"repobilityId": "c45b2c1cfa1438d5", "scanner": "scanner-primary", "fingerprint": "b81fac6acf6cd4ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/job-application-assistant/06-cover-letter-templates.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fa03d562d1addc85", "level": "warning", "message": {"text": "SkillSpector EA2 (excessive-agency) in .claude/skills/job-application-assistant/05-cv-templates.md"}, "properties": {"repobilityId": "703e830f0c122158", "scanner": "scanner-primary", "fingerprint": "fa03d562d1addc85", "layer": "security", "severity": "medium", "confidence": 0.75, "tags": ["skillspector", "mcp-skill", "excessive-agency", "EA2"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/job-application-assistant/05-cv-templates.md"}, "region": {"startLine": 254}}}]}, {"ruleId": "scanner-6597a45e6454c722", "level": "error", "message": {"text": "SkillSpector P2 (prompt-injection) in .claude/skills/job-application-assistant/05-cv-templates.md"}, "properties": {"repobilityId": "780ffcc5d7f4f5a9", "scanner": "scanner-primary", "fingerprint": "6597a45e6454c722", "layer": "security", "severity": "high", "confidence": 0.7, "tags": ["skillspector", "mcp-skill", "prompt-injection", "P2"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/job-application-assistant/05-cv-templates.md"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-63f6009ff2f04144", "level": "error", "message": {"text": "SkillSpector P2 (prompt-injection) in .claude/skills/job-scraper/search-queries.md"}, "properties": {"repobilityId": "46afa7cf556cbb68", "scanner": "scanner-primary", "fingerprint": "63f6009ff2f04144", "layer": "security", "severity": "high", "confidence": 0.7, "tags": ["skillspector", "mcp-skill", "prompt-injection", "P2"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/job-scraper/search-queries.md"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-0743383c07a7a6af", "level": "error", "message": {"text": "SkillSpector P2 (prompt-injection) in .claude/skills/upskill/SKILL.md"}, "properties": {"repobilityId": "202d68f9f86cd337", "scanner": "scanner-primary", "fingerprint": "0743383c07a7a6af", "layer": "security", "severity": "high", "confidence": 0.7, "tags": ["skillspector", "mcp-skill", "prompt-injection", "P2"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/upskill/SKILL.md"}, "region": {"startLine": 181}}}]}, {"ruleId": "scanner-e637c415447867e4", "level": "none", "message": {"text": "Run SkillSpector's LLM-backed analysis in your own pipeline"}, "properties": {"repobilityId": "1936f198ff5212bf", "scanner": "scanner-primary", "fingerprint": "e637c415447867e4", "layer": "security", "severity": "info", "confidence": 1.0, "tags": ["skillspector", "mcp-skill", "llm-advisory", "ai-coder"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "c967bd76e5ae535f", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-76f99eafbe7f4fdf", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/check_framework_version.py:26"}, "properties": {"repobilityId": "60a216912573a7fd", "scanner": "scanner-primary", "fingerprint": "76f99eafbe7f4fdf", "layer": "quality", "severity": "medium", "confidence": 0.85, "tags": ["integrity", "fragile-runtime", "robustness"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/check_framework_version.py"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-375ff3312dc2c2d7", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/check_upstream_updates.py:36"}, "properties": {"repobilityId": "8e892a1411bb3118", "scanner": "scanner-primary", "fingerprint": "375ff3312dc2c2d7", "layer": "quality", "severity": "medium", "confidence": 0.85, "tags": ["integrity", "fragile-runtime", "robustness"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/check_upstream_updates.py"}, "region": {"startLine": 36}}}]}]}]}