Halo cli content
CLI for Halo, Halo for Agents.
npx -y skills add halo-dev/cli --skill halo-cli-contentAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 23 stars23 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when managing Halo posts, single pages, categories, or tags from the terminal. This includes listing, creating, updating, deleting, exporting, importing, or any content management operation for Halo CMS. Trigger this skill whenever the user mentions Halo posts, pages, categories, tags, or content management in a CLI context, even if they do not explicitly mention 'content'.
SKILL.md
8.2 KB, as published. Nobody here has run it
Halo CLI Content
Use this skill for halo post and halo single-page.
If auth may not be ready, check halo auth current first or load halo-cli-auth.
Commands
halo post --help
halo single-page --help
Post workflows:
listget <name>open <name>createupdate <name>delete <name>export-json <name>import-jsoncategory(subcommand)tag(subcommand)
Single-page workflows:
listget <name>open <name>createupdate <name>delete <name>export-json <name>import-json
Posts
List and inspect:
halo post list
halo post list --keyword halo --publish-phase PUBLISHED
halo post list --category Technology --page 1 --size 20
halo post get my-post --json
Create:
halo post create --title "Hello Halo" --content "# Hello Halo" --publish true
halo post create --title "Hello Halo" --content "<h1>Hello Halo</h1>" --raw-type html
halo post create \
--title "Release Notes" \
--content "Release notes content" \
--slug "release-notes" \
--excerpt "A brief summary" \
--categories News,CLI \
--tags Halo,Release \
--cover "https://example.com/cover.png" \
--visible PUBLIC \
--allow-comment true \
--pinned false \
--priority 100 \
--publish true
Update:
halo post update my-post --title "Updated title"
halo post update my-post --content "Updated content" --publish true
halo post update my-post --new-name my-post-renamed
halo post update my-post --slug "new-slug" --excerpt "Updated excerpt" --cover ""
halo post update my-post --allow-comment false --priority 0
Taxonomy-aware create/update:
halo post create \
--title "Release Notes" \
--content "Release notes content" \
--categories News,CLI \
--tags Halo,Release
JSON round-trip:
halo post export-json my-post --output ./post.json
halo post import-json --file ./post.json --force
import-json payload example (for creating a new post):
{
"post": {
"apiVersion": "content.halo.run/v1alpha1",
"kind": "Post",
"metadata": {
"name": "56c6d867-9683-4927-ba94-388fedf87443"
},
"spec": {
"title": "Sample Post",
"slug": "sample-post",
"template": "",
"cover": "",
"deleted": false,
"publish": false,
"pinned": false,
"allowComment": true,
"visible": "PUBLIC",
"priority": 0,
"excerpt": { "autoGenerate": true, "raw": "" },
"categories": ["category-xxx"],
"tags": ["tag-xxx"],
"htmlMetas": []
}
},
"content": {
"raw": "# Hello World\n\nThis is a sample post content in **Markdown**.\n",
"content": "<h1 id=\"hello-world\">Hello World</h1>\n<p>This is a sample post content in <strong>Markdown</strong>.</p>\n",
"rawType": "markdown"
}
}
Content fields:
-
rawType: source format, supportsmarkdownorhtml. -
raw: the source content. Use Markdown text whenrawTypeismarkdown; use HTML text whenrawTypeishtml. -
content: the rendered result. Use HTML text whenrawTypeismarkdown(converted from Markdown); use HTML text whenrawTypeishtml. -
baseSnapshot,headSnapshot,releaseSnapshotandownermust be left empty (do not construct manually). -
categoriesandtagsvalues are themetadata.nameof existing categories/tags in the system. Query them first withhalo post category listandhalo post tag list; create any missing ones before importing.
Markdown round-trip:
halo post export-markdown my-post
halo post export-markdown my-post --output ./post.md
halo post import-markdown --file ./post.md --force
Rules:
--raw-typedefaults tomarkdown, so--contentis rendered as Markdown unless you set--raw-type html.- Prefer
--contentfor direct inline updates, or useimport-markdownfor Markdown files. openonly works for published content; with--jsonit returns the URL.- Import payload must contain
post.metadata.name. - Import payload must contain
content.raworcontent.content.
Post Categories
Manage post categories:
halo post category list
halo post category list --keyword Technology
halo post category get category-abc123
halo post category create --display-name "Technology" --slug "tech"
halo post category create --display-name "News" --description "Latest news" --priority 100
halo post category create --display-name "Featured" --slug "featured" --cover "https://example.com/cover.png"
halo post category update category-abc123 --display-name "Tech News"
halo post category delete category-abc123 --force
Post Tags
Manage post tags:
halo post tag list
halo post tag list --keyword Halo
halo post tag get tag-abc123
halo post tag create --display-name "Halo" --slug "halo" --color "#1890ff"
halo post tag create --display-name "Technology" --slug "tech" --color "#52c41a" --cover "https://example.com/tag-cover.png"
halo post tag update tag-abc123 --display-name "Halo CMS"
halo post tag delete tag-abc123 --force
Single Pages
List and inspect:
halo single-page list
halo single-page get about --json
Create:
halo single-page create --title "About" --content "# About" --publish true
halo single-page create --title "About" --content "<h1>Hello Halo</h1>" --raw-type html
halo single-page create \
--title "Contact Us" \
--content "# Contact" \
--slug "contact" \
--excerpt "Get in touch" \
--template "page" \
--visible PUBLIC \
--allow-comment true \
--priority 0 \
--publish true
Update:
halo single-page update about --title "About Halo"
halo single-page update about --new-name about-page
halo single-page update about --slug "about-halo" --excerpt "Updated description"
halo single-page update about --allow-comment false --template ""
JSON round-trip:
halo single-page export-json about --output ./about.json
halo single-page import-json --file ./about.json --force
import-json payload example (for creating a new single page):
{
"page": {
"apiVersion": "content.halo.run/v1alpha1",
"kind": "SinglePage",
"metadata": {
"name": "373a5f79-f44f-441a-9df1-85a4f553ece8"
},
"spec": {
"title": "About Us",
"slug": "about",
"template": "",
"cover": "",
"deleted": false,
"publish": false,
"publishTime": undefined,
"pinned": false,
"allowComment": true,
"visible": "PUBLIC",
"priority": 0,
"excerpt": { "autoGenerate": true, "raw": "" },
"htmlMetas": []
}
},
"content": {
"raw": "<h1>About Us</h1><p>This is a <strong>custom page</strong> content.</p>",
"content": "<h1>About Us</h1><p>This is a <strong>custom page</strong> content.</p>",
"rawType": "HTML"
}
}
Content fields:
-
rawType: source format, supportsmarkdownorhtml. -
raw: the source content. Use Markdown text whenrawTypeismarkdown; use HTML text whenrawTypeishtml. -
content: the rendered result. Use HTML text whenrawTypeismarkdown(converted from Markdown); use HTML text whenrawTypeishtml. -
baseSnapshot,headSnapshot,releaseSnapshotandownermust be left empty (do not construct manually).
Rules:
- The command name is
single-page, notsinglePage. - Single pages do not use post category/tag flows.
- There is no
--pinnedoption forsingle-page. - Import payload must contain
page.metadata.name.
Safety And Automation
- Use
--profile <name>when more than one Halo profile exists. - Use
--jsonfor scripts. - Use
--forcefor destructive non-interactive commands likedeleteor overwrite-style imports. - Read current state before mutating when the target resource is uncertain.