← Back to Skills Marketplace
xsxs89757

96push

by xsxs89757 · GitHub ↗ · v1.0.3 · MIT-0
cross-platform ⚠ suspicious
159
Downloads
0
Stars
0
Active Installs
4
Versions
Install in OpenClaw
/install 96push
Description
Remotely control 96Push desktop client to query accounts, create and publish content across multiple social media platforms, and poll publishing results.
README (SKILL.md)

CRITICAL: Publish Anti-Spam Rules (MUST FOLLOW)

⚠️ NEVER call publish more than ONCE per content per batch of accounts.

The publish command triggers browser automation that takes 30-60 seconds to complete. The script has a built-in guard that rejects publish if another task is already running. Follow these rules strictly:

  1. ONE publish call per batch. The publish command now automatically waits for completion — it submits the task and polls until done. Do NOT call poll separately unless you used --no-wait.
  2. If publish times out, it does NOT mean publish failed — the browser automation may still be running. Do NOT retry publish. Instead, ask the user to check the 96Push client.
  3. If publish returns PUBLISH_ALREADY_RUNNING, do NOT retry. Wait for the active task to complete.
  4. If publish returns HTTP 425, another task is in progress. Wait and report to user, do NOT retry.
  5. NEVER loop or retry the publish command. Each call creates a new browser automation task. Calling it 10 times creates 10 browser windows fighting for the same page.
  6. The complete sequence is always: publish (once, waits automatically) → report result to user.

Content Creation Rules (IMPORTANT)

PublishData Fields

Field Type Required Description
title string Yes Content title
desc string No Description/summary
content string Conditional HTML content (articles need this)
markdown string Conditional Markdown source (articles need this)
autoThumb bool No Auto-extract cover from content (default true)
thumb string[] Conditional Cover image public URLs (see platform requirements). No local paths or base64 — must be HTTP(S) URLs.
files string[] Conditional Media public URLsonly for graph_text (images) and video (video URL). NOT used for articles. Must be HTTP(S) URLs, daemon auto-downloads.

By Content Type

Type selection rule:

  • If the user wants to create or publish a video, use --type video explicitly whenever possible.
  • If --type is omitted, the CLI now infers the type from --files or existing content detail.
  • If --type article is passed together with video/image files, the CLI treats the media files as authoritative and avoids creating/publishing the content as an article.
  • Never create article content with video URLs in files; video URLs must be video content.

Article (文章):

  • Must have: title + content (HTML) or markdown
  • Cover image (thumb): Some platforms require at least one cover. Set autoThumb: true to auto-extract from content images, or provide explicit thumb URLs.
  • desc: Optional summary text, some platforms use it.
  • Do NOT set files for articles — files is only for graph_text/video. Images in articles go into the markdown/content body. Cover images go into thumb.

Graph Text (图文/图集):

  • Must have: title + files (array of image URLs, at least 1)
  • Cover: Auto-generated from first image if thumb is empty.
  • No content/markdown needed — the images ARE the content.

Video (视频):

  • Must have: title + files (array with exactly 1 video URL)
  • Cover: Auto-generated from video frame if thumb is empty. Many platforms require a cover — provide one if possible.
  • desc: Strongly recommended — most video platforms use it as the video description.

Cover Image Requirements by Platform

Platform Article Cover Graph Text Cover Video Cover
WeChat (wechat) Required (1 image) Auto from images Required
Douyin (douyin) N/A Auto Auto from video
Toutiao (toutiaohao) Required (1-3 images) Auto Auto
Xiaohongshu (xiaohongshu) N/A Auto from images Auto
Bilibili (bilibili) Optional (headerImg) Auto Required
Zhihu (zhihu) Optional Auto Auto
Baijiahao (baijiahao) Required (1-3 images) Auto Required
CSDN (csdn) Optional N/A Auto
Weibo (sina) N/A Auto Auto
Kuaishou (kuaishou) N/A Auto Auto
Sohu (sohuhao) Auto from content Auto Auto

Rule: When in doubt, always provide at least one thumb image. autoThumb: true will try to extract from content but may fail if content has no images.

IMPORTANT: thumb and files only accept public HTTP(S) URLs. The Go daemon will automatically download images from these URLs before publishing. Do NOT pass local file paths or base64 data — they will not work through the remote proxy.


Platform Settings Reference (IMPORTANT)

When publishing, each account in postAccounts needs a settings object. Different platforms require different fields. Settings are passed as JSON in the --accounts-json parameter or pre-configured via plat-sets.

Common Fields

Field Type Description
timerPublish object {"enable": true, "timer": "YYYY-MM-DD HH:MM:SS"}
lookScope uint Visibility: 0=public, 1=friends, 2=private
source uint Content declaration (AI/repost/original, values vary per platform)
classify string Category/section
collection string Collection/column
origin bool Declare as original
labels/tag string Tags (separator varies: / or ,)

Platform-Specific Settings

wechat (微信公众号) — Article/Graph Text:

  • author: Author name
  • publishType: "mass" (群发) or "publish" (发布)
  • origin: Declare original (default false)
  • leave: Enable comments (default true)
  • Timer: now+5min ~ 7 days

wechat (微信公众号) — Video (extra fields):

  • materTitle: Material title
  • barrage: Enable bullet comments
  • turn2Channel: Convert to Video Channel

douyin (抖音):

  • allowSave: Allow others to save (default true)
  • lookScope: 0=public, 1=friends, 2=private
  • hotspot: Related trending topic
  • music: Background music

toutiaohao (今日头条) — Article:

  • starter: Toutiao exclusive
  • syncPublish: Also publish as Weitoutiao
  • Timer: now+2h ~ 7 days. Cannot use timer if collection is set.

xiaohongshu (小红书):

  • origin: Declare original
  • source: Content declaration — 0=none, 1=fiction/entertainment, 2=AI-generated, 3=marked in body, 4=self-shot, 5=repost source
  • reprint: Media/source name, only used when source=5. Do not combine origin=true with source=5.
  • mark: Tag user/location {"user": true, "search": "keyword"}
  • lookScope: 0=public, 1=friends, 2=private
  • Timer: now+1h ~ 14 days.
  • Draft save clicks 暂存离开; publish clicks 发布 or 定时发布.

bilibili (哔哩哔哩) — Video/Graph Text:

  • partition: Section/category (important!)
  • reprint: Repost source (empty = self-made)
  • creation: Allow derivative works
  • dynamic: Fan notification text

bilibili (哔哩哔哩) — Article:

  • classify: Column category
  • headerImg: Header image URL
  • labels: Tags (max 10)

zhihu (知乎) — Article:

  • question: Submit to a question
  • source: Creation declaration — 0=none, 1=spoiler, 2=medical, 3=fiction, 4=finance, 5=AI-assisted
  • topic: Article topics (max 3, / separated)
  • collection: Column name
  • origin: Source type — 0=none, 1=official site, 2=news report, 3=TV media, 4=print media
  • Draft save is auto-save based and waits for /api/articles/drafts; publish waits for POST /content/publish.
  • Video: set classify when possible; reprint=true means repost, false means original. Timer: now+1h ~ 14 days.

omtencent (腾讯内容开放平台) — Article/Video:

  • classify: Category. For stable tests, use 科技 for articles.
  • labels: Tags separated by /, max 9 tags and max 8 Chinese chars each.
  • activity: Platform activity keyword.
  • source: Content declaration — 1=AI generated, 2=fiction/entertainment, 3=from internet, 4=personal opinion, 5=old news. Empty or 0 currently defaults to 4.
  • Timer: now+5min ~ 7 days.
  • Save/publish waits for platform submit responses; if the AIGC declaration dialog appears, submit it and click save/publish again.

baijiahao (百家号):

  • classify: Category "一级/二级" format
  • byAI: AI creation declaration
  • Timer: now+1h ~ 7 days

csdn (CSDN) — Article:

  • labels: Tags (/ separated, max 7)
  • artType: 0=original, 1=repost, 2=translation
  • originLink: Required for reposts
  • Timer: now+4h ~ 7 days

juejin (掘金):

  • tag: Required — must have at least one tag
  • classify: Category

kuaishou (快手):

  • sameFrame: Allow others to film with this
  • download: Allow download
  • sameCity: Show in same-city feed

sina (新浪微博) — Video/Graph Text:

  • type: 0=original, 1=derivative, 2=repost
  • stress: Allow highlights (default true)
  • wait: Wait X seconds before posting

sina (新浪微博) — Article:

  • onlyFans: Only fans can read full text (default true)

sohuhao (搜狐号) — Article/Graph Text/Video:

  • classify: Attribute/category — 观点评论/故事传记/消息资讯/八卦爆料/经验教程/知识科普/测评盘点/见闻记录/运势/搞笑段子/美图/美文
  • declaration: Source declaration — 0=无特别声明, 1=引用声明, 2=包含AI创作内容, 3=包含虚构创作
  • topic: Topic keyword (search-based)
  • loginView: Require login to read full text (default false)
  • Timer: now+1h ~ 7 days
  • Cover: Auto-extracted from article images if not manually provided; upload also supported

Timer Publish Constraints

Platform Min Time Max Time
wechat now + 5 min 7 days
toutiaohao now + 2 hours 7 days
baijiahao now + 1 hour 7 days
csdn now + 4 hours 7 days
acfun now + 4 hours 14 days
pinduoduo now + 4 hours 7 days
sohuhao now + 1 hour 7 days
tiktok now + 2 hours 30 days

Output Format Suggestions

Publish Results

📤 Publish Results (Record #7)

✅ WeChat (@AccountA) — Success, 12s
✅ Zhihu (@AccountB) — Success, 8s
❌ Baijiahao (@AccountC) — Failed: Login expired

Success: 2/3, Failed: 1/3

Account List

📋 Logged-in Accounts:

1. WeChat - AccountA (ID: 1) [article, graph_text]
2. Douyin - AccountB (ID: 5) [video, graph_text]
3. Bilibili - AccountC (ID: 8) [article, video, graph_text]

Error Handling

  • 503 CLIENT_OFFLINE → "96Push not running. Launch it from https://push.96.cn"
  • 425 → "Another publish task is running. Do NOT retry — use poll to wait for the active task."
  • PUBLISH_ALREADY_RUNNING → A task is already in progress. Use poll --id \x3Cactive_record_id> from the error response. Do NOT call publish again.
  • 504 TIMEOUT → "Client response timed out. The task may still be running — check with poll."
  • 401/403 → "API Key invalid or expired, regenerate in 96Push profile"
  • Account login=false → "Account login expired, re-login in 96Push client"
  • Poll timeout → Report to user: "Publishing is taking longer than expected. The browser automation may still be running. Please check the 96Push client." Do NOT retry publish.

Safety Rules

  • Never expose the API key in responses
  • List target accounts and confirm with user before publishing
  • Require confirmation before delete operations
  • Remote publish must use headless: true
  • Never guess account IDs — always query first
  • Don't output raw Base64 image data — just mention it exists
  • thumb and files must be public HTTP(S) URLs — never pass local paths or base64
  • If user provides a local image, ask them to upload it to an image hosting service first and provide the URL
  • When creating content, validate required fields before calling create API
  • When building settings, check platform requirements — missing required fields cause publish failures
  • NEVER call publish more than once for the same content+accounts batch. Each call creates a real browser automation task. Duplicate calls will open multiple browsers fighting over the same page, causing all of them to fail and potentially crashing the client.
  • NEVER retry publish on failure or timeout. If publish fails, report the error to the user. If poll times out, report timeout to the user. Let the user decide what to do.
  • Always use poll after publish. The publish command only starts the task — it returns immediately. You MUST poll to get the result.
Usage Guidance
This skill appears to be what it claims (a controller for 96Push) but has several red flags you should address before installing: 1) Do NOT paste your PUSH_API_KEY into chat; instead set PUSH_API_KEY in your environment or add it manually to ~/.openclaw/.env. 2) The registry metadata does not list the required PUSH_API_KEY — ask the publisher to correct that. 3) SKILL.md states it will save the key for you but the bundled script only reads the file; verify how and where the agent will store credentials. 4) Verify you trust api.96.cn / the 96Push service and the skill author before giving access to post on your accounts. 5) If you must use the skill, prefer setting the environment variable at the OS level and avoid sending secrets through the agent; review the full script yourself (or have a trusted reviewer) to confirm there is no hidden exfiltration beyond the documented API calls.
Capability Analysis
Type: OpenClaw Skill Name: 96push Version: 1.0.3 The 96push skill bundle is a legitimate integration for the 96Push social media management platform, allowing an AI agent to create and publish content across multiple platforms via the service's API (api.96.cn). The Python script (scripts/96push.py) is a clean wrapper using standard libraries (urllib) to interact with the remote proxy, and the SKILL.md provides detailed operational constraints and safety rules to prevent spam and ensure correct API usage. While the agent is instructed to help the user manage an API key in ~/.openclaw/.env, this behavior is transparent and necessary for the tool's functionality.
Capability Tags
requires-sensitive-credentials
Capability Assessment
Purpose & Capability
Name, description, SKILL.md, and the bundled script all align with a remote-control client for 96Push (calls to api.96.cn, endpoints for accounts/content/publish). However the registry metadata claims no required environment variables or primary credential while the SKILL.md and script clearly require a PUSH_API_KEY — this metadata omission is an incoherence.
Instruction Scope
SKILL.md instructs the agent to obtain a sensitive API key from the user ('Tell me the key, I'll save it to ~/.openclaw/.env') which encourages users to send secrets into the agent conversation; the provided script only reads ~/.openclaw/.env (it does not implement saving), so the documentation and code disagree. Otherwise the commands and publish/poll behavior are scoped to the 96Push API and platform settings.
Install Mechanism
There is no install spec (instruction-only skill) and the included Python script uses standard library modules and makes HTTPS requests. No external downloads or archive/extract operations are present.
Credentials
Only a single credential (PUSH_API_KEY) is required by the script which is proportionate to the described functionality, but the skill metadata fails to declare this required env var or a primary credential. The SKILL.md's guidance to have the user paste the key into chat raises privacy/exfiltration concerns.
Persistence & Privilege
The skill does not request always:true and does not claim other elevated privileges. SKILL.md suggests it will save the API key to ~/.openclaw/.env, but the provided script only reads that file — there is a mismatch about writing/storing credentials which should be clarified before trusting the skill to persist secrets.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install 96push
  3. After installation, invoke the skill by name or use /96push
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.3
96push 1.0.3 Changelog - The CLI now infers content type from --files: if a video file is provided, --type video is auto-selected. - When --type is omitted, the CLI checks content details or file types (image/video) to determine the correct publishing type. - Updated SKILL.md instructions to clarify that video publishing can omit --type if a video file is present. - Emphasized that article content must never be created or published with video files in --files; video URLs are only valid for video-type content. - Added notes that video file extensions (.mp4, .mov, .avi, etc.) are recognized for auto-inference. - Minor workflow/instruction updates to match CLI behavior on content creation and publishing.
v1.0.2
96push 1.0.2 - Updated workflow: the publish command now automatically waits for task completion and polls for results internally. - No need to call poll separately after publish; just call publish once and wait for the results. - Documentation updated to reflect the new publish behavior (auto-wait and automatic status reporting). - Critical anti-spam usage rules adjusted for the improved publish command.
v1.0.1
No user-facing changes in this version. - Version bump only; no file or documentation changes detected. - All functionality and documentation remain the same as previous version.
v1.0.0
Initial release of 96push: remote control of the 96Push desktop client for multi-platform social media publishing. - Supports querying platforms and accounts, content creation (article, image, video), updating, and deleting. - Enables publishing content to multiple accounts/platforms in one command, with strict anti-spam/publish sequencing rules. - Allows polling for publish status/results and detailed workflow guidance. - Provides management of reusable platform-specific publish configurations. - Extensive usage instructions and critical rules to avoid duplicate publishes and ensure smooth automation. - If the key is missing, the script will return setup instructions. Guide the user: 1. Download 96Push from [https://push.96.cn](https://push.96.cn) 2. Launch and login 3. Go to profile (bottom-left avatar) → API Key → Generate
Metadata
Slug 96push
Version 1.0.3
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 4
Frequently Asked Questions

What is 96push?

Remotely control 96Push desktop client to query accounts, create and publish content across multiple social media platforms, and poll publishing results. It is an AI Agent Skill for Claude Code / OpenClaw, with 159 downloads so far.

How do I install 96push?

Run "/install 96push" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is 96push free?

Yes, 96push is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does 96push support?

96push is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created 96push?

It is built and maintained by xsxs89757 (@xsxs89757); the current version is v1.0.3.

💬 Comments