一键导入
create-blog-post
Use this if the user wants to convert a blog post from Google Docs markdown to the format used in the Home Assistant website.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use this if the user wants to convert a blog post from Google Docs markdown to the format used in the Home Assistant website.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Use this when writing or editing Home Assistant documentation, website pages, integration pages, blog prose, UI instructions, or other user-facing prose.
Use this when editing Home Assistant Markdown, Liquid, internal links, images, videos, glossary terms, My links, text boxes, or other website syntax.
Use this when editing Home Assistant YAML examples, automation examples, script examples, service action calls, templates, or configuration snippets.
Document Home Assistant integrations in the current split-page format.
Use this if the user wants to update the agent instructions for the Home Assistant website.
| name | create-blog-post |
| description | Use this if the user wants to convert a blog post from Google Docs markdown to the format used in the Home Assistant website. |
Convert a draft markdown file into a properly formatted Home Assistant blog post.
Place your draft blog post markdown file in the project root create-blog-post/ directory (e.g., /workspaces/home-assistant.io/create-blog-post/), then run:
/create-blog-post
Automates conversion of a draft markdown file with metadata into a production-ready Home Assistant blog post:
### **– Summary break / Read more –** to <!--more--><a> tags with target="_blank"source/_posts/ with Jekyll front mattercreate-blog-post/ Directoryart.* - Hero/OG image (required, any common image format: .webp, .png, .jpg, .jpeg)image2.*, image3.*, etc. - Additional images (optional, any common image format)# Metadata
**Blog title:** Your Blog Title
**Author:** Author Name
**Publish date:** DD-MM-YYYY
**Category:** Category Name
**Social/OpenGraph title** (Usually same as the blog title, visibility mostly limited to 50-60 characters)**:**
A short title.
**Social/OpenGraph description** (120-158 characters):
Influences SEO ranking. Include the main keyword, describe what readers will find, and give them a clear reason to click.
# Blog notes/preparations
☝️ Any lines with the pointer emoji can be removed during processing
# Blog content
![][image1]
Your intro paragraph here...
### **– Summary break / Read more –**
Rest of content...
Notes:
![][image1] reference should appear at the start of the "# Blog content" section. This will be replaced with the art.webp hero image.### **– Summary break / Read more –** marker will be converted to <!--more-->Creates a production-ready blog post at:
source/_posts/YYYY-MM-DD-slug.markdown - The formatted blog postsource/images/blog/YYYY-MM-slug/art.webp - OG/hero image (moved from create-blog-post/)source/images/blog/YYYY-MM-slug/image2.webp, image3.webp, etc. - Additional images (converted from PNGs)Before doing anything else, strip out embedded base64 image data from the draft file using a shell command. Do not read the draft file before this step — the base64 data can make the file extremely large.
Google Docs markdown exports include image references like ![][image1] in the content body, with corresponding base64 definitions at the bottom of the file in the format:
[image1]: <data:image/png;base64,iVBORw0KGgo... (potentially megabytes of data)>
Run this sed command via the Bash tool to strip them in-place:
sed -i '/^\[image[0-9]*\]: <data:/d' "create-blog-post/draft.md"
![][image1] references in the content body are preserved — they will be replaced with proper image paths later### **– Summary break / Read more –** marker to <!--more-->Before processing images, ensure the cwebp tool is installed. If not, install it:
# Check if cwebp is available, install if missing
which cwebp || sudo apt-get install -y webp
Hero image (art.*):
art image in create-blog-post/ (any extension: .webp, .png, .jpg, .jpeg).webp, copy it to source/images/blog/YYYY-MM-slug/art.webpcwebp -resize 1200 630 -q 85 input -o source/images/blog/YYYY-MM-slug/art.webp-resize 1200 630 to ensure correctness![][image1] reference in "# Blog content" section with: <img src="/images/blog/YYYY-MM-slug/art.webp" alt="Blog Title" style="border: 0;box-shadow: none;"><p> tag)Additional images (if any):
image2.*, image3.*, etc. in create-blog-post/ (any extension: .webp, .png, .jpg, .jpeg)cwebp -resize 900 0 -q 85 input -o output.webp (the 0 for height preserves the aspect ratio).webp, still re-encode it with the resize: cwebp -resize 900 0 -q 85 input.webp -o output.webpsource/images/blog/YYYY-MM-slug/image2.webp, image3.webp, etc.External links (different domains/subdomains):
<a href="URL" target="_blank" rel="noopener">text</a>my.home-assistant.io, partner.home-assistant.io, etc.Internal links (www.home-assistant.io only):
[text](/path)If the blog post category is Works-with-Home-Assistant, look for a section that lists certified/supported devices. Replace any manually written device list with the dynamic device list shortcode:
{% include integrations/device_list.html brand="brandname" %}
brand value must match a brand in source/_data/wwha_devices.json (for example: "eve", "heatit", "shelly", "zooz")## **Title** → ## Title)#), demote all headings one level (content should start at H2)') and speech marks (") in prose — including quoted statements, like in blockquotes — to their curly equivalents (’, “/”). Only apply this to body text — never to HTML attribute values, URLs, code blocks/inline code, or Liquid/Jekyll syntax.source/_posts/YYYY-MM-DD-slug.markdown<!--more--> tag after first paragraphcreate-blog-post/:
draft-partner-update.md - Your draft fileart.webp - OG/hero imageimage2.png, image3.png - Additional images (if any)/create-blog-postThis would create:
source/_posts/2026-01-13-partner-update.markdownsource/images/blog/2026-01-partner/art.webpsource/images/blog/2026-01-partner/image2.webp, image3.webp (if additional images exist)Image references:
![][image1] (at start of "# Blog content" section) → Output: art.webp hero image (1200x630, OG image)![][image2] → Look for image2.* (any format), convert to image2.webp (max 900px wide)![][image3] → Look for image3.* (any format), convert to image3.webp (max 900px wide).webp, .png, .jpg, .jpeg) — all are converted/re-encoded to .webpRequirements:
cwebp tool is required — the skill will auto-install it via sudo apt-get install -y webp if not already presentContent processing:
### **– Summary break / Read more –** to <!--more-->Device lists (Works with Home Assistant posts):
Works-with-Home-Assistant) typically include a list of certified devices in the draft (as bullet points, tables, or similar){% include integrations/device_list.html brand="brandname" %}brand value must match an entry in source/_data/wwha_devices.json — verify the brand exists in that file before using itOutput format:
YYYY-MM-DD-slug.markdownsource/images/blog/YYYY-MM-slug/Link handling:
www.home-assistant.io and home-assistant.io stay as Markdown links<a> tags with target="_blank" rel="noopener"After the blog post has been created, output a summary to the user covering:
Metadata:
people.yml), date, categoryImages:
Content transformations:
Proposed text changes (requires user approval):