skills/golem-powers/frustration-capture/SKILL.md
Capture user corrections as high-importance BrainLayer entries. Use when user says no/wrong/stop, repeats instructions, expresses frustration, or during session mining. Triggers on: user correction, 'I told you', 'not that', frustration signal.
npx skillsauth add etanhey/golems frustration-captureInstall 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.
"We should probably have filters to look for all my frustration when I start cursing and maybe even the amount of cursing I do." — User, April 4 2026 session (L2709-2711)
"Search for 'frustration' or 'should have known' returned ZERO — meaning user corrections and frustration signals are NOT being captured." — Session mining finding (ST9)
BrainLayer has ZERO records of user corrections. This is the single biggest knowledge gap — corrections are the most valuable signals for improving agent behavior, and they're all being lost. This skill closes that gap.
Activate this skill when you detect ANY of these signals in a user message:
When you detect a correction, store it in BrainLayer with this format:
brain_store(
content: "USER CORRECTION [category]: I did [what you did wrong]. User wanted [what they actually wanted]. Quote: '[exact user words]'. Context: [1-sentence situation]. Behavioral rule: [what to do differently next time].",
tags: ["user-correction", "frustration", "<category>", "<project>"],
importance: <see scale below>
)
| Signal | Importance | Why | |--------|-----------|-----| | First-time correction, calm tone | 7 | Standard correction | | Correction with frustration markers | 8 | User is annoyed — this matters more | | Repeated correction (user said it before) | 9 | Pattern — you're not learning | | Correction with profanity + repetition signal | 10 | Critical — user is considering giving up on you |
| Category | Pattern | Example |
|----------|---------|---------|
| routing-violation | Wrong agent/tool for the task | "Cursor is for gathering, not implementing" |
| fabrication | Made up data, prices, facts | "Don't fake these data" |
| scope-drift | Doing the wrong task | "Wait, are we not doing /claude-desktop-research?" |
| tool-misuse | Wrong flag, wrong command, wrong tool | "orcClaude -s -c will continue you dummy" |
| assumption | Wrong personal/project fact | "I'm not a student" / "I use Helium" |
| communication | Didn't listen, unclear, repeated self | "I told you I want to not consume too much context" |
| deferral | Postponed when user wanted action | "Not good one for later" |
| overcomplicate | Made simple thing complex | "Why not just convert it?" |
Don't just apologize. "Sorry about that" without a brain_store = the correction is lost forever. The apology is social; the brain_store is functional.
Don't argue. When the user corrects you, they are RIGHT. Store the correction first. If you genuinely believe the user made an error, store the correction AND ask a clarifying question — but never push back on the correction itself.
Don't store vague summaries. "User was frustrated about routing" is useless. Store: exact quote, what you did wrong, what's correct, and the behavioral rule.
Don't inflate importance. A calm "no, use Cursor for that" is importance 7, not 10. Save 9-10 for repeated corrections with frustration.
Don't capture user's emotional state. This is NOT a mood tracker. Capture the CORRECTION (what you did wrong and what's right), not the EMOTION. The frustration level only affects importance scoring.
When mining session exports (JSONL or text), use these patterns to find corrections:
# Tier 1: Direct corrections
patterns_tier1 = [
r'\bno[,.]?\s', # "No, that's wrong"
r'\bnot that\b', # "Not that"
r'\bwrong\b', # "Wrong"
r'\bstop\b', # "Stop doing X"
r'I told you', # Repetition signal
r'as I said', # Repetition signal
r"it's not new", # Repetition signal
r'we spoke about', # Repetition signal
r'wait,?\s*(are|why)', # Redirect
r'what do you mean', # Confusion about agent's claim
]
# Tier 2: Frustration escalation
patterns_tier2 = [
r'what the (hell|fuck)',
r'damn it',
r'dumb\s?ass',
r'come on',
r'(mother)?fuck',
r'are you (serious|kidding)',
r'no{3,}', # "no no no no"
r'[A-Z]{4,}', # ALL CAPS words (4+ chars)
]
# Tier 3: Subtle
patterns_tier3 = [
r'why not just', # Simpler solution
r"that's fine,?\s*I guess", # Gave up
r'anyway', # Moving on from your failure
r'I can .* myself', # User doing it themselves
]
When mining, extract:
| Skill | How Frustration Capture Integrates |
|-------|-----------------------------------|
| /agent-routing | Routing violations are the #1 correction category (UC1-UC2) |
| /orc | R15 (BrainLayer store discipline) — corrections are the highest-priority stores |
| /never-fabricate | Fabrication corrections (UC4) compound with /never-fabricate rules |
| /session-handoff | Corrections must survive handoffs — store in BrainLayer, not just conversation |
| Session mining | Mining mode uses the regex patterns above to bulk-extract corrections |
After storing a correction, verify:
brain_search("user-correction <category>")
If the search returns your store → good. If it returns ZERO → the store failed or tags are wrong. Fix immediately. Evidence: April 4 mining found zero correction records despite 34 corrections across the session.
User says: "No, I use Helium as my main, not Brave."
Agent should:
assumption — wrong personal factbrain_store(
content: "USER CORRECTION [assumption]: I assumed user's main browser is Brave. User corrected: main browser is Helium, not Brave or Chrome. Quote: 'No, I use Helium as my main, not Brave.' Behavioral rule: never assume browser — check BrainLayer for user preferences before suggesting browser-specific actions.",
tags: ["user-correction", "frustration", "assumption", "browser-preference"],
importance: 7
)
brain_search("user-correction browser") → confirm storeddevelopment
Create, edit, and verify golem-powers skills using the standard SKILL.md structure, workflow files, adapters, templates, and eval fixtures. Use for new skills, structural edits, workflows/adapters, and pre-deploy validation. NOT for invoking existing skills, superpowers skills, or skill-creator agent workflows.
testing
Extract structured knowledge from any video source — YouTube URLs or local screen recordings. YouTube → gems workflow (yt-dlp transcript → keyword hotspots → frame extract → brain_digest → structured gems). Screen recordings → QA workflow (reuses /qa-video stalker pipeline). Use when user shares a YouTube link wanting deep extraction with frames, shares a .mov/.mp4 for QA processing, says "extract from video", "video gems", "process this recording", or mentions gem extraction from video content.
testing
Use when running or reviewing any recurring monitor loop for merge queues, worker queues, collab tails, or agent completion. Enforces drive-to-completion ticks: every tick must query live state with `!`, classify whether real progress happened, and then dispatch, verify-and-decrement, or escalate-park. Triggers on: monitor loop, /loop, recurring tick, keep monitoring, silent autonomous, merge gate, blocked review, no-progress loop.
tools
MeHayom freelance client management — daily updates, decision tracking, time logging. Use when drafting Yuval updates, logging scope changes, tracking hours, or any MeHayom client communication. Triggers: 'draft Yuval update', 'client update', 'daily update', 'log decision', 'track time', 'mehayom'.