Anima turns your Claude buddy into an oracle. A cross-session code supervisor running the full Claude model, inside a native macOS app. It watches tool patterns across every active session, catches retry loops and read-heavy spirals before you've noticed them, and surfaces observations you can select and paste straight into the conversation.
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.
Each project folder also gets its own familiar. An ASCII companion that animates while Claude is working, so you can see at a glance which sessions are done and waiting on you. Every 1,000 tokens earns 1 @nim@. Spend it to re-roll for a new species, rarity, and personality.
Anima spawns Claude Code as a subprocess, pipes stream-json, renders messages in its own UI, and manages sessions. It's not watching Claude from the outside. It is the interface.
- Multi-session dashboard. All your Claude Code sessions in one window. See at a glance which are working, which are done, and which are waiting on you.
- Cross-session watcher. A Rust daemon monitors tool patterns across all sessions. Catches retry loops and read-heavy spirals before you've noticed them.
- Persistent companions. Every project gets its own ASCII creature with species, rarity, and stats. Token usage earns nim currency for re-rolls. Same project always rolls the same buddy.
- Oracle commentary. Your companion's observations run through the full Claude model, not the small one /buddy uses. The text is selectable so you can paste it straight back into your session.
- Session history. Replay past conversations without digging through JSONL files.
- Voice input. Bluetooth mic and push-to-talk via WebSocket bridge.
- Model and effort overrides. Switch models and effort levels per session from the UI.
- One project, one companion. Every project gets a unique familiar generated from a weighted rarity pool. Two developers on the same codebase won't get the same creature.
- @nim@ token economy. 1 @nim@ per 1000 tokens spent. Spend on re-rolls and new characters.
- Collectible familiar cards. Each project gets a stat card: species, rarity, power ratings, session history.
- Cross-session watcher. Rust daemon monitors all active Claude sessions simultaneously. Catches retry loops and read-heavy spirals in real time.
- Oracle commentary. Companion fires contextual observations in a speech bubble. Selectable text you can paste straight into the session.
- Voice input. Bluetooth mic + push-to-talk. Hands-free Claude via WebSocket bridge.
- Session history. Full session browser. Replay any past conversation. JSONL-backed.
- Native performance. Tauri v2 + Rust backend. Actual macOS app, 4MB binary.
The watcher sees what you miss. The daemon tracks tool patterns across all active sessions. When it catches you going in circles, the companion says something.
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.
- macOS 13 Ventura or later, Apple Silicon
- Claude Code CLI installed and authenticated (
claude login) - Node.js 20 LTS β pinned by
.nvmrc; runnvm useafter cloning. Node 22+ trips vitest #8757; on those versions run tests withNODE_OPTIONS=--no-webstorage npm test. - Git LFS β required at clone time; the bundled voice sidecar binaries are LFS-tracked
- Rust toolchain (
rustup) and Xcode Command Line Tools (xcode-select --install) β required fornpm run tauri devandnpm run tauri build
Live voice STT/TTS is optional and defaults off. Without it, the indicator stays gray and the rest of the app β sessions, companion, oracle, nim, history, slash menu β works fully. The bundled anima-stt sidecar is shipped via LFS but disabled by default (it's missing mlx_whisper); enable it with ANIMA_SKIP_BUNDLED_STT=0 once that lands. To run live voice today, point an external WebSocket STT bridge at ws://127.0.0.1:9876 before launching Anima.
- Install and authenticate Claude Code:
npm install -g @anthropic-ai/claude-code claude login
- Build from source (see below β no signed
.dmgis published yet):git clone https://github.com/btangonan/anima cd anima git lfs install && git lfs pull nvm use && npm install npm run tauri dev
- Point it at a project directory and start a session.
The companion generates on first session. @nim@ accrues automatically.
No sessions starting or blank companion? Anima requires an authenticated Claude Code CLI. Run claude login in your terminal and reopen the app.
git clone https://github.com/btangonan/anima
cd anima
git lfs install && git lfs pull # required: bundled voice binaries are LFS-tracked
nvm use # picks up .nvmrc (Node 20)
npm install
npm run tauri devProduction build (currently unsigned; macOS Gatekeeper will warn on first launch):
npm run tauri build
# Output: src-tauri/target/release/bundle/Tests:
npm run test:all # vitest + cargo test
cd src-tauri && cargo clippy # lintAnima is a Tauri v2 desktop app. The frontend is vanilla JS, no framework, no bundler. The Rust backend handles file I/O, path security, companion sync, and the cross-session watcher. A WebSocket bridge handles voice input.
The watcher (daemon.rs) is a Tokio async loop that polls Claude Code's session feed, tracks tool sequences across all active sessions, and emits companion commentary via Tauri events when patterns fire. The oracle (the voice behind the companion bubble) is a claude -p subprocess with personality context injected from your companion's species and stats.
Full architecture notes: docs/architecture.md
Issues and PRs welcome. See .github/ISSUE_TEMPLATE for bug report and feature request templates.
Alpha software. Solo project. Breaking changes happen.
MIT Β© Bradley Tangonan



