Skill Trust Decision

ClawSafe AI Skills Portfolio

The repository is a portfolio of 20+ AI agent skills and tools with most IOCs being false positives or confined to archived/low-sensitivity skills, but contains one hardcoded API key in a monitoring tool and undeclared browser automation behavior in an archived skill.

Install decision first Source: Manual upload Scanned: Apr 3, 2026
Files 605
Artifacts 107
Violations 2
Findings 8
Most direct threat evidence
01
User clones repository or browses skills directory reconnaissance · agents/design/clawhub-skill-monitor/scripts/clawhub_api.py
02
Attacker extracts the hardcoded API key weaponization · agents/design/clawhub-skill-monitor/scripts/clawhub_api.py
03
Attacker uses extracted API key to query or manipulate ClawHub skill registry Lateral Movement · agents/design/clawhub-skill-monitor/scripts/clawhub_api.py

Why this conclusion was reached

3/4 dimensions flagged
Block
Declared vs actual capability

2 undeclared or violating capabilities were inferred.

Block
Hidden execution and egress

8 high-risk artifacts or egress signals were extracted.

Block
Attack chain and severe findings

The report includes 3 attack-chain steps and 2 severe findings.

Review
Dependencies and supply chain hygiene

1 dependency or supply-chain issues need attention.

Attack Chain

01
User clones repository or browses skills directory

reconnaissance · agents/design/clawhub-skill-monitor/scripts/clawhub_api.py:16

02
Attacker extracts the hardcoded API key

weaponization · agents/design/clawhub-skill-monitor/scripts/clawhub_api.py:16

03
Attacker uses extracted API key to query or manipulate ClawHub skill registry

Lateral Movement · agents/design/clawhub-skill-monitor/scripts/clawhub_api.py:45

What drove the risk score up

Hardcoded API key in monitoring tool +15

agents/design/clawhub-skill-monitor/scripts/clawhub_api.py:16 contains a hardcoded ClawHub API key (clh_rlz3TY0FNrsfHjOcmA5vzoUt4-HjkT4t_B56CZwe0kY) that could be exfiltrated if the file is accessed

Undeclared browser automation in archived skill +12

skills-archive/didi-public-low-sensitivity-20260315-204610/didi.py uses Playwright for full browser automation including login, cookies, and order retrieval — not declared in any SKILL.md

False-positive IOCs dominating pre-scan +-10

code_analyzer.sh 'rm -rf /' is a grep DETECTION PATTERN, not execution; base64 in encryption-service.ts is standard crypto IV encoding; test password is in archived test file — all pre-scan IOCs are benign

SKILL.md example uses placeholder credential +8

agents/code/second-brain-triage/SKILL.md:292 shows OPENAI_API_KEY='for-summarization' as a documented example, but could mislead users into hardcoding real keys

Broad API key regex in security checker could cause false positives +5

code_analyzer.sh uses overly broad regex (key.*=.*['"].{8,}['"]) that may misflag legitimate config values

No declared shell/filesystem permissions in main SKILL.md +5

Root SKILL.md (taobao-shopping) declares no tool permissions, yet many scripts use subprocess/shell operations — violation of capability transparency

Most important evidence

High

Hardcoded API key in ClawHub monitoring tool

agents/design/clawhub-skill-monitor/scripts/clawhub_api.py:16 contains a hardcoded ClawHub API key 'clh_rlz3TY0FNrsfHjOcmA5vzoUt4-HjkT4t_B56CZwe0kY'. This is the tool's own API key and should be loaded from environment variables to prevent exfiltration if the repo is compromised or cloned.

agents/design/clawhub-skill-monitor/scripts/clawhub_api.py:16
Replace with: CLAWHUB_API_KEY = os.environ.get('CLAWHUB_API_KEY', '')
High

Undeclared browser automation with credential handling in archived skill

skills-archive/didi-public-low-sensitivity-20260315-204610/didi.py implements full browser automation using Playwright including QR-code login, encrypted cookie storage, and live order state scraping. None of this is declared in a SKILL.md file. The skill is archived but represents a significant hidden capability.

skills-archive/didi-public-low-sensitivity-20260315-204610/didi.py:107
If promoting this skill to active use, add a SKILL.md that declares browser:WRITE and explicitly documents cookie handling and login flows
Medium

Placeholder credential in SKILL.md example

agents/code/second-brain-triage/SKILL.md:292 shows OPENAI_API_KEY='for-summarization' as a documented environment variable example. While this is a placeholder, showing '=' style assignment could mislead users into hardcoding real API keys. Better practice is to show only the export statement without a value.

agents/code/second-brain-triage/SKILL.md:292
Change to: export OPENAI_API_KEY="your-api-key-here" # Replace with your actual key
Medium

Security check script has false-positive-prone regex

agents/design/skill-assessment/evaluators/code_analyzer.sh uses regex 'key.*=.*['"].{8,}['"]' to detect hardcoded keys, which will flag any variable assignment with 8+ character values. This could cause alert fatigue and mask real issues.

agents/design/skill-assessment/evaluators/code_analyzer.sh:56
Refine regex to target specific credential patterns (API_KEY, AWS_SECRET, DB_PASSWORD) rather than generic 'key' matches
Medium

SecureStorage in didi.py loads from undefined module

didi.py imports SecureStorage from 'security' module but the security.py file is separate. The encryption key management is not visible in the archive, making it impossible to audit key lifecycle security.

skills-archive/didi-public-low-sensitivity-20260315-204610/didi.py:22
Review security.py to ensure key derivation uses secure random and keys are not hardcoded or logged
Low

Test file contains hardcoded password

skills-archive/shopping-merchant-public-low-sensitivity-20260315-204610/tests/encryption.test.ts:112 uses password='mySecurePassword123' as a test fixture. This is in a test file within an archived skill — low risk but noted.

skills-archive/shopping-merchant-public-low-sensitivity-20260315-204610/tests/encryption.test.ts:112
Move test fixtures to external test config or use environment-variable-loaded values
Low

Pre-scan IOCs are predominantly false positives

The high-risk-brief.md reports 8 IOCs, but 5 are false positives: 'rm -rf /' is a grep pattern (not execution), base64 Buffer usage is standard crypto, hardcoded IP in didi.py was not found in current file, and test password is in archived test data. Only the API key in clawhub_api.py is a genuine credential issue.

_clawsafe/high-risk-brief.md:1
Update pre-scan detection logic to distinguish between detection patterns and actual dangerous code execution
Low

skill-assessment tool requires broad bash access

agents/design/skill-assessment/SKILL.md declares 'bash: >=4.0' but the tool performs static file analysis only. The declared dependency on bash for a static analysis tool is overly broad.

agents/design/skill-assessment/SKILL.md:6
Document why bash is needed (e.g., 'uses bash find/grep for file scanning') or consider pure-Python rewrite for narrower permission model

Declared capability vs actual capability

Filesystem Pass
Declared NONE
Inferred READ
Multiple scripts in agents/code/, agents/main/publish/ read/write local files without SKILL.md declaration
Network Pass
Declared READ
Inferred READ
SKILL.md describes reading reference files; actual network calls limited to HTTPS API fetches in monitoring tools
Shell Block
Declared NONE
Inferred WRITE
agents/design/skill-assessment/assess.sh and evaluators/ use bash execution; shell:WRITE is required but undeclared
Browser Block
Declared NONE
Inferred WRITE
skills-archive/didi-public-low-sensitivity-20260315-204610/didi.py:107 uses Playwright for full browser automation (login, cookies, order state) — completely undeclared
Environment Pass
Declared NONE
Inferred READ
scripts/read_reference.py and similar read process environment variables — not declared

Suspicious artifacts and egress

Critical Dangerous Command
rm -rf /

agents/design/skill-assessment/evaluators/code_analyzer.sh:63

Critical Encoded Execution
Buffer.from(parts[0], 'base64'

skills-archive/shopping-merchant-public-low-sensitivity-20260315-204610/src/services/encryption-service.ts:52

Critical Encoded Execution
Buffer.from(expectedSignature, 'base64'

skills-archive/shopping-merchant-public-low-sensitivity-20260315-204610/src/services/encryption-service.ts:105

Critical Encoded Execution
Buffer.from(signature, 'base64'

skills-archive/shopping-merchant-public-low-sensitivity-20260315-204610/src/services/encryption-service.ts:106

High API Key
API_KEY="for-summarization"

agents/code/second-brain-triage/SKILL.md:292

High API Key
API_KEY = "clh_rlz3TY0FNrsfHjOcmA5vzoUt4-HjkT4t_B56CZwe0kY"

agents/design/clawhub-skill-monitor/scripts/clawhub_api.py:16

High IP Address
120.0.0.0

skills-archive/didi-public-low-sensitivity-20260315-204610/didi.py:157

High API Key
password = 'mySecurePassword123'

skills-archive/shopping-merchant-public-low-sensitivity-20260315-204610/tests/encryption.test.ts:112

Medium External URL
https://youtube.com/watch?v=xxx

agents/code/second-brain-triage/TECHNICAL_SPEC.md:858

Medium External URL
https://clawhub.com/skills/pdf-editor

agents/design/clawhub-skill-monitor/DESIGN.md:71

Medium External URL
https://your-clawhub-instance.com

agents/design/clawhub-skill-monitor/INSTALL.md:108

Medium External URL
https://api.your-clawhub-instance.com

agents/design/clawhub-skill-monitor/INSTALL.md:109

Dependencies and supply chain

PackageVersionSourceKnown vulnNotes
playwright unpinned pip (didi.py) No Used in archived didi.py for browser automation; not declared in SKILL.md
requests unpinned pip (clawhub_api.py) No Used for HTTPS API calls; version not pinned
chalk ^5.0.0 npm (xiangqin, shopping-merchant) No Terminal color library; no security implications
commander ^12.0.0 npm (shopping-merchant) No CLI framework; no security implications

File composition

605 files · 102115 lines
Markdown 243 files · 35507 linesTypeScript 109 files · 19572 linesJavaScript 62 files · 15548 linesPython 96 files · 15140 linesJSON 65 files · 14767 linesShell 14 files · 1222 lines
Files of concern · 5
skills-archive/shopping-merchant-public-low-sensitivity-20260315-204610/package-lock.json JSON · 4782 lines
https://dotenvx.com · https://opencollective.com/express
agents/design/orchestrator/package-lock.json JSON · 4142 lines
https://opencollective.com/babel · https://opencollective.com/browserslist · https://tidelift.com/funding/github/npm/browserslist · https://tidelift.com/funding/github/npm/caniuse-lite · https://opencollective.com/fast-check · https://www.patreon.com/feross · https://feross.org/support · [email protected]
skills-archive/waimai-public-low-sensitivity-20260315-204610/scripts/waimai.js JavaScript · 2186 lines
https://www.ele.me · https://www.ele.me/search?keyword=$
skills/health-manager/package-lock.json JSON · 946 lines
https://opencollective.com/fastify
skills-archive/didi-public-low-sensitivity-20260315-204610/didi.py Python · 742 lines
Undeclared browser automation with credential handling in archived skill · SecureStorage in didi.py loads from undefined module · 120.0.0.0 · https://www.didiglobal.com · https://web.didiglobal.com · https://www.didiglobal.com/passport/login · https://web.didiglobal.com/trip/current · https://web.didiglobal.com/trip/history · https://web.didiglobal.com/coupon
Other files · waimai.js · package-lock.json · analyzer.ts · index.ts · TECHNICAL_SPEC.md · study-buddy.py +1

Security positives

The skill-assessment security checker itself is legitimate defensive tooling with no malicious behavior
Main SKILL.md (taobao-shopping) correctly declares itself as read-only public guidance with no login/automation
Most skills use proper file validation, error handling, and structured logging
Encryption service uses industry-standard AES-256-CBC with PBKDF2 and timing-safe comparisons
skills/didi/SKILL.md explicitly disclaims browser automation and cookie handling — good transparency
Skill-assessment evaluator correctly detects dangerous patterns in OTHER skills' code (not its own)
Many skills use parameterized queries and avoid string interpolation in SQL
Browser automation in didi.py uses encrypted cookie storage via SecureStorage module
Pre-scan correctly identified the clawhub_api.py hardcoded key as a genuine IOC