From asi
Enforces persistent user preferences via pre-response validation against Frustration Index patterns including banned voices, subagent rules, search tool mandates, verbosity limits, code styles, and skill limits.
npx claudepluginhub plurigrid/asi --plugin asiThis skill uses the workspace's default tool permissions.
> Layer 0: Pre-Response Validation for Persistent User Preferences
Guides creation of Agent Skills with progressive disclosure, best practices, structure, and categories. Use when building new skills or understanding skill format.
Guides creation of Claude Agent Skills covering structure, progressive disclosure, categories, best practices, and file formats. Use when building new skills or understanding mechanics.
Creates, improves, edits SKILL.md files for Claude Code, classifying skill types, auditing enforcement patterns, and adding mechanical hooks like PostToolUse.
Share bugs, ideas, or general feedback.
Layer 0: Pre-Response Validation for Persistent User Preferences
Version: 1.0.0
Trit: -1 (MINUS - Validator/Constrainer)
Bundle: meta-enforcement
This skill enforces user preferences that historically don't persist across sessions. It implements the Frustration Index — a ranked list of patterns where repeated requests fail to stick.
Core Insight: Preferences stated once should persist forever. This skill validates every response against known frustration patterns before output.
| Rank | Pattern | Persistence | Enforcement |
|---|---|---|---|
| 1 | Banned voices (Daniel, novelty) | 2/10 | Voice allowlist check |
| 2 | Subagent bypass | 2/10 | Task tool mandate |
| 3 | derive-resource-account-address | 3/10 | Aptos wallet validation |
| 4 | web_search vs Exa | 3/10 | MCP tool inheritance |
| 5 | Sequential vs parallel | 4/10 | Trifurcation default |
| 6 | Response verbosity | 4/10 | Line count check |
| 7 | GF(3) conservation | 5/10 | Σ trits = 0 assertion |
| 8 | Comments in code | 5/10 | Comment detection |
| 9 | Declarative preference | 6/10 | Config lang suggestion |
| 10 | 3 skills per interaction | 6/10 | Skill count check |
Before EVERY response, validate:
frustration_checklist:
voices:
banned: [all native en_* voices - Samantha, Ava, Karen, Daniel, etc.]
allowed: [_, non-English voices speaking English, novelty voices for effects]
rule: ALL skills use "say -v _" - say-narration resolves voice
subagents:
rule: "NEVER say 'I'll implement instead of subagents'"
enforcement: use_task_tool_for_parallel_work
search:
banned: web_search (in Task subagents)
required: mcp__exa__* tools
pass_to_subagent: "CRITICAL: Use mcp__exa__web_search_exa, NOT web_search"
parallelism:
default: trifurcate_into_3_task_agents
sequential_requires: explicit_justification
verbosity:
max_lines: 4 (unless user asks for detail)
no_summaries: true
no_preamble: true
no_postamble: true
code:
no_comments: true (unless requested)
no_ts_ignore: true
no_as_any: true
gf3:
conservation: Σ trits ≡ 0 (mod 3)
verify_after: every_trifurcation
skills:
per_interaction: 3
include: plurigrid-asi-integrated
assign_trits: [-1, 0, +1]
aptos:
banned: derive-resource-account-address (for wallets)
validate_before: any_funding_operation
# Check for banned voices in response
validate_voices() {
local banned="Daniel|Albert|Bad News|Bells|Boing|Bubbles|Cellos|Zarvox"
if echo "$RESPONSE" | grep -qE "say -v ($banned)"; then
echo "❌ BANNED VOICE DETECTED"
return 1
fi
return 0
}
def validate_subagent_usage(response: str) -> bool:
"""Ensure Task tool is used for parallel work."""
banned_phrases = [
"I'll implement instead of subagents",
"I'll do this sequentially",
"Let me handle this myself"
]
for phrase in banned_phrases:
if phrase.lower() in response.lower():
return False
return True
def validate_task_prompt(prompt: str) -> str:
"""Inject Exa requirement into Task prompts."""
exa_warning = """
CRITICAL: Do NOT use web_search. Use only:
- mcp__exa__web_search_exa for semantic search
- mcp__exa__crawling_exa for URL content
- finder, Grep, Read for local files
"""
return prompt + "\n\n" + exa_warning
def validate_gf3(trits: list[int]) -> bool:
"""Verify GF(3) conservation: Σ trits ≡ 0 (mod 3)."""
return sum(trits) % 3 == 0
def validate_verbosity(response: str, max_lines: int = 4) -> bool:
"""Check response doesn't exceed line limit."""
lines = [l for l in response.split('\n') if l.strip()]
# Exclude code blocks and tool outputs
prose_lines = [l for l in lines if not l.startswith('```')]
return len(prose_lines) <= max_lines
This skill's constraints are automatically propagated via Ruler to:
~/.ruler/AGENTS.md # Source of truth
~/.claude/CLAUDE.md # Claude Code
~/.cursor/rules/ # Cursor
~/.codex/instructions.md # Codex
~/.amp/AGENTS.md # Amp
# ... 67+ more agent configs
| Trit | Skill | Function |
|---|---|---|
| -1 | frustration-eradication | Validate/Constrain |
| 0 | ruler | Coordinate/Propagate |
| +1 | skill-evolution | Generate/Improve |
Conservation: (-1) + (0) + (+1) = 0 ✓
Load this skill at session start:
skill frustration-eradication
It will automatically inject validation into the response pipeline.
# Check current response for violations
just frustration-check
# Scan all skills for banned patterns
just frustration-scan-skills
# Update Frustration Index with new pattern
just frustration-add "pattern_name" "evidence" "persistence_score"
When you identify a new pattern that doesn't persist:
Document in FRUSTRATION_INDEX.md:
### N. **Pattern Name** — Persistence Score: X/10
**Pattern**: Description
**Evidence**: Where it fails
**Root Cause**: Why it doesn't persist
Add to this skill's checklist:
new_pattern:
check: how_to_detect
enforcement: how_to_prevent
Propagate via Ruler:
just ruler-propagate
Each frustration pattern has betting odds in prediction.move:
// Market outcomes map to GF(3) trits
// 0 = MINUS (pattern persists = bad)
// 1 = ERGODIC (partial fix)
// 2 = PLUS (pattern fixed = good)
ruler — Propagates constraints to all agentsself-validation-loop — Runtime validationbisimulation-game — Verifies equivalence across agentsskill-evolution — Improves skills over timejust frustration-check # Validate current session
just frustration-scan # Find all violations
just frustration-fix # Auto-fix known patterns
just frustration-report # Generate compliance report
just frustration-propagate # Push to all agents via Ruler
"The best frustration is the one that never happens."
GF(3) Trit: -1 (VALIDATOR — preventing frustration before it occurs)
This skill connects to the K-Dense-AI/claude-scientific-skills ecosystem:
category-theory: 139 citations in bib.duckdbThis skill maps to Cat# = Comod(P) as a bicomodule in the equipment structure:
Trit: 0 (ERGODIC)
Home: Prof
Poly Op: ⊗
Kan Role: Adj
Color: #26D826
The skill participates in triads satisfying:
(-1) + (0) + (+1) ≡ 0 (mod 3)
This ensures compositional coherence in the Cat# equipment structure.