CoolFace
Datasetpublic

OpenClaw/clawhub-security-signals

ClawHub Security Signals πŸ¦€ ClawHub | πŸ“ OpenClaw Blog | πŸ€— Hugging Face Blog | πŸ“„ Paper | πŸ“„ Pre-Print ClawHub Security Signals is a sanitized, MIT-licensed security-signals dataset for public OpenClaw agent skills. It captures how an agent-skill registry evaluates trust, provenance, bundled code, and scanner evidence at scale. This dataset was presented in the paper ClawHub Security Signals: When VirusTotal, Static Analysis, and SkillSpector Disagree. Paper snapshot: this… See the full description on the dataset page: https://huggingface.co/datasets/OpenClaw/clawhub-security-signals.

sourceHugging Facemitupdated 3mo agoView on Hugging Face
53likes400downloads
Dataset Card

ClawHub Security Signals

πŸ¦€ **ClawHub** | πŸ“ **OpenClaw Blog** | πŸ€— **Hugging Face Blog** | πŸ“„ **Paper** | πŸ“„ **Pre-Print**

ClawHub Security Signals is a sanitized, MIT-licensed security-signals dataset for public OpenClaw agent skills. It captures how an agent-skill registry evaluates trust, provenance, bundled code, and scanner evidence at scale.

This dataset was presented in the paper ClawHub Security Signals: When VirusTotal, Static Analysis, and SkillSpector Disagree.

Paper snapshot: this repository is frozen to the dataset snapshot used for the paper and keeps its original train/validation/test/eval-holdout splits for reproducible comparison. For the refreshed live ClawHub security corpus, use `OpenClaw/clawhub-security-signals-live`.

This Hugging Face dataset repository hosts 67,453 latest public ClawHub skill versions with redacted SKILL.md content, sanitized bundled files where present, ClawScan registry verdicts, and supporting scanner evidence from VirusTotal, static heuristic analysis, and NVIDIA SkillSpector.

Important framing: scanner positives are evidence, not ground truth. SkillSpector findings are semantic agentic-risk advisories, not accusations or install-blocking verdicts by themselves. A ClawScan suspicious verdict means "review before trusting," not "malicious."

The core research signal is scanner disagreement: VirusTotal, static analysis, and SkillSpector rarely flag the same skills, and their disagreement is structured by attack surface. Agent-skill security therefore needs layered governance rather than a single-scanner allow/block decision.

Safety

This dataset is sanitized for security research. It excludes raw private package contents, storage identifiers, private user identifiers, emails, raw secrets, and runnable private artifacts. SKILL.md text and bundle-file content are redacted upstream before snapshot export, then checked again during private prep for email addresses, token-like strings, credential-like assignments, auth headers, private keys, and other secret-like values.

The dataset is a silver-standard corpus: clawscan_verdict is the registry's automated operational verdict, not a human-adjudicated ground-truth label.

Key Numbers

MetricCount
Latest public skill rows in viewer dataset67,453
Normalized latest public skill artifacts67,478
Public source-artifact rows in source snapshot187,423
Scanner result rows used as evidence333,050
Static finding rows used as evidence11,337
Scanner-derived label rows used as evidence333,139
Rows with at least one exported bundle file13,255
Rows with at least one code file in exported bundle content6,785
Exported sanitized bundle files58,516
Sanitized bundle content size278.9 MB
Secret-like values redacted during prep387
TruffleHog verified secrets after validation0

ClawScan Verdicts

clawscan_verdict is the final registry-style label. It is produced after ClawScan weighs scanner evidence, provenance, metadata, and moderation context.

VerdictRowsShare
clean41,74361.9%
suspicious25,50437.8%
malicious2060.3%

The suspicious class is intentionally broad. It includes skills with unclear disclosure, overbroad authority, scanner disagreement, risky defaults, or enough blast radius that a user or registry should review the Skill Card before trusting the skill.

Scanner Coverage

A scanner is treated as positive when its status is suspicious or malicious. clean, stale, error, and missing statuses are non-positive for overlap analysis.

Scanner contextRows with sourceSource coveragePositive rowsPositive share
VirusTotal65,87397.66%5,2257.75%
Static analysis66,18598.12%4,4346.57%
SkillSpector66,22298.18%32,85648.71%

VirusTotal has resolved clean/suspicious/malicious status for 65,640 rows; among those resolved rows, 8.0% are positive. SkillSpector resolves to clean or suspicious for 66,206 rows; among those resolved rows, 49.6% are advisory-positive.

Scanner Disagreement

Of the 67,453 rows, 35,600 (52.8%) carry at least one positive scanner signal. Most positives are not corroborated by another scanner.

Positive patternRowsShare
None31,85347.22%
VirusTotal only1,8212.70%
Static only8051.19%
SkillSpector only26,52739.33%
VirusTotal + Static1180.17%
VirusTotal + SkillSpector2,8184.18%
Static + SkillSpector3,0434.51%
All three4680.69%

Pairwise Jaccard overlap never exceeds 0.104, and Cohen's kappa remains close to zero (0.045-0.082). This is the central trust finding: static analysis, malware reputation, and semantic agentic-risk analysis inspect different attack surfaces.

Verdict-Conditioned Signals

VerdictRowsVirusTotal+Static+SkillSpector+No positive
clean41,7431,847 (4.4%)1,355 (3.2%)13,633 (32.7%)26,470 (63.4%)
suspicious25,5043,228 (12.7%)3,053 (12.0%)19,209 (75.3%)5,333 (20.9%)
malicious206150 (72.8%)26 (12.6%)14 (6.8%)50 (24.3%)

SkillSpector is the dominant positive source in the review-needed region, while VirusTotal dominates the malicious-verdict region. This inversion is expected: SkillSpector reasons about semantic agentic risk and disclosure, while VirusTotal is stronger for bundled-code malware evidence.

SkillSpector Risk Categories

SkillSpector categories are row-level advisory occurrences. A single skill can have multiple categories.

CategoryRows
MCP Least Privilege9,641
MCP Tool Poisoning5,084
Data Exfiltration2,192
Dangerous Code Execution1,629
Rogue Agent1,428
Supply Chain1,336
Data Flow976
Privilege Escalation792
Tool Misuse647
Excessive Agency511

These are not abuse labels. They describe authority, scope, tool semantics, execution risk, data flow, and disclosure properties that may be legitimate when documented and bounded.

Static Finding Highlights

The most common static reason codes are:

Static reason codeRows
suspicious.dangerous_exec1,428
suspicious.env_credential_access1,298
suspicious.exposed_secret_literal1,219
suspicious.dynamic_code_execution451
suspicious.prompt_injection_instructions433
suspicious.install_untrusted_source250
suspicious.destructive_delete_command201
suspicious.potential_exfiltration181
suspicious.insecure_tls_verification166
suspicious.secret_argv_exposure121

Splits

Splits are deterministic.

SplitRowsShare
train47,26270.07%
validation10,07614.94%
test6,74710.00%
eval_holdout3,3684.99%

Data Format

All data files are JSON Lines.

Core columns:

  • β€”id: stable opaque row id derived from the source artifact reference.
  • β€”skill_slug: owner-qualified public ClawHub skill slug when available, otherwise the unqualified public slug.
  • β€”skill_version: public skill version.
  • β€”skill_md_content: redacted SKILL.md markdown content from the source snapshot.
  • β€”skill_bundle_content: redacted authored bundle files excluding SKILL.md and generated skill-card.md; sha256 and sizeBytes describe the emitted redacted content.
  • β€”clawscan_verdict: final ClawScan verdict: clean, suspicious, or malicious.
  • β€”clawscan_confidence: ClawScan confidence when present.
  • β€”clawscan_model: ClawScan model name when present.
  • β€”clawscan_summary: redacted ClawScan summary when present.
  • β€”static_status, static_finding_count, static_reason_codes: static scanner summary.
  • β€”virustotal_status, virustotal_*_count: VirusTotal summary counts.
  • β€”skillspector_status, skillspector_score, skillspector_severity, skillspector_issue_count, skillspector_issue_codes, skillspector_issue_categories: SkillSpector summary fields.
  • β€”clawscan_context: supporting scanner context used by ClawScan, currently static, virustotal, and skillspector when those inputs are present.
  • β€”split: deterministic split name.

clawscan_verdict is the only label-like top-level field. Supporting scanner outputs stay separate so consumers can distinguish ClawScan's final verdict from the scanner inputs that informed it.

Example:

json
{
  "id": "2819568fe1c3a20ab112cd83eba698eb9719a809f5c04b2d5945c2c765f17751",
  "skill_slug": "gumadeiras/roku",
  "skill_version": "2.0.1",
  "clawscan_verdict": "suspicious",
  "clawscan_confidence": "high",
  "clawscan_model": "gpt-5.5",
  "static_status": "clean",
  "virustotal_status": "clean",
  "skillspector_status": "suspicious",
  "skillspector_score": 100.0,
  "skillspector_severity": "CRITICAL",
  "skillspector_issue_categories": [
    "Dangerous Code Execution",
    "MCP Tool Poisoning"
  ],
  "split": "train"
}

Loading

python
from datasets import load_dataset

dataset = load_dataset(
    "OpenClaw/clawhub-security-signals",
    name="default",
)

train = dataset["train"]
print(train[0]["skill_slug"], train[0]["clawscan_verdict"])

Croissant

Hugging Face can expose this dataset through the Croissant metadata endpoint when the dataset viewer has converted the splits to Parquet. The dataset card includes the mlcroissant tag so the Hub surfaces Croissant-compatible tooling.

Licensing

This dataset is released under the MIT license. ClawHub and public OpenClaw projects are released under the permissive MIT license at the time of publishing, which covers the sanitized signals and analyzed public skill content redistributed here.