Install
openclaw skills install awesome-poetize-open-blog-automation让 AI 帮你运营 POETIZE 博客:写文章并一键发布、更新或隐藏已有文章、管理分类和标签、切换博客主题、查看访问数据和趋势、配置 SEO。仅支持 awesome-poetize-open 开源版,不适用于原版 POETIZE。开源仓库:https://github.com/LeapYa/awesome-poetize-open
openclaw skills install awesome-poetize-open-blog-automation装上这个技能,你可以让 AI 帮你完成 POETIZE 博客的日常运营:写文章并一键发布、更新或隐藏已有文章、管理分类和标签、切换博客主题、查看访问数据和趋势、配置 SEO。
仅支持 awesome-poetize-open 开源版,不适用于原版 POETIZE。开源仓库:https://github.com/LeapYa/awesome-poetize-open
定位是个人博客运营助手。发文默认策略:免费优先、维护优先、质量优先。
Use this skill to operate a POETIZE blog as a personal publishing and maintenance system. It is built on the existing POETIZE API feature, not browser automation. It is free-first, growth-first, and maintenance-first. It is not monetization-first.
awesome-poetize-open-blog-automation so the registry entry stays tied to the open-source project.awesome-poetize-open.{baseDir} for any file path that points inside this skill folder.python in examples and switch to python3 when that is the installed binary.python {baseDir}/scripts/poetize_cli.py <command> [subcommand] ....publish_post.py, manage_blog.py, etc.) can still be invoked directly; their entry points delegate to the unified CLI.poetize_cli.py config to generate OpenClaw config instead of hand-writing JSON.poetize_cli.py smoke-test before the first real write action on a new Agent environment.POETIZE_BASE_URL at the public nginx/domain origin.${POETIZE_BASE_URL}/api/api/...; do not append /api inside the variable value itself.--stdin-brief to pipe brief JSON from stdin instead of writing a temporary file. This avoids CLI escaping issues with Agent runtimes.Read references/poetize-api.md before publishing, updating, querying, or operating articles.
Read references/agent-setup.md when connecting the skill to your Agent framework.
Read references/strategy-playbook.md before deciding whether to create, refresh, or hide content.
Read references/decision-matrix.md before setting publish posture, search posture, or paywall posture.
Read references/creativity-workflow.md before drafting article copy.
Read references/evaluation-scenarios.md when validating the strategy layer.
Run python {baseDir}/scripts/poetize_cli.py eval to verify the local strategy layer before shipping skill changes.
--brief-file <path> or --stdin-brief (pipe JSON from stdin). The --stdin-brief option avoids writing temporary files and is recommended for Agent workflows to save tokens.manage update-article also accepts --stdin-payload as an alternative to --payload-file for the same reason.manage hide-article also requires --brief-file or --stdin-brief.assets/article-brief.template.json and assets/ops-brief.template.json as the starting point for strategy briefs.awesome-poetize-open, use first-person plural: 我们.项目维护者.说白了不得不说众所周知接下来我们将探讨不是...而是Before drafting a new article or doing a major article refresh, answer these questions and record the answers in the article brief:
targetKeyword, using the user's keyword when provided: {{目标关键词}}.{baseDir}/assets/article-brief.template.json for article creation or article refresh work.
Use {baseDir}/assets/ops-brief.template.json for update or hide operations.
Fill targetKeyword, serpValidation, internalLinkPlan, contentLayoutPlan, primaryGoal, reasoning, and the required brief fields before calling any mutating script.
If required brief information is missing, stop and ask for it.selectedAngle.
Record the rejected candidates in alternativesConsidered.. The CLI will upload those local images through /api/resource/upload before publishing and replace them with returned URLs.
b. Upload images first using poetize_cli.py upload-image, get the remote URL, and embed it directly in the Markdown. This avoids local file management and is recommended for Agent workflows.
When the task is maintenance, prefer revising existing articles over creating duplicates.title, sort or sortId, and label or labelId.
Prefer existing sort and label names when IDs are unknown.
The script will query /api/categories and /api/tags first and reuse exact matches.
If exact matches fail, the script may return close category or tag candidates for confirmation.
Close matches are suggestions only and must not be auto-selected.
It will not create a new category or tag unless you explicitly allow it.
Be explicit about article switches when the user mentions them:
commentStatus for comments
recommendStatus for recommendation
viewStatus for visibility
submitToSearchEngine for search-engine push
articleSlug or slug for an optional SEO-friendly article URL
Only set paid fields when the user explicitly wants a paywall and the content clearly deserves it.
For most personal blogs, keep payType: 0.
When the user does not want to upload a cover, set coverBlank: true or cover: " ".python {baseDir}/scripts/poetize_cli.py publish --markdown-file <file> --brief-file <file> for create or content update flows driven by Markdown.
Agent runtime only needs:
POETIZE_BASE_URL
POETIZE_API_KEY
--brief-file is mandatory.<img src="..."> files, the poetize_cli.py publish command uploads them automatically before sending the article payload.
For paid posts, the script will check /api/payment/plugin/status first, but paid publishing is not the default path for this skill.
If the payment plugin is installed but not configured, provide paymentPluginKey in front matter and optionally pass --payment-config-file payment.json.python {baseDir}/scripts/poetize_cli.py manage <subcommand>.
It supports:
article listing
exact-title lookup
article detail
article update
article hide
global article theme switching
article analytics
site visit trends
controlled SEO config
sitemap update
It does not support article deletion.
If the user wants a post effectively removed from public view, hide it by setting viewStatus: false.
update-article and hide-article now require --brief-file.--wait so the script polls until the async task finishes.
Report the returned articleId, articleSlug, articleUrl, task status, visibility state, and any follow-up analytics when requested.viewStatus: false or run with --draft.commentStatus, recommendStatus, viewStatus, and submitToSearchEngine explicitly when the user mentions them.viewStatus: false, the script will auto-fill a draft password and preview tip when omitted.sortId or labelId. Use sort and label names when IDs are unknown.sort or label does not exist, stop and ask for confirmation unless allowCreateTaxonomy, allowCreateSort, or allowCreateLabel is explicitly set.pendingTranslationLanguage, pendingTranslationTitle, and pendingTranslationContent.viewStatus: false.payType explicit. Do not guess a paywall mode from prose alone.payType: 0.coverBlank: true over inventing a fake cover URL.poetize_cli.py publish uses hard strategy validation.poetize_cli.py manage update-article and hide-article use hard strategy validation.Show command usage or subcommand usage:
# Show root help
python {baseDir}/scripts/poetize_cli.py help
# Show help for the publish command
python {baseDir}/scripts/poetize_cli.py help publish
# Show help for the manage list-articles command
python {baseDir}/scripts/poetize_cli.py help manage list-articles
Generate a usable OpenClaw config (when using OpenClaw):
python {baseDir}/scripts/poetize_cli.py config --output openclaw.poetize.local.json --api-key "replace-with-poetize-api-key"
Run a read-only smoke test before the first publish or update:
python {baseDir}/scripts/poetize_cli.py smoke-test --base-url "https://your-blog.example.com" --api-key "replace-with-poetize-api-key"
Start from the bundled strategy templates:
Create article-brief.json from {baseDir}/assets/article-brief.template.json.
Create ops-brief.json from {baseDir}/assets/ops-brief.template.json.
Front matter example with the common publish switches:
---
title: "示例文章"
slug: "ai-automation-example"
sort: "AI实践"
label: "自动化"
commentStatus: true
recommendStatus: false
viewStatus: true
submitToSearchEngine: true
---
# 示例文章
正文...
Markdown image example with local files:
---
title: "带图文章示例"
sort: "AI实践"
label: "自动化"
---
# 带图文章示例
这里是一张本地图片:

At publish time, the CLI uploads ./assets/flow.png and rewrites the Markdown image target to the returned URL.
Upload an image first and get its URL (recommended for Agent workflows):
# Upload a local image file
python {baseDir}/scripts/poetize_cli.py upload-image --file ./assets/flow.png --type articleImage
# Upload a base64-encoded image from stdin (e.g. AI-generated image)
echo "iVBORw0KGgo..." | python {baseDir}/scripts/poetize_cli.py upload-image --stdin-base64 --filename diagram.png --type articleImage
# Upload a cover image
python {baseDir}/scripts/poetize_cli.py upload-image --file ./cover.jpg --type articleCover
After uploading, embed the returned URL directly in Markdown:

Publish a new draft and wait:
python {baseDir}/scripts/poetize_cli.py publish --markdown-file draft.md --brief-file article-brief.json --draft --wait
Publish a public article and wait:
python {baseDir}/scripts/poetize_cli.py publish --markdown-file article.md --brief-file article-brief.json --publish --wait
Update an existing article:
python {baseDir}/scripts/poetize_cli.py publish --markdown-file article.md --brief-file article-brief.json --article-id 123 --publish --wait
Publish a paid article and require payment readiness:
python {baseDir}/scripts/poetize_cli.py publish --markdown-file paid-article.md --brief-file article-brief.json --payment-plugin-key afdian --payment-config-file payment.json --require-paid --publish --wait
Start an async task without waiting:
python {baseDir}/scripts/poetize_cli.py publish --markdown-file article.md --brief-file article-brief.json
Allow creating a missing category and tag only when explicitly confirmed:
python {baseDir}/scripts/poetize_cli.py publish --markdown-file article.md --brief-file article-brief.json --allow-create-taxonomy --publish --wait
List articles for运营筛选:
python {baseDir}/scripts/poetize_cli.py manage list-articles --search-key "AI" --sort-name "AI实践" --label-name "自动化" --current 1 --size 10
If an exact category or tag name does not match, the management script returns close candidates and stops. The Agent should surface those candidates for confirmation instead of guessing.
Hide an existing article:
python {baseDir}/scripts/poetize_cli.py manage hide-article --article-id 123 --brief-file ops-brief.json --wait
Deletion policy:
viewStatus to false.Switch the global article theme:
python {baseDir}/scripts/poetize_cli.py manage activate-theme --plugin-key academic
Update controlled SEO config:
python {baseDir}/scripts/poetize_cli.py manage seo-set-config --config-file seo.json
taskId and task status URL when not waitingarticleIdarticleSlug when configuredarticleUrl