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,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cisco-ai-skill-scanner
3
- Version: 1.0.0
4
- Summary: Security scanner for Claude Skills and Codex Skills packages - Detects prompt injection, data exfiltration, and malicious code
3
+ Version: 1.0.1
4
+ Summary: Security scanner for Agent Skills packages - Detects prompt injection, data exfiltration, and malicious code
5
5
  Project-URL: Homepage, https://github.com/cisco-ai-defense/skill-scanner
6
6
  Project-URL: Documentation, https://github.com/cisco-ai-defense/skill-scanner#readme
7
7
  Project-URL: Repository, https://github.com/cisco-ai-defense/skill-scanner
@@ -68,14 +68,14 @@ Description-Content-Type: text/markdown
68
68
 
69
69
  A security scanner for AI Agent Skills that detects prompt injection, data exfiltration, and malicious code patterns. Combines **pattern-based detection** (YAML + YARA), **LLM-as-a-judge**, and **behavioral dataflow analysis** for comprehensive threat detection.
70
70
 
71
- Supports [Anthropic Claude Skills](https://docs.anthropic.com/en/docs/agents-and-tools/claude-skills), [OpenAI Codex Skills](https://openai.github.io/codex/), and [Cursor Agent Skills](https://docs.cursor.com/context/rules) formats following the [Agent Skills specification](https://agentskills.io).
71
+ Supports [OpenAI Codex Skills](https://openai.github.io/codex/) and [Cursor Agent Skills](https://docs.cursor.com/context/rules) formats following the [Agent Skills specification](https://agentskills.io).
72
72
 
73
73
  ---
74
74
 
75
75
  ## Highlights
76
76
 
77
77
  - **Multi-Engine Detection** - Static analysis, behavioral dataflow, LLM semantic analysis, and cloud-based scanning
78
- - **False Positive Filtering** - Meta-analyzer achieves ~65% noise reduction while maintaining 100% threat detection
78
+ - **False Positive Filtering** - Meta-analyzer significantly reduces noise while preserving detection capability
79
79
  - **CI/CD Ready** - SARIF output for GitHub Code Scanning, exit codes for build failures
80
80
  - **Extensible** - Plugin architecture for custom analyzers
81
81
 
@@ -151,29 +151,29 @@ export AI_DEFENSE_API_KEY="your_aidefense_api_key"
151
151
 
152
152
  ```bash
153
153
  # Scan a single skill (static analyzer only)
154
- skill-analyzer scan /path/to/skill
154
+ skill-scanner scan /path/to/skill
155
155
 
156
156
  # Scan with behavioral analyzer (dataflow analysis)
157
- skill-analyzer scan /path/to/skill --use-behavioral
157
+ skill-scanner scan /path/to/skill --use-behavioral
158
158
 
159
159
  # Scan with all engines
160
- skill-analyzer scan /path/to/skill --use-behavioral --use-llm --use-aidefense
160
+ skill-scanner scan /path/to/skill --use-behavioral --use-llm --use-aidefense
161
161
 
162
162
  # Scan with meta-analyzer for false positive filtering
163
- skill-analyzer scan /path/to/skill --use-llm --enable-meta
163
+ skill-scanner scan /path/to/skill --use-llm --enable-meta
164
164
 
165
165
  # Scan multiple skills recursively
166
- skill-analyzer scan-all /path/to/skills --recursive --use-behavioral
166
+ skill-scanner scan-all /path/to/skills --recursive --use-behavioral
167
167
 
168
168
  # CI/CD: Fail build if threats found
169
- skill-analyzer scan-all ./skills --fail-on-findings --format sarif --output results.sarif
169
+ skill-scanner scan-all ./skills --fail-on-findings --format sarif --output results.sarif
170
170
  ```
171
171
 
172
172
  ### Python SDK
173
173
 
174
174
  ```python
175
- from skillanalyzer import SkillScanner
176
- from skillanalyzer.core.analyzers import StaticAnalyzer, BehavioralAnalyzer
175
+ from skill_scanner import SkillScanner
176
+ from skill_scanner.core.analyzers import StaticAnalyzer, BehavioralAnalyzer
177
177
 
178
178
  # Create scanner with analyzers
179
179
  scanner = SkillScanner(analyzers=[
@@ -221,7 +221,7 @@ print(f"Findings: {len(result.findings)}")
221
221
  ## Example Output
222
222
 
223
223
  ```
224
- $ skill-analyzer scan ./my-skill --use-behavioral
224
+ $ skill-scanner scan ./my-skill --use-behavioral
225
225
 
226
226
  ============================================================
227
227
  Skill: my-skill
@@ -0,0 +1,100 @@
1
+ skill_scanner/__init__.py,sha256=QuGYhgc529C5Cjtk3Th5t7-Qkx9kxOv6E2GK6soGZQw,1383
2
+ skill_scanner/_version.py,sha256=JvmBpae6cHui8lSCsCcZQAxzawN2NERHGsr-rIUeJMo,704
3
+ skill_scanner/api/__init__.py,sha256=vhuGqXgBx70izjHQOa-cWm3cbHlKhkpEiRjpusQ49vo,746
4
+ skill_scanner/api/api.py,sha256=5fFYh1e1JE06pNtZw-7zMcQMc791ubNlck0VjWzskq8,1027
5
+ skill_scanner/api/api_cli.py,sha256=wMJHSrQWWSg5idCLaWa-irPqhigtt_o1QVukMKvpfGY,2372
6
+ skill_scanner/api/api_server.py,sha256=cjN2P4xHXitKAI9aLztn9bKcFyVxm-2rpsy1OaVxwQo,21110
7
+ skill_scanner/api/router.py,sha256=3u5qPWO48iF09oIm-3oxYkqqO4hT50jCaNQTr2TBfYc,17411
8
+ skill_scanner/cli/__init__.py,sha256=UOFAWN8z8nMviFLHiFrtlcHn4eGbbRZc4B2q8yWlTno,755
9
+ skill_scanner/cli/cli.py,sha256=rnV2C2X-lNqSxPM3rNJ6J9Gde1kap9IAiBnOtpmCbXY,35485
10
+ skill_scanner/config/__init__.py,sha256=S0hMvyq3Vi0wWET74XmbPQmBTBkLXtqFca5PcTYosUM,837
11
+ skill_scanner/config/config.py,sha256=SvK9lvTNjpygc80pamDaGDtOhh99qGBG3EJiFKfEVzc,4698
12
+ skill_scanner/config/config_parser.py,sha256=kGPawiniy35fyUoJvnwRsJsgtIiAjSXHhE3joUcZtn8,3772
13
+ skill_scanner/config/constants.py,sha256=re2KkOtvSnxSJgkamdIU0fjdQ-fUSHX1eQSEfKDXjTA,2512
14
+ skill_scanner/core/__init__.py,sha256=fC3n7lJs_G8CFz2Vg1gfGFe6b0pBiCUs7MRW4kCM1CY,822
15
+ skill_scanner/core/exceptions.py,sha256=F4k2RDXIxrrnNsAsHn7wR277i2dNOXdK-NK0r-m3nF0,2007
16
+ skill_scanner/core/loader.py,sha256=cIU7e5MZHxryr-7UiGwI76eM0Zbm-LrmRGI0mP1_17A,13541
17
+ skill_scanner/core/models.py,sha256=vWAhDpAm4y8Flqp18cH4R4Vh8eOKNHrAHmsx68jXyOk,10551
18
+ skill_scanner/core/scanner.py,sha256=zAtM3Hbs_NNbYV7iq-9W2BURO-H23uRJ-E14S2h_wek,14830
19
+ skill_scanner/core/analyzers/__init__.py,sha256=tctB8Q30gA5V4pdR5yoSpxyIKJZkFTJwowUq6UwddQo,2132
20
+ skill_scanner/core/analyzers/aidefense_analyzer.py,sha256=ws61J3KJsz1DiuucBPCdsWN8ACI_iurtDQzWtFqfCA8,36468
21
+ skill_scanner/core/analyzers/base.py,sha256=4BN6dHLn2Q9hQMLAJTSJXsl6tZgfCqqBxZO9icuu70Q,1374
22
+ skill_scanner/core/analyzers/behavioral_analyzer.py,sha256=dvdTdwUKHqnmEa1nsChcdlJ0V_WvcZrGyHX5uYe0clI,19076
23
+ skill_scanner/core/analyzers/cross_skill_scanner.py,sha256=MTedSXhLagZeXEtvkPV8m_48GqoHMWkh9rR9FR9puLQ,18934
24
+ skill_scanner/core/analyzers/llm_analyzer.py,sha256=6_b0DYTPSA0opLNnQzyuAoVfxgI8PFkEhJEeB-Ajd3w,17835
25
+ skill_scanner/core/analyzers/llm_prompt_builder.py,sha256=28OCgMUE0T-A6GkF5sUY0qPFvaKC1jhB6jPjVPbePsw,10160
26
+ skill_scanner/core/analyzers/llm_provider_config.py,sha256=pbVx7N9OCohjIWjENMq-kiy6_svTn4IYvQfPxlR0M_Y,8488
27
+ skill_scanner/core/analyzers/llm_request_handler.py,sha256=nz_gjnDTr0dT2GbfQMqKR6-n63x38AcB5G4UnPHLY9s,11679
28
+ skill_scanner/core/analyzers/llm_response_parser.py,sha256=wO5ovd4se-KqIPwdZX-r0_tozaJEDUx7Q7yajKntPwk,2682
29
+ skill_scanner/core/analyzers/meta_analyzer.py,sha256=oIMmRfIsS-LUa7qyTpS8HTrGu0TqpUbrrV6gUa5dugU,33371
30
+ skill_scanner/core/analyzers/static.py,sha256=JAUYefYH1Oa3qnFmk78Sw7OuzcCwC1d8BFX6Hoh0wtM,45208
31
+ skill_scanner/core/analyzers/trigger_analyzer.py,sha256=bmJjaGdSqsAyvOIehHbMjLrDWysd7YV9J9TXgMvTEe0,12268
32
+ skill_scanner/core/analyzers/virustotal_analyzer.py,sha256=V7nG-fR2GhfdZhh8JVNvM6gOqRyUGsuxHN1yNRvmw6M,15988
33
+ skill_scanner/core/analyzers/behavioral/__init__.py,sha256=aTuJyqDbylHE2Ags_LaYLbbOkkJxkTDP--VBU-KMPgs,1069
34
+ skill_scanner/core/analyzers/behavioral/alignment/__init__.py,sha256=nB2KWYnDu6I4yGiaewEyySzG4w96hElXiQBqJFfGmP4,1832
35
+ skill_scanner/core/analyzers/behavioral/alignment/alignment_llm_client.py,sha256=mRocjOvf8jM2UQ-_TzcHRQDVkEeoPXu87GjwKiuZ2Yw,8645
36
+ skill_scanner/core/analyzers/behavioral/alignment/alignment_orchestrator.py,sha256=zfkjFz-DDwUEOGDBpJ8cAZi5bH-VP_d_1bJTF1z0Si4,9478
37
+ skill_scanner/core/analyzers/behavioral/alignment/alignment_prompt_builder.py,sha256=oAGvbIBmCP6APYwYXKsVyh0jWBgaiM5N6Bo5YoHbJT8,18041
38
+ skill_scanner/core/analyzers/behavioral/alignment/alignment_response_validator.py,sha256=lu0gPPRbJkZJlkguqwUeSVl43HpMFypICXH_4s8Zjbo,4556
39
+ skill_scanner/core/analyzers/behavioral/alignment/threat_vulnerability_classifier.py,sha256=DCXnbs9Fa2ajFT0We4sOo6nxIk7O_Pc0z01fGMDHsRg,7227
40
+ skill_scanner/core/reporters/__init__.py,sha256=XCqeM_kiS1uvcwymDreueQ2KOzMhG5_4vQgxzReJS4w,943
41
+ skill_scanner/core/reporters/json_reporter.py,sha256=JLlPTbs8ncMJHAXZk7iBWCHdL5Qn2PqHOQldHeH2ZGE,1798
42
+ skill_scanner/core/reporters/markdown_reporter.py,sha256=SPLztJIhOVi0knocvSCCByWdsXWp3rQ1E63VGHaxgm8,7840
43
+ skill_scanner/core/reporters/sarif_reporter.py,sha256=8BUUerHX-gpE-5HYAipfCLH3GdlVuul43ZItHDAB7Bw,8289
44
+ skill_scanner/core/reporters/table_reporter.py,sha256=sotaDM2VzaX4vCR-OrF3GyIX_yv7wWhzS_doyc1I1XE,7044
45
+ skill_scanner/core/rules/__init__.py,sha256=zGlTBVjihqxgg0BKmhdGkyeCzSvRjVEASjBh-M0sn_8,680
46
+ skill_scanner/core/rules/patterns.py,sha256=OuJ6mPlQVy9R8g1Pn9ozWIC8iWfDEuQamdDW5Uu8200,5833
47
+ skill_scanner/core/rules/yara_scanner.py,sha256=U-qYrb92n3664cTt7ynRTMVGGsxhfrSU0OOYV-BnxKc,5326
48
+ skill_scanner/core/static_analysis/__init__.py,sha256=meZnZQj7ChgHek6fIrfd-YInolXCqI37HTUTlQWEm7w,930
49
+ skill_scanner/core/static_analysis/context_extractor.py,sha256=bUOmrkwzUxAVD1_64TZt4eHOhzH42db1W39VPibdmk8,29785
50
+ skill_scanner/core/static_analysis/cfg/__init__.py,sha256=jkvx12ZGddbRVu_0b04Bamr7JX084yD6BLxgOUEHT1w,816
51
+ skill_scanner/core/static_analysis/cfg/builder.py,sha256=Tm1GZ56rfOoNx-3WLmn2MNov2KzPKN-QZgJbBG-9D2c,14932
52
+ skill_scanner/core/static_analysis/dataflow/__init__.py,sha256=eVdTh0JOvQvtKG96gqs_1VvIU0_sRNkV6sXZz6X9o7I,833
53
+ skill_scanner/core/static_analysis/dataflow/forward_analysis.py,sha256=haHWJVz-SZxZpZoEwAsNOum-67ldppe_YBRMZOSJqz0,30747
54
+ skill_scanner/core/static_analysis/interprocedural/__init__.py,sha256=dFIglo65HpWMJ80ejB4tjv54MaNeSymQ5eowD5QGZic,798
55
+ skill_scanner/core/static_analysis/interprocedural/call_graph_analyzer.py,sha256=3azYWJ8A5-I39gc5zK4Iz6g0AAUX_uos4CNh1sVQNQA,14060
56
+ skill_scanner/core/static_analysis/interprocedural/cross_file_analyzer.py,sha256=neP8pdyGhCUHJQmmTXfm0X_CFHlTHh7e3RU7HVJ0UVY,7472
57
+ skill_scanner/core/static_analysis/parser/__init__.py,sha256=AXCg1HHVzyjswGJl4TNFhzwMKxgin8JY2EK00RVv9_Y,769
58
+ skill_scanner/core/static_analysis/parser/python_parser.py,sha256=Imlv4PO6XZKQpdCRZ6jV5uBAySuBN6XnHAqH4LEvvGE,13773
59
+ skill_scanner/core/static_analysis/semantic/__init__.py,sha256=7HS7lJ4APpyfWLTUQ_24aJkrLX2MQTcc4erYFtLKm3o,877
60
+ skill_scanner/core/static_analysis/semantic/name_resolver.py,sha256=TEJQkEaTvkL7dnAZwNbcLALPVw85Qc3FS5jfr4CYEsQ,6218
61
+ skill_scanner/core/static_analysis/semantic/type_analyzer.py,sha256=NXEOZO8-vYZ97SQJ5Gu_YLWFDMDhtvtuixVwYGarmDM,5942
62
+ skill_scanner/core/static_analysis/taint/__init__.py,sha256=71JejlK110K2r3LXNIJOLGCZ7I5Q7cEn8XvfCCoEexA,809
63
+ skill_scanner/core/static_analysis/taint/tracker.py,sha256=1WExA8NAV62X5Az64grI41LkkyMNQ7kFS8Mzf6Id1NI,7182
64
+ skill_scanner/core/static_analysis/types/__init__.py,sha256=XluM6BlZ8ECfdAD-231ONJn13UeDdAGmirPAVc0zePk,937
65
+ skill_scanner/data/__init__.py,sha256=eeZz0MhPMEV-PAx8Eqpbb4ey6EHbXT5g8j-DC4427A4,969
66
+ skill_scanner/data/prompts/boilerplate_protection_rule_prompt.md,sha256=DNXYx13Mcbn2q9hw4msTDDbq_VcYCiVkqBZVFSNfzOg,1471
67
+ skill_scanner/data/prompts/code_alignment_threat_analysis_prompt.md,sha256=OzOOFVCbhSHFYCd4Xg3_q0tIlOe32YRFOje-lZTyYws,25406
68
+ skill_scanner/data/prompts/llm_response_schema.json,sha256=nBPlsOtuqv0zwIns4YY7uZsaAM0uPZ7mkcqe8tNDHl8,2971
69
+ skill_scanner/data/prompts/skill_meta_analysis_prompt.md,sha256=aufAuj71GtMq9jwZfQoXAaZj0x43BAeBhC-fahc3bk4,13926
70
+ skill_scanner/data/prompts/skill_threat_analysis_prompt.md,sha256=sg38JO8PvmxlpPudqzmUhGdv66A6d_Bj4dPiGVc_g8U,11629
71
+ skill_scanner/data/prompts/unified_response_schema.md,sha256=-f1EDpKzxjMMFFxXlakS3rORyLtD1_2XiuNwnty1nQs,3571
72
+ skill_scanner/data/rules/signatures.yaml,sha256=EfP_gQk2tTNLNTaJK1si_yfg6XpmxGDGSaQCqpTnxvs,16465
73
+ skill_scanner/data/yara_rules/autonomy_abuse.yara,sha256=5rbbKXvdWrrIi29T_nBhOQB9erUO8vqK_6TjWok-V2U,2581
74
+ skill_scanner/data/yara_rules/code_execution.yara,sha256=mdXAEqi_Upphzt-NhGascbdG5hu8-UDEiRMfq0lgvWc,1896
75
+ skill_scanner/data/yara_rules/coercive_injection.yara,sha256=3QNzoiHDyhk1zUXHv7_COtCBSsr-bb--H4wKeNRCbBM,5359
76
+ skill_scanner/data/yara_rules/command_injection.yara,sha256=gwZ531smAPzLU1iodtX1JuZOyM_2RwKtBj_SfKjt_20,2163
77
+ skill_scanner/data/yara_rules/credential_harvesting.yara,sha256=7W0pSKpW2KAmek1qP_DpjMHKuswv5L36tWusjuEl6Pc,5643
78
+ skill_scanner/data/yara_rules/prompt_injection.yara,sha256=q5tT7-L__x9RCjdAbFLcs9mSs8gZOmPPzjbdNKRwIHE,2715
79
+ skill_scanner/data/yara_rules/script_injection.yara,sha256=pzVPd7b9WNAS5iw8ZMoUgojKSBlEeSTLHLBho8UiMmA,3100
80
+ skill_scanner/data/yara_rules/skill_discovery_abuse.yara,sha256=l1a2YESrARelhByvKxKaOdohKntMqxYGVcusp-1ZZCk,2452
81
+ skill_scanner/data/yara_rules/sql_injection.yara,sha256=pWq3ccqEvQtWz4fU8dQOkhCgVl6US9SZJDfuBU_YCY4,3691
82
+ skill_scanner/data/yara_rules/system_manipulation.yara,sha256=XoO17sZrarzdC58yyHaIz8z36x5xyxzmQXBnkYdoYfM,2231
83
+ skill_scanner/data/yara_rules/tool_chaining_abuse.yara,sha256=1SyF3_j3VJysDvn1uKkuP9G7F4EhMYXMrq7Xcn1UURI,2255
84
+ skill_scanner/data/yara_rules/transitive_trust_abuse.yara,sha256=8YMYbM5qwn-pqn8EFHJwpKvWyk__n9vEI7bH_MLzF2k,2772
85
+ skill_scanner/data/yara_rules/unicode_steganography.yara,sha256=5UxTvcy8CeWJLrPeldgJ9rY5gfODlC9bTNOkCauuOJA,2650
86
+ skill_scanner/hooks/__init__.py,sha256=W7_Xr71Edm6eHKz9_vZgpERbr0Wx2cyTxPn4YJaGg6o,739
87
+ skill_scanner/hooks/pre_commit.py,sha256=dtajQcyAlSaH15J1O9HHQ67xrGj2P6M2pHN6MZ0htwY,13207
88
+ skill_scanner/threats/__init__.py,sha256=9qlA659fV2Ngl-nV3INIrbVDvXzevHy0F9YAmu_kPWE,875
89
+ skill_scanner/threats/threats.py,sha256=egFsT1crNlWQH3szG8yYIURMXXGh7GJnH3wI8w05nfI,21449
90
+ skill_scanner/utils/__init__.py,sha256=mmzKMNaDQ3EtmD2zr_68gMatm4OETbVNtEXuVESxzJs,906
91
+ skill_scanner/utils/command_utils.py,sha256=74rojYVuVWpv-HVdW0qTIzq0ySPdpBuyNTdIQZDakUM,4291
92
+ skill_scanner/utils/di_container.py,sha256=O3aaQVKcu4t1YUXl9iCZxjSBXnvgddlTgmEp0De_g04,4585
93
+ skill_scanner/utils/file_utils.py,sha256=LT2xwrbqIWaYC-BYAL9zpF6a2xk6QNUVzItvGGJcBn8,2043
94
+ skill_scanner/utils/logging_config.py,sha256=8LJwRCVM-oED_6KRDvtjaL8cvEoR88seX1pDyILeQV4,2939
95
+ skill_scanner/utils/logging_utils.py,sha256=CLdOYmQdJejiLbcECTT2CbDU27PJ327AFMmeuVfCy94,1902
96
+ cisco_ai_skill_scanner-1.0.1.dist-info/METADATA,sha256=Ph3EsZ9hjAj9CbQGa8Cew3SM1iF3RfHowlfVifp_37I,9166
97
+ cisco_ai_skill_scanner-1.0.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
98
+ cisco_ai_skill_scanner-1.0.1.dist-info/entry_points.txt,sha256=Qpg94wQPc6kWF_KQ-jf2tL_wCJ3aJfZ4V4vsYz50GIw,175
99
+ cisco_ai_skill_scanner-1.0.1.dist-info/licenses/LICENSE,sha256=b4va5sK_CWxpeDnOO2MF0MKqsiwU-3YblMmWKnmuWZg,653
100
+ cisco_ai_skill_scanner-1.0.1.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ [console_scripts]
2
+ skill-scanner = skill_scanner.cli.cli:main
3
+ skill-scanner-api = skill_scanner.api.api_cli:main
4
+ skill-scanner-pre-commit = skill_scanner.hooks.pre_commit:main
@@ -15,15 +15,19 @@
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
17
  """
18
- Claude Skill Analyzer - Security scanner for Claude Skills packages.
18
+ Skill Scanner - Security scanner for agent skills packages.
19
19
  """
20
20
 
21
- __version__ = "0.2.0"
21
+ try:
22
+ from ._version import __version__
23
+ except ImportError:
24
+ __version__ = "0.0.0+unknown"
25
+
22
26
  __author__ = "Cisco Systems, Inc."
23
27
 
24
28
  # Core exports
25
29
  from .config.config import Config
26
- from .config.constants import SkillAnalyzerConstants
30
+ from .config.constants import SkillScannerConstants
27
31
  from .core.loader import SkillLoader, load_skill
28
32
  from .core.models import Finding, Report, ScanResult, Severity, Skill, ThreatCategory
29
33
  from .core.scanner import SkillScanner, scan_directory, scan_skill
@@ -41,5 +45,5 @@ __all__ = [
41
45
  "SkillLoader",
42
46
  "load_skill",
43
47
  "Config",
44
- "SkillAnalyzerConstants",
48
+ "SkillScannerConstants",
45
49
  ]
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '1.0.0'
32
- __version_tuple__ = version_tuple = (1, 0, 0)
31
+ __version__ = version = '1.0.1'
32
+ __version_tuple__ = version_tuple = (1, 0, 1)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -15,7 +15,7 @@
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
17
  """
18
- REST API server for Claude Skill Analyzer.
18
+ REST API server for Skill Scanner.
19
19
 
20
20
  Matches MCP Scanner's API structure.
21
21
  """
@@ -14,9 +14,9 @@
14
14
  #
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
- """API module for Skill Analyzer.
17
+ """API module for Skill Scanner.
18
18
 
19
- This module provides a FastAPI application for scanning Claude Skills packages.
19
+ This module provides a FastAPI application for scanning agent skills packages.
20
20
  """
21
21
 
22
22
  from fastapi import FastAPI
@@ -24,8 +24,8 @@ from fastapi import FastAPI
24
24
  from .router import router as api_router
25
25
 
26
26
  app = FastAPI(
27
- title="Claude Skill Analyzer API",
28
- description="Security scanning API for Claude Skills packages",
27
+ title="Skill Scanner API",
28
+ description="Security scanning API for agent skills packages",
29
29
  version="0.2.0",
30
30
  docs_url="/docs",
31
31
  redoc_url="/redoc",
@@ -25,21 +25,21 @@ import sys
25
25
  def main():
26
26
  """Main entry point for API server CLI."""
27
27
  parser = argparse.ArgumentParser(
28
- description="Claude Skill Analyzer API Server",
28
+ description="Skill Scanner API Server",
29
29
  formatter_class=argparse.RawDescriptionHelpFormatter,
30
30
  epilog="""
31
31
  Examples:
32
32
  # Start server on default port
33
- skill-analyzer-api
33
+ skill-scanner-api
34
34
 
35
35
  # Start on custom port
36
- skill-analyzer-api --port 8080
36
+ skill-scanner-api --port 8080
37
37
 
38
38
  # Start with auto-reload for development
39
- skill-analyzer-api --reload
39
+ skill-scanner-api --reload
40
40
 
41
41
  # Custom host and port
42
- skill-analyzer-api --host 0.0.0.0 --port 9000
42
+ skill-scanner-api --host 0.0.0.0 --port 9000
43
43
  """,
44
44
  )
45
45
 
@@ -58,14 +58,14 @@ Examples:
58
58
  print("Install with: pip install fastapi uvicorn python-multipart", file=sys.stderr)
59
59
  return 1
60
60
 
61
- print("Starting Claude Skill Analyzer API Server...")
61
+ print("Starting Skill Scanner API Server...")
62
62
  print(f"Server: http://{args.host}:{args.port}")
63
63
  print(f"Docs: http://{args.host}:{args.port}/docs")
64
64
  print(f"Health: http://{args.host}:{args.port}/health")
65
65
  print()
66
66
 
67
67
  try:
68
- uvicorn.run("skillanalyzer.api.api:app", host=args.host, port=args.port, reload=args.reload)
68
+ uvicorn.run("skill_scanner.api.api:app", host=args.host, port=args.port, reload=args.reload)
69
69
  except KeyboardInterrupt:
70
70
  print("\nShutting down server...")
71
71
  return 0
@@ -15,7 +15,7 @@
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
17
  """
18
- REST API server for Claude Skill Analyzer (Phase 4).
18
+ REST API server for Skill Scanner.
19
19
 
20
20
  Provides HTTP endpoints for skill scanning, similar to MCP Scanner's API server.
21
21
  """
@@ -126,8 +126,8 @@ class BatchScanRequest(BaseModel):
126
126
 
127
127
  # Create FastAPI app
128
128
  app = FastAPI(
129
- title="Claude Skill Analyzer API",
130
- description="Security scanning API for Claude Skills packages",
129
+ title="Skill Scanner API",
130
+ description="Security scanning API for agent skills packages",
131
131
  version="0.2.0",
132
132
  docs_url="/docs",
133
133
  redoc_url="/redoc",
@@ -140,7 +140,7 @@ scan_results_cache = {}
140
140
  @app.get("/", response_model=dict)
141
141
  async def root():
142
142
  """Root endpoint."""
143
- return {"service": "Claude Skill Analyzer API", "version": "0.2.0", "docs": "/docs", "health": "/health"}
143
+ return {"service": "Skill Scanner API", "version": "0.2.0", "docs": "/docs", "health": "/health"}
144
144
 
145
145
 
146
146
  @app.get("/health", response_model=HealthResponse)
@@ -309,7 +309,7 @@ async def scan_uploaded_skill(
309
309
  raise HTTPException(status_code=400, detail="File must be a ZIP archive")
310
310
 
311
311
  # Create temporary directory
312
- temp_dir = Path(tempfile.mkdtemp(prefix="skill_analyzer_"))
312
+ temp_dir = Path(tempfile.mkdtemp(prefix="skill_scanner_"))
313
313
 
314
314
  try:
315
315
  # Save uploaded file
@@ -627,7 +627,7 @@ def run_server(host: str = "0.0.0.0", port: int = 8000, reload: bool = False):
627
627
  """
628
628
  import uvicorn
629
629
 
630
- uvicorn.run("skillanalyzer.api_server:app", host=host, port=port, reload=reload)
630
+ uvicorn.run("skill_scanner.api.api_server:app", host=host, port=port, reload=reload)
631
631
 
632
632
 
633
633
  if __name__ == "__main__":
@@ -14,7 +14,7 @@
14
14
  #
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
- """API router for Skill Analyzer endpoints."""
17
+ """API router for Skill Scanner endpoints."""
18
18
 
19
19
  import shutil
20
20
  import tempfile
@@ -123,7 +123,7 @@ class BatchScanRequest(BaseModel):
123
123
  @router.get("/", response_model=dict)
124
124
  async def root():
125
125
  """Root endpoint."""
126
- return {"service": "Claude Skill Analyzer API", "version": "0.2.0", "docs": "/docs", "health": "/health"}
126
+ return {"service": "Skill Scanner API", "version": "0.2.0", "docs": "/docs", "health": "/health"}
127
127
 
128
128
 
129
129
  @router.get("/health", response_model=HealthResponse)
@@ -282,7 +282,7 @@ async def scan_uploaded_skill(
282
282
  if not file.filename or not file.filename.endswith(".zip"):
283
283
  raise HTTPException(status_code=400, detail="File must be a ZIP archive")
284
284
 
285
- temp_dir = Path(tempfile.mkdtemp(prefix="skill_analyzer_"))
285
+ temp_dir = Path(tempfile.mkdtemp(prefix="skill_scanner_"))
286
286
 
287
287
  try:
288
288
  zip_path = temp_dir / file.filename
@@ -15,7 +15,7 @@
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
17
  """
18
- Command-line interface for Claude Skill Analyzer.
18
+ Command-line interface for Skill Scanner.
19
19
 
20
20
  Matches MCP Scanner's CLI structure.
21
21
  """
@@ -15,7 +15,7 @@
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
17
  """
18
- Command-line interface for the Claude Skill Analyzer.
18
+ Command-line interface for the Skill Scanner.
19
19
  """
20
20
 
21
21
  import argparse
@@ -623,7 +623,7 @@ def generate_multi_skill_summary(report) -> str:
623
623
  """Generate a simple summary for multiple skills."""
624
624
  lines = []
625
625
  lines.append("=" * 60)
626
- lines.append("Claude Skills Security Scan Report")
626
+ lines.append("Agent Skills Security Scan Report")
627
627
  lines.append("=" * 60)
628
628
  lines.append(f"Skills Scanned: {report.total_skills_scanned}")
629
629
  lines.append(f"Safe Skills: {report.safe_count}")
@@ -648,33 +648,33 @@ def generate_multi_skill_summary(report) -> str:
648
648
  def main():
649
649
  """Main CLI entry point."""
650
650
  parser = argparse.ArgumentParser(
651
- description="Claude Skill Analyzer - Security scanner for Claude Skills packages",
651
+ description="Skill Scanner - Security scanner for agent skills packages",
652
652
  formatter_class=argparse.RawDescriptionHelpFormatter,
653
653
  epilog="""
654
654
  Examples:
655
655
  # Scan a single skill
656
- skill-analyzer scan /path/to/skill
656
+ skill-scanner scan /path/to/skill
657
657
 
658
658
  # Scan with behavioral analysis (dataflow tracking)
659
- skill-analyzer scan /path/to/skill --use-behavioral
659
+ skill-scanner scan /path/to/skill --use-behavioral
660
660
 
661
661
  # Scan with all engines (static + behavioral + LLM)
662
- skill-analyzer scan /path/to/skill --use-behavioral --use-llm
662
+ skill-scanner scan /path/to/skill --use-behavioral --use-llm
663
663
 
664
664
  # Scan with JSON output
665
- skill-analyzer scan /path/to/skill --format json
665
+ skill-scanner scan /path/to/skill --format json
666
666
 
667
667
  # Scan all skills in a directory
668
- skill-analyzer scan-all /path/to/skills
668
+ skill-scanner scan-all /path/to/skills
669
669
 
670
670
  # Scan recursively with all engines
671
- skill-analyzer scan-all /path/to/skills --recursive --use-behavioral --use-llm
671
+ skill-scanner scan-all /path/to/skills --recursive --use-behavioral --use-llm
672
672
 
673
673
  # List available analyzers
674
- skill-analyzer list-analyzers
674
+ skill-scanner list-analyzers
675
675
 
676
676
  # Validate rule signatures
677
- skill-analyzer validate-rules
677
+ skill-scanner validate-rules
678
678
  """,
679
679
  )
680
680
 
@@ -15,12 +15,12 @@
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
17
  """
18
- Configuration management for Claude Skill Analyzer.
18
+ Configuration management for Skill Scanner.
19
19
 
20
20
  Mirrors MCP Scanner's config structure.
21
21
  """
22
22
 
23
23
  from .config import Config
24
- from .constants import SkillAnalyzerConstants
24
+ from .constants import SkillScannerConstants
25
25
 
26
- __all__ = ["Config", "SkillAnalyzerConstants"]
26
+ __all__ = ["Config", "SkillScannerConstants"]
@@ -15,7 +15,7 @@
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
17
  """
18
- Configuration class for Claude Skill Analyzer.
18
+ Configuration class for Skill Scanner.
19
19
 
20
20
  Based on MCP Scanner's Config structure.
21
21
  """
@@ -28,7 +28,7 @@ from pathlib import Path
28
28
  @dataclass
29
29
  class Config:
30
30
  """
31
- Configuration for Claude Skill Analyzer.
31
+ Configuration for Skill Scanner.
32
32
 
33
33
  Mirrors MCP Scanner's Config class structure.
34
34
  """
@@ -14,10 +14,10 @@
14
14
  #
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
- """Configuration parser for Skill Analyzer.
17
+ """Configuration parser for Skill Scanner.
18
18
 
19
19
  This module provides functionality to parse configuration files
20
- and environment variables for Skill Analyzer.
20
+ and environment variables for Skill Scanner.
21
21
  """
22
22
 
23
23
  import os
@@ -25,7 +25,7 @@ from pathlib import Path
25
25
 
26
26
  from ..utils.logging_config import get_logger
27
27
  from .config import Config
28
- from .constants import SkillAnalyzerConstants
28
+ from .constants import SkillScannerConstants
29
29
 
30
30
  logger = get_logger(__name__)
31
31
 
@@ -74,10 +74,10 @@ def parse_config_file(config_path: str | None = None) -> Config:
74
74
  if not config_path:
75
75
  # Try to find default config file
76
76
  default_paths = [
77
- Path.home() / ".skillanalyzer" / "config.yaml",
78
- Path.home() / ".skillanalyzer" / "config.json",
79
- Path.cwd() / ".skillanalyzer.yaml",
80
- Path.cwd() / ".skillanalyzer.json",
77
+ Path.home() / ".skill_scanner" / "config.yaml",
78
+ Path.home() / ".skill_scanner" / "config.json",
79
+ Path.cwd() / ".skill_scanner.yaml",
80
+ Path.cwd() / ".skill_scanner.json",
81
81
  ]
82
82
 
83
83
  for path in default_paths:
@@ -96,11 +96,11 @@ def parse_config_file(config_path: str | None = None) -> Config:
96
96
 
97
97
 
98
98
  class ConfigParser:
99
- """Parser for Skill Analyzer configuration files."""
99
+ """Parser for Skill Scanner configuration files."""
100
100
 
101
101
  def __init__(self):
102
102
  """Initialize the config parser."""
103
- self.constants = SkillAnalyzerConstants
103
+ self.constants = SkillScannerConstants
104
104
 
105
105
  def parse(self, config_path: str | None = None) -> Config:
106
106
  """Parse configuration from file and environment.
@@ -15,7 +15,7 @@
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
17
  """
18
- Constants for Claude Skill Analyzer.
18
+ Constants for Skill Scanner.
19
19
 
20
20
  Mirrors MCP Scanner's constants structure.
21
21
  """
@@ -23,7 +23,7 @@ Mirrors MCP Scanner's constants structure.
23
23
  from pathlib import Path
24
24
 
25
25
 
26
- class SkillAnalyzerConstants:
26
+ class SkillScannerConstants:
27
27
  """Constants used throughout the analyzer."""
28
28
 
29
29
  # Version
@@ -15,7 +15,7 @@
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
17
  """
18
- Core functionality for Claude Skill Analyzer.
18
+ Core functionality for Skill Scanner.
19
19
 
20
20
  This module contains the core components including analyzers, scanner engine,
21
21
  and data models.
@@ -15,7 +15,7 @@
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
17
  """
18
- Analyzer modules for detecting security vulnerabilities in Claude Skills.
18
+ Analyzer modules for detecting security vulnerabilities in agent skills.
19
19
 
20
20
  Structure mirrors MCP Scanner's analyzer organization.
21
21
  """
@@ -61,9 +61,9 @@ except (ImportError, ModuleNotFoundError):
61
61
  pass
62
62
 
63
63
  try:
64
- from .cross_skill_analyzer import CrossSkillAnalyzer # noqa: F401
64
+ from .cross_skill_scanner import CrossSkillScanner # noqa: F401
65
65
 
66
- __all__.append("CrossSkillAnalyzer")
66
+ __all__.append("CrossSkillScanner")
67
67
  except (ImportError, ModuleNotFoundError):
68
68
  pass
69
69
 
@@ -15,7 +15,7 @@
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
17
  """
18
- AI Defense API analyzer for Claude Skills security scanning.
18
+ AI Defense API analyzer for agent skills security scanning.
19
19
 
20
20
  Integrates with Cisco AI Defense API (https://api.aidefense.cisco.com) for:
21
21
  - Prompt injection detection
@@ -325,7 +325,7 @@ class AIDefenseAnalyzer(BaseAnalyzer):
325
325
  }
326
326
  ]
327
327
  metadata = {
328
- "source": "skill_analyzer",
328
+ "source": "skill_scanner",
329
329
  "skill_name": skill_name,
330
330
  "file_path": file_path,
331
331
  "content_type": content_type,
@@ -465,7 +465,7 @@ class AIDefenseAnalyzer(BaseAnalyzer):
465
465
  {"role": "user", "content": f"# Code Analysis for {file_path}\n```{language}\n{content[:15000]}\n```"}
466
466
  ]
467
467
  metadata = {
468
- "source": "skill_analyzer",
468
+ "source": "skill_scanner",
469
469
  "skill_name": skill_name,
470
470
  "file_path": file_path,
471
471
  "language": language,
@@ -14,7 +14,7 @@
14
14
  #
15
15
  # SPDX-License-Identifier: Apache-2.0
16
16
 
17
- """Behavioral Analysis Package for Claude Skills.
17
+ """Behavioral Analysis Package for Agent Skills.
18
18
 
19
19
  This package provides enhanced behavioral analysis capabilities including:
20
20
  - Alignment verification between skill description and code behavior
@@ -192,7 +192,7 @@ class AlignmentLLMClient:
192
192
  {
193
193
  "role": "system",
194
194
  "content": (
195
- "You are a security expert analyzing Claude Skills. "
195
+ "You are a security expert analyzing agent skills. "
196
196
  "You receive complete dataflow analysis and code context. "
197
197
  "Analyze if the skill description accurately describes what the code actually does. "
198
198
  "Respond ONLY with valid JSON. Do not include any markdown formatting or code blocks."