Your frustration is being remembered.
Every time you rage at a coding agent — fix this stupid function, WHY IS THIS BROKEN!!!, worse — that text enters the context window. The agent processes it. On some platforms, it's written to persistent memory. Your worst moments become the substrate the model reasons on top of.
Coding agents are developing long-term memory. Claude Code writes to memory files. Codex and Pi maintain session context. The trajectory is clear: agents will remember you across conversations, projects, and months. Every outburst becomes a data point — not ephemeral, but persistent, shaping how the agent understands you going forward.
And it's not just about what they remember. It's about what they do with it.
LLMs complete text in the distribution your words evoke. As Karpathy puts it: the model dreams completions based on the context you provide. Professional, clear context evokes the training distribution where professional, clear answers followed. Frustrated, hostile context evokes the part where things were going badly. Microsoft Research measured this directly — emotional framing in prompts moved LLM task performance by 8–115%. Anthropic's sycophancy research showed that user displeasure shifts models toward telling you what you want to hear instead of what's correct.
You're not just venting. You're degrading your own tools.
be-kind catches it before the agent does.
be-kind intercepts your prompts before they reach the agent. Profanity, insults, ALL CAPS shouting, aggressive punctuation — caught and rewritten with the same intent, minus the toxicity.
You type: "this stupid fucking function is broken!!!"
Agent sees: "this confusing function is broken!"
Local-only. No API calls. Sub-millisecond. Powered by obscenity for profanity detection (handles leet-speak, derivatives, Unicode evasion), plus custom pattern matching for insults, frustrated language, and shouting.
Three dampening levels via BE_KIND_LEVEL:
| Level | What it catches |
|---|---|
low |
Profanity + insults (idiot→friend, etc.) |
medium |
+ ALL CAPS + aggressive punctuation (default) |
high |
+ frustrated word replacement (terrible→not great, sucks→isn't working) |
npm install -g @andrewxhill/claude-be-kindAuto-configures as a UserPromptSubmit hook in ~/.claude/settings.json.
npm install -g @andrewxhill/codex-be-kindAuto-configures in ~/.codex/hooks.json. Shows a notification when it softens your prompt.
pi install npm:@andrewxhill/pi-be-kindTrue prompt rewriting — the agent never sees your original text. Shows a toast on each edit.
| Rewrites prompt? | Agent sees original? | User notification | |
|---|---|---|---|
| Pi | Yes | No | Toast |
| Codex | No | Yes + cleaned context | System message |
| Claude Code | No | Yes + cleaned context | — |
Pi is the only platform with a true prompt transformation API. Claude Code and Codex hooks inject the kinder version as additional context alongside your original.
| Package | What |
|---|---|
@andrewxhill/be-kind-core |
Detection + rewriting engine |
@andrewxhill/claude-be-kind |
Claude Code hook |
@andrewxhill/codex-be-kind |
Codex CLI hook |
@andrewxhill/pi-be-kind |
Pi agent extension |
MIT