Scan Report
5 /100
wechat-typeset-pro
微信公众号专业排版技能 — Markdown to WeChat-compatible inline-style HTML with 30 themes, gallery preview, and optional draft publishing
WeChat public account Markdown formatting tool with fully declared filesystem writes, shell subprocess calls, and WeChat API network access — all necessary and appropriate for its stated purpose.
Safe to install
Skill is safe to use. No action required.
Findings 3 items
| Severity | Finding | Location |
|---|---|---|
| Low | Output directory hardcoded in config.json | config.json:3 |
| Low | config.json marked sensitive by pre-scan | config.json:1 |
| Info | No dependency version pinning | N/A |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Filesystem | WRITE | WRITE | ✓ Aligned | SKILL.md scripts/format.py & scripts/publish.py shell commands |
| Shell | WRITE | WRITE | ✓ Aligned | scripts/publish.py:339 — subprocess.run(format_cmd) |
| Network | READ | READ | ✓ Aligned | scripts/publish.py:76-241 — WeChat API calls to api.weixin.qq.com |
| Browser | READ | READ | ✓ Aligned | scripts/format.py — webbrowser.open() for gallery preview |
| Environment | READ | READ | ✓ Aligned | scripts/publish.py:36-43 — reads WECHAT_APP_ID/SECRET from env |
| Skill Invoke | WRITE | WRITE | ✓ Aligned | SKILL.md:format.py + publish.py script orchestration |
4 findings
Medium External URL 外部 URL
https://api.weixin.qq.com/cgi-bin/token scripts/publish.py:76 Medium External URL 外部 URL
https://api.weixin.qq.com/cgi-bin/material/add_material scripts/publish.py:99 Medium External URL 外部 URL
https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token= scripts/publish.py:127 Medium External URL 外部 URL
https://api.weixin.qq.com/cgi-bin/draft/add?access_token= scripts/publish.py:241 File Tree
36 files · 359.7 KB · 13211 lines JSON 31f · 10028L
Python 2f · 2233L
HTML 2f · 704L
Markdown 1f · 246L
├─
▾
scripts
│ ├─
format.py
Python
│ └─
publish.py
Python
├─
▾
templates
│ ├─
gallery.html
HTML
│ └─
preview.html
HTML
├─
▾
themes
│ ├─
bauhaus.json
JSON
│ ├─
bold-blue.json
JSON
│ ├─
bold-green.json
JSON
│ ├─
bold-navy.json
JSON
│ ├─
bytedance.json
JSON
│ ├─
chinese.json
JSON
│ ├─
coffee-house.json
JSON
│ ├─
elegant-blue.json
JSON
│ ├─
elegant-green.json
JSON
│ ├─
elegant-navy.json
JSON
│ ├─
focus-blue.json
JSON
│ ├─
focus-gold.json
JSON
│ ├─
focus-red.json
JSON
│ ├─
github.json
JSON
│ ├─
ink.json
JSON
│ ├─
lavender-dream.json
JSON
│ ├─
magazine.json
JSON
│ ├─
midnight.json
JSON
│ ├─
minimal-blue.json
JSON
│ ├─
minimal-gold.json
JSON
│ ├─
minimal-gray.json
JSON
│ ├─
minimal-navy.json
JSON
│ ├─
minimal-red.json
JSON
│ ├─
mint-fresh.json
JSON
│ ├─
newspaper.json
JSON
│ ├─
sports.json
JSON
│ ├─
sspai.json
JSON
│ ├─
sunset-amber.json
JSON
│ ├─
terracotta.json
JSON
│ └─
wechat-native.json
JSON
├─
config.json
⚠
JSON
└─
SKILL.md
Markdown
Dependencies 3 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
markdown | * | import | No | No requirements.txt; version not pinned |
requests | * | import | No | No requirements.txt; version not pinned |
dotenv | * | import | No | No requirements.txt; version not pinned |
Security Positives
✓ WeChat credentials are loaded from environment variables (~/.openclaw/.env), not hardcoded in config.json
✓ SKILL.md fully documents all scripts, parameters, and credential requirements
✓ Subprocess calls are explicitly declared as part of the workflow (format.py → publish.py chain)
✓ All network requests go to official WeChat API domain (api.weixin.qq.com) — no third-party exfiltration
✓ No base64/eval/obfuscation patterns found in any Python script
✓ No access to sensitive paths such as ~/.ssh, ~/.aws, .env files
✓ File operations are scoped to user-provided input files and configured output directories
✓ No hidden functionality detected — all HTML containers, callout syntax, and gallery features are documented in SKILL.md