skills-experimental/classifier-denial-tracking-pattern/SKILL.md
# Classifier Denial Tracking Pattern Skill Classifier Denial Tracking Pattern - DenialTrackingState consecutiveDenials/totalDenials + DENIAL_LIMITS maxConsecutive:3/maxTotal:20 + recordDenial increment + recordSuccess reset consecutive + shouldFallbackToPrompting limits check + consecutive≥3 OR total≥20 fallback + immutable state update + classifier retry budget。 ## 功能概述 从Claude Code的utils/permissions/denialTracking.ts提取的Classifier denial tracking模式,用于OpenClaw的分类器拒绝计数。 ## 核心机制 ### DenialTra
npx skillsauth add bianhaifeng789-hue/openclaw-config skills-experimental/classifier-denial-tracking-patternInstall 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.
Classifier Denial Tracking Pattern - DenialTrackingState consecutiveDenials/totalDenials + DENIAL_LIMITS maxConsecutive:3/maxTotal:20 + recordDenial increment + recordSuccess reset consecutive + shouldFallbackToPrompting limits check + consecutive≥3 OR total≥20 fallback + immutable state update + classifier retry budget。
从Claude Code的utils/permissions/denialTracking.ts提取的Classifier denial tracking模式,用于OpenClaw的分类器拒绝计数。
export type DenialTrackingState = {
consecutiveDenials: number
totalDenials: number
}
export function createDenialTrackingState(): DenialTrackingState {
return {
consecutiveDenials: 0,
totalDenials: 0,
}
}
// DenialTrackingState
# consecutiveDenials: number
# totalDenials: number
# Immutable state
export const DENIAL_LIMITS = {
maxConsecutive: 3,
maxTotal: 20,
} as const
// DENIAL_LIMITS
# maxConsecutive: 3
# maxTotal: 20
# as const
export function recordDenial(state: DenialTrackingState): DenialTrackingState {
return {
...state,
consecutiveDenials: state.consecutiveDenials + 1,
totalDenials: state.totalDenials + 1,
}
}
// recordDenial
# consecutive + 1
# total + 1
# Immutable update
export function recordSuccess(state: DenialTrackingState): DenialTrackingState {
if (state.consecutiveDenials === 0) return state // No change needed
return {
...state,
consecutiveDenials: 0,
}
}
// recordSuccess
# consecutive = 0
# No change if already 0
# Reset on success
export function shouldFallbackToPrompting(state: DenialTrackingState): boolean {
return (
state.consecutiveDenials >= DENIAL_LIMITS.maxConsecutive ||
state.totalDenials >= DENIAL_LIMITS.maxTotal
)
}
// shouldFallbackToPrompting
# consecutive >= 3
# total >= 20
# Fallback to ask
// After 3 consecutive denials or 20 total denials
// the classifier has failed too often → fallback to prompting
if (shouldFallbackToPrompting(state)) {
// Show permission prompt instead of using classifier
}
// consecutive≥3 OR total≥20
# 3 consecutive = classifier failing repeatedly
# 20 total = classifier unreliable overall
# Fallback to prompt user
// All functions return new state objects
// Original state is never mutated
return { ...state, consecutiveDenials: state.consecutiveDenials + 1 }
// immutable state update
# Spread + update
# No mutation
# Functional update
// Budget pattern:
// - 3 consecutive: tight budget - classifier repeatedly failing on similar operations
// - 20 total: loose budget - classifier unreliable over session lifetime
// Budget exhausted → fallback to explicit user prompts
// classifier retry budget
# 3 consecutive = tight
# 20 total = loose
# Budget exhausted → prompt
{
"consecutiveDenials": 2,
"totalDenials": 8,
"maxConsecutive": 3,
"maxTotal": 20,
"shouldFallback": false
}
consecutiveDenials + totalDenials → dual counters → consecutive = tight budget | total = loose budget → dual counters
# consecutive/total dual counters
# consecutive: repeated failures
# total: overall reliability
maxConsecutive: 3 → 3 consecutive denials → classifier failing repeatedly → tight budget → fallback
# 3 consecutive tight budget
# repeated failures
# immediate fallback
maxTotal: 20 → 20 total denials → classifier unreliable overall → loose budget → fallback
# 20 total loose budget
# session lifetime budget
# overall reliability
if (state.consecutiveDenials === 0) return state → no change needed → ref equality preserved → optimization
# recordSuccess no-change optimization
# early return if 0
# preserve ref equality
{ ...state, consecutiveDenials: state.consecutiveDenials + 1 } → spread + update → immutable → functional → no mutation
# immutable functional update
# spread + increment
# return new object
utils/permissions/denialTracking.ts (43 lines)business
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