Wechat Publisher DraftGet

ReviewAudited by ClawScan on May 15, 2026.

Overview

This is a coherent WeChat draft-publishing helper, but it uses official-account credentials and creates persistent local verification files, so only run it for drafts you intend to send to WeChat.

Install only if you trust the local md2wechat CLI and intend to let this skill create WeChat Official Account drafts. Confirm the selected article and cover before running, keep the md2wechat credential file protected, and review the generated verification JSON rather than relying only on the success message.

Findings (5)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

Running the script will send the selected article and cover into the WeChat draft workflow.

Why it was flagged

The script uses the md2wechat CLI to upload a cover image and create a WeChat draft. This mutates the user’s WeChat Official Account draft box, but it is the central, disclosed purpose of the skill.

Skill content
md2wechat upload_image "$COVER_ABS" --json > "$UPLOAD_JSON" ... md2wechat create_draft "$DRAFT_JSON" --json > "$CREATE_RESULT"
Recommendation

Use it only after confirming the article, cover, title, author, and digest are ready to be uploaded to the intended WeChat Official Account.

What this means

The skill can act with the privileges of the configured WeChat Official Account credentials for draft creation and verification.

Why it was flagged

The verification step reads WeChat Official Account credentials from the local md2wechat config or environment variables to obtain an access token for the official WeChat API. This is expected for the integration and the token is masked in saved output.

Skill content
cfg_path=pathlib.Path.home()/'.config/md2wechat/config.yaml' ... appid=(cfg.get('wechat') or {}).get('appid') or os.getenv('WECHAT_APPID') ... secret=(cfg.get('wechat') or {}).get('secret') or os.getenv('WECHAT_SECRET')
Recommendation

Use least-privilege, account-appropriate credentials where possible, protect the md2wechat config file, and rotate credentials if they are exposed.

What this means

The script may fail or use whatever local yaml/PyYAML package is installed in the user’s Python environment.

Why it was flagged

The script imports the non-stdlib yaml module, while the declared requirements list md2wechat and python3 but do not explicitly declare a Python package dependency. This is a dependency completeness issue rather than evidence of malicious behavior.

Skill content
import json, os, pathlib, sys, urllib.parse, urllib.request, yaml
Recommendation

Install dependencies from trusted sources and consider documenting PyYAML or the expected Python environment explicitly.

What this means

Draft content and verification details may remain in local files after publishing.

Why it was flagged

The script saves the WeChat draft/get response and checks to a local verification JSON file. This is disclosed as part of verification, but it can persist article content and backend draft metadata on disk.

Skill content
result.update({'draft_get_response':draft_resp,'checks':checks,'passed':checks['errcode_ok'] and checks['title_ok'] and checks['author_ok'] and checks['thumb_media_id_present'] and not checks['content_has_local_path']})
out.write_text(json.dumps(result,ensure_ascii=False,indent=2),encoding='utf-8')
Recommendation

Store article directories securely and delete generated verification artifacts if they contain sensitive draft content you no longer need.

What this means

A successful script exit may not prove every documented quality check was enforced.

Why it was flagged

The code records content length and inline-style checks but does not include them in the final passed condition, even though the documentation describes content existence and publish-ready formatting as verification items.

Skill content
'content_length': len(content), ... 'content_has_inline_style': 'style=' in content, ... 'passed':checks['errcode_ok'] and checks['title_ok'] and checks['author_ok'] and checks['thumb_media_id_present'] and not checks['content_has_local_path']
Recommendation

Review the generated verify JSON manually, especially content_length, content_has_inline_style, and any draft_get_response fields, before relying on the success message.