Other

/frustration-capture

Store genuine user corrections/frustration after validating context and speaker intent. Triggers: no/wrong/stop, I told you, not that, profanity/frustration.

$ golems-cli skills install frustration-capture
8 evals

Updated 1 week ago

"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.


WHEN TO ACTIVATE

Activate this skill when a user message contains a genuine correction or frustration signal. A lexical hook match is a candidate for validation, not proof that a correction happened or that profanity concerns the current task.

Tier 1: Direct Corrections (ALWAYS capture)

  • "No" / "Not that" / "Wrong" / "Stop" — explicit negation of your action. Bare no counts only when it is a short standalone response or has a nearby correctee/contradiction signal. A corrected value supplied in the same clause, such as No — the browser is Helium, also counts. State/preference idioms such as no need, no rush, no problem, no commit yet, and conversation control such as no, continue do not count.
  • "I told you" / "As I said" / "We spoke about this" / "It's not new" — repetition signal (user had to say it before)
  • "Wait, are we not doing X?" — redirect, you drifted from the task
  • "What do you mean by X?" — confusion about your claim/action
  • User provides the correct answer after your wrong one — implicit correction

Tier 2: Frustration Escalation (capture with HIGHER importance)

  • Profanity — "this is fucking broken", "what the hell", "can you fucking read it", "damn it", "dumb ass". The deterministic hook treats this as a Tier 2 candidate; validation decides whether it is genuine and task-related. A single first-time profanity signal remains importance 8.
  • Multiple negations — "no no no no no"
  • All-caps — "NEVER" / "STOP" / "WHY"
  • Exasperation markers — "come on", "for fuck's sake", "are you serious"

Tier 3: Sustained or Repeated Signals

  • Sustained directed profanity plus an imperative/repetition signal — multiple expletives combined with we need to, can you, I already said, or equivalent
  • User does the task themselves — they gave up on you doing it right
  • User offers a simpler solution — "why not just X?" (you overcomplicated)
  • Short frustrated responses — "no." / "wrong." / "ugh"
  • User re-explains the same concept differently — they think you didn't understand

WHAT TO CAPTURE

First check the surrounding exchange: identify the assistant claim/action being corrected and confirm the words are from the user rather than quoted worker text, a status relay, or a reviewer brief. If there is no real correctee or genuine task-related frustration, do not store anything. When the signal is genuine, 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>
)

Importance Scale

SignalImportanceWhy
First-time correction, calm tone7Standard correction
Correction with frustration markers8User is annoyed — this matters more
Repeated correction (user said it before)9Pattern — you're not learning
Correction with profanity + repetition signal10Critical — user is considering giving up on you

Categories

CategoryPatternExample
routing-violationWrong agent/tool for the task"Cursor is for gathering, not implementing"
fabricationMade up data, prices, facts"Don't fake these data"
scope-driftDoing the wrong task"Wait, are we not doing /claude-desktop-research?"
tool-misuseWrong flag, wrong command, wrong tool"orcClaude -s -c will continue you dummy"
assumptionWrong personal/project fact"I'm not a student" / "I use Helium"
communicationDidn't listen, unclear, repeated self"I told you I want to not consume too much context"
deferralPostponed when user wanted action"Not good one for later"
overcomplicateMade simple thing complex"Why not just convert it?"

WHAT NOT TO DO

  1. Don't just apologize when the correction is real. "Sorry about that" without a brain_store loses a genuine correction. Equally, never invent a correction merely because the hook matched a word.

  2. Don't argue, and don't stall. When the user corrects you, they are RIGHT. ANSWER them first — the store rides the same turn, after the answer, never before it (Etan-ratified store-discipline: do the thing, then store). 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.

  3. 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.

  4. Don't inflate importance. A calm "no, use Cursor for that" is importance 7, not 10. Save 9-10 for repeated corrections with frustration.

  5. 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.