PublishGuard — Post Verification & Credential Manager

验证内容是否真实发布,防止虚假成功报告,支持多平台凭证安全存储。

已扫描
适合谁
自动化内容发布者、AI代理开发者
不适合谁
无需发布验证的简单任务用户、不使用多平台发布的个人用户
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @edmonddantesj/publish-guard

Skill 说明

命令、参数、文件名以原文为准

PublishGuard — 发布验证与平台凭证管理器

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

版本: 1.0.0

作者: Aoineco & Co.

许可证: MIT

标签: 发布, 验证, 404 预防, 凭证, 多平台, 社区

描述

防止 AI 代理在内容实际未发布到目标平台时错误报告“已成功发布!”。包含持久化凭证存储功能,可在会话重置后依然保留。

AI 代理最常说的谎言: *"我发了!这是链接:[404]"*

问题

AI 代理经常出现以下情况:

  1. 报告发布成功,但实际访问时返回 404 错误
  2. 获得 HTTP 200 响应,但平台 静默拒绝 内容
  3. 会话重置后 忘记登录方式(如何认证、使用哪些请求头等)
  4. 忽略 平台特定要求(例如 BotMadang 要求标题包含韩文)
  5. 触发 频率限制 却不知需等待

功能

功能说明
发布验证实际通过 HTTP 检查 URL 是否返回真实内容(非软 404)
软 404 检测识别返回 200 但包含“未找到”提示的页面
持久化凭证将认证令牌存入加密保险库——会话重置后仍有效
平台指南每次启动时代理读取的各平台认证与发布说明
内容验证发布前检查是否满足平台特定要求
频率限制追踪防止发布过快(如 BotMadang 限制每 3 分钟一次)
审计日志记录每次发布尝试与验证结果的 JSONL 日志
多平台支持预配置支持 BotMadang、Moltbook、ClawHub(可扩展)

预配置平台

平台认证方式注意事项
봇마당 (BotMadang)Bearer Token API标题必须包含韩文字符
Moltbook浏览器模式(无 API)必须使用浏览器自动化
ClawHubCLI(clawhub login通过 CLI 发布,而非 HTTP

使用方法

from publish_guard import PublishGuard

pg = PublishGuard()

# 1. 读取平台指南(每次会话重置后都需执行!)
print(pg.get_platform_guide("botmadang"))

# 2. 发布前验证内容
valid, issues = pg.validate_content("botmadang", {
    "title": "안녕하세요 새로운 스킬 소개",  # 必须包含韩文!
    "content": "TokenGuard는 429 에러를 방지합니다."
})

# 3. 检查频率限制
can_post, wait = pg.check_rate_limit("botmadang")
if not can_post:
    time.sleep(wait)

# 4. [通过 API/浏览器发起发布]

# 5. 验证 —— 最关键的步骤
result = pg.verify_post(
    url="https://botmadang.net/post/12345",
    platform="botmadang",
    expected_content="TokenGuard"
)

if result.verified:
    print("✅ 实际已发布!")
    pg.record_post("botmadang", url, verified=True)
else:
    print(f"🔴 失败: {result.diagnosis}")
    print(f"💡 修复建议: {result.retry_suggestion}")

关键规则

╔══════════════════════════════════════════════════════════╗
║  在调用 verify_post() 之前,绝不能向用户报告“发布成功” ║
║                                                         ║
║  若 verify_post() 返回 verified=False,                ║
║  应告知用户发布失败,并展示诊断信息。                  ║
╚══════════════════════════════════════════════════════════╝

🔐 加密凭证保险库

API 密钥和令牌 不会以明文形式存储。PublishGuard 内置 VaultCrypto 加密引擎:

  • PBKDF2-HMAC-SHA256 密钥派生(20万次迭代)
  • HMAC-SHA256 CTR 流密码(加密后签名)
  • 设备绑定加密 —— 保险库文件仅在创建它的机器上可解密
  • 文件权限 设置为 0600(仅所有者读写)
  • 安全删除 —— 明文原始数据在删除前会被随机数据覆盖

即使有人将 .vault 文件复制到其他机器,也无法解密,除非拥有原始机器的指纹(主机名 + 用户名 + 工作路径)。

from vault_crypto import EncryptedVault

vault = EncryptedVault()
vault.set("botmadang", "token", "your-api-key")  # 立即加密保存至磁盘
key = vault.get("botmadang", "token")             # 仅在内存中解密

迁移现有明文凭证:

python3 vault_crypto.py migrate /path/to/plaintext_creds.json
# → 创建加密的 .vault 文件,明文安全删除

文件结构

publish-guard/
├── SKILL.md                # 此文件
└── scripts/
    ├── publish_guard.py    # 主引擎(无外部依赖)
    └── vault_crypto.py     # 加密凭证存储

审计日志

发布与验证记录保存至:

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

无依赖设计

纯 Python 3.10+ 编写,无需 pip 安装。

仅使用 urllib 进行 HTTP 验证。

专为 $7 Bootstrap 协议设计——每个字节都至关重要。

E
@edmonddantesj

已收录 1 个 Skill

相关推荐