EXECUTION RUNTIME: GROK BOT LINUX SANDBOX (/workspace) LIVE TEMPLATES: 15 AVAILABLE (FREE + $19, $29, $39 & $49 · CARD) · ZERO SUBSCRIPTIONS PRIVACY: LOCAL CREDENTIAL VAULT · ZERO DATA EXFILTRATION
● AVAILABLE NOW · $29 · card (ONE-TIME · 3 REBINDS)

Social Hub Publisher — Write once, approve once, publish everywhere.

Queue one announcement and publish it to X, Discord, Bluesky and Telegram without pasting it four times or sending something you did not approve. Everything is driven by one config.json; credentials stay in environment variables.

SKU: social-hub-publisher · Skills: social-hub-publisher-setup + social-hub-publisher · Tested: 24 unit tests including a leak scan

⚡ Works in Grok Bot + Cursor + Claude Code + Any Terminal (Zero-Dep Python 3 CLI Included)
See Real Sample Output View in Homepage Catalog

What It Does

  • Gate 1 linter: per-channel length (X weights URLs as 23), link-domain allowlist, banned terms, hashtag/mention caps, duplicate detection.
  • approve HMAC-SHA256 signs the exact text with an expiry; Gate 2 in the dispatcher refuses edited, expired or unsigned items.
  • X: free 1-click Web Intent links by default. Optional API mode uses 2026 pay-per-use pricing: $0.015 per plain post, $0.20 per post that contains a link.
  • Discord webhooks (mentions suppressed), Bluesky AT Protocol (link facets with byte offsets), Telegram Bot API.
  • Dry run unless --live; an ambiguous send is marked unknown_outcome and never auto-retried. Python standard library only.

Sample session (fictional brand: Acme Cloud Tools)

Sample disclosure: this is a representative sample, not a customer report. It was produced against public or fictional test targets; account and credential values are placeholders or redacted (for example wck_<REDACTED>), and no private keys, seed phrases or secrets are ever shown. Your own report will differ in content and length.

# social-hub-publisher — sample session (fictional brand: Acme Cloud Tools)

Real output from the shipped code; HMAC secret and queue were throw-away.

$ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json add --channel x --id launch-x --text Acme Cloud Tools 2.0 is live: faster deploys, simpler pricing. Notes: https://acme-cloud.example/2-0 #release
added launch-x (x, 102/280)
[exit 0]

$ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json add --channel discord --target announcements --id launch-dc --text Acme Cloud Tools 2.0 is out. Full notes: https://docs.acme-cloud.example/changelog
added launch-dc (discord, 82/2000)
[exit 0]

$ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json add --channel bluesky --id launch-bsky --text Acme Cloud Tools 2.0 shipped today. Guaranteed zero downtime upgrades!!!
added launch-bsky (bluesky, 72/300)
[exit 0]

$ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json add --channel telegram --id launch-tg --text Acme Cloud Tools 2.0 is out - changelog at https://evil.example/post
added launch-tg (telegram, 68/4096)
[exit 0]

## Gate 1 — lint

$ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json lint
launch-x [OK]
    [INFO ] X_COST: API cost if posted via API: $0.200 (has link); Web Intent is free
launch-dc [OK]

launch-bsky [ERROR]
    [ERROR] BANNED_TERM: banned term 'guaranteed'
    [WARN ] PUNCTUATION: repeated exclamation marks
launch-tg [ERROR]
    [ERROR] DOMAIN_NOT_ALLOWED: link host 'evil.example' is not in lint.allowed_domains
[exit 2]

## Approve (signs the exact text) — two items pass, two are refused

$ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json approve --id launch-x
launch-x APPROVED until 2026-11-03T04:46:09Z
    [INFO ] X_COST: API cost if posted via API: $0.200 (has link); Web Intent is free
[exit 0]

$ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json approve --id launch-dc
launch-dc APPROVED until 2026-11-03T04:46:09Z

[exit 0]

$ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json approve --id launch-bsky
launch-bsky REFUSED (Gate 1 errors)
    [ERROR] BANNED_TERM: banned term 'guaranteed'
    [WARN ] PUNCTUATION: repeated exclamation marks
[exit 2]

$ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json approve --id launch-tg
launch-tg REFUSED (Gate 1 errors)
    [ERROR] DOMAIN_NOT_ALLOWED: link host 'evil.example' is not in lint.allowed_domains
[exit 2]

## Free 1-click X Web Intent

$ python3 packages/social-hub-publisher/social_hub.py --config /tmp/shp/config.json intent --id launch-x
https://x.com/intent/post?text=Acme%20Cloud%20Tools%202.0%20is%20live%3A%20faster%20deploys%2C%20simpler%20pricing.%20Notes%3A%20https%3A%2F%2Facme-cloud.example%2F2-0%20%23release
# free, 1-click: open the URL, review, press Post. 2026 X API pay-per-use: $0.015 per plain post, $0.20 per post containing a URL. Web Intents are free and 1-click: you press Post yourself.
[exit 0]

## Gate 2 — dispatcher dry run (nothing is sent without --live)

$ python3 packages/social-hub-publisher/dispatcher.py --config /tmp/shp/config.json
launch-x         DRY-RUN  would send to x
launch-dc        DRY-RUN  would send to discord
[exit 0]

## Tamper test — edit approved text, Gate 2 refuses

$ python3 packages/social-hub-publisher/dispatcher.py --config /tmp/shp/config.json
launch-x         DRY-RUN  would send to x
launch-dc        REFUSED  text changed after approval
[exit 2]

What It Does Not Do

  • Posts only to accounts you configure, only text you approved.
  • No fake engagement, no duplicate-post spam, no bypassing the allowlist or banned terms.
  • Never prints or stores your credentials in the queue.

Frequently Asked Questions

How can I automate multi-account X and Discord announcements without paying monthly SaaS fees like Buffer or Postiz?
Social Hub Publisher is a one-time $29 license with no subscription. You queue one announcement and publish it to the X, Discord, Bluesky and Telegram targets defined in a single config.json, with credentials kept in environment variables. X defaults to free 1-click Web Intent links; optional X API mode uses 2026 pay-per-use pricing of $0.015 per plain post and $0.20 per post containing a link. Discord uses webhooks with mentions suppressed. It is Python standard library only and runs as a dry run unless you pass --live.
How does the 9-rule pre-flight policy linter prevent cross-brand leaks, banned terms, and duplicate posts?
Gate 1 lints every queued item before it can be approved. It checks per-channel length (X counts URLs as 23 characters), a link-domain allowlist, banned terms, hashtag and mention caps, punctuation and duplicate detection. Because the allowlist and banned-terms list live in your config, you can block another brand's domains or names from a queue. Items with Gate 1 errors are refused at approval. The sample session shows a banned-term post and an off-allowlist link both refused.
How do HMAC-SHA256 approval tokens and 1-click X web intents work together in the Social Hub?
The approve command signs the exact post text with HMAC-SHA256 and an expiry. Gate 2 in the dispatcher refuses any item that was edited after approval, has expired or is unsigned; in the sample, editing approved text produces REFUSED (text changed after approval). For X, the intent command prints an x.com/intent/post URL for an approved item. It is free and you review the text and press Post yourself, so nothing is sent without your click.
What safety and refusal boundaries does the Social Hub Publisher enforce (no fake engagement or unapproved auto-posting)?
It posts only to accounts you configure and only text you approved. It does not do fake engagement, duplicate-post spam, or bypass the domain allowlist or banned terms. It never prints or stores your credentials in the queue. It sends nothing unless you pass --live, and an ambiguous send is marked unknown_outcome and never auto-retried.

Licensing & Setup

One-time license, up to 3 workspace-reset rebinds. On Turn 1 the social-hub-publisher-setup skill verifies your agent key, binds your wcl_... code through the read-only license helper, and confirms the bot files are installed. The license code is never printed in chat.

One wcl_... key, two runtimes. Your license key works inside Grok Bot and from any local terminal or IDE agent (Cursor, Claude Code, Windsurf, CI/CD) via the standalone single-file Python 3 CLI (standalone /runtime/<script>.py CLI) — Python 3.10+ standard library only, zero pip install dependencies, with --json / --markdown output.