halo-search

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.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "halo-search" with this command: npx skills add ruibaby/halo-skills/ruibaby-halo-skills-halo-search

Halo CMS Post Search

Search posts on any Halo-powered website via its public REST API (no authentication required).

Workflow

  1. Extract the base URL from the user (e.g., https://example.com)
  2. Ask for the search keyword if not provided
  3. Call the search API using curl via the Shell tool
  4. Parse the JSON response and present results to the user

Search API

Endpoint: POST {baseUrl}/apis/api.halo.run/v1alpha1/indices/-/search

Request Body (JSON):

{
  "keyword": "search term",
  "limit": 10,
  "highlightPreTag": "<B>",
  "highlightPostTag": "</B>"
}

Request Fields

FieldTypeRequiredDefaultDescription
keywordstringYes-Search keyword
limitintNo10Result limit (1-1000)
highlightPreTagstringNo<B>Highlight open tag
highlightPostTagstringNo</B>Highlight close tag
includeTypesstring[]NoallFilter by type
includeTagNamesstring[]NoallFilter by tag names
includeCategoryNamesstring[]NoallFilter by category names
includeOwnerNamesstring[]NoallFilter by owner names

Response Structure

{
  "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
}

Example curl Command

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.

Post Detail API

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

Key Response Fields

PathDescription
spec.titlePost title
spec.slugURL slug
spec.coverCover image URL
spec.publishTimePublish time
spec.pinnedWhether pinned
spec.visibleVisibility (PUBLIC, PRIVATE, etc.)
spec.excerpt.rawManual excerpt
status.excerptAuto-generated excerpt
status.permalinkPost permalink
content.contentFull rendered HTML content
content.rawRaw content (usually Markdown or HTML)
owner.displayNameAuthor display name
stats.visitVisit count
stats.commentComment count
stats.upvoteUpvote count
categories[].spec.displayNameCategory display name
tags[].spec.displayNameTag display name
tags[].spec.colorTag color
contributors[].displayNameContributor display name

Presenting Post Detail

Display:

  1. Title (spec.title) with full URL ({baseUrl} + status.permalink)
  2. Author (owner.displayName)
  3. Date (spec.publishTime)
  4. Categories / Tags (from categories[].spec.displayName and tags[].spec.displayName)
  5. Content — prefer content.raw for readable text; use content.content (rendered HTML) as fallback
  6. Stats (visits, comments, upvotes) if relevant

Presenting Search Results

For each hit, display:

  1. Title (with permalink as full URL: {baseUrl}{permalink})
  2. Description or a snippet of content
  3. Tags / Categories if present
  4. Date (creationTimestamp)

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.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

image-gen

Generate AI images from text prompts. Triggers on: "生成图片", "画一张", "AI图", "generate image", "配图", "create picture", "draw", "visualize", "generate an image".

Archived SourceRecently Updated
General

explainer

Create explainer videos with narration and AI-generated visuals. Triggers on: "解说视频", "explainer video", "explain this as a video", "tutorial video", "introduce X (video)", "解释一下XX(视频形式)".

Archived SourceRecently Updated
General

asr

Transcribe audio files to text using local speech recognition. Triggers on: "转录", "transcribe", "语音转文字", "ASR", "识别音频", "把这段音频转成文字".

Archived SourceRecently Updated
General

axure-prototype-generator

Axure 原型代码生成器 - 输出 JavaScript 格式 HTML 代码,支持内联框架直接加载可交互原型

Archived SourceRecently Updated