| name | frustration-capture |
| description | 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. |
| hooks | {"UserPromptSubmit":[{"hook":"hooks/frustration-capture-prompt.py","description":"Auto-detect frustration patterns in user prompts and inject correction-capture guidance."}]} |
Frustration Capture — User Correction Ground Truth
"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 you detect ANY of these signals in a user message:
Tier 1: Direct Corrections (ALWAYS capture)
- "No" / "Not that" / "Wrong" / "Stop" — explicit negation of your action
- "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 directed at agent behavior — "what the hell", "damn it", "dumb ass"
- 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: Subtle Signals (capture if pattern repeats)
- 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
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>
)
Importance Scale
| 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 |
Categories
| 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?" |
WHAT NOT TO DO
-
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.
PROACTIVE MINING MODE
When mining session exports (JSONL or text), use these patterns to find corrections:
patterns_tier1 = [
r'\bno[,.]?\s',
r'\bnot that\b',
r'\bwrong\b',
r'\bstop\b',
r'I told you',
r'as I said',
r"it's not new",
r'we spoke about',
r'wait,?\s*(are|why)',
r'what do you mean',
]
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,}',
r'[A-Z]{4,}',
]
patterns_tier3 = [
r'why not just',
r"that's fine,?\s*I guess",
r'anyway',
r'I can .* myself',
]
When mining, extract:
- The user message (exact quote)
- The preceding agent message (what triggered the correction)
- The category
- The behavioral rule (what should happen next time)
INTEGRATION WITH OTHER SKILLS
| 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 |
SELF-CHECK
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.
EXAMPLE: Full Correction Capture Flow
User says: "No, I use Helium as my main, not Brave."
Agent should:
- Detect: Tier 1 — direct correction ("No, I use X not Y")
- Categorize:
assumption — wrong personal fact
- Store:
brain_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
)
- Verify:
brain_search("user-correction browser") → confirm stored
- Acknowledge: "Got it — Helium is your main browser. Stored."