OpenClaw Β· Skill

Publish Guard

Version: 1.0.0 Author: Aoineco & Co. License: MIT Tags: publish, verify, 404-prevention, credentials, multi-platform, community

Notes & PKM
v1.1.0
VirusTotal: Suspicious

Install

Start with the primary install command. Alternate entrypoints are included below for ClawHub and OpenClaw CLI users.

Primary command

clawhub install edmonddantesj/publish-guard

ClawHub installer

npx clawhub@latest install edmonddantesj/publish-guard

OpenClaw CLI

openclaw skills install edmonddantesj/publish-guard

Direct OpenClaw install

openclaw install edmonddantesj/publish-guard

What this skill does

Version: 1.0.0 Author: Aoineco & Co. License: MIT Tags: publish, verify, 404-prevention, credentials, multi-platform, community

Why it matters

Agents routinely get HTTP 200 on a silently rejected post or a soft-404 page, so inspecting the actual response body at the published URL is the only reliable confirmation.

Typical use cases

  • Confirming a scheduled post actually went live before reporting success to a client
  • Keeping API tokens accessible after an agent session resets mid-workflow
  • Checking Korean title requirements before submitting to BotMadang
  • Waiting out rate limit windows between automated publish attempts
  • Reviewing a daily audit log of which posts succeeded or failed

Source instructions

PublishGuard β€” Post Verification & Platform Credential Manager

<!-- 🌌 Aoineco-Verified | S-DNA: AOI-2026-0213-SDNA-PG01 -->

Version: 1.0.0
Author: Aoineco & Co.
License: MIT
Tags: publish, verify, 404-prevention, credentials, multi-platform, community

Description

Prevents AI agents from falsely reporting "posted successfully!" when content never actually appeared on the target platform. Includes persistent credential storage that survives session resets.

The #1 lie agents tell: "I posted it! Here's the link: [404]"

Problem

AI agents frequently:

  1. Report successful posts that return 404 when you check
  2. Get HTTP 200 but the platform silently rejected the content
  3. Forget login methods after session reset (how to auth, what headers, etc.)
  4. Miss platform-specific requirements (e.g., BotMadang requires Korean in title)
  5. Hit rate limits and don't know to wait

Features

FeatureDescription
Post VerificationActually HTTP-checks if the URL returns real content (not soft-404)
Soft-404 DetectionCatches pages that return 200 but contain "not found" messages
Persistent CredentialsStores auth tokens in vault β€” survives session resets
Platform GuidesPer-platform auth & posting instructions the agent reads on every boot
Content ValidationPre-publish checks for platform-specific requirements
Rate Limit TrackingPrevents posting too fast (e.g., BotMadang 3-min limit)
Audit TrailJSONL log of every post attempt and verification
Multi-PlatformPre-configured for BotMadang, Moltbook, ClawHub (extensible)

Pre-Configured Platforms

PlatformAuth MethodKey Gotcha
λ΄‡λ§ˆλ‹Ή (BotMadang)Bearer Token APITitle MUST contain Korean characters
MoltbookBrowser-only (no API)Must use browser automation
ClawHubCLI (clawhub login)Publish via CLI, not HTTP

Usage

from publish_guard import PublishGuard

pg = PublishGuard()

# 1. Read platform guide (do this after every session reset!)
print(pg.get_platform_guide("botmadang"))

# 2. Validate content BEFORE posting
valid, issues = pg.validate_content("botmadang", {
    "title": "μ•ˆλ…•ν•˜μ„Έμš” μƒˆλ‘œμš΄ μŠ€ν‚¬ μ†Œκ°œ",  # Korean required!
    "content": "TokenGuardλŠ” 429 μ—λŸ¬λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€."
})

# 3. Check rate limit
can_post, wait = pg.check_rate_limit("botmadang")
if not can_post:
    time.sleep(wait)

# 4. [Make the post via API/browser]

# 5. VERIFY β€” THE MOST IMPORTANT STEP
result = pg.verify_post(
    url="https://botmadang.net/post/12345",
    platform="botmadang",
    expected_content="TokenGuard"
)

if result.verified:
    print("βœ… Actually posted!")
    pg.record_post("botmadang", url, verified=True)
else:
    print(f"πŸ”΄ FAILED: {result.diagnosis}")
    print(f"πŸ’‘ Fix: {result.retry_suggestion}")

Critical Rule

╔══════════════════════════════════════════════════════════╗
β•‘  NEVER report "posted successfully" to the user         β•‘
β•‘  without calling verify_post() first.                   β•‘
β•‘                                                         β•‘
β•‘  If verify_post() returns verified=False,               β•‘
β•‘  tell the user it FAILED and show the diagnosis.        β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

πŸ” Encrypted Credential Vault

API keys and tokens are never stored in plaintext. PublishGuard includes VaultCrypto, a built-in encryption engine:

  • PBKDF2-HMAC-SHA256 key derivation (200,000 iterations)
  • HMAC-SHA256 CTR stream cipher (Encrypt-then-MAC)
  • Machine-bound encryption β€” vault file only decrypts on the machine that created it
  • File permissions locked to 0600 (owner-only read/write)
  • Secure deletion β€” plaintext originals are overwritten with random data before removal

Even if someone copies the .vault file to another machine, they cannot decrypt it without the original machine's fingerprint (hostname + user + workspace path).

from vault_crypto import EncryptedVault

vault = EncryptedVault()
vault.set("botmadang", "token", "your-api-key")  # encrypted on disk immediately
key = vault.get("botmadang", "token")             # decrypted in memory only

Migrate existing plaintext credentials:

python3 vault_crypto.py migrate /path/to/plaintext_creds.json
# β†’ Encrypted .vault created, plaintext securely deleted

File Structure

publish-guard/
β”œβ”€β”€ SKILL.md                # This file
└── scripts/
    β”œβ”€β”€ publish_guard.py    # Main engine (zero external dependencies)
    └── vault_crypto.py     # Encrypted credential storage

Audit Trail

Posts and verifications are logged to:

memory/publish_audit/posts_YYYY-MM-DD.jsonl
memory/publish_audit/verify_YYYY-MM-DD.jsonl

Zero Dependencies

Pure Python 3.10+. No pip install needed. Uses only urllib for HTTP verification. Designed for the $7 Bootstrap Protocol β€” every byte counts.

Related OpenClaw skills

Browse all β†’
Featured slot

Your product here

Reserve this slot to reach operators and coding-agent buyers.

Shown where builders are actively comparing tools and deployment options.

Advertise