skills-experimental/cli-hints-protocol/SKILL.md
# CLI Hints Protocol Skill **优先级**: P29 **来源**: Claude Code `claudeCodeHints.ts` **适用场景**: Feishu卡片协议、CLI/SDK通信 --- ## 概述 CLI Hints Protocol允许SDK/CLI通过stderr发送自关闭XML标签 `<claude-code-hint />`,harness扫描处理后将stripped output传给model。hints是harness-only side channel,model不感知。 --- ## 核心功能 ### 1. Hint标签解析 ```typescript type ClaudeCodeHintType = 'plugin' | 'card' | 'progress' type ClaudeCodeHint = { v: number // Spec version type: ClaudeCodeHintType value: string // nam
npx skillsauth add bianhaifeng789-hue/openclaw-config skills-experimental/cli-hints-protocolInstall 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.
优先级: P29
来源: Claude Code claudeCodeHints.ts
适用场景: Feishu卡片协议、CLI/SDK通信
CLI Hints Protocol允许SDK/CLI通过stderr发送自关闭XML标签 <claude-code-hint />,harness扫描处理后将stripped output传给model。hints是harness-only side channel,model不感知。
type ClaudeCodeHintType = 'plugin' | 'card' | 'progress'
type ClaudeCodeHint = {
v: number // Spec version
type: ClaudeCodeHintType
value: string // name@marketplace 或 card-type
sourceCommand: string // 第一个token
}
const HINT_TAG_RE = /^[ \t]*<claude-code-hint\s+([^>]*?)\s*\/>[ \t]*$/gm
const ATTR_RE = /(\w+)=(?:"([^"]*)"|([^\s/>]+))/g
export function extractClaudeCodeHints(
output: string,
command: string
): { hints: ClaudeCodeHint[]; stripped: string }
// OpenClaw扩展:Feishu卡片协议
type OpenClawHintType = 'card' | 'progress' | 'notification' | 'action'
type OpenClawHint = {
v: number
type: OpenClawHintType
value: string
sourceCommand: string
}
// 示例:<openclaw-hint type="card" value="progress" v="1" />
// SDK发送后,harness提取并渲染飞书进度卡片
// model看到的output不含hint(纯净)
<openclaw-hint type="card" value="progress" v="1" />
<openclaw-hint type="notification" value="success" v="1" />
// Fast path: 无标签 → 直接返回
if (!output.includes('<openclaw-hint')) {
return { hints: [], stripped: output }
}
// 提取hints并strip
const stripped = output.replace(HINT_TAG_RE, rawLine => {
const attrs = parseAttrs(rawLine)
hints.push({ v, type, value, sourceCommand })
return ''
})
// Collapse多余空行
const collapsed = stripped.replace(/\n{3,}/g, '\n\n')
let pendingHint: OpenClawHint | null = null
let shownThisSession = false
// Single-slot: 只保存一个pending hint
export function setPendingHint(hint: OpenClawHint): void {
if (shownThisSession) return
pendingHint = hint
}
export function getPendingHint(): OpenClawHint | null {
return pendingHint
}
export function markHintShown(): void {
shownThisSession = true
pendingHint = null
}
<openclaw-hint type="card" value="progress" v="1" />
SDK发送后,harness渲染飞书进度卡片。
<openclaw-hint type="notification" value="success" v="1" />
<openclaw-hint type="action" value="confirm" v="1" />
{
"skill": "cli-hints-protocol",
"priority": "P29",
"source": "claudeCodeHints.ts",
"enabled": true,
"hintTypes": ["card", "progress", "notification", "action"],
"supportedVersions": [1],
"pendingHint": null,
"shownThisSession": false,
"createdAt": "2026-04-12T13:00:00Z"
}
claudeCodeHints.tsdocs/claude-code-hints.mdbusiness
IAA 日报飞书输出能力。 支持把固定 CSV 模板一键转换成: - 中文运营结论 - 飞书卡片 JSON - 飞书发送载荷 Use when: - 需要把 IAA 日报直接发到飞书 - 需要从 CSV 一键生成运营日报
data-ai
IAA日报分析模型 功能: - 渠道日报自动分析 - 小时级+日级ROI联动判断 - 按地区输出加量/降量/停投建议 - 按产品类型输出阈值 - 自动识别利润区/观察区/止损区 Use when: - 分析每天投放数据 - 生成运营日报结论 - 判断是否加量/降量/停投 - 对比美加澳/日韩表现 Keywords: - 日报模型, 投放日报, 加量, 降量, 停投, ROI日报, 分地区分析
data-ai
IAA固定日报分析模板 功能: - 固定字段模板(可直接贴每天数据) - 自动输出总盘结论 - 自动输出美加澳/日韩结论 - 自动给出加量/降量/停投建议 - 适配文件修复/清理两类产品 Use when: - 需要固定日报格式 - 每天复盘渠道表现 - 给运营团队出统一结论 Keywords: - 固定模板, 日报模板, ROI模板, IAA日报, 运营模板
development
# HyperlinkPool Pattern Skill HyperlinkPool Pattern - HyperlinkPool class + strings array + stringMap + Index 0 no hyperlink + intern(hyperlink) + get(id) + undefined handling + 5-minute reset + OSC8 hyperlink interning。 ## 功能概述 从Claude Code的ink/screen.ts提取的HyperlinkPool模式,用于OpenClaw的OSC8超链接池管理。 ## 核心机制 ### HyperlinkPool Class ```typescript export class HyperlinkPool { private strings: string[] = [''] // Index 0 = no hyperlink private stringMap = new Map<string, number>() // strings