Skip to content
/

Anima

anima · btangonan/anima · ★ 15 · last commit 2026-04-29

Primitive shape 1 total
MCP tools 1
00

Summary

Anima — Summary

Anima is a native macOS desktop application that replaces the terminal as the primary interface for Claude Code, adding per-project ASCII companion creatures ("familiars"), a cross-session Rust watcher daemon, nim token economy, voice input, and full-model oracle commentary.

Problem it solves: Claude Code's built-in /buddy ASCII creature operates with a small model, 5,000-character window, and single-session scope; Anima replaces it with a cross-session Rust daemon that monitors all active sessions simultaneously, fires observations through the full Claude model, and renders selectable commentary text.

Distinctive trait: The gamified "nim" token economy — 1 nim per 1,000 tokens spent — enables re-rolling for new companion species and rarity. Each project always generates the same familiar (deterministic from project path); developers on the same codebase get different creatures. This makes the companion a project identity artifact, not just a UI widget.

Tech stack: Tauri v2 + Rust backend (async Tokio daemon) + vanilla JavaScript frontend (no framework, no bundler). Binary is 4 MB. Requires Claude Code CLI, Node.js 20, Rust, and Git LFS (for bundled voice sidecar binaries).

Target audience: Solo developers on macOS who want a more engaging, cross-session aware Claude Code experience with voice input and gamified token awareness. Alpha-stage, solo project.

Production-readiness: 15 stars, MIT license, 1 contributor; v0.1.0-alpha; pushed April 2026. No signed DMG published — build from source only.

differs_from_seeds: Anima is a Claude Code subprocess manager with gamification layer — not a methodology or skill pack. Unlike all 11 seeds which shape agent behavior, Anima wraps the agent in a companion experience. The closest conceptual cousin is opcode (visual management layer) but Anima is far more focused on the live emotional/gamified experience rather than session analytics.

01

Overview

Anima — Overview

Origin

Solo project by Bradley Tangonan (btangonan), described as "alpha software" with explicit warning: "Breaking changes happen." Built on Tauri v2 with vanilla JavaScript frontend and Rust backend.

Philosophy

Anima's design philosophy centers on presence and engagement rather than workflow discipline. Where other Claude Code companions add productivity features (session analytics, cost tracking, checkpoint diffs), Anima adds emotional resonance through a character layer:

"Anima turns your Claude buddy into an oracle. A cross-session code supervisor running the full Claude model, inside a native macOS app."

The comparison to Claude Code's built-in /buddy is explicit:

"Claude Code ships with a basic buddy. An ASCII creature that hatches in your terminal, watches you work, and occasionally drops a line in a speech bubble. It's charming. It's also limited: the buddy can't see across sessions, can't remember what happened last time, its commentary comes from a small model working with a 5,000-character window, and the speech bubble text can't be copied or pasted back into your session."

Anima's answers to each limitation:

  • Cross-session: Rust daemon monitors all active sessions simultaneously
  • Memory: Per-project companion retains identity and nim balance across sessions
  • Model quality: Oracle commentary uses full Claude model (not the small buddy model)
  • Copyable: Speech bubble text is selectable and pastable into sessions

Token economy design

The nim currency mechanic is the most unusual feature in the batch. Key design choices:

  • 1 nim = 1,000 tokens (automatically accrued)
  • Spend nim to re-roll companion species, rarity, and personality
  • Same project always generates the same base familiar (deterministic from project path)
  • Two developers on the same codebase get different creatures (possibly from user-specific seeding)

This turns token usage — usually experienced as cost anxiety — into a reward mechanic.

Technical ambition vs. reality

Anima's README is candid about limitations: voice STT/TTS defaults off because the bundled anima-stt sidecar is missing a dependency (mlx_whisper). Users who want live voice today must provide an external WebSocket STT bridge at ws://127.0.0.1:9876. The .mcp.json file suggests MCP integration exists but is undocumented.

02

Architecture

Anima — Architecture

Distribution

Build from source only (alpha; no signed DMG).

git clone https://github.com/btangonan/anima
git lfs install && git lfs pull   # voice binaries are LFS-tracked
nvm use                            # Node 20 (pinned by .nvmrc)
npm install
npm run tauri dev                  # dev build
npm run tauri build                # prod build (unsigned)

Note: Node 22+ is explicitly unsupported due to vitest #8757.

Directory structure

anima/
├── src/                           # Vanilla JavaScript frontend
│   ├── app.js                     # Main app initialization
│   ├── session.js                 # Session management
│   ├── session-lifecycle.js       # Start/stop/resume
│   ├── companion.js               # Familiar rendering + state
│   ├── nim.js                     # Token economy logic
│   ├── cards.js                   # Stat card generation
│   ├── ascii-sprites.js           # ASCII creature sprites
│   ├── history.js                 # Session history replay
│   ├── voice.js                   # Voice input (WebSocket)
│   ├── messages.js                # Message rendering
│   ├── hook-events.js             # Claude Code hook events
│   ├── slash-menu.js              # Slash command menu
│   ├── tts-player.js              # Text-to-speech player
│   └── ...
├── src-tauri/                     # Rust backend
│   ├── src/
│   │   ├── main.rs                # Tauri builder
│   │   ├── lib.rs                 # Core exports
│   │   ├── bin/                   # Sidecar binaries
│   │   ├── commands/              # Tauri IPC commands
│   │   ├── mcp_gate/              # MCP integration
│   │   ├── models_manifest.rs     # Model list
│   │   ├── voice_protocol.rs      # Voice WebSocket protocol
│   │   └── ws_bridge.rs           # WebSocket bridge for voice
├── sprites/                       # ASCII creature sprites
├── .mcp.json                      # MCP server config
├── .nvmrc                         # Node 20 pin
└── docs/
    └── architecture.md            # Architecture notes

Data flow

  1. Anima spawns Claude Code as a subprocess (not just watching files)
  2. Pipes stream-json from Claude Code subprocess to frontend
  3. Rust daemon (daemon.rs / Tokio async) polls session feeds across all active sessions
  4. When daemon detects retry loops or read-heavy spirals, emits Tauri events
  5. Frontend triggers oracle commentary: claude -p subprocess with companion personality context
  6. Oracle output rendered in companion speech bubble (selectable text)
  7. Token usage increments nim balance (1 nim per 1,000 tokens)

Voice architecture

WebSocket bridge at ws://127.0.0.1:9876:

  • Bundled anima-stt sidecar (disabled by default, requires mlx_whisper)
  • External STT bridge (any compatible WebSocket server)
  • Push-to-talk via Bluetooth mic

Requirements

  • macOS 13 Ventura+ (Apple Silicon only)
  • Claude Code CLI authenticated
  • Node.js 20 LTS
  • Rust toolchain + Xcode CLT
  • Git LFS (for bundled voice sidecar)
03

Components

Anima — Components

Anima ships no Claude Code primitives (commands, skills, hooks). Components are frontend JS modules and Rust backend modules.

Frontend JavaScript modules

Module Purpose
app.js Main app initialization and routing
session.js Session state management
session-lifecycle.js Start/stop/resume Claude Code subprocess
companion.js Familiar rendering, stats display, oracle speech bubble
nim.js Token economy: nim accrual, re-roll spending
cards.js Familiar stat card generation (species, rarity, power ratings)
ascii-sprites.js ASCII creature sprite sheets and animations
history.js Session history replay browser
voice.js Voice input via WebSocket STT bridge
messages.js Message rendering (user/assistant/tool)
hook-events.js Claude Code hook event handling
slash-menu.js Slash command menu overlay
tts-player.js Text-to-speech playback
bargein.js Barge-in voice interruption handling
onboarding.js First-run setup flow
settings-ui.js Settings panel
permission-modal.js Tool permission approval dialogs
attachments.js File attachment handling
ui-split.js Split panel layout
dom.js DOM utilities
events.js Event bus
logger.js Frontend logging

Rust backend modules

Module Purpose
main.rs Tauri builder with plugin initialization
commands/ Tauri IPC command handlers
mcp_gate/ MCP server integration layer
models_manifest.rs Available Claude model list
voice_protocol.rs WebSocket voice bridge protocol definition
ws_bridge.rs WebSocket server for voice STT connection
Daemon (Tokio async) Polls all active sessions, detects retry loops, emits Tauri events

Companion system (key feature)

  • Species: Weighted rarity pool for ASCII creature generation
  • Determinism: Same project path always generates same base familiar
  • Nim economy: Accrual rate = tokens_spent / 1000; spend on re-rolls
  • Oracle: claude -p subprocess with personality context (species + stats injected); max 2 concurrent calls; all local API calls

MCP integration

.mcp.json file exists in repository root indicating MCP server configuration, but documentation for this integration is sparse in the alpha README.

05

Prompts

Anima — Prompts

Anima ships no Claude Code skill/command/hook primitives. However, the oracle commentary system generates prompts at runtime by injecting companion personality context into claude -p subprocess calls.

Runtime prompt pattern — Oracle commentary

Technique: Dynamic system-prompt injection with game-state context variables.

The oracle fires background claude -p prompts with:

  1. Companion species + rarity + stats as personality context
  2. Current session tool pattern summary (from the daemon)
  3. Output capped at 2 concurrent calls

From the architecture description:

Commentary runs as short background prompts via the Claude CLI, capped at 
2 concurrent calls. All processing is local; nothing leaves your machine 
except the API calls you'd make anyway.

The anima-system-guidance.txt file in the frontend source directory contains the base system instruction for companion commentary, but its content is not publicly documented in the README.

Oracle prompt characteristics

  • Model: Full Claude model (not the small buddy model)
  • Context: Tool patterns across all active sessions + companion personality
  • Output: Short observations in a speech bubble (selectable text)
  • Capping: Max 2 concurrent oracle calls prevents prompt flooding
  • Selectability: Output is copyable for paste-back into sessions

Comparison to Claude Code built-in /buddy

The README explicitly contrasts Anima with the built-in companion:

Dimension /buddy (built-in) Anima oracle
Model Small model Full Claude model
Context window ~5,000 characters Cross-session patterns
Session scope Single session All active sessions
Memory None Per-project familiar state
Output Terminal speech bubble Selectable UI text

This positions Anima as a higher-quality upgrade to an existing Claude Code feature rather than a wholly new capability category.

09

Uniqueness

Anima — Uniqueness & Positioning

differs_from_seeds

Anima is unlike all 11 seeds — it is a gamified companion experience, not a methodology framework:

  • vs. all skill-based seeds: Those inject prompting discipline. Anima injects personality and gamification.
  • vs. ccmemory (MCP-toolserver): ccmemory adds persistent knowledge. Anima adds companion character and cross-session awareness.
  • vs. opcode (batch companion): opcode provides analytics + agent management. Anima provides emotional engagement + gamification.
  • vs. poirot (batch companion): Poirot reads past sessions. Anima monitors live sessions and talks back.

Most distinctive feature in the entire corpus

The nim token economy is unique in the entire Phase D corpus — no other framework converts token spend into in-game currency or attaches gamification mechanics to AI development. This is a novel approach to making cost visible without triggering anxiety (reward framing vs. cost framing).

Positioning within the batch

Within the 10 batch frameworks, Anima occupies a "alive companion" niche that none of the others attempt:

  • opcode: analytics dashboard
  • Poirot: forensics viewer
  • Agent FM: ambient narration radio
  • Anima: interactive companion with its own character, economy, and memory

Observable failure modes

  1. Alpha stability: Sole maintainer, 15 stars, "alpha software" self-described. Breaking changes are expected.
  2. Voice is broken by default: The STT sidecar is disabled; users wanting the headline voice feature must build their own WebSocket bridge.
  3. Apple Silicon only: Explicitly limited to arm64 macOS; no x86 or Linux.
  4. Git LFS dependency: The voice sidecar binaries are tracked in Git LFS; clones without LFS support will be missing these.
  5. Gamification fatigue risk: Token economy and companion re-rolls are charming but may feel trivial to professional developers who find the overhead doesn't match the utility.
  6. Oracle cost: Background claude -p calls for oracle commentary consume API tokens beyond the main session. For users on token budgets, the companion adds measurable cost.
  7. Node 22+ incompatible: Pinned to Node 20 due to vitest compatibility issue; creates developer friction.
04

Workflow

Anima — Workflow

Anima imposes no development methodology. It is a companion interface for Claude Code sessions.

Session lifecycle

1. Launch Anima → point at project directory
2. First session: companion generates (species + rarity + stats)
3. Start Claude Code session (Anima spawns claude subprocess)
4. Daemon monitors session in real-time
5. When patterns fire (retry loops, read spirals):
   → Companion speech bubble shows oracle commentary
   → Text is selectable and pasteable into session
6. Nim accumulates (1 per 1,000 tokens)
7. Session ends → history persisted
8. Spend nim to re-roll familiar (optional)

Multi-session workflow

Dashboard view → all active sessions visible
                → each has its project companion animating during activity
                → done sessions show static companion
Voice: push-to-talk → transcribed to text → injected as Claude prompt

Session history

History view → select past session → replay conversation
            → JSONL-backed, no need for external tools

Model override

Users can change model (e.g., claude-sonnet → claude-opus) and effort level per session from the UI without needing CLI flags.

Phases

None prescribed. Anima follows whatever workflow the developer uses with Claude Code.

Approval gates

The permission-modal.js module handles tool permission approval dialogs — when Claude Code requests permission to run a command, Anima surfaces a GUI approval modal instead of a terminal prompt.

Artifacts produced

  • Companion stats (persisted per project)
  • Nim balance (persisted)
  • Session history (JSONL, same format as Claude Code native)
06

Memory Context

Anima — Memory & Context

State storage

Anima maintains local state for the companion system:

  • Companion state: Species, rarity, stats, nim balance — persisted per project (mechanism: likely JSON files or SQLite in app data dir; not explicitly documented)
  • Session history: JSONL files (same format as Claude Code native — Anima reads and writes these)
  • Token accumulation: Nim balance tracked against Claude API token usage

Persistence scope

  • Per-project: Each project directory gets its own familiar identity and nim balance
  • Global: Total nim balance may span projects (not confirmed in documentation)

Cross-session watcher

The Rust daemon provides a form of cross-session memory:

  • Monitors tool patterns across ALL active Claude Code sessions simultaneously
  • Tracks retry loop indicators and read-heavy spirals
  • Emits events when patterns trigger oracle commentary

This is runtime pattern detection, not persistent memory — the daemon tracks in-memory session state, not a database.

Context compaction

Anima does not handle Claude Code's context compaction. Sessions are stored as JSONL; compaction is transparent to Anima's session replay (compacted sessions still play back, just with the compacted context visible).

Cross-session handoff

No automated handoff. The familiar provides visual continuity (same creature across sessions) but no context injection from previous sessions.

Oracle context

The oracle commentary system provides a lightweight form of cross-session awareness: the Rust daemon aggregates tool patterns across sessions and passes them as context to the oracle prompt. This is ephemeral (runtime only) and not persisted between app launches.

07

Orchestration

Anima — Orchestration

Multi-agent

Anima's oracle commentary uses claude -p subprocess calls, but these are informational side-channel calls (max 2 concurrent) generating companion speech, not a multi-agent coding workflow. The main Claude Code session remains the primary agent.

Orchestration pattern

None — sequential at the user level. The oracle fires reactively when the daemon detects patterns, not on a schedule or pipeline.

Isolation mechanism

None. All processing happens on the local machine with the user's Claude API credentials.

Execution mode

Interactive GUI + reactive daemon.

Multi-model

No — all calls use whatever Claude model the user has configured. The oracle may differ from the main session model but this is not a deliberate multi-model routing strategy.

Consensus mechanism

None.

Auto-validators

The daemon auto-detects retry loops and read-heavy spirals and surfaces them as oracle observations. This is the closest thing to automated validation, but it is observational, not interventional — it surfaces the pattern without blocking execution.

Note on tool permission gating

The permission-modal.js module provides a GUI-level approval gate for Claude Code tool permissions. When Claude Code requests permission to execute a command, Anima intercepts this and shows a modal dialog instead of a terminal prompt. This is closer to a UI convenience than a methodology gate.

08

Ui Cli Surface

Anima — UI & CLI Surface

Desktop application

Anima IS the interface — it replaces the terminal for Claude Code sessions rather than running alongside it. Key UI elements:

Screen / Component Function
Multi-session dashboard All active Claude Code sessions in one window; companion animating while active
Session view Full streaming output from claude subprocess
Companion display Animated ASCII creature with species/rarity/stats
Speech bubble Oracle commentary (selectable text)
Nim counter Token balance display
Stat card Collectible familiar card (species, rarity, power ratings)
History browser Past session replay
Model selector Per-session model + effort override
Slash menu Slash command input
Permission modal GUI approval dialog for tool permissions
Settings panel App configuration
Onboarding flow First-run setup

Voice interface

  • Push-to-talk via Bluetooth mic
  • WebSocket bridge at ws://127.0.0.1:9876
  • Bundled anima-stt sidecar (disabled by default; requires mlx_whisper)
  • TTS playback via tts-player.js

Binary size

4 MB — comparable to Poirot (< 6 MB), much smaller than Electron-based competitors.

CLI binary

None.

IDE integration

None.

Distribution

  • Build from source only (alpha; no signed DMG published)
  • macOS 13+ Apple Silicon only

Observability

  • Oracle commentary surfaces cross-session patterns (retry loops, read spirals)
  • Session history provides replay of past conversations
  • Nim balance provides indirect token spend awareness (1 nim = 1,000 tokens)

Related frameworks

same archetype · same primary tool · same memory type

Goose (Block/AAIF) ★ 46k

General-purpose AI agent (not just code) with security-first tool inspection, recipe-based shareable configurations, and 15+ LLM…

Vibe Kanban ★ 27k

Eliminate the overhead of planning, switching between agent terminals, and reviewing diffs by providing a single web dashboard…

1Code ★ 5.5k

Cursor-like desktop experience for Claude Code and Codex with cloud background agents, event-driven automations, and a full…

Crystal (stravu) ★ 3.1k

Manage multiple parallel AI coding sessions in isolated git worktrees from a single desktop GUI.

Maestro (RunMaestro) ★ 3.0k

Orchestrate unlimited parallel AI agent sessions with a keyboard-first desktop app including Group Chat coordination and Auto Run…

AgentsMesh ★ 2.1k

Multi-tenant workforce platform that gives every team member a squad of AI coding agents coordinated through channels, pod…