Observed since 20 Oct, 21:50 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
ASCII art office animation plugin for Claude Code — watch your AI agents work in a tmux pane
_ _ _____ _
/ \ __ _ ___ _ __ | |_ | ____| |_ _____ ___
/ _ \ / _` |/ _ \ '_ \| __| | _| | \ \ / / _ \/ __|
/ ___ \ (_| | __/ | | | |_ | |___| |\ V / __/\__ \
/_/ \_\__, |\___|_| |_|\__| |_____|_| \_/ \___||___/
|___/
A Claude Code plugin that spawns an ASCII art animated office in a tmux pane, visualizing your AI agents hard at work in real-time — typing, running around, thinking, and celebrating as they complete tasks.
Pure entertainment. Zero productivity gains. Maximum vibes.

Nick(Opus) format with name from git config + current model; role "lead" handles all tools/agent-elves-startAgent/TeamCreate/SendMessage) spawn as Matrix-style _===_ (|■ ■|) named Smith(type) — greet, set up portable desk, work, idle 8s at desk, pack up, leave⚡ → "HAAA!!!!" → golden burst with scouter POWER: 9000+ → persistent A_BOLD glow▪▫↔▫▪), thinking cursor (_|↔|_), idle (▪▪), or off (▫▫)E in theme picker to design your own characters — sprite grid editor, live preview, template copy, name/label editing━→), bullet time with slow-mo dodge ("Whoa.") — triggered during Smith's 8s idle windowd): session stats, office level, tasks/hour, Pomodoro status, 14 achievements with lock/unlock display, elf leaderboard with bar chartsPick a style on first launch or press s anytime to change:
Rounded, warm design inspired by the Claude.ai avatar.
.---. .---. .---. .---. .---.
( o o ) ( >_< ) ( . . ) ( o o )> ( ^o^ )
( u ) ( u )| ( ~ )? ( u ) \( v )/
/\ || /\ />/> /\
idle typing thinking walking celebrating
Protagonist: You(Model) — colleagues get random names from a pool
Lightweight Japanese emoticon style — smallest footprint.
(^_^) (>_<) (._.)> (^_^)> \(^o^)/
/|\ /|~ /|\ /|/ |
/ \ || / \ >> / \
idle typing thinking walking celebrating
Agents: Mochi / Anko / Daifuku / Kinako / Sakura
Retro 8-bit game character style.
[@@] [@@] [@@] [@@] *[@@]*
|oo| |><| |..| |oo|> +|^^|+
[==] [==]~ [==]? [==] [==]
|| || || |> /||\
/\ || /\ / / \
idle typing thinking walking celebrating
Agents: Player1 / Player2 / NPC_A / NPC_B / Boss
Japanese warriors — samurai, ninja, and kimono style.
/|\ /|\ /|\ /|\ \|/
(o_o) (>.<) (._.)> (o_o)> (^o^)
/|=|\ /|=|~ /|=|\ /|=|/ \|=|/
/ \ | | / \ /> /> / \
idle typing thinking walking celebrating
Agents: Musashi / Hanzo / Sakura / Kaede / Ryu
Astronauts, aliens, and robots in outer space.
,-. ,-. ,-. ,-. *,-.*
{o o} {>_<} {. .}? {o o}> \{^o^}/
/| |\ /| |~ /| |\ /| |/ | |
d b | | d b > > d b
idle typing thinking walking celebrating
Agents: Astro / Zeta / Nova / Cosmo / Orbit
Bubble text and status bar adapt to your chosen language:
| Language | Editing | Done | Status bar |
|---|---|---|---|
| English | Editing app.tsx | Done! | Agents: 3 |
| Japanese | 編集中 app.tsx | 完了! | エージェント: 3 |
| Chinese | 編輯中 app.tsx | 完成! | 小精靈: 3 |
| Korean | 편집 중 app.tsx | 완료! | 에이전트: 3 |
pip install agent-elves
That's it — start Claude Code inside a tmux session and the office pane appears automatically.
curl -fsSL https://raw.githubusercontent.com/wongo/agent-elves/main/install.sh | bash
The installer will:
~/.claude/plugins/marketplaces/agent-elves/settings.jsongit clone https://github.com/wongo/agent-elves.git ~/.claude/plugins/marketplaces/agent-elves
cd ~/.claude/plugins/marketplaces/agent-elves && git pull
bash ~/.claude/plugins/marketplaces/agent-elves/uninstall.sh
The office evolves as you work! Each session starts at Lv.1 and upgrades automatically as tasks are completed. Unlock records persist across sessions.
| Lv | Name | Tasks | Elves | New Furniture |
|---|---|---|---|---|
| 1 | Garage | 0 | 1 | Door, Coffee machine, Whiteboard |
| 2 | Home Office | 5 | 1 | +Bookshelf |
| 3 | Small Office | 12 | 2 | +Plant |
| 4 | Growing Office | 22 | 2 | +Trophy case |
| 5 | Studio | 35 | 3 | +Sofa |
| 6 | Creative Studio | 55 | 3 | +Arcade |
| 7 | Tech Company | 80 | 3 | +Bar |
| 8 | Big Tech | 115 | 4 | +Spin Bike |
| 9 | Enterprise | 160 | 4 | +Server rack |
| 10 | Dream Office | 220 | 4 | +Gold trophy wall |
Reaching Lv.10 in a single session requires ~220 tool completions — about a full day of heavy Claude Code usage.
Press s to manually select any unlocked level, or leave it on Auto to let the office grow naturally.
On first launch, Agent Elves shows an animated welcome screen introducing the plugin and its features, then walks you through setup:
/agent-elves-startAll choices are saved to ~/.config/agent-elves/config.json and can be changed anytime.
Press s in the animation pane at any time to open the settings wizard. Navigate with arrow keys + Enter. Auto-selects default after 15s timeout.
export CLAUDE_OFFICE_THEME=kaomoji # claude | kaomoji | pixel
export CLAUDE_OFFICE_LANG=ja # en | ja | zh | ko
Settings persist to ~/.config/agent-elves/config.json:
{
"theme": "claude",
"lang": "zh",
"autostart": "auto",
"office": "auto",
"total_tasks": 0,
"unlocked_offices": ["garage"],
"user_name": "Nick"
}
office: "auto" (upgrade as you work) or any level key (e.g. "studio", "dream_office")total_tasks: cumulative task count across all sessions (used for unlock thresholds)unlocked_offices: levels permanently unlocked by reaching cumulative task thresholdsuser_name: protagonist display name (defaults to git config user.name if not set)The office auto-adapts to the available pane size. Furniture and elf count are determined by the current office level, with graceful degradation on narrow terminals (some decorations are skipped below 50 columns).
Default split is 40% width. Adjust the -l 40% value in hooks/session_start.py if needed.
┌─────────────────────┐ ┌──────────────────────┐
│ Claude Code │ Unix │ Agent Elves │
│ (main tmux pane) │ Socket │ (split tmux pane) │
│ │ (IPC) │ │
│ SessionStart ──────│────────→│ Spawn office │
│ PreToolUse ───────│────────→│ Elf walks to desk │
│ PostToolUse ───────│────────→│ Elf celebrates │
│ SessionEnd ───────│────────→│ Shutdown + cleanup │
└─────────────────────┘ └──────────────────────┘
Bash / Edit / Write — elf runs to desk and types furiouslyRead / Grep / Glob — elf sits and thinks with a ? bubbleAgent — new elf enters through the office doorAll hooks are fire-and-forget. If the animation crashes or isn't running, hooks exit silently with zero impact on Claude Code.
| Event | What the elves do |
|---|---|
| Tool starts (write/execute) | Run to desk, type with focused face (>_<), monitor blinks ▪▫↔▫▪ |
| Tool starts (read/search) | Sit down, think with ? thought bubble, monitor shows cursor `_ |
| Tool completes | Celebration hop \(^o^)/ with localized "Done!" bubble |
| Sub-agent spawned | Agent Smith `=== ( |
| Team/SendMessage | Also triggers Smith entrance (expanded trigger scope) |
| Skill invoked | Super Saiyan power-up (protagonist priority): crouch + ⚡ → "HAAA!!!!" → scouter → A_BOLD glow |
| Smith idle near elf | Random Matrix easter egg: clone attack, kung fu fight ━→, or bullet time · dodge |
| Plan mode enter | Protagonist leads whiteboard, regular elves attend, Smith keeps working |
| Plan mode exit | Elves celebrate and return to desks |
| Task threshold reached | LEVEL UP! animation with screen flash + furniture pop-in |
| Idle > 5 seconds | Wander around the office |
| Idle near another elf | Watercooler chat (then walk back to desk) |
| Coffee break | Grab coffee, then return to assigned desk |
Control Agent Elves directly from the Claude Code prompt:
| Command | Description |
|---|---|
/agent-elves-start | Launch the office animation in a tmux pane |
/agent-elves-stop | Shutdown animation and clean up |
/agent-elves-status | Check running state, config, and crash log |
/agent-elves-settings | View or change theme and language |
/agent-elves-start # Launch the animation
/agent-elves-status # Check if running
/agent-elves-settings claude zh # Set Claude theme + Chinese
/agent-elves-settings kaomoji ja # Set Kaomoji theme + Japanese
/agent-elves-settings pixel en # Set Pixel RPG theme + English
/agent-elves-stop # Shut it down
Running /agent-elves-settings with no arguments displays current settings and all available options.
While the animation pane is focused (Ctrl-b + arrow key to switch panes):
| Key | Action |
|---|---|
s | Open visual settings wizard (theme + language) |
d | Statistics dashboard (stats, achievements, leaderboard) |
p | Toggle Pomodoro timer (25/5-min cycles) |
q | Trigger shutdown outro animation |
| Arrow keys | Navigate settings menu |
1-5 | Quick select in settings |
E | Open custom theme editor (in theme picker) |
Create ~/.config/agent-elves/custom-theme.json to define your own characters:
{
"name": "robots",
"label": "My Robot Theme",
"names": ["R2D2", "C3PO", "BB8", "K2SO", "HK47"],
"sprites": {
"idle": [[" [=] ", " |o| ", " /#\\ "]],
"typing": [[" [=] ", " |>|~ ", " |#| "]],
"thinking": [[" [=]? ", " |.| ", " /#\\ "]],
"walking_right": [[" [=]> ", " |o| ", " >> "]],
"walking_left": [[" <[=] ", " |o| ", " << "]],
"celebrating": [["\\[=]/ ", " |^| ", " /#\\ "]],
"coffee": [[" [=]~ ", " |o|c ", " /#\\ "]]
}
}
Your custom theme appears as the 6th option in the settings wizard.
Press E in the theme picker to open the built-in editor:
agent-elves/
├── .claude-plugin/
│ ├── plugin.json # Plugin metadata
│ └── marketplace.json # Marketplace registry
├── skills/ # Slash commands
│ ├── start/SKILL.md # /agent-elves-start
│ ├── stop/SKILL.md # /agent-elves-stop
│ ├── status/SKILL.md # /agent-elves-status
│ └── settings/SKILL.md # /agent-elves-settings
├── hooks/
│ ├── hooks.json # Hook definitions
│ ├── validate.py # Shared input validation
│ ├── session_start.py # Spawns tmux pane + animation
│ ├── activity_hook.py # Forwards tool events via socket
│ └── session_end.py # Outro animation + cleanup
├── engine/
│ ├── main.py # Entry point, settings UI, main loop
│ ├── renderer.py # Y-sorted curses renderer with painter's algorithm (~10fps)
│ ├── scene.py # Data-driven office layout, task tracking, interactions
│ ├── levels.py # 10-level office definitions (LevelDef dataclass)
│ ├── characters.py # Character state machine, roles, movement (7 expression states)
│ ├── animation.py # Intro/outro/upgrade/plan-mode sequence controllers
│ ├── atmosphere.py # Time-of-day visual atmosphere
│ ├── sprites.py # ASCII sprites (5+custom themes + furniture)
│ ├── bubbles.py # Speech/thought bubbles + i18n (4 languages)
│ ├── pomodoro.py # Pomodoro timer (25/5-min cycles, phase transitions)
│ ├── achievements.py # 14 achievements with unlock tracking
│ ├── weather.py # Live weather API + rain/snow window particles
│ └── ipc.py # Unix domain socket listener
├── tests/ # 78 unit tests
│ ├── test_bubbles.py
│ ├── test_characters.py
│ ├── test_scene.py
│ ├── test_atmosphere.py
│ ├── test_ipc.py
│ └── test_sprites.py
├── tools/
│ └── record_demo.py # Demo recording script
├── pyproject.toml # pip install support
├── LICENSE # MIT
├── install.sh # One-line installer
├── uninstall.sh # Uninstaller
└── README.md
# Run tests
pytest tests/ -v
# Record a demo
python3 tools/record_demo.py
# Play the demo
asciinema play demo.cast
Animation doesn't appear
echo $TMUX should print a value~/.claude/settings.json under enabledPluginscat /tmp/agent-elves-crash.logCharacters don't react to tool events
ls /tmp/co-*.sockecho '{"type":"tool_pre","tool":"Bash","input":{"command":"hello"}}' \
| python3 ~/.claude/plugins/marketplaces/agent-elves/hooks/activity_hook.py pre
Garbled or broken rendering
Animation pane too small
Ctrl-b then :resize-pane -R 20MIT
Copyright (c) 2025-2026 Nickdevlab
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.4 | 11 May 2026 | 2 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 21:50 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:10fea99e974edf9339a4ed6f6d1d771323f809169557dbe7de31b51d0bf670fb