Skill Auditor in Sandbox
by @freecodewu
Launch a NovitaClaw (OpenClaw) sandbox, install a specified skill, and generate an installation & security audit report. Use when: (1) You want to test a com...
clawhub install skill-auditor-in-sandboxπ About This Skill
name: skill-auditor-in-sandbox description: "Launch a NovitaClaw (OpenClaw) sandbox, install a specified skill, and generate an installation & security audit report. Use when: (1) You want to test a community skill before installing it locally, (2) You need a security audit of a skill's code, hooks, and dependencies, (3) You want to verify a skill from ClawHub or GitHub in an isolated environment." argument-hint: "
Skill Auditor in Sandbox
Test and audit Claude Code skills in an isolated NovitaClaw (OpenClaw) sandbox before installing them locally. The skill launches a sandbox, installs the target skill, runs a security scan, and generates a structured risk report.
Quick Reference
| Situation | Action |
|-----------|--------|
| Test a ClawHub skill | /skill-auditor-in-sandbox owner/skill-name |
| Test a GitHub skill | /skill-auditor-in-sandbox owner/repo-name |
| Review the report | Check risk level, suspicious patterns, URLs, external paths |
| After review | Pause or stop the sandbox to save costs |
Prerequisites
NOVITA_API_KEY must be set. If not, ask the user to register at https://novita.ai/?utm_source=OpenClaw&utm_medium=Dev_Rel&utm_campaign=Claw-30 and get an API key from https://novita.ai/settings/key-management, then:export NOVITA_API_KEY=
novitaclaw CLI must be installed. If not found:curl -fsSL https://novitaclaw.novita.ai/install.sh | bash
novita-sandbox npm package must be available. If not:npm install novita-sandboxUsage
You are given a skill name (or identifier) as $ARGUMENTS. Your job is to launch a sandbox, install the skill, run a security audit, and generate a report.
Step 1: Launch Sandbox
novitaclaw launch --json
Parse the JSON output and extract sandbox_id and webui. Save these for the report.
If launch fails, check error_code and remediation fields:
MISSING_API_KEY β ask user for API keySANDBOX_TIMEOUT β retry with --timeout 300Step 2: Install Skill
Run the install script from the project root:
SANDBOX_ID= SKILL_NAME="$ARGUMENTS" node scripts/install-skill.mjs
The script outputs JSON: { success, method, skillDir, files, error? }.
success is false, show the error and stop.method used (clawhub / git-github / git-clawhub) for the report.Step 3: Security Audit
Run the audit script:
SANDBOX_ID= SKILL_NAME="$ARGUMENTS" node scripts/audit-skill.mjs
The script outputs JSON:
suspicious[] β lines matching risky code patterns (dynamic execution, shell spawning, encoding, etc.)urls[] β all URL references found in skill filesexternalPaths[] β references to paths outside the skill directory (system dirs, dotfiles, temp dirs)dependencies β contents of requirements.txt or package.json if presentfileContents[] β full contents of all text files for manual reviewStep 4: Assess Risk
Based on audit results, assign a risk level:
| Risk Level | Criteria |
|------------|----------|
| LOW | No suspicious patterns, URLs are legitimate (GitHub, docs), no external paths |
| MEDIUM | Some suspicious patterns but explainable (e.g., fetch() for legitimate API calls) |
| HIGH | Unexplained network calls, access to sensitive paths, obfuscated code |
| CRITICAL | Credential harvesting, mining indicators, command injection patterns |
Step 5: Generate Report
Output a structured report:
## Skill Installation ReportSkill:
Sandbox ID:
Web UI:
Timestamp:
Installation Status
Result: SUCCESS / FAILED
Method:
Files Installed: files Installed Files
Security Analysis
Risk Level: LOW / MEDIUM / HIGH / CRITICAL Suspicious Patterns Found
| File | Line | Pattern | Severity |
|------|------|---------|----------|
(or "None found")URL References
| File | URL | Context |
|------|-----|---------|
(list all URLs and whether they look legitimate)External Path References
(list any, or "None found")Dependencies
(list any, or "No external dependencies")Recommendations
Sandbox Management
To access:
To pause (save costs): novitaclaw pause
To stop (permanent): novitaclaw stop
After generating the report, automatically pause the sandbox to save costs:
novitaclaw pause --json
Then inform the user that the sandbox has been paused and can be resumed or stopped:
To resume: novitaclaw resume
To stop (permanent): novitaclaw stop What Gets Scanned
| Category | Patterns |
|----------|----------|
| Suspicious code | Shell spawning, dynamic code execution, encoding functions, mining indicators |
| Network calls | All URL references found in skill files |
| External paths | System directories, user home dotfiles, temp directories |
| Dependencies | requirements.txt, package.json |
| File contents | Full text of all .md, .txt, .json, .py, .js, .ts, .sh, .yaml, .yml files |
Important Notes
Always use --json flag with novitaclaw commands.
The sandbox auto-terminates based on keep_alive. Suggest pause to save costs.
Prefer pause over stop β stop is irreversible. Confirm before stopping. Attribution
Source: https://github.com/freecodewu/skill-auditor-in-sandbox
Powered by NovitaClaw sandbox infrastructure
π‘ Examples
You are given a skill name (or identifier) as $ARGUMENTS. Your job is to launch a sandbox, install the skill, run a security audit, and generate a report.
Step 1: Launch Sandbox
novitaclaw launch --json
Parse the JSON output and extract sandbox_id and webui. Save these for the report.
If launch fails, check error_code and remediation fields:
MISSING_API_KEY β ask user for API key
SANDBOX_TIMEOUT β retry with --timeout 300Step 2: Install Skill
Run the install script from the project root:
SANDBOX_ID= SKILL_NAME="$ARGUMENTS" node scripts/install-skill.mjs
The script outputs JSON: { success, method, skillDir, files, error? }.
If success is false, show the error and stop.
Note the method used (clawhub / git-github / git-clawhub) for the report. Step 3: Security Audit
Run the audit script:
SANDBOX_ID= SKILL_NAME="$ARGUMENTS" node scripts/audit-skill.mjs
The script outputs JSON:
suspicious[] β lines matching risky code patterns (dynamic execution, shell spawning, encoding, etc.)
urls[] β all URL references found in skill files
externalPaths[] β references to paths outside the skill directory (system dirs, dotfiles, temp dirs)
dependencies β contents of requirements.txt or package.json if present
fileContents[] β full contents of all text files for manual reviewStep 4: Assess Risk
Based on audit results, assign a risk level:
| Risk Level | Criteria |
|------------|----------|
| LOW | No suspicious patterns, URLs are legitimate (GitHub, docs), no external paths |
| MEDIUM | Some suspicious patterns but explainable (e.g., fetch() for legitimate API calls) |
| HIGH | Unexplained network calls, access to sensitive paths, obfuscated code |
| CRITICAL | Credential harvesting, mining indicators, command injection patterns |
Step 5: Generate Report
Output a structured report:
```
βοΈ Configuration
NOVITA_API_KEY must be set. If not, ask the user to register at https://novita.ai/?utm_source=OpenClaw&utm_medium=Dev_Rel&utm_campaign=Claw-30 and get an API key from https://novita.ai/settings/key-management, then:
export NOVITA_API_KEY=
novitaclaw CLI must be installed. If not found:
curl -fsSL https://novitaclaw.novita.ai/install.sh | bash
novita-sandbox npm package must be available. If not:
npm install novita-sandbox