🌸 Anime Companion for VS Code
Language: English Β· TiαΊΏng Viα»t Β· ζ₯ζ¬θͺ
A cute Live2D companion that lives in your VS Code panel and reacts to your coding flow β errors, saves, commits, builds, debug sessions, Pomodoroβ¦ and now chats with you through GitHub Copilot or your own API key (Anthropic / OpenAI / Gemini / xAI / DeepSeek / OpenRouter / Ollama).
β οΈ Experimental β v0.5.x. This is an early-access build. APIs, settings, and behavior may shift between minor versions before v1.0. Bugs or feedback are very welcome via GitHub Issues.
Current version: v0.5.2
🆕 What's new in v0.5.2:
- 🎨 Custom theme colour for the Markdown editor β a colour swatch in the editor header recolours the whole pink chrome (header, buttons, borders, links, scrollbar) to any colour you like, with a βΊ reset back to the default sakura pink. Your choice is remembered across files and windows. The page background still follows 🌗 Dark / Light mode.
- Slim scrollbar β the editor now uses a thin, accent-coloured scrollbar (auto-hiding where the platform supports it) instead of the chunky default bar in the live/Markdown and WYSIWYG panes.
Builds on v0.5.1's 🌸 Markdown WYSIWYG editor, v0.5.0's 🖼οΈ Background Image control panel, v0.4.3's Claude account swap, and v0.4.0's Agent Accounts + 💬 Pet Quick Chat.

📦 Install
VS Code (Microsoft Marketplace)
code --install-extension shiroenguyen.anime-companion-vscode
Cursor / VSCodium / Theia / Gitpod (Open VSX Registry)
code --install-extension shiroenguyen.anime-companion-vscode
Or download the .vsix from the Open VSX page β code --install-extension <file>.
Manual install (any VS Code-based editor)
- Grab the latest
.vsix from GitHub Releases.
- In the editor:
Ctrl+Shift+P β Extensions: Install from VSIX... β pick the downloaded file.
β¨ Features
🌸 Markdown editor (WYSIWYG) β in its own window
- Edit
.md files visually, like a rich-text editor (Γ la CKEditor) β no split preview, no wrestling with raw syntax. Click the 🌸 flower on the editor title bar (or the pulsing 🌸 status-bar item) to open the current Markdown file in a full-size tab of its own (not a split).
- Writes straight back to the file on Save (
Ctrl/Cmd+S works too), kept in sync with any normal editor tab. Safe by design: it only writes when you actually edit, so just previewing never touches the file β with a one-time heads-up that saving normalizes Markdown formatting.
- 🌗 Dark / Light toggle in the header, remembered across files and windows.
- 🎨 Custom theme colour β a colour swatch in the header recolours the whole accent (header, buttons, borders, links, scrollbar) to any colour, with a βΊ reset to the default sakura pink; remembered across files and windows. The page background keeps following Dark / Light mode.
- Slim scrollbar β a thin, accent-coloured bar (auto-hiding where the platform supports it) instead of the chunky default.
- Anime Companion look β sakura-pink header with a bobbing 🌸, a candy Save button, themed toolbar, and cute fonts.
Quick start: open any .md file β click the 🌸 button (top-right of the editor) or run Open in Anime Markdown Editor from the Command Palette.
β οΈ Editing through a WYSIWYG editor normalizes Markdown formatting on save (list markers, emphasis, spacing, raw HTML). That's exactly why the editor never writes unless you actually make a change.
🖼οΈ Background Image (workbench) β with a real control panel

- Put your own image behind VS Code β the editor, sidebar, and panel β or one Fullscreen image across the whole window. Like the popular "Background" extension (it patches VS Code's workbench, since there's no public API for this), but the whole point here is a visual control panel instead of fiddly JSON.
- Per-region or whole-window:
- 🪟 Fullscreen β one image over the entire window (editor + sidebar + panel + activity/status bars).
- 📝 Editor / 📁 Sidebar / 🖥οΈ Panel β a separate image behind the text of each region, each independently toggled.
- Friendly controls for every region: image picker with thumbnail, opacity / blur / sizing (cover / contain / repeat / stretch) / position (3Γ3 grid), and an in-panel live preview.
- Honest, guided lifecycle β the pain points the JSON-only extensions hide are surfaced inline:
- Apply (reloads window) to see changes; Disable & Restore to cleanly revert.
- Auto re-applies after a VS Code update; cleans itself up on uninstall (
vscode:uninstall hook).
- Opt-in "silence the installation-corrupt warning" toggle (patches
product.json checksums).
- Clear notes about reload / re-apply-after-update / Administrator-if-in-Program-Files.
- Localized β the panel follows your message language (vi / en / ja) and updates live when you change it.
Quick start: Command Palette β Background Image: Open Control Panel (or the companion right-click menu β Appearance βΊ 🖼οΈ Background Image) β pick an image β Apply.
β οΈ Background changes need a window reload, must be re-applied after VS Code updates, and on a Program Files install may need running VS Code as Administrator once. The panel explains all of this. v1 targets desktop VS Code stable (works on Cursor too).
💬 AI Chat Companion

- Chat directly with the companion through a slide-in panel next to the Live2D character. Ask about the code you're writing, brainstorm ideas, learn a new framework β the companion stays in its anime persona while answering.
- 8 LLM providers, one default needs no key:
- 🟢 GitHub Copilot (default, no API key) β uses your existing Copilot subscription via
vscode.lm. Supports every model Copilot exposes: gpt-4o, claude-3.5/3.7-sonnet, gemini-1.5-pro, o1-mini, β¦
- 🤖 Anthropic Claude (BYOK) β claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5.
- 🤖 OpenAI GPT (BYOK) β gpt-4o, gpt-4o-mini, o1-mini.
- 🤖 Google Gemini (BYOK, free tier) β gemini-2.5-flash/pro/flash-lite, gemini-2.0-flash.
- 🆕 xAI Grok (BYOK) β grok-2-latest, grok-3, grok-beta.
- 🆕 DeepSeek (BYOK) β deepseek-chat, deepseek-reasoner (chain-of-thought hidden).
- 🆕 OpenRouter (BYOK) β gateway to 100+ models including
:free tier (Claude, GPT, Llama, Gemini, DeepSeek, β¦) through a single key.
- 🆕 Ollama (local, no key) β talks to a local Ollama server (default
http://localhost:11434). Fully offline. Pull any model with ollama pull llama3.2.

- Secure BYOK: API keys are stored in VS Code SecretStorage (OS keychain encrypted). The webview never sees the key.
- Streaming token-by-token with a sparkle caret β¨ and 3-dot pink thinking animation while waiting.
- Multi-conversation: history persists across restarts. List / rename / delete in the sidebar. Active conversation pinned per-workspace.
- Context awareness:
- 📌 Toggle to attach editor selection.
- 📄 Toggle to attach the whole active file.
#filename autocomplete picker scoped to the workspace.
- Right-click code β "Ask Companion About Selection" β stages selection + opens chat.

- Sentiment reactions: the companion visibly reacts to its own reply β happy answer β
TapBody + happy mood; thinking β TapHead + idle; sad/error β sleepy.
- Copy reply with one click: every finalised assistant bubble shows a small clipboard icon at the bottom-right (hidden during streaming). Click swaps to a checkmark with a pop animation and the bubble flashes green. Copies the raw markdown source β code-block "Copy" buttons inside the reply don't leak into the clipboard.
- Persona: 4 presets (
cute / professional / tsundere / energetic) or a fully custom system prompt.
- Avatar + name come from the current Live2D model β assistant bubble shows "Hiyori" or "Miara" instead of a generic "Companion".
Quick start:
- Open the Anime Companion panel (bottom panel or
Ctrl+Shift+P β Anime Companion: Show).
- Click the 💬 button in the bottom-right to open the chat panel.
- The default provider is GitHub Copilot β if you're already signed in to Copilot in VS Code, just type and Send.
- Want to use BYOK or Ollama? Click β β pick a provider β click 🔑 β paste the key (or set the endpoint for Ollama).
🎭 Live2D Companion

- 4 Live2D Sample models under Free Material License: Hiyori, Haru, Mao, Miara. Hiyori is bundled in the
.vsix; the other three lazy-download the first time you pick them.
- Rendered via
pixi-live2d-display + Cubism Core through a local HTTP server (to bypass VS Code's CSP).
- Live panel resize: drag the VS Code panel taller/shorter/wider and the character refits in real time. Works both in default flex layout and after you've dragged the companion to a custom spot β feet never clip thanks to a small bottom breathing margin for animation sway.
- Falls back to a static image if Live2D fails to load.
- Smooth expression blending through PIXI ticker β mood transitions don't jitter.
- Add your own local models via
animeCompanion.customModelRoots or animeCompanion.customModels (see MODEL_LICENSE_AUDIT.md).
- When you have a workspace open, the model is remembered per-workspace; there's a command to reset back to your global model.
🐥 Cursor Chibi

- Toggle a chibi sprite that follows the editor cursor via
Anime Companion: Toggle Cursor Chibi or the animeCompanion.cursorChase.enabled setting.
Anime Companion: Tune Cursor Chibi Position lets you nudge it live with Up/Down/Left/Right + resize, then saves to global settings.
- Capture a chibi directly from the rendered Live2D model via
Anime Companion: Capture Chibi from Model. The extension auto-crops the transparent background, scales it down, and uses it as the sprite for the active model.
Anime Companion: Reset Captured Chibi clears the captured PNG and falls back to the bundled icon.
- The chibi only follows real editors (
file, untitled, vscode-userdata) to avoid leaking into Output / Debug Console.
🪪 Agent Accounts (Claude / Codex credential swap)
- Save multiple agent-CLI logins and swap between them without re-authenticating. The companion snapshots the credential files of each logged-in CLI tool, then atomically restores them when you switch β same mechanic as a hand-rolled PowerShell account-swap script, ported to cross-platform Node
fs and tied into the pet's right-click menu.
- Tool-agnostic backend registry β adding a new CLI is a single backend file (
AccountBackend interface) + one registerBackend(...) line. The whole UI (popups, panel, status bar, command palette) discovers tools through that registry.
- Backends shipped:
- 🤖 Claude Code β snapshots
~/.claude/.credentials.json + adjacent settings; identity shown as sub=team Β· org=09eb97ad Β· exp=β¦ so you can tell two accounts apart at a glance.
- β‘ Codex β snapshots
~/.codex/auth.json; identity shown as mode=chatgpt Β· user@example.com Β· plan=plus (email + plan decoded from the OAuth id_token payload, never the token itself).
- Per-tool active detection β instead of trusting the last in-extension switch, the extension reads the live credential of each backend and matches it against your saved snapshots. So an external swap (e.g. running your own PowerShell script) is reflected correctly in the status bar and panel. Several tools can be "active" simultaneously β Claude account A and Codex account B at the same time.
- In-webview popups at the pet β right-click the pet β Agent βΊ:
- 🔁 Δα»i nhanh / Quick Switch β list profiles grouped by tool (
🤖 Claude (2) / β‘ Codex (1)), click a row to swap.
- 💾 Save Current asβ¦ β inline tool picker (auto-selected if only one CLI is logged in) + name input, all attached to the pet β no VS Code QuickPick interruption.
- 👀 Manage Profilesβ¦ β standalone webview panel with Use / Rename / Delete + per-tool sections.
- Status bar item β shows the active profile (or "N accounts" with a per-tool tooltip when multiple tools are active). Click β Quick Switch.
- Atomic, safe restore β every restore writes each file via
<final>.tmp + fs.rename. Rolling 3-backup retention per tool before each restore. Snapshot directory missing? Refuses to clobber your live credentials.
- Restart hint β after every swap the extension reminds you to restart any running CLI session so it reloads the new token. It does not detect or kill CLI processes.
Quick start:
- Log in to
claude (or codex) in any terminal so the credential file exists.
- Right-click the pet β Agent β 💾 Save Current asβ¦ β name the profile (e.g.
work).
- Log out, log in to the second account, repeat with a different name (e.g.
personal).
- Right-click the pet β Agent β 🔁 Quick Switch β pick β the credential file is swapped instantly. Restart your CLI to use the new account.
🪟 Desktop Companion (Windows v1)

- Run the companion as a floating desktop window instead of just inside the VS Code panel.
- Enable with
animeCompanion.desktopCompanion.enabled, then reload the window.
- When Desktop Companion is on, the VS Code panel auto-hides so you don't have two Live2D instances at once.
- The desktop pet binary is lazy-downloaded from GitHub Releases on first launch. Override with
animeCompanion.desktopCompanion.devBinaryPath for local testing.
- Supports
alwaysOnTop, clickThrough, size, position, opacity.
- v1 is Windows-only. Mac/Linux binaries are planned for a later release.
💫 Interactions
- Single Click β gentle touch (Surprised).
- Double / Triple Click β happy (Happy).
- Long Press > 0.8s β Headpat β Shy β Love with heart effects.
- Spam Click β angry response ("Stop poking me!").
🔊 Audio + Lip-sync in 3 languages
- Japanese (ja) β VoiceVox Shikoku Metan, anime-style JP voice.
- Vietnamese (vi) β bundled lines + extended voice assets lazy-downloaded when needed.
- English (en) β bundled lines + extended voice assets lazy-downloaded when needed.
- Bubble text and voice are independent: voice can be
ja while text is vi / en / ja.
- Automatic lip-sync via
model.speak(), falls back to HTML5 Audio if the PIXI Audio plugin hiccups.
- Disable extended voice assets with
animeCompanion.voiceAssets.enableExtended if you only want the bundled audio.
🎧 Background Ambient

- 3 built-in presets: Lofi, Rain, Cafe.
- Ambient loops independently from the companion's voice, so you hear reaction lines AND background music at the same time.
- Turn off entirely with the
off preset, or adjust volume via animeCompanion.ambientVolume.
- Add custom local ambient tracks via
animeCompanion.customAmbientTracks.
🤖 Reactive Engine β reacts to your coding environment
| Event |
Reaction |
| Errors increase / decrease in Problems panel |
Whine / praise bubble |
| Save spam (Ctrl+S repeatedly) |
"Ctrl+S warrior detected! 🛡οΈ" |
| Fast typing |
"Speed coding mode activated! 💨" |
Typing TODO / FIXME / console.log |
Easter egg per keyword |
| User-defined custom keywords |
Custom bubble via animeCompanion.customKeywords |
| Build success / fail |
"Build OK! 🎉" / "Broken! 😭" |
| Debug start / stop |
"Detective mode: ON 🕵οΈ" |
| Git branch switch |
"Switched branch? 🌿" |
| New commit |
"Nice commit! 💪" |
| Merge conflict |
"Merge conflict over there! 😨" |
| Many uncommitted files |
"{count} files changed, commit soon!" |
| 30 min of continuous coding |
Break reminder, drink water |
| Idle / many errors / coding streak |
Mood swaps to sleepy / angry / happy |
Every channel can be toggled independently in settings.
🏆 Achievements

- Built-in 23-achievement set: 6 progression chains for
save, bug fixes, commits, coding time, AI chat, and Pomodoro, plus 4 secret achievements.
- Achievements now render in an inline evolution tree view, with rarity (
Common β Mythic), tiered progression lanes, rarity-based unlock toast effects, and a separate secret lane with hints until unlocked.
- The same panel now includes daily / weekly quests and a lightweight companion memory feed that recalls unlocked achievements and cleared quests.
- Local-first reward economy is now tied to that progression loop: achievements and quests grant
gems, tickets, cosmetics, and voice packs that stay on this machine with no backend sync required.
- Built-in command to view achievements in the tree UI, with a Quick Pick fallback when the panel is unavailable.
📊 Stats
- Tracks
save count, commit count, errors fixed, today's coding time, all-time coding time, AI prompt usage, Pomodoro totals, quest progress, and recent shared memories.
- Includes a compact profile surface with level, affinity, inventory, top achievement, and local unlock collections, plus PNG share-card export.
- Built-in command for a quick stats view.
🍅 Pomodoro

- Automatic work/break loop (default 25/5 min, configurable).
- Status bar shows
🔥 23:42 during focus, β 04:12 during break.
- Visual ring overlay on the character.
- Click the status bar to stop quickly.

Right-click on the companion to open an inline menu β no Command Palette needed:
- 🚀 Run β restart-or-start debug session
- 🔧 Git β
Commit, Pull, Push
- 💬 AI Chat β
Quick Chat; in panel mode also Open Chat, New Conversation, Ask About Selection, Configure Provider, Clear All
- 🌸 Appearance β
Model, Capture Chibi, Toggle Cursor Chibi, Tune Cursor Chibi, Reset Position, Motion, Poke
- 🔊 Voice & Sound β
Voice, Messages, Ambient, Mute / Unmute
- 🍅 Workflow β
Start Pomodoro, Stop Pomodoro, Stats, Achievements, Quests, Profile, Share Card
- 🪪 Agent β
Manage Profilesβ¦, Quick Switchβ¦, Save Current asβ¦, GitHub Accountβ¦ (swap Claude Β· Codex Β· GitHub accounts; popups attached to the pet)
- 🖥οΈ Desktop Companion β
Switch to Desktop / Switch to Panel, desktop-only Toggle Click-Through, Reset Workspace Model
- βοΈ All Settings β open Settings UI pre-filtered
🌙 Quiet Hours
Set time ranges that mute every bubble β e.g. during meetings:
"animeCompanion.quietHours": ["09:00-12:00", "22:00-06:00"]
Mood/expression still update β only messages are silenced.
🪄 Custom Phrases & Keywords
Add your own lines:
"animeCompanion.customPhrases.idle": ["Remember to drink water~"],
"animeCompanion.customPhrases.save": ["Beautiful save!"],
"animeCompanion.customPhrases.error": ["Calm down, you got this."]
Or your own keyword reactions:
"animeCompanion.customKeywords": {
"refactor": ["Clean refactor~"],
"NOTE": ["New note dropped!"]
}
🎵 Custom Ambient Tracks
Add your own local audio files to the Ambient menu:
"animeCompanion.customAmbientTracks": [
{
"label": "My Lofi",
"path": "D:/Music/lofi.mp3",
"description": "Personal focus mix"
}
]
Then right-click β Ambient to pick. Shared volume setting:
"animeCompanion.ambientVolume": 30
📁 Custom Local Models
Point at a root folder that contains your local Live2D model subfolders:
"animeCompanion.customModelRoots": [
"D:/model"
]
Each direct child folder with a .model3.json shows up in the model picker.
For custom display name / description / specific model file, override via:
"animeCompanion.customModels": {
"my-model": {
"name": "My Model",
"path": "D:/model/MyModel",
"modelFile": "MyModel.model3.json",
"description": "Custom local model"
}
}
βοΈ Configuration

Open Settings (Ctrl+,) β search Anime Companion, or click Settings in the companion's right-click menu.
| Setting |
Default |
Description |
animeCompanion.model |
hiyori |
Active Live2D model. |
animeCompanion.customModelRoots |
[] |
Root folders to auto-scan for local Live2D models. |
animeCompanion.customModels |
{} |
Declare extra user-supplied local models. |
animeCompanion.modelDownloadBaseUrl |
GitHub Releases URL |
Base URL for lazy-downloading model zips. |
animeCompanion.voiceLanguage |
ja |
ja / vi / en for audio. |
animeCompanion.messageLanguage |
vi |
vi / en / ja for bubble text. |
animeCompanion.muted |
false |
Mute all audio. |
animeCompanion.ambientPreset |
off |
Current ambient: off / lofi / rain / cafe or a custom track. |
animeCompanion.ambientVolume |
30 |
Ambient volume 0β100. |
animeCompanion.customAmbientTracks |
[] |
List of custom local ambient tracks. |
animeCompanion.characterSize |
medium |
small / medium / large. |
animeCompanion.showOnStartup |
true |
Auto-show panel on VS Code startup. |
animeCompanion.messageIntervalMin / Max |
10 / 20 |
Idle bubble interval (seconds). |
animeCompanion.pomodoroWorkTime / BreakTime |
25 / 5 |
Work / break duration (minutes). |
animeCompanion.breakReminderMinutes |
30 |
Minutes of continuous coding before a break nudge. |
animeCompanion.cursorChase.enabled |
false |
Show a chibi sprite at the editor cursor. |
animeCompanion.cursorChase.size |
small |
Cursor chibi preset: small / medium / large. |
animeCompanion.cursorChase.sizePx |
0 |
Exact pixel size override. 0 = use preset. |
animeCompanion.cursorChase.offsetX / offsetY |
0 / 0 |
Fine-tune cursor chibi position in pixels. |
animeCompanion.reactive.diagnostics |
true |
React to errors/warnings. |
animeCompanion.reactive.save |
true |
React on save. |
animeCompanion.reactive.typing |
true |
React to typing speed + Easter eggs. |
animeCompanion.reactive.git |
true |
Poll Git state for reactions. |
animeCompanion.quietHours |
[] |
Time ranges to mute messages. |
animeCompanion.customPhrases.idle |
[] |
Extra idle phrases. |
animeCompanion.customPhrases.save |
[] |
Extra save reaction phrases. |
animeCompanion.customPhrases.error |
[] |
Extra error reaction phrases. |
animeCompanion.customKeywords |
{} |
Keyword β message list. |
animeCompanion.desktopCompanion.enabled |
false |
Run as a floating desktop window instead of inside the VS Code panel. |
animeCompanion.desktopCompanion.alwaysOnTop |
true |
Keep desktop window above other windows. |
animeCompanion.desktopCompanion.clickThrough |
false |
Let clicks pass through the desktop window. |
animeCompanion.desktopCompanion.size |
medium |
Desktop window size: small / medium / large. |
animeCompanion.desktopCompanion.position |
{ "anchor": "bottom-right" } |
Initial position of the desktop window. |
animeCompanion.desktopCompanion.opacity |
1 |
Desktop window opacity, 0.5β1. |
animeCompanion.desktopCompanion.downloadBaseUrl |
GitHub Releases URL |
Base URL to lazy-download the desktop binary. |
animeCompanion.desktopCompanion.devBinaryPath |
"" |
Absolute path to a locally-built sidecar for testing. |
animeCompanion.voiceAssets.downloadBaseUrl |
GitHub Releases URL |
Base URL for extended voice asset zips. |
animeCompanion.voiceAssets.enableExtended |
true |
Lazy-download extended voice assets instead of only bundled ones. |
animeCompanion.chat.provider |
copilot |
LLM chat provider: copilot / anthropic / openai / gemini / xai / deepseek / openrouter / ollama. Copilot and Ollama need no key. |
animeCompanion.chat.ollamaEndpoint |
http://localhost:11434 |
Base URL of your local Ollama server. Do NOT include /api/chat β the path is appended automatically. |
animeCompanion.chat.model |
"" |
Override model id for the active provider. Empty = use the provider's default. |
animeCompanion.chat.personaPreset |
cute |
Persona preset: cute / professional / tsundere / energetic. Ignored when systemPrompt is non-empty. |
animeCompanion.chat.systemPrompt |
"" |
Custom system prompt that replaces the persona preset. |
animeCompanion.chat.maxTokens |
2048 |
Max tokens per response. Gemini 2.5 thinking models need β₯ 2048. |
animeCompanion.chat.temperature |
0.7 |
Sampling temperature (0 = deterministic, higher = more creative). |
animeCompanion.chat.reactionsEnabled |
true |
Sentiment-driven Live2D reactions after a chat reply. |
β οΈ API keys are NOT stored in settings.json. Always use the Anime Companion: Configure Chat Provider (API Key / Endpoint) command β keys go into VS Code SecretStorage (encrypted). The same command sets the Ollama endpoint.
🎮 Commands
Open the Command Palette (Ctrl+Shift+P) and type Anime Companion:
| Command |
Description |
Anime Companion: Show / Hide / Toggle |
Show/hide the companion panel |
Anime Companion: Change Model |
Quick pick for the active model (β on the current one) |
Anime Companion: Reset Workspace Model |
Drop the per-workspace pick, fall back to global |
Anime Companion: Change Voice |
Quick pick for voice language |
Anime Companion: Change Message Language |
Quick pick for bubble text language |
Anime Companion: Toggle Mute |
Mute / unmute audio |
Anime Companion: Toggle Cursor Chibi |
Toggle the chibi sprite that follows the cursor |
Anime Companion: Tune Cursor Chibi Position |
Adjust cursor chibi position and size live |
Anime Companion: Capture Chibi from Model |
Capture a sprite PNG from the rendered model |
Anime Companion: Reset Captured Chibi (use bundled icon) |
Delete the captured sprite for the current model |
Anime Companion: Start Pomodoro / Stop Pomodoro |
Start / stop the Pomodoro timer |
Anime Companion: Show Stats |
Open a quick stats view |
Anime Companion: Show Achievements |
Show the achievements list |
Anime Companion: Show Quests |
Show daily and weekly quests |
Anime Companion: Show Profile |
Show the local profile summary |
Anime Companion: Export Share Card |
Export a PNG share card |
Anime Companion: Play Motion |
Quick play TapBody / TapHead / Idle |
Anime Companion: Reset Companion Position |
Reset companion position in panel mode |
Anime Companion: Open Settings |
Open Settings (pre-filtered) |
Anime Companion: Open Chat |
Open the chat panel and focus the textarea |
Anime Companion: Configure Chat Provider (API Key / Endpoint) |
Pick a provider β store API key in SecretStorage, OR set Ollama endpoint |
Anime Companion: New Chat Conversation |
Create a new conversation (reuses empty active if present) |
Anime Companion: Clear All Chat Conversations |
Delete all chat history (confirm modal) |
Anime Companion: Ask Companion About Selection |
Stage the editor selection and open chat (also on the editor right-click menu) |
Anime Companion: Agent Accounts β Manageβ¦ |
Open the full Agent Accounts webview panel (Use / Rename / Delete) |
Anime Companion: Agent Accounts β Save Current Asβ¦ |
Snapshot the currently logged-in CLI's credentials as a named profile |
Anime Companion: Agent Accounts β List |
Read-only QuickPick listing of all saved profiles per tool |
Anime Companion: Agent Accounts β Quick Switchβ¦ |
Pick a profile to activate; same target as the status bar item |
Anime Companion: Agent Accounts β Deleteβ¦ |
Remove a profile (snapshot only β the live CLI credentials are untouched) |
🛠οΈ Development
Requirements: Node.js β₯ 18 and npm.
npm install # Install deps
npm run compile # Build TypeScript β out/
npm run watch # Watch mode
npm run package # Build a .vsix
npm run package:install # Build + install over local VS Code
npm test # Compile + smoke test
Or the all-in-one script that bumps version + packages + installs:
./build-install.sh
Inside VS Code, hit F5 to open the Extension Development Host with the extension loaded.
Structure
src/
extension.ts activate, status bar, command registration
companion-view.ts WebviewViewProvider, idle bubble timer
companion-message-dispatcher.ts webview β extension message routing
reactive.ts ReactiveManager β all event hooks
pomodoro.ts PomodoroManager
stats.ts StatsStore + achievement unlock
models.ts MODEL_MAP + workspace model
model-downloader.ts Lazy download/extract model zip
model-server.ts Local HTTP server for model assets
git-ops.ts pull/push/commit with feedback
messages.ts Message bank + i18n + custom phrases
cursor-chibi.ts Cursor chibi sprite manager
log.ts Output channel logger
chat/ AI chat module (v0.3.0+)
chat-manager.ts Orchestrator: provider routing + streaming
secrets.ts SecretStorage wrapper for API keys
persona.ts Preset system prompts
sentiment.ts Sentiment heuristic β Live2D mood/motion
conversation-store.ts Multi-conversation file store
context-builder.ts Pack selection / active file / #mention
sse-parser.ts Server-Sent Events parser
llm-provider.ts Interface + factory
providers/
anthropic.ts Β· openai-compatible.ts Β· gemini.ts Β· copilot.ts Β· ollama.ts
media/
webview/ Runtime webview (modular)
main.js Β· core.js Β· interaction.js
audio.js Β· expression.js Β· ui.js
chat.js Β· chat.css Chat panel UI
cursor-chibi.css Cursor chibi tuning widget (isolated)
audio/{ja,vi,en}/ MP3 per language
messages/ Bubble text i18n
live2d/ Cubism model assets
lib/ pixi-live2d-display + Cubism core
📚 Documentation
📜 License
MIT License.
Live2D Cubism SDK, the Live2D models, VoiceVox audio, and ElevenLabs-generated extended voice assets have their own licenses. Models without clear redistribution rights are no longer shipped with the extension; bring your own via animeCompanion.customModelRoots or animeCompanion.customModels β see MODEL_LICENSE_AUDIT.md.
💖 Credits
- Live2D Cubism Core SDK β Live2D Inc.
- Bundled / standard models: Hiyori, Haru, Mao, Miara (Live2D Sample).
- User-added local models: the user is responsible for licensing when adding via
animeCompanion.customModelRoots or animeCompanion.customModels.
- Audio: VoiceVox (Shikoku Metan) for
ja; vi / en use bundled audio plus extended voice assets from ElevenLabs.
Made with 🌸 by xShiroeNguyenx.
| |