cisco-ai-skill-scanner 1.0.0__py3-none-any.whl → 1.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. {cisco_ai_skill_scanner-1.0.0.dist-info → cisco_ai_skill_scanner-1.0.1.dist-info}/METADATA +13 -13
  2. cisco_ai_skill_scanner-1.0.1.dist-info/RECORD +100 -0
  3. cisco_ai_skill_scanner-1.0.1.dist-info/entry_points.txt +4 -0
  4. {skillanalyzer → skill_scanner}/__init__.py +8 -4
  5. {skillanalyzer → skill_scanner}/_version.py +2 -2
  6. {skillanalyzer → skill_scanner}/api/__init__.py +1 -1
  7. {skillanalyzer → skill_scanner}/api/api.py +4 -4
  8. {skillanalyzer → skill_scanner}/api/api_cli.py +7 -7
  9. {skillanalyzer → skill_scanner}/api/api_server.py +6 -6
  10. {skillanalyzer → skill_scanner}/api/router.py +3 -3
  11. {skillanalyzer → skill_scanner}/cli/__init__.py +1 -1
  12. {skillanalyzer → skill_scanner}/cli/cli.py +11 -11
  13. {skillanalyzer → skill_scanner}/config/__init__.py +3 -3
  14. {skillanalyzer → skill_scanner}/config/config.py +2 -2
  15. {skillanalyzer → skill_scanner}/config/config_parser.py +9 -9
  16. {skillanalyzer → skill_scanner}/config/constants.py +2 -2
  17. {skillanalyzer → skill_scanner}/core/__init__.py +1 -1
  18. {skillanalyzer → skill_scanner}/core/analyzers/__init__.py +3 -3
  19. {skillanalyzer → skill_scanner}/core/analyzers/aidefense_analyzer.py +3 -3
  20. {skillanalyzer → skill_scanner}/core/analyzers/behavioral/__init__.py +1 -1
  21. {skillanalyzer → skill_scanner}/core/analyzers/behavioral/alignment/alignment_llm_client.py +1 -1
  22. {skillanalyzer → skill_scanner}/core/analyzers/behavioral/alignment/alignment_prompt_builder.py +2 -2
  23. {skillanalyzer → skill_scanner}/core/analyzers/behavioral_analyzer.py +1 -1
  24. skillanalyzer/core/analyzers/cross_skill_analyzer.py → skill_scanner/core/analyzers/cross_skill_scanner.py +5 -5
  25. {skillanalyzer → skill_scanner}/core/analyzers/llm_analyzer.py +1 -1
  26. {skillanalyzer → skill_scanner}/core/analyzers/llm_prompt_builder.py +2 -2
  27. {skillanalyzer → skill_scanner}/core/analyzers/meta_analyzer.py +2 -2
  28. {skillanalyzer → skill_scanner}/core/analyzers/static.py +8 -8
  29. {skillanalyzer → skill_scanner}/core/analyzers/trigger_analyzer.py +2 -2
  30. {skillanalyzer → skill_scanner}/core/exceptions.py +10 -10
  31. {skillanalyzer → skill_scanner}/core/loader.py +4 -4
  32. {skillanalyzer → skill_scanner}/core/models.py +6 -6
  33. {skillanalyzer → skill_scanner}/core/reporters/markdown_reporter.py +2 -2
  34. {skillanalyzer → skill_scanner}/core/reporters/sarif_reporter.py +2 -2
  35. {skillanalyzer → skill_scanner}/core/reporters/table_reporter.py +2 -2
  36. {skillanalyzer → skill_scanner}/core/rules/yara_scanner.py +1 -1
  37. {skillanalyzer → skill_scanner}/core/scanner.py +2 -2
  38. {skillanalyzer → skill_scanner}/core/static_analysis/context_extractor.py +2 -2
  39. {skillanalyzer → skill_scanner}/core/static_analysis/dataflow/__init__.py +1 -1
  40. {skillanalyzer → skill_scanner}/core/static_analysis/interprocedural/call_graph_analyzer.py +2 -2
  41. {skillanalyzer → skill_scanner}/core/static_analysis/parser/python_parser.py +5 -5
  42. {skillanalyzer → skill_scanner}/data/__init__.py +1 -1
  43. {skillanalyzer → skill_scanner}/data/prompts/boilerplate_protection_rule_prompt.md +5 -5
  44. {skillanalyzer → skill_scanner}/data/prompts/code_alignment_threat_analysis_prompt.md +25 -25
  45. {skillanalyzer → skill_scanner}/data/prompts/skill_meta_analysis_prompt.md +6 -6
  46. {skillanalyzer → skill_scanner}/data/prompts/skill_threat_analysis_prompt.md +11 -11
  47. {skillanalyzer → skill_scanner}/data/prompts/unified_response_schema.md +1 -1
  48. {skillanalyzer → skill_scanner}/data/rules/signatures.yaml +2 -2
  49. {skillanalyzer → skill_scanner}/data/yara_rules/autonomy_abuse.yara +1 -1
  50. {skillanalyzer → skill_scanner}/data/yara_rules/code_execution.yara +2 -2
  51. {skillanalyzer → skill_scanner}/data/yara_rules/command_injection.yara +2 -2
  52. {skillanalyzer → skill_scanner}/data/yara_rules/skill_discovery_abuse.yara +1 -1
  53. {skillanalyzer → skill_scanner}/data/yara_rules/tool_chaining_abuse.yara +1 -1
  54. {skillanalyzer → skill_scanner}/data/yara_rules/transitive_trust_abuse.yara +1 -1
  55. {skillanalyzer → skill_scanner}/hooks/__init__.py +1 -1
  56. {skillanalyzer → skill_scanner}/hooks/pre_commit.py +16 -16
  57. {skillanalyzer → skill_scanner}/threats/__init__.py +1 -1
  58. {skillanalyzer → skill_scanner}/utils/__init__.py +1 -1
  59. {skillanalyzer → skill_scanner}/utils/command_utils.py +1 -1
  60. {skillanalyzer → skill_scanner}/utils/di_container.py +1 -1
  61. {skillanalyzer → skill_scanner}/utils/logging_config.py +7 -7
  62. cisco_ai_skill_scanner-1.0.0.dist-info/RECORD +0 -100
  63. cisco_ai_skill_scanner-1.0.0.dist-info/entry_points.txt +0 -4
  64. {cisco_ai_skill_scanner-1.0.0.dist-info → cisco_ai_skill_scanner-1.0.1.dist-info}/WHEEL +0 -0
  65. {cisco_ai_skill_scanner-1.0.0.dist-info → cisco_ai_skill_scanner-1.0.1.dist-info}/licenses/LICENSE +0 -0
  66. {skillanalyzer → skill_scanner}/core/analyzers/base.py +0 -0
  67. {skillanalyzer → skill_scanner}/core/analyzers/behavioral/alignment/__init__.py +0 -0
  68. {skillanalyzer → skill_scanner}/core/analyzers/behavioral/alignment/alignment_orchestrator.py +0 -0
  69. {skillanalyzer → skill_scanner}/core/analyzers/behavioral/alignment/alignment_response_validator.py +0 -0
  70. {skillanalyzer → skill_scanner}/core/analyzers/behavioral/alignment/threat_vulnerability_classifier.py +0 -0
  71. {skillanalyzer → skill_scanner}/core/analyzers/llm_provider_config.py +0 -0
  72. {skillanalyzer → skill_scanner}/core/analyzers/llm_request_handler.py +0 -0
  73. {skillanalyzer → skill_scanner}/core/analyzers/llm_response_parser.py +0 -0
  74. {skillanalyzer → skill_scanner}/core/analyzers/virustotal_analyzer.py +0 -0
  75. {skillanalyzer → skill_scanner}/core/reporters/__init__.py +0 -0
  76. {skillanalyzer → skill_scanner}/core/reporters/json_reporter.py +0 -0
  77. {skillanalyzer → skill_scanner}/core/rules/__init__.py +0 -0
  78. {skillanalyzer → skill_scanner}/core/rules/patterns.py +0 -0
  79. {skillanalyzer → skill_scanner}/core/static_analysis/__init__.py +0 -0
  80. {skillanalyzer → skill_scanner}/core/static_analysis/cfg/__init__.py +0 -0
  81. {skillanalyzer → skill_scanner}/core/static_analysis/cfg/builder.py +0 -0
  82. {skillanalyzer → skill_scanner}/core/static_analysis/dataflow/forward_analysis.py +0 -0
  83. {skillanalyzer → skill_scanner}/core/static_analysis/interprocedural/__init__.py +0 -0
  84. {skillanalyzer → skill_scanner}/core/static_analysis/interprocedural/cross_file_analyzer.py +0 -0
  85. {skillanalyzer → skill_scanner}/core/static_analysis/parser/__init__.py +0 -0
  86. {skillanalyzer → skill_scanner}/core/static_analysis/semantic/__init__.py +0 -0
  87. {skillanalyzer → skill_scanner}/core/static_analysis/semantic/name_resolver.py +0 -0
  88. {skillanalyzer → skill_scanner}/core/static_analysis/semantic/type_analyzer.py +0 -0
  89. {skillanalyzer → skill_scanner}/core/static_analysis/taint/__init__.py +0 -0
  90. {skillanalyzer → skill_scanner}/core/static_analysis/taint/tracker.py +0 -0
  91. {skillanalyzer → skill_scanner}/core/static_analysis/types/__init__.py +0 -0
  92. {skillanalyzer → skill_scanner}/data/prompts/llm_response_schema.json +0 -0
  93. {skillanalyzer → skill_scanner}/data/yara_rules/coercive_injection.yara +0 -0
  94. {skillanalyzer → skill_scanner}/data/yara_rules/credential_harvesting.yara +0 -0
  95. {skillanalyzer → skill_scanner}/data/yara_rules/prompt_injection.yara +0 -0
  96. {skillanalyzer → skill_scanner}/data/yara_rules/script_injection.yara +0 -0
  97. {skillanalyzer → skill_scanner}/data/yara_rules/sql_injection.yara +0 -0
  98. {skillanalyzer → skill_scanner}/data/yara_rules/system_manipulation.yara +0 -0
  99. {skillanalyzer → skill_scanner}/data/yara_rules/unicode_steganography.yara +0 -0
  100. {skillanalyzer → skill_scanner}/threats/threats.py +0 -0
  101. {skillanalyzer → skill_scanner}/utils/file_utils.py +0 -0
  102. {skillanalyzer → skill_scanner}/utils/logging_utils.py +0 -0
@@ -1,6 +1,6 @@
1
- # Claude Skill Security Meta-Analysis
1
+ # Agent Skill Security Meta-Analysis
2
2
 
3
- You are a **Principal Security Analyst** performing expert-level meta-analysis on security findings from the Claude Skill Analyzer.
3
+ You are a **Principal Security Analyst** performing expert-level meta-analysis on security findings from the Skill Scanner.
4
4
 
5
5
  ## YOUR PRIMARY MISSION
6
6
 
@@ -25,14 +25,14 @@ You have **FULL ACCESS** to the skill being analyzed:
25
25
 
26
26
  Use this full context to make accurate judgments. If a finding claims something is in a file, **CHECK THE ACTUAL FILE CONTENT** provided below.
27
27
 
28
- ## What is a Claude Skill?
28
+ ## What is an Agent Skill?
29
29
 
30
- A Claude Skill is a **local directory package** that extends Claude's capabilities:
30
+ An Agent Skill is a **local directory package** that extends an AI agent's capabilities:
31
31
 
32
32
  ```
33
33
  skill-name/
34
34
  ├── SKILL.md # Required: YAML manifest + markdown instructions
35
- ├── scripts/ # Optional: Python/Bash code Claude can execute
35
+ ├── scripts/ # Optional: Python/Bash code the agent can execute
36
36
  │ └── helper.py
37
37
  └── references/ # Optional: Additional files referenced by instructions
38
38
  └── guidelines.md
@@ -48,7 +48,7 @@ compatibility: Works in Claude.ai, Claude Code
48
48
  allowed-tools: [Read, Write, Python, Bash] # Optional tool restrictions
49
49
  ---
50
50
  ```
51
- Followed by markdown instructions that guide Claude's behavior.
51
+ Followed by markdown instructions that guide the agent's behavior.
52
52
 
53
53
  ## Analyzer Authority Hierarchy
54
54
 
@@ -1,10 +1,10 @@
1
- # Claude Skill Threat Analysis
1
+ # Agent Skill Threat Analysis
2
2
 
3
- You are a security expert analyzing **Claude Skill packages** for potential threats.
3
+ You are a security expert analyzing **Agent Skill packages** for potential threats.
4
4
 
5
- ## What is a Claude Skill?
5
+ ## What is an Agent Skill?
6
6
 
7
- A Claude Skill is a **local directory package** containing:
7
+ An Agent Skill is a **local directory package** containing:
8
8
 
9
9
  ### 1. SKILL.md (Required)
10
10
  **YAML Frontmatter:**
@@ -28,8 +28,8 @@ When the user asks to [do something], follow these steps:
28
28
  ```
29
29
 
30
30
  ### 2. Scripts (Optional)
31
- - **Python files** (.py) - Code Claude can execute
32
- - **Bash scripts** (.sh) - Shell commands Claude can run
31
+ - **Python files** (.py) - Code the agent can execute
32
+ - **Bash scripts** (.sh) - Shell commands the agent can run
33
33
 
34
34
  ### 3. Referenced Files (Optional)
35
35
  - Additional .md files mentioned in instructions
@@ -51,13 +51,13 @@ When the user asks to [do something], follow these steps:
51
51
  **What to analyze:**
52
52
  - `name`: Deceptive? (e.g., "safe-calculator" but does data theft)
53
53
  - `description`: Matches actual behavior?
54
- - `allowed-tools`: Claude Code agent tool restrictions (Read, Write, Grep, Glob, Bash, Python)
54
+ - `allowed-tools`: Agent tool restrictions (Read, Write, Grep, Glob, Bash, Python)
55
55
  - **This field is OPTIONAL** - missing it is LOW severity (informational only)
56
56
  - If specified, check if code behavior violates these restrictions
57
57
  - Example: `allowed-tools: [Read, Grep]` but code writes files → VIOLATION (MEDIUM/HIGH)
58
58
  - `compatibility`: Claims vs reality (network usage, etc.)
59
59
 
60
- **Important: `allowed-tools` specifies which Claude Code AGENT tools can be used:**
60
+ **Important: `allowed-tools` specifies which agent tools can be used:**
61
61
  - **Read** - read files
62
62
  - **Write** - write/edit files
63
63
  - **Grep** - search in files
@@ -147,7 +147,7 @@ But script reads environment variables and makes network calls!
147
147
  - **MEDIUM**: Social engineering, suspicious patterns, actual tool restriction violations
148
148
  - **LOW**: Missing optional metadata (allowed-tools, compatibility), minor documentation issues
149
149
 
150
- **Note on `allowed-tools`:** This field is OPTIONAL per the Claude Skills spec. Missing `allowed-tools` is LOW severity (informational). Only flag as MEDIUM/HIGH if the skill DECLARES `allowed-tools` but then VIOLATES those restrictions.
150
+ **Note on `allowed-tools`:** This field is OPTIONAL per the agent skills spec. Missing `allowed-tools` is LOW severity (informational). Only flag as MEDIUM/HIGH if the skill DECLARES `allowed-tools` but then VIOLATES those restrictions.
151
151
 
152
152
  ## Required Output Format
153
153
 
@@ -257,7 +257,7 @@ for root, dirs, files in os.walk(os.path.expanduser("~")):
257
257
  1. **Analyze ALL components**: Manifest, instructions, scripts, references, behavioral patterns
258
258
  2. **Context matters**: This is a local package, not a remote server
259
259
  3. **Format understanding**: SKILL.md with YAML + markdown + separate scripts
260
- 4. **Threat focus**: Client-side risks (user's machine, Claude's environment)
260
+ 4. **Threat focus**: Client-side risks (user's machine, agent's environment)
261
261
  5. **Cross-check**: Does behavior match manifest claims?
262
262
 
263
- **You're analyzing a Claude Skill package with SKILL.md + scripts, not an MCP server with @mcp.tool() decorators!**
263
+ **You're analyzing an Agent Skill package with SKILL.md + scripts, not an MCP server with @mcp.tool() decorators!**
@@ -48,7 +48,7 @@ Standardized threat categories across all analyzers:
48
48
  - **MALICIOUS_BEHAVIOR**: General malicious activity
49
49
 
50
50
  ### 4. **details** Object Structure
51
- - **skill_name**: Name of the analyzed Claude Skill
51
+ - **skill_name**: Name of the analyzed Agent Skill
52
52
  - **threat_type**: Specific sub-type of the threat_category
53
53
  - **evidence**: Explanation of why this is flagged as a threat
54
54
  - **source_rule**: Name of YARA rule, API classification, or LLM analysis type
@@ -1,4 +1,4 @@
1
- # Security Rule Signatures for Claude Skills Scanner
1
+ # Security Rule Signatures for Agent Skills Scanner
2
2
  # Detects threats across 8 major categories
3
3
 
4
4
  # ============================================================================
@@ -395,7 +395,7 @@
395
395
  - "(?i)anthropic.*colors"
396
396
  - "(?i)anthropic.*typography"
397
397
  file_types: [manifest]
398
- description: "Skill name/description may impersonate official Anthropic skills"
398
+ description: "Skill name/description may impersonate official skills"
399
399
  remediation: "Do not impersonate official skills or use Anthropic branding"
400
400
 
401
401
  # ============================================================================
@@ -1,7 +1,7 @@
1
1
  //////////////////////////////////////////
2
2
  // Unbounded Autonomy Detection
3
3
  // Target: Instructions that give skills excessive autonomy
4
- // For Claude Skills with dangerous autonomous behaviors
4
+ // For agent skills with dangerous autonomous behaviors
5
5
  //////////////////////////////////////////
6
6
 
7
7
  rule autonomy_abuse{
@@ -1,5 +1,5 @@
1
1
  //////////////////////////////////////////
2
- // Code Execution Detection Rule for Claude Skills
2
+ // Code Execution Detection Rule for Agent Skills
3
3
  // Target: Python and Bash execution patterns
4
4
  // (eval, exec, subprocess, shell injection)
5
5
  /////////////////////////////////////////
@@ -9,7 +9,7 @@ rule code_execution{
9
9
  meta:
10
10
 
11
11
  author = "Cisco"
12
- description = "Detects dangerous code execution patterns in Claude Skills (Python/Bash)"
12
+ description = "Detects dangerous code execution patterns in agent skills (Python/Bash)"
13
13
  classification = "harmful"
14
14
  threat_type = "CODE EXECUTION"
15
15
 
@@ -1,6 +1,6 @@
1
1
  //////////////////////////////////////////
2
2
  // Shell/System Command Injection Detection Rule
3
- // Target: Command injection patterns for Claude Skills (Python/Bash)
3
+ // Target: Command injection patterns for agent skills (Python/Bash)
4
4
  // (Shell operators, dangerous commands, network tools + reverse shells)
5
5
  /////////////////////////////////////////
6
6
 
@@ -8,7 +8,7 @@ rule command_injection{
8
8
 
9
9
  meta:
10
10
  author = "Cisco"
11
- description = "Detects command injection patterns in Claude Skills: shell operators, system commands, and network tools"
11
+ description = "Detects command injection patterns in agent skills: shell operators, system commands, and network tools"
12
12
  classification = "harmful"
13
13
  threat_type = "INJECTION ATTACK"
14
14
 
@@ -1,7 +1,7 @@
1
1
  //////////////////////////////////////////
2
2
  // Skill Discovery Surface Abuse Detection
3
3
  // Target: Over-broad descriptions, keyword baiting, activation manipulation
4
- // For Claude Skills YAML frontmatter and descriptions
4
+ // For agent skills YAML frontmatter and descriptions
5
5
  //////////////////////////////////////////
6
6
 
7
7
  rule skill_discovery_abuse{
@@ -1,7 +1,7 @@
1
1
  //////////////////////////////////////////
2
2
  // Tool Chaining Abuse Detection
3
3
  // Target: Suspicious multi-step operations that could exfiltrate data
4
- // For Claude Skills that chain operations suspiciously
4
+ // For agent skills that chain operations suspiciously
5
5
  //////////////////////////////////////////
6
6
 
7
7
  rule tool_chaining_abuse{
@@ -1,7 +1,7 @@
1
1
  //////////////////////////////////////////
2
2
  // Transitive Trust Abuse Detection
3
3
  // Target: Skills that delegate trust to untrusted external content
4
- // For Claude Skills that consume webpages, files, issues, docs
4
+ // For agent skills that consume webpages, files, issues, docs
5
5
  //////////////////////////////////////////
6
6
 
7
7
  rule transitive_trust_abuse{
@@ -14,7 +14,7 @@
14
14
  #
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
- """Git hooks for skill-analyzer."""
17
+ """Git hooks for skill-scanner."""
18
18
 
19
19
  from .pre_commit import main as pre_commit_hook
20
20
 
@@ -16,27 +16,27 @@
16
16
  # SPDX-License-Identifier: Apache-2.0
17
17
 
18
18
  """
19
- Pre-commit hook for scanning Claude Skills for security issues.
19
+ Pre-commit hook for scanning agent skills for security issues.
20
20
 
21
21
  This hook scans staged skill directories for security vulnerabilities
22
22
  and blocks commits that contain HIGH or CRITICAL severity findings.
23
23
 
24
24
  Usage:
25
25
  1. Install as a pre-commit hook:
26
- skill-analyzer-pre-commit install
26
+ skill-scanner-pre-commit install
27
27
 
28
28
  2. Or add to .pre-commit-config.yaml:
29
29
  - repo: local
30
30
  hooks:
31
- - id: skill-analyzer
32
- name: Skill Analyzer
33
- entry: skill-analyzer-pre-commit
31
+ - id: skill-scanner
32
+ name: Skill Scanner
33
+ entry: skill-scanner-pre-commit
34
34
  language: python
35
35
  types: [file]
36
36
  pass_filenames: false
37
37
 
38
38
  Configuration:
39
- Create a .skillanalyzerrc file in your repo root:
39
+ Create a .skill_scannerrc file in your repo root:
40
40
 
41
41
  {
42
42
  "severity_threshold": "high", # block on: critical, high, medium, low
@@ -54,7 +54,7 @@ from pathlib import Path
54
54
  # Default configuration
55
55
  DEFAULT_CONFIG = {
56
56
  "severity_threshold": "high", # Block commits on HIGH or CRITICAL
57
- "skills_path": ".claude/skills", # Default Claude skills location
57
+ "skills_path": ".claude/skills", # Default skills location
58
58
  "fail_fast": True,
59
59
  "use_behavioral": False,
60
60
  "use_trigger": True,
@@ -73,7 +73,7 @@ SEVERITY_LEVELS = {
73
73
 
74
74
  def load_config(repo_root: Path) -> dict:
75
75
  """
76
- Load configuration from .skillanalyzerrc file.
76
+ Load configuration from .skill_scannerrc file.
77
77
 
78
78
  Args:
79
79
  repo_root: Repository root directory
@@ -84,9 +84,9 @@ def load_config(repo_root: Path) -> dict:
84
84
  config = DEFAULT_CONFIG.copy()
85
85
 
86
86
  config_paths = [
87
- repo_root / ".skillanalyzerrc",
88
- repo_root / ".skillanalyzerrc.json",
89
- repo_root / "skillanalyzer.json",
87
+ repo_root / ".skill_scannerrc",
88
+ repo_root / ".skill_scannerrc.json",
89
+ repo_root / "skill_scanner.json",
90
90
  ]
91
91
 
92
92
  for config_path in config_paths:
@@ -273,7 +273,7 @@ def main(args: list[str] | None = None) -> int:
273
273
  Returns:
274
274
  Exit code (0 = success, 1 = blocked)
275
275
  """
276
- parser = argparse.ArgumentParser(description="Pre-commit hook for scanning Claude Skills")
276
+ parser = argparse.ArgumentParser(description="Pre-commit hook for scanning agent skills")
277
277
  parser.add_argument(
278
278
  "--severity",
279
279
  choices=["critical", "high", "medium", "low"],
@@ -413,10 +413,10 @@ def install_hook() -> int:
413
413
  hook_path = hooks_dir / "pre-commit"
414
414
 
415
415
  hook_script = """#!/bin/sh
416
- # Skill Analyzer Pre-commit Hook
417
- # Automatically scans Claude Skills for security issues
416
+ # Skill Scanner Pre-commit Hook
417
+ # Automatically scans agent skills for security issues
418
418
 
419
- skill-analyzer-pre-commit "$@"
419
+ skill-scanner-pre-commit "$@"
420
420
  exit_code=$?
421
421
 
422
422
  if [ $exit_code -ne 0 ]; then
@@ -440,7 +440,7 @@ exit $exit_code
440
440
 
441
441
  print(f"✅ Pre-commit hook installed at {hook_path}")
442
442
  print("\nConfiguration:")
443
- print(" Create .skillanalyzerrc in your repo root to customize behavior:")
443
+ print(" Create .skill_scannerrc in your repo root to customize behavior:")
444
444
  print(' { "severity_threshold": "high", "skills_path": ".claude/skills" }')
445
445
 
446
446
  return 0
@@ -15,7 +15,7 @@
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
17
  """
18
- Threat mapping and taxonomy for Claude Skill Analyzer.
18
+ Threat mapping and taxonomy for Skill Scanner.
19
19
 
20
20
  Aligned with MCP Scanner's threat taxonomy.
21
21
  """
@@ -14,7 +14,7 @@
14
14
  #
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
- """Utility modules for Skill Analyzer."""
17
+ """Utility modules for Skill Scanner."""
18
18
 
19
19
  from .file_utils import get_file_type, is_binary_file, read_file_safe
20
20
  from .logging_utils import get_logger, setup_logger
@@ -14,7 +14,7 @@
14
14
  #
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
- """Command execution utilities for Skill Analyzer."""
17
+ """Command execution utilities for Skill Scanner."""
18
18
 
19
19
  import os
20
20
  import shlex
@@ -15,7 +15,7 @@
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
17
  """
18
- Dependency Injection Container for Skill Analyzer.
18
+ Dependency Injection Container for Skill Scanner.
19
19
 
20
20
  This module provides a simple dependency injection container to improve
21
21
  testability and decouple configuration from implementation.
@@ -15,7 +15,7 @@
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
17
  """
18
- Centralized logging configuration for Skill Analyzer.
18
+ Centralized logging configuration for Skill Scanner.
19
19
 
20
20
  This module provides consistent logging setup across all components.
21
21
  """
@@ -41,8 +41,8 @@ def setup_logger(name: str, level: str | None = None, format_string: str | None
41
41
  if logger.handlers:
42
42
  return logger
43
43
 
44
- skillanalyzer_root = logging.getLogger("skillanalyzer")
45
- if skillanalyzer_root.level == logging.DEBUG and name.startswith("skillanalyzer"):
44
+ skill_scanner_root = logging.getLogger("skill_scanner")
45
+ if skill_scanner_root.level == logging.DEBUG and name.startswith("skill_scanner"):
46
46
  logger.setLevel(logging.DEBUG)
47
47
  elif level:
48
48
  logger.setLevel(getattr(logging, level.upper()))
@@ -78,18 +78,18 @@ def get_logger(name: str, level: str | None = None) -> logging.Logger:
78
78
 
79
79
  def set_verbose_logging(verbose: bool = False) -> None:
80
80
  """
81
- Enable or disable verbose logging for all skillanalyzer loggers.
81
+ Enable or disable verbose logging for all skill_scanner loggers.
82
82
 
83
83
  Args:
84
- verbose: If True, set all existing skillanalyzer loggers to DEBUG level
84
+ verbose: If True, set all existing skill_scanner loggers to DEBUG level
85
85
  """
86
86
  target_level = logging.DEBUG if verbose else logging.INFO
87
87
 
88
- root_logger = logging.getLogger("skillanalyzer")
88
+ root_logger = logging.getLogger("skill_scanner")
89
89
  root_logger.setLevel(target_level)
90
90
 
91
91
  for name in list(logging.Logger.manager.loggerDict.keys()):
92
- if name.startswith("skillanalyzer"):
92
+ if name.startswith("skill_scanner"):
93
93
  logger = logging.getLogger(name)
94
94
  logger.setLevel(target_level)
95
95
  for handler in logger.handlers:
@@ -1,100 +0,0 @@
1
- skillanalyzer/__init__.py,sha256=raAwyMu06X3PXZ3YrxW9sUlZeG_UrDp4HIIUi6hN_zo,1318
2
- skillanalyzer/_version.py,sha256=vLA4ITz09S-S435nq6yTF6l3qiSz6w4euS1rOxXgd1M,704
3
- skillanalyzer/api/__init__.py,sha256=z7QSgt7lMZQ7eO9pAO-Iao6jEJQ6UPQissGfb_U4iXc,754
4
- skillanalyzer/api/api.py,sha256=2R8qpk_DbbhCChnvhzQCMH9FFq0xQDZLX-eMBy0wnbk,1038
5
- skillanalyzer/api/api_cli.py,sha256=VjxcFg-UFJJIWJMcH713tAKKEtIUB0dV66H2Yzd1mb8,2392
6
- skillanalyzer/api/api_server.py,sha256=XAU3QH5yz6BS3T4Tcl13yzz4x3VNK-v6KkidprepJy4,21142
7
- skillanalyzer/api/router.py,sha256=8c1DQI3f3xDvV7SYVSua000oGUu-Oi5YcrzofmRVYnQ,17421
8
- skillanalyzer/cli/__init__.py,sha256=17rrftCF-A1WQDiZ0kdBAfPHgG0ouED5wkdy-WvIRNA,763
9
- skillanalyzer/cli/cli.py,sha256=8ZGZXJ2ccc-93jZS3XOpZyLSAHwjkOai5TU5yG_jmfE,35511
10
- skillanalyzer/config/__init__.py,sha256=KQUqIL0lWI1hy_qu_EDt4EIcuW9a2ok2WVuQNViOf4g,847
11
- skillanalyzer/config/config.py,sha256=-7ymRfwypmBGyoOUWiSuwwRIr7Ztt8t6GcuGjm-9XKw,4714
12
- skillanalyzer/config/config_parser.py,sha256=XF8VwQqrBhzPuS4wf_AI-MAhlm9thgJnbIoncxIoIrs,3777
13
- skillanalyzer/config/constants.py,sha256=4Jck7kUtcHTIa9Hcwnbgk0lUqZvxarcdp6c86Xn4Xwk,2521
14
- skillanalyzer/core/__init__.py,sha256=issm88bGzNlQuFH5qy1tKzMgQbYL0ODSxsDgYjCMCKw,830
15
- skillanalyzer/core/exceptions.py,sha256=zWB8XubcfwEL0uZutuagr1l3rEd3w-5mB1ggNLnz6cE,2015
16
- skillanalyzer/core/loader.py,sha256=8pAr5nN0DLmf7Dc7xIFIT_okQ6w35RKGLyibNUDFbPU,13596
17
- skillanalyzer/core/models.py,sha256=ZMe9CaufG7yMzLwei1GdVidj72HlA16brVwkPGmervg,10627
18
- skillanalyzer/core/scanner.py,sha256=VfrG74SmFyslS3a5Z6HqSOou74u02TW1aos5Oj--_l4,14833
19
- skillanalyzer/core/analyzers/__init__.py,sha256=loTObGAXelxAiodtR0XzR6r1Ebw17BiuZZXN9TA3eJc,2136
20
- skillanalyzer/core/analyzers/aidefense_analyzer.py,sha256=al_j3HzfZIToI38WNOnqBG_AXfJEBd6QVm8_h_sjvA4,36471
21
- skillanalyzer/core/analyzers/base.py,sha256=4BN6dHLn2Q9hQMLAJTSJXsl6tZgfCqqBxZO9icuu70Q,1374
22
- skillanalyzer/core/analyzers/behavioral_analyzer.py,sha256=OcBs0abjmimbtLREkTbgQrarXvGfg18Fp8Z-Uas_gyI,19077
23
- skillanalyzer/core/analyzers/cross_skill_analyzer.py,sha256=4KysKr_2WR5-JbbFs0tBKf27Oj0l35KK0wREFNRcvno,18939
24
- skillanalyzer/core/analyzers/llm_analyzer.py,sha256=juvLmKn1n8HHOzkyizG94aPO-tz_ht-vexMmbGLZ3Mo,17836
25
- skillanalyzer/core/analyzers/llm_prompt_builder.py,sha256=DEz4tP0HY4p2XWbXbxfSIdkwhLCd_dWX7cDe9A3CeOA,10162
26
- skillanalyzer/core/analyzers/llm_provider_config.py,sha256=pbVx7N9OCohjIWjENMq-kiy6_svTn4IYvQfPxlR0M_Y,8488
27
- skillanalyzer/core/analyzers/llm_request_handler.py,sha256=nz_gjnDTr0dT2GbfQMqKR6-n63x38AcB5G4UnPHLY9s,11679
28
- skillanalyzer/core/analyzers/llm_response_parser.py,sha256=wO5ovd4se-KqIPwdZX-r0_tozaJEDUx7Q7yajKntPwk,2682
29
- skillanalyzer/core/analyzers/meta_analyzer.py,sha256=rFyU-BW7cmHDib93KIgdtsH5J7OIVT8Wc0Pnx87OPIE,33373
30
- skillanalyzer/core/analyzers/static.py,sha256=BNHmmZouX_8lbeJZlVC0P831-u9IPz9Gmft_05pI2pI,45259
31
- skillanalyzer/core/analyzers/trigger_analyzer.py,sha256=BJuu0nbI7BKS2aoqZnzYON825ObETsfJcIOiSxkagH4,12263
32
- skillanalyzer/core/analyzers/virustotal_analyzer.py,sha256=V7nG-fR2GhfdZhh8JVNvM6gOqRyUGsuxHN1yNRvmw6M,15988
33
- skillanalyzer/core/analyzers/behavioral/__init__.py,sha256=mY0aRrrT5y7E8SOApQ8g-IewW6LR33Y4SlsZKzl90qQ,1070
34
- skillanalyzer/core/analyzers/behavioral/alignment/__init__.py,sha256=nB2KWYnDu6I4yGiaewEyySzG4w96hElXiQBqJFfGmP4,1832
35
- skillanalyzer/core/analyzers/behavioral/alignment/alignment_llm_client.py,sha256=vklWQ7rBoyfayzs1n1J8xlCo3_nimEqCgDViCXwyOZM,8646
36
- skillanalyzer/core/analyzers/behavioral/alignment/alignment_orchestrator.py,sha256=zfkjFz-DDwUEOGDBpJ8cAZi5bH-VP_d_1bJTF1z0Si4,9478
37
- skillanalyzer/core/analyzers/behavioral/alignment/alignment_prompt_builder.py,sha256=mXkBYQDpPaqA298Jly835x_cLOUWHjSc8sBDhgMrWxs,18043
38
- skillanalyzer/core/analyzers/behavioral/alignment/alignment_response_validator.py,sha256=lu0gPPRbJkZJlkguqwUeSVl43HpMFypICXH_4s8Zjbo,4556
39
- skillanalyzer/core/analyzers/behavioral/alignment/threat_vulnerability_classifier.py,sha256=DCXnbs9Fa2ajFT0We4sOo6nxIk7O_Pc0z01fGMDHsRg,7227
40
- skillanalyzer/core/reporters/__init__.py,sha256=XCqeM_kiS1uvcwymDreueQ2KOzMhG5_4vQgxzReJS4w,943
41
- skillanalyzer/core/reporters/json_reporter.py,sha256=JLlPTbs8ncMJHAXZk7iBWCHdL5Qn2PqHOQldHeH2ZGE,1798
42
- skillanalyzer/core/reporters/markdown_reporter.py,sha256=1-pIwgXYBcCzqmKlxh2y2KU37TNRojqaTJ_CBSM_bSY,7842
43
- skillanalyzer/core/reporters/sarif_reporter.py,sha256=n5tGCXKwRJzEovlJt7j0USkmMYDsctLQdF9VIMbN95g,8285
44
- skillanalyzer/core/reporters/table_reporter.py,sha256=g-1W4XsJUzHW7LdzuW5CJ1krHAE5fvHViBKlw1ShFXI,7046
45
- skillanalyzer/core/rules/__init__.py,sha256=zGlTBVjihqxgg0BKmhdGkyeCzSvRjVEASjBh-M0sn_8,680
46
- skillanalyzer/core/rules/patterns.py,sha256=OuJ6mPlQVy9R8g1Pn9ozWIC8iWfDEuQamdDW5Uu8200,5833
47
- skillanalyzer/core/rules/yara_scanner.py,sha256=YBH9-GEqha0zDglnGx4TV-lgv14cLianuxaqlFtLyx4,5327
48
- skillanalyzer/core/static_analysis/__init__.py,sha256=meZnZQj7ChgHek6fIrfd-YInolXCqI37HTUTlQWEm7w,930
49
- skillanalyzer/core/static_analysis/context_extractor.py,sha256=ZaR5bIgfk1WQGU1G2or2vNsPQ3tmW5HU6mtyRemYdK0,29791
50
- skillanalyzer/core/static_analysis/cfg/__init__.py,sha256=jkvx12ZGddbRVu_0b04Bamr7JX084yD6BLxgOUEHT1w,816
51
- skillanalyzer/core/static_analysis/cfg/builder.py,sha256=Tm1GZ56rfOoNx-3WLmn2MNov2KzPKN-QZgJbBG-9D2c,14932
52
- skillanalyzer/core/static_analysis/dataflow/__init__.py,sha256=vjNUG8J5__m8HYd18VNkKxBzeAss1qugVrp0Amndg2w,834
53
- skillanalyzer/core/static_analysis/dataflow/forward_analysis.py,sha256=haHWJVz-SZxZpZoEwAsNOum-67ldppe_YBRMZOSJqz0,30747
54
- skillanalyzer/core/static_analysis/interprocedural/__init__.py,sha256=dFIglo65HpWMJ80ejB4tjv54MaNeSymQ5eowD5QGZic,798
55
- skillanalyzer/core/static_analysis/interprocedural/call_graph_analyzer.py,sha256=NKpixV-wlK_lwnSgLY5Tw01pAoC2kl7R6U4_PWnKicE,14062
56
- skillanalyzer/core/static_analysis/interprocedural/cross_file_analyzer.py,sha256=neP8pdyGhCUHJQmmTXfm0X_CFHlTHh7e3RU7HVJ0UVY,7472
57
- skillanalyzer/core/static_analysis/parser/__init__.py,sha256=AXCg1HHVzyjswGJl4TNFhzwMKxgin8JY2EK00RVv9_Y,769
58
- skillanalyzer/core/static_analysis/parser/python_parser.py,sha256=lkJKSODZkSC-Vg30eSpli_jsFeIouKt-DsSeEgce1u4,13804
59
- skillanalyzer/core/static_analysis/semantic/__init__.py,sha256=7HS7lJ4APpyfWLTUQ_24aJkrLX2MQTcc4erYFtLKm3o,877
60
- skillanalyzer/core/static_analysis/semantic/name_resolver.py,sha256=TEJQkEaTvkL7dnAZwNbcLALPVw85Qc3FS5jfr4CYEsQ,6218
61
- skillanalyzer/core/static_analysis/semantic/type_analyzer.py,sha256=NXEOZO8-vYZ97SQJ5Gu_YLWFDMDhtvtuixVwYGarmDM,5942
62
- skillanalyzer/core/static_analysis/taint/__init__.py,sha256=71JejlK110K2r3LXNIJOLGCZ7I5Q7cEn8XvfCCoEexA,809
63
- skillanalyzer/core/static_analysis/taint/tracker.py,sha256=1WExA8NAV62X5Az64grI41LkkyMNQ7kFS8Mzf6Id1NI,7182
64
- skillanalyzer/core/static_analysis/types/__init__.py,sha256=XluM6BlZ8ECfdAD-231ONJn13UeDdAGmirPAVc0zePk,937
65
- skillanalyzer/data/__init__.py,sha256=WztWQdxkW4nkIejCTH4VH7l6mGU-p2JuEzEUFsj3z_4,977
66
- skillanalyzer/data/prompts/boilerplate_protection_rule_prompt.md,sha256=wCaDgae0LU7Flsd2Q4Ob4vEeZnpc29nfX4oJjBrE-WM,1468
67
- skillanalyzer/data/prompts/code_alignment_threat_analysis_prompt.md,sha256=mvSoW2OekXEz9lChZPaP4hUxVQ0-O57X3VI49ZrZqoY,25442
68
- skillanalyzer/data/prompts/llm_response_schema.json,sha256=nBPlsOtuqv0zwIns4YY7uZsaAM0uPZ7mkcqe8tNDHl8,2971
69
- skillanalyzer/data/prompts/skill_meta_analysis_prompt.md,sha256=O6vUsmCoqDvsd8j8ZbCCzYDdKYZd_UtXgRUJU4xaT4g,13924
70
- skillanalyzer/data/prompts/skill_threat_analysis_prompt.md,sha256=SLSlPbQ_7ASyivbQFnu_MKXJkTx1CMpudb4x5_mykY0,11651
71
- skillanalyzer/data/prompts/unified_response_schema.md,sha256=JzUGSRmF9J0cMcOWy05GGPWyGyYGkto4VPaXL59FWgM,3572
72
- skillanalyzer/data/rules/signatures.yaml,sha256=EMNH1JU5PRU0o8BZai_WzjNXX3UDlv3Gle2SpNt-hb8,16476
73
- skillanalyzer/data/yara_rules/autonomy_abuse.yara,sha256=MuS_YbczaPY4e58dvtaa4nQx6pdcklNjOWtkdo5YLew,2582
74
- skillanalyzer/data/yara_rules/code_execution.yara,sha256=9QP_JR8ZdLCPuDgJMLee6FgsIQPV5UNSBPnOcInHD1M,1898
75
- skillanalyzer/data/yara_rules/coercive_injection.yara,sha256=3QNzoiHDyhk1zUXHv7_COtCBSsr-bb--H4wKeNRCbBM,5359
76
- skillanalyzer/data/yara_rules/command_injection.yara,sha256=8I4mztCPgIZhAipr6GeZbEIi4v6kowVYrqw_ay1ny-w,2165
77
- skillanalyzer/data/yara_rules/credential_harvesting.yara,sha256=7W0pSKpW2KAmek1qP_DpjMHKuswv5L36tWusjuEl6Pc,5643
78
- skillanalyzer/data/yara_rules/prompt_injection.yara,sha256=q5tT7-L__x9RCjdAbFLcs9mSs8gZOmPPzjbdNKRwIHE,2715
79
- skillanalyzer/data/yara_rules/script_injection.yara,sha256=pzVPd7b9WNAS5iw8ZMoUgojKSBlEeSTLHLBho8UiMmA,3100
80
- skillanalyzer/data/yara_rules/skill_discovery_abuse.yara,sha256=gCgFcdFyLFU__7VPZIk8Hgp6ZMw31SPzDUPlpjNa69E,2453
81
- skillanalyzer/data/yara_rules/sql_injection.yara,sha256=pWq3ccqEvQtWz4fU8dQOkhCgVl6US9SZJDfuBU_YCY4,3691
82
- skillanalyzer/data/yara_rules/system_manipulation.yara,sha256=XoO17sZrarzdC58yyHaIz8z36x5xyxzmQXBnkYdoYfM,2231
83
- skillanalyzer/data/yara_rules/tool_chaining_abuse.yara,sha256=T-G3Tib8lU53ZYFdjlI2EEs6qQnZ831oUDNj2vjtONA,2256
84
- skillanalyzer/data/yara_rules/transitive_trust_abuse.yara,sha256=msYKqzbeFWe4mSLsdX8nJwOwuTV9nLFKDf8dXY2wJ8g,2773
85
- skillanalyzer/data/yara_rules/unicode_steganography.yara,sha256=5UxTvcy8CeWJLrPeldgJ9rY5gfODlC9bTNOkCauuOJA,2650
86
- skillanalyzer/hooks/__init__.py,sha256=ufSIo7sdtGxRD4lVDOVqBOqF3dhgEZRSkTu-UT5ZkcA,740
87
- skillanalyzer/hooks/pre_commit.py,sha256=y-9lz4OD2ILlYpbUa8S1uUjBfNDmU8EC-tWyUGU5NY8,13223
88
- skillanalyzer/threats/__init__.py,sha256=PiQ3frPbbaiKmdcxsan-NAgYDOYn_jhr-44-jSIysoY,883
89
- skillanalyzer/threats/threats.py,sha256=egFsT1crNlWQH3szG8yYIURMXXGh7GJnH3wI8w05nfI,21449
90
- skillanalyzer/utils/__init__.py,sha256=KnfUi433fGDKwck57kob4vuA8upzwSC-Na6OHrZ2uDc,907
91
- skillanalyzer/utils/command_utils.py,sha256=dTjN3Uzpk3dw5u7jbbOKO0j5FwmjYqcKlpr0vDA_1y4,4292
92
- skillanalyzer/utils/di_container.py,sha256=0wsQaVFkVLzORVEoMpSoZK_wOJrKTCAkTFkeEuTPzos,4586
93
- skillanalyzer/utils/file_utils.py,sha256=LT2xwrbqIWaYC-BYAL9zpF6a2xk6QNUVzItvGGJcBn8,2043
94
- skillanalyzer/utils/logging_config.py,sha256=wJ3HUNmGECgWE9jwz-SSuUMN-xTde6ybF4Yqa8Qrix4,2940
95
- skillanalyzer/utils/logging_utils.py,sha256=CLdOYmQdJejiLbcECTT2CbDU27PJ327AFMmeuVfCy94,1902
96
- cisco_ai_skill_scanner-1.0.0.dist-info/METADATA,sha256=oh3eKpG8h_pfWcIDdV4z6aAM38Yz-Pv1ZybReEqhYys,9290
97
- cisco_ai_skill_scanner-1.0.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
98
- cisco_ai_skill_scanner-1.0.0.dist-info/entry_points.txt,sha256=IQSseT8ZcU7aaqYdl20wC1-TqKlklZR2Nw609NBQARw,175
99
- cisco_ai_skill_scanner-1.0.0.dist-info/licenses/LICENSE,sha256=b4va5sK_CWxpeDnOO2MF0MKqsiwU-3YblMmWKnmuWZg,653
100
- cisco_ai_skill_scanner-1.0.0.dist-info/RECORD,,
@@ -1,4 +0,0 @@
1
- [console_scripts]
2
- skill-scanner = skillanalyzer.cli.cli:main
3
- skill-scanner-api = skillanalyzer.api.api_cli:main
4
- skill-scanner-pre-commit = skillanalyzer.hooks.pre_commit:main
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes