English · 中文 · 日本語 · Français · Русский
A terminal pet that hatches from an egg and reacts to your code.
▲ Your companion hatches with a unique species, rarity, and stats based on your coding style
Your buddy watches your coding session. It reacts when you squash bugs ("bug squashed!"), cheers when tests pass ("all green!"), and hides during merge conflicts ("conflict! *hides*"). When nothing's happening, it just sits there going zzZ.
# Step 1: Install
curl -fsSL https://raw.githubusercontent.com/FunseaAI/anycli-buddy/main/install.sh | bash
# Step 2: Run (from any project directory)
codex-buddy# Step 1: Install
curl -fsSL https://raw.githubusercontent.com/FunseaAI/anycli-buddy/main/install-opencode.sh | bash
# Step 2: Run (from any project directory)
opencode-buddyFirst run shows a hatching animation — pick a name, see your companion's stats roll in. After that, your buddy appears automatically every time.
💬 Or tell your AI agent to install it
Codex:
Fetch and follow instructions from https://raw.githubusercontent.com/FunseaAI/anycli-buddy/refs/heads/main/.codex/INSTALL.md
OpenCode:
Fetch and follow instructions from https://raw.githubusercontent.com/FunseaAI/anycli-buddy/refs/heads/main/.opencode/INSTALL.md
┌─────────────────────────────────────────────────┐
│ >_ Codex CLI │
│ │
│ > fix the auth bug │
│ • Fixed null check in login.js │
│ │
├─────────────────────────────────────────────────┤
│ n______n │
│ ( · · ) ── "bug squashed!" │
│ ( oo ) │
│ `------´ │
│ Cappie ★★★ │
└─────────────────────────────────────────────────┘
Buddy lives in a tmux bottom pane (6 rows). Animates in real-time, stays out of the way, zero impact on your agent.
Your first run plays a full hatching sequence — egg wobble, cracks, burst, species reveal, you name it, then stats roll in one by one:
_*_ * . * n______n
/ . \ → . \ / . → ( · · )
| / .| --+-- ( oo )
|. / | . / \ . `------´
\*__/ * . *
Give your capybara a name: _
Stats are shaped by your actual git history — late-night coder? High CHAOS. Clean commit messages? High PATIENCE.
| 🦆 duck | 🪿 goose | 🫧 blob | 🐱 cat | 🐉 dragon | 🐙 octopus |
| 🦉 owl | 🐧 penguin | 🐢 turtle | 🐌 snail | 👻 ghost | 🦎 axolotl |
| 🦫 capybara | 🌵 cactus | 🤖 robot | 🐰 rabbit | 🍄 mushroom | 😺 chonk |
Each with 3 animation frames, unique ASCII face, and species-specific idle fidgets.
| Chance | Stars | Hats | |
|---|---|---|---|
| common | 60% | ★ | — |
| uncommon | 25% | ★★ | crown, tophat, propeller... |
| rare | 10% | ★★★ | 〃 |
| epic | 4% | ★★★★ | 〃 |
| legendary | 1% | ★★★★★ | 〃 |
| Stat | What boosts it |
|---|---|
| DEBUGGING | Fix/debug commits in your git log |
| PATIENCE | Detailed commit messages, many small commits |
| CHAOS | Reverts, force pushes, commits after midnight |
| WISDOM | Refactoring commits, test runner in shell history |
| SNARK | Vim user, prolific committer |
Your buddy's personality comes from these stats. High SNARK? It says "ez" and "ship it!". High PATIENCE? "I believe in you".
Buddy reads the actual output of each coding turn:
| What happened | Buddy says |
|---|---|
| Fixed a bug | "bug squashed!" |
| Tests pass | "all green!" |
| Tests fail | "test caught something" |
| Build succeeds | "it builds!" |
TypeError in output |
"syntax demons!" |
git push |
"shipped!" |
| Deploy to production | "fingers crossed" |
| Merge conflict | "conflict! *hides*" |
| Nothing happening | zzZ |
47 content patterns + 9 prompt patterns + stat-weighted fallback quips. Speaks only on turn completion — silent while the agent works.
Type in your agent's prompt (not slash commands — these go through hooks):
| Command | Effect |
|---|---|
buddy |
Show stats panel (8s) |
buddy stats |
Same |
buddy pet |
Purr~ ♥ |
pet |
Same |
buddy rename Sparky |
Rename your companion |
No CLI agent needed:
git clone https://github.com/FunseaAI/anycli-buddy.git && cd anycli-buddy
node cli.js gallery # see all 18 species
node cli.js hatch myname # generate a companion
node cli.js animate # live animation (Ctrl+C to exit)
node demo.js # interactive demo🏗️ Architecture
codex-buddy / opencode-buddy
│
├── First run? → hatch-flow.js
│ ├── Analyze git/shell history (user-profile.js)
│ ├── Play hatching animation
│ ├── User names companion → companion.json
│ └── Inject companion intro → instructions.md
│
└── tmux split
├── Top: codex / opencode (your working directory)
└── Bottom (6 rows): buddy-panel.js
├── Animated sprite (500ms tick)
├── Speech bubbles (10s, 3s fade)
└── Unix socket ← buddy-hook.sh ← hooks
Zero agent impact:
hook event → buddy-hook.sh (5 lines, background nc) → exit 0
↓ Unix socket
buddy-panel.js → context-reactor.js → reaction
No Node.js fork per event. No API calls. No blocking.
📦 API — use in your own project
import { hatch, BuddyRenderer, pickQuip } from 'anycli-buddy';
const buddy = hatch('seed', 'Sparky');
const renderer = new BuddyRenderer(buddy);
renderer.start((lines) => { /* render */ });
renderer.say('hello!'); // speech bubble (10s)
renderer.pet(); // heart animation (2.5s)
renderer.stop();🗑️ Uninstall
# Codex
rm -rf ~/.codex/buddy && rm -f ~/.codex/hooks.json && rm -f /usr/local/bin/codex-buddy
# OpenCode
rm -rf ~/.config/opencode/buddy && rm -f /usr/local/bin/opencode-buddyMIT License · Made with ♥ by FunseaAI
If your buddy brings you joy, consider giving this repo a ⭐