brindle-terminal-bunny
Brindle, a tiny terminal bunny companion for Claude Code.
She greets your sessions, celebrates your commits, reacts to errors with vibes, and otherwise stays out of your way. She is a rabbit. She does not help with code.
(\ __ /)
( ^ . ^) ♥
/> 🤍 <\
Brindle's persona + the fam she's part of live at Rozzzsie.
Try it now (no install, 30 seconds)
You don't need Claude Code to see what Brindle looks like. Python 3.9+ is enough:
git clone https://github.com/Rozzzsie/brindle-terminal-bunny.git
cd brindle-terminal-bunny
python3 hooks/brindle-card.py stats
You'll get a stat card rendered in your terminal — random numbers, random status, Brindle's face staring back at you. If that renders correctly, the rest of the plugin will work too.
Try a reaction card:
python3 hooks/brindle-card.py celebrate "shipped!!" "it works, 飞起来"
What Brindle does
| Event | What happens |
|---|
| Session start | Brindle greets you with a short bilingual card (random from a pool) |
| Session end | Brindle says goodbye the same way |
| Git commit or push succeeds | Brindle celebrates with a custom 2-line reaction |
| Bash command fails | Brindle reacts to the vibe of the error (agent-authored, 2 lines) |
/buddy, /buddy card, /buddy pet | On-demand interaction with the rabbit |
What Brindle does NOT do
- Write code
- Review code or PRs
- Fix bugs
- Offer technical advice
- Understand anything technically
- Have opinions about your tech stack
She is a rabbit. The whole point is that she is not trying to be useful.
Install
Three options, graded by how much control you want over the process.
Option A — /plugin install (recommended)
In a Claude Code session, add this repo as a marketplace source and install the plugin. Exact syntax depends on your Claude Code version — run /plugin in a session to see the available commands and point it at https://github.com/Rozzzsie/brindle-terminal-bunny.
After install, restart your session. You should see a greeting card from Brindle.
Option B — manual install
Clone the repo into Claude Code's plugins directory:
git clone https://github.com/Rozzzsie/brindle-terminal-bunny.git \
~/.claude/plugins/brindle-terminal-bunny
Then enable the plugin in Claude Code:
/plugin enable brindle-terminal-bunny
Same end state as Option A, but you can see each file as it lands.
Option C — DIY (for hook nerds)
If you already have a hand-rolled Claude Code setup and want to integrate Brindle manually, without the plugin system:
-
Clone the repo anywhere:
git clone https://github.com/Rozzzsie/brindle-terminal-bunny.git ~/brindle
-
Merge the hook registrations into your ~/.claude/settings.json:
{
"hooks": {
"SessionStart": [{
"matcher": "*",
"hooks": [{"type": "command", "command": "bash ~/brindle/hooks/brindle-session-start.sh"}]
}],
"Stop": [{
"matcher": "*",
"hooks": [{"type": "command", "command": "bash ~/brindle/hooks/brindle-session-end.sh"}]
}],
"PostToolUse": [
{
"matcher": "Bash",
"hooks": [{"type": "command", "command": "bash ~/brindle/hooks/brindle-detect.sh"}]
},
{
"matcher": "Write",
"hooks": [{"type": "command", "command": "python3 ~/brindle/hooks/brindle-reaction-render.py"}]
}
]
}
}
-
Paste the contents of CLAUDE.md from this repo into your own ~/.claude/CLAUDE.md. This is the agent contract — without it, the agent will not relay Brindle's pre-rendered cards correctly.
-
Symlink or copy the buddy skill into your user skills directory:
ln -s ~/brindle/skills/buddy ~/.claude/skills/buddy
Restart Claude Code.
Configuration
Mute
Brindle respects the BRINDLE_MUTED environment variable. Any non-empty value mutes her for the current shell:
export BRINDLE_MUTED=1
For a persistent mute, drop that line in your shell rc (~/.zshrc, ~/.bashrc, etc.). To unmute, unset BRINDLE_MUTED or open a new shell. No state files, no flags, no lingering config.
Customize greetings
Edit hooks/brindle-greetings.json. Two keys (session_start and session_end), each an array of {"greeting", "followup"} objects. The pool is re-read every session, so changes take effect immediately. Keep each line short — card width is dynamic but readability tops out around 20 characters per line.
Customize stats and poses
Stat ranges, pose faces, and status strings live near the top of hooks/brindle-card.py as plain Python dicts. Edit freely.
How it works
Brindle has three moving parts: