skills/halo-search/SKILL.md
Search post content on websites built with Halo CMS using public API. Use when the user provides a Halo site URL and wants to search, query, or find posts or content on that site.
npx skillsauth add ruibaby/halo-skills halo-searchInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Search posts on any Halo-powered website via its public REST API (no authentication required).
https://example.com)curl via the Shell toolEndpoint: POST {baseUrl}/apis/api.halo.run/v1alpha1/indices/-/search
Request Body (JSON):
{
"keyword": "search term",
"limit": 10,
"highlightPreTag": "<B>",
"highlightPostTag": "</B>"
}
| Field | Type | Required | Default | Description |
| -------------------- | -------- | -------- | ------- | ------------------------ |
| keyword | string | Yes | - | Search keyword |
| limit | int | No | 10 | Result limit (1-1000) |
| highlightPreTag | string | No | <B> | Highlight open tag |
| highlightPostTag | string | No | </B> | Highlight close tag |
| includeTypes | string[] | No | all | Filter by type |
| includeTagNames | string[] | No | all | Filter by tag names |
| includeCategoryNames | string[] | No | all | Filter by category names |
| includeOwnerNames | string[] | No | all | Filter by owner names |
{
"hits": [
{
"id": "...",
"metadataName": "post-abc",
"title": "Post Title with <B>keyword</B> highlighted",
"description": "Post description...",
"content": "Plain text content...",
"categories": ["category-name"],
"tags": ["tag-name"],
"ownerName": "author-name",
"permalink": "/archives/post-slug",
"type": "post.content.halo.run",
"creationTimestamp": "2025-01-01T00:00:00Z",
"updateTimestamp": "2025-01-15T00:00:00Z"
}
],
"keyword": "search term",
"total": 5,
"limit": 10,
"processingTimeMillis": 42
}
curl -s -X POST '{baseUrl}/apis/api.halo.run/v1alpha1/indices/-/search' \
-H 'Content-Type: application/json' \
-d '{"keyword":"your keyword","limit":10,"highlightPreTag":"**","highlightPostTag":"**"}' | python3 -m json.tool
Use highlightPreTag / highlightPostTag set to ** for markdown-friendly bold highlighting in output.
When the user wants to read the full content of a search result, fetch the post detail.
Endpoint: GET {baseUrl}/apis/api.content.halo.run/v1alpha1/posts/{name}
The {name} is the metadataName field from a search hit.
curl -s '{baseUrl}/apis/api.content.halo.run/v1alpha1/posts/{metadataName}' | python3 -m json.tool
| Path | Description |
| ------------------------------- | -------------------------------------- |
| spec.title | Post title |
| spec.slug | URL slug |
| spec.cover | Cover image URL |
| spec.publishTime | Publish time |
| spec.pinned | Whether pinned |
| spec.visible | Visibility (PUBLIC, PRIVATE, etc.) |
| spec.excerpt.raw | Manual excerpt |
| status.excerpt | Auto-generated excerpt |
| status.permalink | Post permalink |
| content.content | Full rendered HTML content |
| content.raw | Raw content (usually Markdown or HTML) |
| owner.displayName | Author display name |
| stats.visit | Visit count |
| stats.comment | Comment count |
| stats.upvote | Upvote count |
| categories[].spec.displayName | Category display name |
| tags[].spec.displayName | Tag display name |
| tags[].spec.color | Tag color |
| contributors[].displayName | Contributor display name |
Display:
spec.title) with full URL ({baseUrl} + status.permalink)owner.displayName)spec.publishTime)categories[].spec.displayName and tags[].spec.displayName)content.raw for readable text; use content.content (rendered HTML) as fallbackFor each hit, display:
{baseUrl}{permalink})If the user wants the full post, call the Post Detail API using metadataName.
If total is 0, inform the user that no results were found.
If the request fails with a connection error, verify the URL is correct and the site is accessible. If it returns a search engine error, the site may not have a search plugin enabled.
development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
development
Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.
development
End-to-end Parallels smoke, upgrade, and rerun workflow for OpenClaw across macOS, Windows, and Linux guests. Use when Codex needs to run, rerun, debug, or interpret VM-based install, onboarding, gateway smoke tests, latest-release-to-main upgrade checks, fresh snapshot retests, or optional Discord roundtrip verification under Parallels.