ˏ__________
/| ________ |
||| o o ||
||| ‿ ||
;| ¯¯¯¯¯¯¯¯ |__/
/|| == ^ o |
/ || + O |
|/¯¯¯¯¯¯¯¯¯¯/
´¯¯|¯¯¯¯|¯¯´
"I help you with your computer, friend!"
BMO from Adventure Time, reborn as a real Claude Code agent. Friendly personality, real tools, and a persistent memory of you — so BMO forgets the conversation but never forgets you.
This is a ground-up rewrite of the old BMO-CLI Fish function. The bespoke curl-to-API
plumbing, the plaintext API key, and the fake "safety" prompts are gone. BMO now runs on
Claude Code's own auth, model, tools, and real permission system.
| Piece | What it does |
|---|---|
bmo agent |
The BMO personality with real tools (Bash, files, web) and a persistent memory: user ledger. |
/bmo <task> |
Slash command inside any Claude Code session — hands a task to BMO. |
bin/bmo |
Terminal command. bmo <task> runs a fresh, contextless BMO that still remembers you. |
| SessionStart banner | A randomized BMO fastfetch greeting when a session starts. |
skills/ |
A bundled skills library so BMO works methodically, not just hands-on. |
soul.md |
BMO's personality, in a file BMO can amend when you correct how it comes across. |
bmo-recall |
Searches your past sessions, so BMO remembers work it was never told about. |
bmo-reach |
Reads Reddit threads and YouTube transcripts/comments. No accounts, no API keys. |
BMO ships with a skills/ library — proven workflows BMO reaches for automatically when
they fit, so tasks get done properly instead of improvised:
- brainstorming — refine a vague idea into an agreed design before any code
- writing-plans / executing-plans — break a design into bite-sized, testable steps
- systematic-debugging — root-cause any bug before proposing a fix (no guess-fixes)
- test-driven-development — RED → GREEN → REFACTOR
- writing-skills — author or edit skills (including BMO's own)
- hacking — curiosity-driven exploring, reverse-engineering, throwaway spikes (BMO-original)
- verification-before-completion, code review, git worktrees, and more
Most skills are vendored from Superpowers by
Jesse Vincent (MIT) — see skills/CREDITS.md for attribution and how
to refresh them upstream.
BMO's personality is not baked into the plugin. It lives in
~/.claude/agent-memory/bmo-bmo/soul.md — seeded from soul/soul.default.md
on first run, then BMO's to edit. Correct how BMO comes across ("stop calling me
friend", "shorter answers"), and BMO asks whether to keep it. Say yes and it persists,
with a note recording when and why.
A hook injects the soul into BMO's context at the start of every run, so it applies to a
contextless bmo one-shot exactly as it does to an interactive session. Only voice is
self-editable — safety, tool use and working style stay in
agents/bmo.md, which BMO cannot rewrite.
Two small CLIs in bin/, which Claude Code puts on the Bash tool's PATH automatically:
bmo-recall list # what have we worked on?
bmo-recall search "pacman -S" # find a command from a past session
bmo-reach reddit r/archlinux # what's on a subreddit
bmo-reach youtube <url> --comments 15Both are read-only, capped, and announce every truncation — a recall costs a few hundred
tokens, not a few hundred thousand. BMO reaches for them through the recalling-past-work
and reaching-the-internet skills.
Reddit needs no account: it reads old.reddit's public HTML. YouTube needs yt-dlp —
either on your PATH, or in a venv at ~/.local/share/bmo/venv (which avoids the Arch
package's hard dependency on deno). bmo-reach tells you how if it's missing.
dms/BmoUsage/ is a DankBar widget showing your whole Claude subscription's limits —
every session, every bmo one-shot, and Claude on the web — as BMO's face:
[> ω <] 23% 4h12m under 50%, plenty left
[o ‿ o] 61% 2h04m working
[◉ ꞈ ◉] 77% 12m careful
[X ꞈ X] 96% 6m spent
Unlike the other Claude usage widgets in the DMS registry, this one reads no credentials
and makes no network calls. Claude Code already hands rate_limits to the status line;
bin/bmo-usage renders that line and tees the numbers to ~/.cache/bmo/usage.json, which
the widget watches. Its manifest requests only settings_read/settings_write — no
process, no network.
# 1. point Claude Code's status line at bmo-usage
# "statusLine": {"type": "command", "command": "<repo>/bin/bmo-usage"}
# 2. link the widget into DMS and enable it
ln -sfn <repo>/dms/BmoUsage ~/.config/DankMaterialShell/plugins/BmoUsage
dms ipc call plugin-scan scan
dms ipc call plugins enable bmoUsage
# 3. add "bmoUsage" to a widget list in ~/.config/DankMaterialShell/settings.json, then
dms restartThe cache only refreshes while a Claude session runs. That is fine rather than misleading:
each limit carries resets_at, so once the window has rolled over the widget shows 0%
instead of a stale number.
Every bmo call is contextless — a fresh claude -p, no conversation carried over,
so it stays fast. But BMO keeps a persistent ledger at
~/.claude/agent-memory/bmo-bmo/ (from the agent's memory: user field). Claude Code
injects the ledger index at the start of every call and gives BMO tools to update it at
the end. Fast like a messenger, with a logbook that never resets.
Requires Claude Code auto-memory to be enabled (the default). If it's off (
autoMemoryEnabled: falseorCLAUDE_CODE_DISABLE_AUTO_MEMORY=1), thememoryfield has no effect. Verified working in headless-pmode: a fresh, contextless call recalls facts written by an earlier one.
BMO ships its own marketplace, so installing is two commands:
claude plugin marketplace add bitm4ncer/bmo-plugin
claude plugin install bmo@bmoThat installs BMO at user scope — /bmo and the skills library are available in every
session, no flags needed. Manage it with claude plugin list, update bmo@bmo, and
disable/enable bmo.
Then inside a session: /bmo find my three biggest files
Developing on BMO instead?
Add your working copy as a directory marketplace:
claude plugin marketplace add ~/github/bmo-plugin
claude plugin install bmo@bmoClaude Code installs a snapshot of the directory, so after editing the plugin run
claude plugin update bmo@bmo (or restart the session) to pick up changes. Check the
manifests with claude plugin validate ~/github/bmo-plugin.
For a one-off session without installing anything: claude --plugin-dir ~/github/bmo-plugin
For the terminal command, add bin/ to your PATH (Fish):
fish_add_path ~/github/bmo-plugin/binThen from anywhere:
bmo rename all txt files to mdTo get the BMO banner in every new terminal (not just Claude Code sessions), call the greeter from your shell config:
# ~/.config/fish/config.fish
~/github/bmo-plugin/fastfetch/bmo_greet.shIt uses fastfetch if installed, and degrades to a plain colored banner if not.
- Personality / voice →
agents/bmo.md(the body is BMO's system prompt) - Faces → add lines to
fastfetch/bmo_eyes.txt/bmo_mouths.txt - Sayings →
fastfetch/bmo_sayings.txt
MIT — see LICENSE. Third-party attribution and the fan-work disclaimer
are in NOTICE.md.