ClawHub Release Auditor
Run a strict preflight before any publish. Prefer stopping with a precise explanation over guessing. Treat repeated versions as a signal that the workflow needs diagnosis, not just another upload.
Workflow
- 1. Preflight
- Run
python3 scripts/preflight.py <skill-dir>.
- Fix all hard errors before continuing.
- Read warnings carefully; they often explain why a skill ends up suspicious.
- 2. Package locally
- Run
python3 ~/project/openclaw/skills/skill-creator/scripts/package_skill.py <skill-dir> [output-dir].
- If packaging fails, stop and explain the exact validation error.
- 3. Confirm before publish
- Show the skill path, intended version, and any remaining warnings.
- Do not publish without explicit user confirmation.
- 4. Publish
- Publish from the
skill folder, not the
.skill archive.
- After publish, record the exact version that was attempted.
- 5. Verify post-publish state
- Run
python3 scripts/verify_publish.py <skill-slug> --expected-version <version>.
- If latest/version visibility is inconsistent, say so clearly.
- If scan results matter, check the web page separately and explain whether the issue is pending, version mismatch, or a likely metadata/code mismatch.
What to check during preflight
- - Frontmatter only uses supported keys.
- INLINECODE4 and
description are present and sane. - Placeholder text is not leaking into examples.
- Declared
metadata.openclaw.requires roughly matches real script usage. - Homepage/source metadata exists when possible.
- Publish path points to the skill directory, not the packaged archive.
- Local package validation passes before any publish attempt.
Common failure patterns
Frontmatter mismatch
If validation complains about unsupported keys, trust the validator. Do not invent alternate formats from memory.
Metadata drift
If scripts use env vars or binaries that the skill does not declare, expect suspicious scan results. Fix the declaration or the code.
Placeholder leakage
If docs contain example paths like
/path/to/..., make sure they are clearly examples and not presented as real files.
Repeated publish loops
If many versions are being published quickly, pause and diagnose:
- - Did packaging actually succeed?
- Did latest move?
- Is scan still reading an older version?
- Is the same metadata mismatch still present?
Scripts
scripts/preflight.py
Checks a skill directory for:
- - frontmatter problems
- placeholder text
- likely undeclared env vars and binaries
- external execution hints
- package validation failures
- a simple verdict:
do-not-publish, review-before-publish, or INLINECODE11
scripts/verify_publish.py
Checks published version state with
clawhub inspect and compares it to an expected version.
scripts/analyze_history.py
Inspects recent version history for a public skill and groups releases into rough categories such as docs, metadata, bugfix, and feature work. Use it to study repeated publish loops and sharpen the skill's heuristics.
scripts/failure_buckets.py
Classifies likely publish problems into practical buckets such as
frontmatter-invalid,
package-validation-failed,
latest-not-updated, or
no-hard-failure-detected.
scripts/release_worthiness.py
Compares a local skill directory against the latest published version and flags when there is no material diff. Use it to avoid unnecessary republish loops.
Publishing tips
SKILL.md body must have substantial content
ClawHub checks for "Skill content is too thin or templated." This evaluates the SKILL.md body text (markdown below frontmatter), not just the description field.
Why this matters:
- - The
description field is only used for UI/search summaries - The SKILL.md body is what gets embedded and evaluated for the thin-content check
- If SKILL.md has only frontmatter and no body text, it will fail even with a perfect description
How to avoid:
- - Always include substantive body content in SKILL.md (at least 300-500 words of meaningful guidance)
- Include real workflow guidance, usage examples, and operational notes in the body
- The more comprehensive the SKILL.md body, the less likely it triggers "templated" detection
Other common pitfalls
- -
homepage field: Include a valid URL to avoid warnings - Empty directories: Remove any empty
scripts/, references/, or other directories before packaging - Symlinks: These are rejected by the packager and cause failures
References
- - Read
references/checklist.md for the release checklist. - Read
references/research-notes.md when designing heuristics for repeated publish loops and common failure modes. - If the skill format or server behavior is unclear, read the official ClawHub skill format docs before guessing. Prefer current docs plus validator output over old habits.
ClawHub 发布审计器
在任何发布之前执行严格的预检。倾向于用精确的解释来阻止,而不是猜测。将重复版本视为工作流需要诊断的信号,而不仅仅是另一次上传。
工作流
- 1. 预检
- 运行 python3 scripts/preflight.py <技能目录>。
- 在继续之前修复所有硬错误。
- 仔细阅读警告;它们通常会解释为什么某个技能最终可疑。
- 2. 本地打包
- 运行 python3 ~/project/openclaw/skills/skill-creator/scripts/package_skill.py <技能目录> [输出目录]。
- 如果打包失败,停止并解释确切的验证错误。
- 3. 发布前确认
- 显示技能路径、预期版本以及任何剩余的警告。
- 未经用户明确确认,不得发布。
- 4. 发布
- 从
技能文件夹发布,而不是从 .skill 归档文件发布。
- 发布后,记录尝试发布的确切版本。
- 5. 验证发布后状态
- 运行 python3 scripts/verify_publish.py <技能别名> --expected-version <版本>。
- 如果最新版本/版本可见性不一致,请明确说明。
- 如果扫描结果很重要,请单独检查网页,并解释问题是待处理、版本不匹配,还是可能的元数据/代码不匹配。
预检时检查的内容
- - 前置元数据仅使用支持的键。
- name 和 description 存在且合理。
- 占位符文本没有泄露到示例中。
- 声明的 metadata.openclaw.requires 大致匹配实际的脚本使用情况。
- 尽可能存在主页/来源元数据。
- 发布路径指向技能目录,而不是打包的归档文件。
- 在任何发布尝试之前,本地包验证通过。
常见失败模式
前置元数据不匹配
如果验证抱怨不支持的键,请相信验证器。不要凭记忆发明替代格式。
元数据漂移
如果脚本使用了技能未声明的环境变量或二进制文件,预计扫描结果会可疑。修复声明或代码。
占位符泄露
如果文档包含类似 /path/to/... 的示例路径,请确保它们明确是示例,而不是作为真实文件呈现。
重复发布循环
如果多个版本正在快速发布,暂停并进行诊断:
- - 打包是否真的成功?
- 最新版本是否更新?
- 扫描是否仍在读取旧版本?
- 相同的元数据不匹配是否仍然存在?
脚本
scripts/preflight.py
检查技能目录是否存在:
- - 前置元数据问题
- 占位符文本
- 可能未声明的环境变量和二进制文件
- 外部执行提示
- 包验证失败
- 简单结论:禁止发布、发布前审查 或 准备打包
scripts/verify_publish.py
使用 clawhub inspect 检查已发布版本的状态,并将其与预期版本进行比较。
scripts/analyze_history.py
检查公共技能的最近版本历史,并将发布大致分类为文档、元数据、错误修复和功能工作。用于研究重复发布循环并优化技能的启发式规则。
scripts/failure_buckets.py
将可能的发布问题分类到实用类别中,例如 前置元数据无效、包验证失败、最新版本未更新 或 未检测到硬故障。
scripts/release_worthiness.py
将本地技能目录与最新发布的版本进行比较,并在没有实质性差异时标记。用于避免不必要的重新发布循环。
发布技巧
SKILL.md 正文必须有实质性内容
ClawHub 会检查“技能内容过于单薄或模板化”。这评估的是 SKILL.md 正文文本(前置元数据下方的 markdown),而不仅仅是描述字段。
为什么这很重要:
- - description 字段仅用于 UI/搜索摘要
- SKILL.md 正文才是被嵌入并评估以检查内容单薄的内容
- 如果 SKILL.md 只有前置元数据而没有正文文本,即使描述完美也会失败
如何避免:
- - 始终在 SKILL.md 中包含实质性的正文内容(至少 300-500 字的有意义指导)
- 在正文中包含真实的工作流指导、使用示例和操作说明
- SKILL.md 正文越全面,触发“模板化”检测的可能性就越小
其他常见陷阱
- - homepage 字段:包含有效的 URL 以避免警告
- 空目录:在打包前删除任何空的 scripts/、references/ 或其他目录
- 符号链接:打包器会拒绝这些并导致失败
参考资料
- - 阅读 references/checklist.md 获取发布清单。
- 在设计重复发布循环和常见故障模式的启发式规则时,阅读 references/research-notes.md。
- 如果技能格式或服务器行为不清楚,请在猜测之前阅读官方的 ClawHub 技能格式文档。优先使用当前文档加上验证器输出,而不是旧习惯。