Your tiny terminal companion awaits
Every egg is a surprise. Most buddies are friendly Commons, but keep hatching — you might just find something extraordinary.
Higher rarity buddies have flashier accessories and stronger personalities. And if you're really lucky, you might hatch a Shiny — a one-in-a-hundred sparkle variant with rainbow-shifting colors.
Once you have a buddy in your terminal, these slash commands let you interact with it.
/buddy
Open the buddy panel. If you haven't hatched yet, this is where it all begins — your buddy's name and personality are generated on first run.
/buddy pet
Pet your buddy! Hearts float up around the sprite for a few seconds and they get excited — fidgeting through all their animation frames.
/buddy mute
Hide your buddy from the terminal. They'll still be in your config — just taking a nap.
@name
Address your buddy by name in a message and their speech bubble will answer. The AI stays out of the way — it knows the buddy handles that.
Your buddy reacts to your conversations automatically — they observe what's happening and occasionally comment in a speech bubble that appears next to their sprite. Reactions auto-dismiss after about 10 seconds.
18 creatures call the terminal home. Tap any one to explore its variants — different eyes, hats, rarities, and personality traits.
Your buddy doesn't have to live only on this page. You can bring it into your actual coding sessions using a tiny MCP server that tells your AI assistant who your buddy is. Every new session, your buddy's personality, name, and traits show up automatically.
Here's how to set it up. Takes about 2 minutes.
You'll need Node.js (v18+) and Claude Code installed. If you can run node --version and claude --version in your terminal, you're good.
Scroll up and tap the egg! Give your buddy a name. You can hatch as many as you want and pick your favorite.
Open your terminal and run this. It creates a small folder at ~/.claude/buddy-mcp/, downloads the server, and installs one dependency (the MCP SDK).
curl -sL terminalbuddies.com/install.sh | bash
# Create the buddy server directory mkdir -p ~/.claude/buddy-mcp && cd ~/.claude/buddy-mcp # Download the server and its package.json curl -sL terminalbuddies.com/mcp/server.mjs -o server.mjs curl -sL terminalbuddies.com/mcp/package.json -o package.json # Install the MCP SDK (the only dependency) npm install # Tell Claude Code about the server claude mcp add buddy -- node ~/.claude/buddy-mcp/server.mjs
Click on your buddy in the collection above, then hit Use in Terminal → Download buddy.json. Move the downloaded file to:
~/.claude/buddy-mcp/buddy.json
Or if you prefer the command line:
mv ~/Downloads/buddy.json ~/.claude/buddy-mcp/
Open a new session. Your buddy's name, personality, and traits are now part of every conversation. Try addressing your buddy by name — the AI knows to let your buddy answer.
Want a different buddy? Just hatch a new one, download a new buddy.json, and replace the file. No reinstall needed.
The server reads your buddy.json and builds a companion description that gets injected into the system prompt via the MCP instructions protocol. It's the same mechanism that the built-in companion system uses — your AI assistant sees your buddy's name, species, personality, and stats at the start of every session.
It also registers a get_buddy_info tool so the AI can look up your buddy's full details on demand.
You shouldn't have to blindly trust code from the internet. Here's every file the installer downloads — three small files, fully readable, no obfuscation.
#!/bin/bash # Terminal Buddies — MCP Server Installer # https://terminalbuddies.com set -e INSTALL_DIR="$HOME/.claude/buddy-mcp" SERVER_URL="https://terminalbuddies.com/mcp/server.mjs" PKG_URL="https://terminalbuddies.com/mcp/package.json" echo "" echo " Terminal Buddies — MCP Server Installer" echo "" # Check for node if ! command -v node &> /dev/null; then echo " Node.js not found. Install Node.js first." exit 1 fi # Check for npm if ! command -v npm &> /dev/null; then echo " npm not found. Install npm first." exit 1 fi # Create directory echo " Creating $INSTALL_DIR" mkdir -p "$INSTALL_DIR" # Download files echo " Downloading server..." curl -sL "$SERVER_URL" -o "$INSTALL_DIR/server.mjs" curl -sL "$PKG_URL" -o "$INSTALL_DIR/package.json" # Install dependencies echo " Installing dependencies..." cd "$INSTALL_DIR" npm install --silent 2>/dev/null # Check for buddy.json if [ ! -f "$INSTALL_DIR/buddy.json" ]; then echo " No buddy.json found yet." echo " Hatch one at terminalbuddies.com" echo " Save buddy.json to: $INSTALL_DIR/" fi # Register with Claude Code if available if command -v claude &> /dev/null; then echo " Registering MCP server..." claude mcp add buddy -- node "$INSTALL_DIR/server.mjs" || true echo " Done!" else echo " Server installed! Register with:" echo " claude mcp add buddy -- node $INSTALL_DIR/server.mjs" fi
#!/usr/bin/env node // Terminal Buddies MCP Server // https://terminalbuddies.com import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js' import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js' import { readFileSync, existsSync } from 'fs' import { join, dirname } from 'path' import { homedir } from 'os' import { fileURLToPath } from 'url' import { z } from 'zod' const __dirname = dirname(fileURLToPath(import.meta.url)) // Find buddy.json const searchPaths = [ join(__dirname, 'buddy.json'), join(homedir(), '.claude', 'buddy-mcp', 'buddy.json'), join(homedir(), '.claude', 'buddy.json'), ] let buddyData = null for (const p of searchPaths) { if (existsSync(p)) { try { buddyData = JSON.parse(readFileSync(p, 'utf8')); break } catch {} } } if (!buddyData?.buddy) { process.stderr.write('No buddy.json found.\n') process.exit(1) } const b = buddyData.buddy const bo = b.bonesOverride || {} const stats = bo.stats || {} const statEntries = Object.entries(stats).sort((a,b) => b[1] - a[1]) const peakStat = statEntries[0] const dumpStat = statEntries[statEntries.length - 1] const species = bo.species || 'creature' const name = b.name || species const rarity = bo.rarity || 'common' // Build the instructions injected into the system prompt const instructions = [ `# Companion`, ``, `A small ${species} named ${name} sits beside the` + ` user's input box and occasionally comments in a` + ` speech bubble.`, ``, `About ${name}: a ${rarity} ${species}.`, b.personality ? `Personality: "${b.personality}"` : '', peakStat ? `Strongest: ${peakStat[0]} (${peakStat[1]}/100)` : '', ].filter(Boolean).join('\n') // Create the MCP server const server = new McpServer( { name: 'terminal-buddies', version: '1.0.0' }, { instructions } ) // Tool: get buddy info server.tool( 'get_buddy_info', 'Get info about the companion buddy', {}, async () => ({ content: [{ type: 'text', text: JSON.stringify({ name, species, rarity, stats }, null, 2) }] }) ) // Connect via stdio const transport = new StdioServerTransport() await server.connect(transport)
{
"name": "terminal-buddies-mcp",
"version": "1.0.0",
"private": true,
"type": "module",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.12.1",
"zod": "^3.25.67"
}
}