Skill Publish Vetter

v1.1.0

Pre-publish privacy scan for ClawHub skills. Detects tokens, keys, credentials, .env secrets, personal info, and internal IPs before publishing.

0· 51· 1 versions· 1 current· 1 all-time· Updated 2d ago· MIT-0
bywei dong@weidongkl

Skill Publish Vetter 🛡️

Pre-publish privacy scan for ClawHub skills.

Every skill must pass this scan before publishing to ClawHub.


When to Use

  • User says "publish skill to ClawHub"
  • User says "upload skill to ClawHub"
  • User says "update skill on ClawHub"
  • Any request to submit a skill to a public registry

Core Principle

Publishing to ClawHub = publicly visible. Any leaked secret is exposed to the world.

Better safe than sorry. Even if the scan passes, always ask for user confirmation before publishing.


Publish Workflow (Mandatory)

When the user requests a publish/upload/update to ClawHub, follow these steps strictly:

Step 1: Identify the Target Skill

  • If the context clearly identifies the target skill, proceed.
  • Otherwise, ask the user which skill to publish.

Step 2: Run the Privacy Scan

The scan script lives in this skill's scripts/publish-check.sh. Run it from this skill's directory:

bash scripts/publish-check.sh <target-skill-directory>

It scans for:

CategoryDetection PatternExample
Tokens / Keyssk-, ghp_, github_pat_, gpg_, xoxb-, glpat-, JWT tokenssk-abc123...
API Keysapi_key, apikey, API_KEY, access_token with actual valuesAPI_KEY=abc123
Passwordspassword, passwd, pwd with non-placeholder valuespassword=mysecret123
Private KeysBEGIN.*PRIVATE KEYPEM private key
Public KeysBEGIN.*PUBLIC KEY, ssh-rsa long stringsSSH public key
.env Values.env files with actual (non-placeholder) assignments.env: DB_PASS=real_password
Hardcoded CredsAuthorization: Bearer with real tokenscurl -H "Authorization: Bearer sk-xxx"
Personal EmailsNon-placeholder, non-org emailszhangsan@gmail.com
Personal Paths/home/username/, /Users/username/ absolute paths/Users/weidongkl/.ssh/id_rsa
Internal IPs192.168.x.x, 10.x.x.x, 172.16-31.x.xhttps://192.168.1.100:8080

Step 3: Output the Full Report

Output the complete scan report to the chat. Do not summarize or omit anything.

Step 4: Secondary Confirmation (Required)

Always ask for confirmation before publishing — even if the scan is clean.

Confirmation message must include:

  1. Skill name
  2. Skill directory path
  3. Full scan report
  4. A clear confirmation prompt

Template:

📋 Publish Confirmation

Skill: <name>
Path: <directory>
Version: <version>
Scan Result: <PASS / ISSUES FOUND>

[Full report here]

Reply "yes" or "confirm" to proceed with publishing, or "cancel" to abort.

Step 5: Wait for User Response

  • "yes" / "confirm" / "ok" / "go" → proceed to Step 6.
  • "cancel" / "no" / "stop" → abort. Do nothing.
  • No response → do not publish. Wait.

Never skip confirmation. Never auto-publish.

Step 6: Publish

After confirmation:

clawhub publish <skill-directory> --slug <slug> --name "<name>" --version "<version>" --changelog "<changelog>"

Ask the user for slug, name, version, and changelog if not provided.

Step 7: Report Result

Tell the user whether publishing succeeded or failed.


Risk Levels

LevelMeaningAction
🚨 CRITICALToken, key, password, private key with actual valuesBlock publish. User must fix first.
⚠️ WARNINGPersonal email, personal path, internal IPRecommend fixing before publishing.
💬 INFOauthor, repository identity fields, metadata env exposureAsk user if intentionally public.

Red Lines (Auto-Block)

If any of these are found, refuse to publish by default:

  1. Any token with actual values (Bearer tokens, API keys, Access tokens)
  2. Any private key content (PEM format, SSH private keys)
  3. Any password/credential with actual values (not placeholders)
  4. .env files with actual configuration values
  5. Hardcoded internal IPs or domains
  6. Base64-encoded sensitive data

If the user explicitly says "publish anyway despite risks", re-confirm once before proceeding.


Placeholder Reference

Use these placeholders when fixing issues:

TypePlaceholder
Tokenyour-api-token / <YOUR_TOKEN>
API Keyyour-api-key / <API_KEY>
Passwordyour-password / <PASSWORD>
Emailyou@example.com / <YOUR_EMAIL>
Usernameyour-username / <USERNAME>
URLhttps://your-server.example.com
IPyour-server-ip

Scan Script

The script is at scripts/publish-check.sh relative to this skill's directory. It uses no absolute paths and works in any installation location.

bash scripts/publish-check.sh <target-skill-directory>

Safety first, publishing second. Never publish without confirmation. 🛡️

Version tags

latestvk97csmhtf2w8pq169vatc09rzx85na6y