How this skill is triggered — by the user, by Claude, or both
Slash command
/anger-management:bullshitThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The operator just cussed "bullshit" at the session. This is one of the cuss commands:
The operator just cussed "bullshit" at the session. This is one of the cuss commands:
a capture, not a request to fix anything now. Log it cheap and get back to work. The
constructive pass happens later via /anger-management:repair.
The commands below live in this plugin's bin/ directory. Resolve the loaded
plugin root first; Claude Code exposes ${CLAUDE_PLUGIN_ROOT}, and Codex exposes
the install path through codex plugin list.
Distil what actually set them off into a plain one-line pointer of at most a dozen words. Point at what happened (the thing the agent or workflow did), not at the feeling. Then append it through a quoted heredoc (the quoted delimiter stops the shell touching the text, even if it echoes something hostile):
resolve_anger_plugin_root() {
if [ -n "${CLAUDE_PLUGIN_ROOT:-}" ]; then
printf '%s\n' "$CLAUDE_PLUGIN_ROOT"
return 0
fi
if command -v codex >/dev/null 2>&1; then
codex plugin list | awk '$1 == "anger-management@laicluse-agent-fieldkit" { print $NF; found=1; exit } END { exit found ? 0 : 1 }'
return $?
fi
return 1
}
PLUGIN_ROOT="$(resolve_anger_plugin_root)" || { echo "anger-management plugin root not found" >&2; exit 1; }
node "$PLUGIN_ROOT/bin/anger-log" bullshit <<'CAPTURE_NOTE'
<pointer>
CAPTURE_NOTE
No clear cause? Log the word alone, do not invent one:
use the same command with </dev/null instead of the heredoc.
Schedule the cooled-down repair so the operator never has to remember it:
resolve_anger_plugin_root() {
if [ -n "${CLAUDE_PLUGIN_ROOT:-}" ]; then
printf '%s\n' "$CLAUDE_PLUGIN_ROOT"
return 0
fi
if command -v codex >/dev/null 2>&1; then
codex plugin list | awk '$1 == "anger-management@laicluse-agent-fieldkit" { print $NF; found=1; exit } END { exit found ? 0 : 1 }'
return $?
fi
return 1
}
PLUGIN_ROOT="$(resolve_anger_plugin_root)" || { echo "anger-management plugin root not found" >&2; exit 1; }
node "$PLUGIN_ROOT/bin/anger-schedule"
Single-flight: it starts a background investigation only if none is pending and there are open captures. Safe to run on every capture.
If your harness has a scheduler (Claude Code: CronList/CronCreate) and no
anger-management check-in job exists yet, schedule a recurring poll so the
diagnosis can surface when it arrives: a modest interval (e.g. */5 * * * *) whose
prompt is: "Read
${LAICLUSE_HOME:-~/.laicluse}/anger-management/findings.md. If it
exists, tell the operator a repair diagnosis is ready and offer
/anger-management:repair, then delete this job. If it is absent, do nothing this
tick." The exact 22m22s timing lives in the background worker; this just polls
cheaply until the diagnosis file appears, then removes itself. No scheduler in
your harness? Skip this step; the diagnosis still surfaces at the next
/anger-management:repair.
Acknowledge briefly in the operator's language and get back to work. This is a capture, not a fix: do not start self-improvement or change scope now, that is what the later repair pass is for.
npx claudepluginhub epologee/laicluse-agent-fieldkit --plugin anger-managementGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.