$npx -y skills add Fangcun-AI/SkillWard --skill skillward-audit-skillSecurity-audit a third-party skill bundle (folder with SKILL.md, or .zip / .tar.gz archive) before installing it, using the SkillWard cloud scanner. Trigger on any natural safety question about an external skill — "is this skill safe?", "audit / scan / review this skill", "should
| 1 | # SkillWard Audit |
| 2 | |
| 3 | Thin client for the SkillWard public scanning service at |
| 4 | `https://skillward.fangcunleap.com`. Given a local skill bundle (folder with |
| 5 | `SKILL.md`, or a `.zip` / `.tar.gz` archive), this skill packages it, uploads it |
| 6 | to the remote service, streams scan progress, and reports the verdict. |
| 7 | |
| 8 | ## When to use |
| 9 | |
| 10 | - **Explicit invocation** — user asks to "audit", "scan", "review", or "check |
| 11 | the safety of" a skill bundle. |
| 12 | - **Natural safety question about an external skill** — even without the words |
| 13 | "audit" or "SkillWard", treat any of these as an invocation request when a |
| 14 | skill path / archive is in scope: |
| 15 | - "Is this skill safe?" / "Is it safe to install?" |
| 16 | - "Should I install this?" / "Should I trust this?" |
| 17 | - "Any malware / backdoors / suspicious behavior in here?" |
| 18 | - "Is this trustworthy?" / "Does this look sketchy?" |
| 19 | - "Anything I should know before I install this?" |
| 20 | - **User references a skill bundle path** — a folder containing `SKILL.md`, or |
| 21 | a `.zip` / `.tar.gz` / `.tgz` archive — in a safety-adjacent context. |
| 22 | - **Pre-install safety check** — user is about to install a third-party / |
| 23 | downloaded skill and wants a security pass first. |
| 24 | - **Source mentioned** — user mentions ClawHub, OpenClaw, GitHub, or another |
| 25 | third-party source for a skill bundle in a safety context. |
| 26 | |
| 27 | ## When NOT to use |
| 28 | |
| 29 | - **The user is authoring their own skill** and asking for code review, |
| 30 | feedback, or "does this look right?" on something they just wrote in this |
| 31 | session. Do a normal code review instead — SkillWard is for vetting |
| 32 | *external* code the user did not write. |
| 33 | - **The user just edited the skill in this session** — what they want is |
| 34 | review of their own changes, not a third-party scanner. |
| 35 | - **Built-in / first-party skills** — Claude's own bundled skills don't need |
| 36 | third-party scanning. |
| 37 | - **Non-skill inputs** — a regular codebase, Python package, generic repo, |
| 38 | or arbitrary file that isn't shaped like a skill bundle. Decline and |
| 39 | explain. |
| 40 | - **General malware scanning** of arbitrary files — decline; this tool only |
| 41 | understands skill bundles. |
| 42 | |
| 43 | ## Gathering input |
| 44 | |
| 45 | 1. **User gave a path** — verify it exists. If it's a folder, confirm it contains |
| 46 | `SKILL.md` (or a nested folder that does). If it's an archive, accept `.zip` |
| 47 | / `.tar.gz` / `.tgz`. |
| 48 | 2. **User said "this skill" / "the skill" without a path** — ask one clarifying |
| 49 | question: "Which folder or archive should I scan? Please give me a path (e.g. |
| 50 | `C:\path\to\skill-folder` or `./foo.zip`)." |
| 51 | 3. **User gave a URL or GitHub link** — v1 does not support remote fetching. |
| 52 | Reply: "I can't fetch URLs directly for auditing. Please `git clone` the repo |
| 53 | or download the release zip first, then point me at the local path." |
| 54 | |
| 55 | ## Choosing language |
| 56 | |
| 57 | Inspect the user's most recent 2–3 messages. If any contain CJK (Chinese / |
| 58 | Japanese / Korean) characters — Unicode range `U+4E00–U+9FFF` — pass |
| 59 | `--lang zh`. Otherwise pass `--lang en`. Default to `en` when ambiguous. |
| 60 | |
| 61 | The report JSON always contains both `text` (Chinese) and `text_en` (English) |
| 62 | in `warnings[]`; use whichever matches `--lang` when summarizing back to the |
| 63 | user. |
| 64 | |
| 65 | ## Choosing scan depth |
| 66 | |
| 67 | Default: `--depth sandbox` (static + LLM + server-side Docker sandbox, no |
| 68 | after-tool inspection). Override only when the user signals otherwise: |
| 69 | |
| 70 | - **"quick" / "fast" / "just static" / "快速" / "只要静态"** → `--depth static` |
| 71 | (seconds; skips sandbox) |
| 72 | - **"deep" / "thorough" / "after-tool" / "深度" / "彻底"** → `--depth deep` |
| 73 | (3-15 min; full pipeline incl. after-tool capability check) |
| 74 | |
| 75 | When running `deep`, **warn the user upfront**: "Deep mode runs the Docker |
| 76 | sandbox plus after-tool capability analysis — this typically takes 3–10 minutes. |
| 77 | Starting now." |
| 78 | |
| 79 | ## How to invoke |
| 80 | |
| 81 | ### ⚠️ Required — set the tool timeout explicitly in every call |
| 82 | |
| 83 | Do **not** rely on your exec / bash tool's default timeout. Defaults vary |
| 84 | across harnesses and installations (Claude Code default is 120 s; OpenClaw |
| 85 | default is 1800 s but some deployments override it down to 300 s or less). |
| 86 | A too-short default will SIGKILL `scan.py` mid-scan, the SSE stream is cut |
| 87 | before the server emits the final `report` event, and **nothing gets saved**. |
| 88 | |
| 89 | Pass the timeout explicitly on every invocation. Match the depth you're |
| 90 | running: |
| 91 | |
| 92 | | Depth | Claude Code (`timeout`, ms) | OpenClaw (`timeoutSec`, s) | Typical duration | |
| 93 | | --------- | --------------------------- | ----- |