Skip to content

Add SkillWard plugin#2603

Merged
crazywoola merged 3 commits into
langgenius:mainfrom
Fangcun-AI:add-skillward-plugin
Jun 27, 2026
Merged

Add SkillWard plugin#2603
crazywoola merged 3 commits into
langgenius:mainfrom
Fangcun-AI:add-skillward-plugin

Conversation

@Carlo9013

@Carlo9013 Carlo9013 commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Plugin Submission

Plugin information

Submission type

  • New plugin
  • Version update

What changed

Add SkillWard, a tool plugin for reviewing AI Agent Skill archives before publication or deployment.

This initial Marketplace release exposes one stable tool, scan_skill_archive. Users upload a .zip, .tar.gz, or .tgz archive containing an Agent Skill with SKILL.md; the plugin forwards the archive to the hosted SkillWard /api/scan/archive endpoint and returns a structured security report.

SkillWard is still under active development, and a major update is planned after this initial Marketplace release.

Risk level

  • Low risk
  • Medium risk
  • High risk

The plugin processes uploaded archives and sends them to the hosted SkillWard backend. Depending on user settings, the hosted backend may perform LLM safety evaluation and Docker sandbox runtime verification.

Required checks

  • I have read and followed the Marketplace submission requirements.
  • I have read and comply with the Plugin Developer Agreement.
  • I tested this plugin on Dify Community Edition and Dify Cloud, or documented any limitation below.
  • The package contains only files needed at runtime.
  • The package does not contain secrets, local credentials, .env files, .git directories, virtual environments, caches, logs, or IDE files.
  • The package does not contain executables or bundled binaries, or I explained why they are required below.
  • The plugin README includes setup steps, usage instructions, required APIs or credentials, connection requirements, and the source repository link.
  • The plugin includes PRIVACY.md or a hosted privacy policy, and manifest.yaml references it.
  • All user-facing text is primarily in English, with any localized README files following the i18n guidance.

Security and privacy notes

SkillWard handles user-uploaded Skill archives. The plugin sends one uploaded archive and scan options to the configured SkillWard API base URL. The hosted backend receives the archive through /api/scan/archive, extracts it into a temporary working directory, performs the requested scan, and returns a structured report.

Uploaded archives and extracted files are used only for the requested scan. They are not published, shared, sold, or redistributed by the plugin. Temporary working files created for extraction and scanning are removed after the scan finishes.

Depending on user-selected scan options, the hosted backend may perform static analysis, LLM-based safety evaluation, and Docker sandbox runtime verification. If LLM evaluation is enabled, relevant Skill content may be sent to the model service configured by the SkillWard backend for the purpose of producing the security assessment.

The plugin package does not include secrets, local credentials, executables, bundled binaries, virtual environments, or cache directories.

Local validation

cd skillward
python3 -m unittest discover -s tests -v
python3 -m py_compile main.py provider/skillward.py tools/scan_archive.py archive_client.py
dify plugin package .

Result: 5 unit tests passed, Python compile check passed, and package creation succeeded.

Package verification:

  • fangcunai/skillward/skillward-0.0.8.difypkg
  • Contains manifest.yaml, README.md, PRIVACY.md, _assets/, provider code, client code, and scan_skill_archive.
  • Does not contain hidden scan tools or non-runtime development files.

Reviewer notes

This first release only exposes archive upload scanning. SkillWard is still being actively iterated, and a future major update is planned to improve the hosted scan and report workflow.

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

❌ Request Changes

Decision: Request changes

Failed Checks

Check Status Detail Required action
dify_plugin version ❌ Fail dify_plugin version must be >= 0.9.0; found 0.6.2. Use dify_plugin >= 0.9.0 in the packaged plugin environment.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-6mq1rs04/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-6mq1rs04/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.

Full Check Results

Check Status Detail Required action
PR content language ✅ Pass PR title/body CJK ratio=0.0% (zh=0, en=3034, ignored_zh=0, allowed_zh<=0) None.
Project structure ✅ Pass All expected files present: manifest.yaml, README.md, PRIVACY.md. _assets/: yes. None.
Manifest author ✅ Pass author is valid. None.
Icon validation ✅ Pass icon exists: _assets/icon.svg None.
Version check ✅ Pass version 0.0.8 is available. None.
README language ✅ Pass README.md CJK ratio=0.0% (zh=0, en=2104, allowed_zh<=0) None.
PRIVACY.md ✅ Pass PRIVACY.md exists and is non-empty. None.
Dependency install ✅ Pass requirements installed successfully. None.
dify_plugin version ❌ Fail dify_plugin version must be >= 0.9.0; found 0.6.2. Use dify_plugin >= 0.9.0 in the packaged plugin environment.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-6mq1rs04/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-6mq1rs04/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.
Packaging test ✅ Pass packaging check passed. None.

Next steps

  • dify_plugin version: Use dify_plugin >= 0.9.0 in the packaged plugin environment.
  • Install test: Fix the plugin so test-plugin-install.py passes.

Please address these issues and push an update.

@Carlo9013

Copy link
Copy Markdown
Contributor Author

I have pushed a fix for the dify_plugin SDK version requirement. The workflow is currently awaiting maintainer approval. Thank you for reviewing.

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

❌ Request Changes

Decision: Request changes

Failed Checks

Check Status Detail Required action
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-6vqgt4o8/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-6vqgt4o8/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.

Full Check Results

Check Status Detail Required action
PR content language ✅ Pass PR title/body CJK ratio=0.0% (zh=0, en=3034, ignored_zh=0, allowed_zh<=0) None.
Project structure ✅ Pass All expected files present: manifest.yaml, README.md, PRIVACY.md. _assets/: yes. None.
Manifest author ✅ Pass author is valid. None.
Icon validation ✅ Pass icon exists: _assets/icon.svg None.
Version check ✅ Pass version 0.0.8 is available. None.
README language ✅ Pass README.md CJK ratio=0.0% (zh=0, en=2104, allowed_zh<=0) None.
PRIVACY.md ✅ Pass PRIVACY.md exists and is non-empty. None.
Dependency install ✅ Pass requirements installed successfully. None.
dify_plugin version ✅ Pass dify_plugin version 0.9.1 satisfies >= 0.9.0. None.
Install test ❌ Fail Command failed (1): /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-6vqgt4o8/.venv/bin/python /var/folders/vc/vfsgl8611qn508whmstl644w0000gn/T/pr-review-helper-6vqgt4o8/toolkit/validator/test-plugin-install.py -d /var/folders/vc/vfsgl8611qn5… Fix the plugin so test-plugin-install.py passes.
Packaging test ✅ Pass packaging check passed. None.

Next steps

  • Install test: Fix the plugin so test-plugin-install.py passes.

Please address these issues and push an update.

@Carlo9013

Copy link
Copy Markdown
Contributor Author

Thanks for the review. I pushed a follow-up commit (ab2c13c) to fix the packaged plugin import issue so the install test can run against the archive-only package.

@crazywoola crazywoola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@crazywoola crazywoola merged commit 79cc09a into langgenius:main Jun 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants