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

ll-feishu-audio

飞书语音交互技能。支持语音消息自动识别、AI 处理、语音回复全流程。需要配置 FEISHU_APP_ID 和 FEISHU_APP_SECRET 环境变量。使用 faster-whisper 进行语音识别,Edge TTS 进行语音合成,自动转换 OPUS 格式并通过飞书发送。适用于飞书平台的语音对话场景。

Archived SourceRecently Updated
General

test_skill

import json import tkinter as tk from tkinter import messagebox, simpledialog

Archived SourceRecently Updated
General

51mee-resume-profile

简历画像。触发场景:用户要求生成候选人画像;用户想了解候选人的多维度标签和能力评估。

Archived SourceRecently Updated
General

51mee-resume-parse

简历解析。触发场景:用户上传简历文件要求解析、提取结构化信息。

Archived SourceRecently Updated