English · Français
Capri
Capri, the Project Capricorn construct from Cyberpunk: Edgerunners season 2, lives on your desktop and tells you what your coding AI is up to: Claude Code, Codex or Antigravity. She teleports, glitches, comments on every action, comes to find you when it needs your permission, and loses it when the job is done.
!Capri telling you Claude is done
What she does
- When she starts: she grabs your screen. Its edges crackle red, her left hand slams onto its edge, then her
!Her intro: her hands on the edges, her face hitting the glass, the wave, holding on again
- While Claude works: a ticker over her head shows the current action
EDITS gigs.ts, RUNS npm test, GREPS "paginate"…) and she sheds little data glyphs.
When Claude runs a command or goes on the web, red sparks fly off her fingers; sitting on a window,
she jacks into it and the lightning runs along its edge.
- When Claude goes quiet mid-task (thinking it over, or a slow local model): after 15 seconds the ticker turns
THINKING… 45 s), and she keeps herself busy (a spin, a look around, the satellite
once). After 40 seconds she says something about it; after two minutes she tells you nothing's stuck.
- When Claude needs you (permission, question): she teleports next to your mouse, mane bristling, and won't let it go.
CLAUDE on a tag): that's where the question is. She stops once you've answered.
- When a command fails: red impact frame, she gets knocked back, heavy glitch, and the error line that actually matters.
- When it's done: she teleports to the middle of the screen and goes into her victory sequence:
12 actions · 3 files changed · 2m 14s) and Claude's last sentence.
- When Claude answers and you're on another window: she shows you its whole answer, in a wider panel that
- The rest of the time: she floats, her mane sways and sheds shards, she drifts from one corner to another,
- When she sleeps: she dozes a while, then her mane and her body come apart and all that's left is what she is at
- The satellite: the big sequence, kept for moments that matter. The first time of the day, a little while after
!Victory: the key pose, then the laugh and the cut-in
!The satellite: her stars, the road, the red light, the answer
She gets around
- She sits on your windows: perched on the top edge of a window, legs dangling and kicking one after the other.
- She peeks in from the edges of the screen: half hidden on the left or right, or hanging upside down from the top.
- She falls: stretched, mane blown up, accelerating, then a big squash and a shower of shards when she lands.
- Drop her on a window: drag her and let go with her hips on a window's top edge, she sits there.
- She possesses your windows, like in the show where she slips into bodies and systems: now and then she dives
- Little flourishes: a full spin with afterimages, a hop, looking left and right, the cocked head,
!Possessing a window: the dive, the hit, the window full of eyes
!Asleep down to her mask, waking up, and put away bottom left
Window tracking is Windows-only for now (a tiny PowerShell helper reads window positions, no titles, no contents). On macOS and Linux she still floats, peeks, falls and wanders.
She shows you around
How does it work? in her menu: she asks what to show you, then takes you there and points at it. Her head snaps to it, she coils up leaning away, then strikes: her construct arm shoots out at it to twice its length, red lightning off her fingertip, a reticle slams onto it with two of her eyes opening on its corners, and a close-up of her eyes cuts in. Then she holds it while she explains, a wire of data running from her finger to it: now and then she jabs at it, or glances back at you. When she's done, the wire reels back into her finger and the arm snaps back.
!The strike, and the hold while she explains
- Where's my icon? She goes down by the clock and points at her tray icon, or at the ^ when Windows hides it.
- Where's Claude? She points at Claude's window: the one you typed your last prompt in.
- Claude's folder: she opens
~/.claudein Explorer withsettings.jsonselected, points at the window, and
- Plug me into Claude: her hooks in one click. It's also her welcome the first time she starts. Next to it,
ollama launch claude, where you pick a model.
- Talk to me: see "Talk to her" below.
!Pointing at Claude's window during a permission prompt, and at her tray icon
Her mission report
Mission report in her menu: a card of what Claude got through today, made to be screenshotted. Tasks finished in big, then actions, files changed and errors, the longest mission and its project, prompts, approvals and projects. The numbers count up. Copy image puts a picture of the card on your clipboard, on its own dark plate, ready to paste anywhere. In the evening (after 6 pm), after a real day's work (3 tasks or more), she brings it to you once, on her own. The demo doesn't count, and it stays on your PC, one day at a time.
Talk to her
Talk to her in her menu (or the Talk to me button when you click her and nothing's going on): you type in her panel and she answers in character. She knows what Claude is doing and what it got done today. She answers in writing, in her own language. Enter sends, Esc closes.
The first time, she sets it up with you, with buttons, no terminal:
- On my PC (free, nothing leaves your machine): she installs Ollama for you (with winget,
- Online, no account: Pollinations, nothing to set up.
- I have a key: Groq or Gemini (both have a free tier), OpenRouter, OpenAI, Mistral or DeepSeek. You paste your
Her menu › AI model lets you switch later: Set it up with her…, or straight to a service and a model, LM Studio
(:1234), llama.cpp or vLLM (:8080), any OpenAI-compatible server (API key or address…), or Claude Code
itself: your messages go to claude -p in the folder you pick, continuing one conversation, and her hooks show what it
does. In that last one, permission mode default only lets it read (nobody is there to say yes); acceptEdits lets it
edit files without asking. Forget our conversations clears what she remembers of your chats.
It's AI. Her replies are written by the model, not by the show's writers: it's a fan version of her, and the chat panel says so every time.
What she can do on your PC (Windows), when you ask her in the chat:
- Open an app or a game: anything in your Start menu (Store apps like Spotify included), your Steam and Epic
- Music: "pause", "next", "louder", "mute"… press the media keys, so it works with Spotify and most players, right
- A website: always behind a button showing where it goes.
- Close an app ("close AM Music", "can you shut Discord down?"): a button with the app's name, and nothing happens
Nothing else: she can't see your screen or your files.
Make her yours
Right-click her › Make her yours… (or "Make me yours" in her guide), one panel at a time, each one skippable:
- What she calls you. She uses it now and then, and comes online with it ("Capri online. Hi, Max.").
- How she is, in your words ("more teasing, and talk to me about Night City"): her chat follows it. She stays Capri.
- Lines of yours, that she says now and then with hers when you click her. Write
{name}in one and she puts
- Things to remember (your favorite game, your cat, D…): her chat keeps them in mind.
She only catches the mouse on her actual body (pixel-precise): the rest of the screen works as usual.
- Click her: she tells you where Claude is at (nothing going on: a Talk to me button, to chat with her).
- Drag her: move her around.
- Click the panel: it closes.
- Ctrl+Alt+C: she puts herself away (into her biochip, like in the show) and all that's left of her is her mask,
- Her menu: right-click her (it's also on her tray icon, next to the clock): teleport, look at the satellite, demo,
She speaks French, English, Spanish, Brazilian Portuguese and Russian, and picks the language of your system on her own. You can choose another one in her menu.
Install
Quick start (Windows, no coding)
- Download
Capri-Setup-x.y.z.exefrom the latest release
- The installer isn't signed (a code-signing certificate costs money), so Windows SmartScreen may say
- Capri shows up and introduces herself. Click Plug me in: that connects her to Claude Code.
- Close Claude Code completely and open it again (it reads its hooks when a session starts). As soon as Claude does
Her menu: right-click her. It's also on her tray icon, which Windows 11 often hides behind the ^ next to the clock.
What's Claude Code? Do I need it?
Claude Code is Anthropic's coding assistant: in a terminal, in VS Code, or in the Code tab of the Claude app. It needs a paid Claude plan (Pro or higher) or an API account. Capri only watches it: no API key, and nothing to pay for Capri herself.
Without Claude Code she still lives on your desktop: she floats, sits on your windows, looks at the satellite, falls asleep. You can just leave her there.
From the source (macOS, Linux, developers)
You need Node.js 20 or newer.
git clone https://github.com/mochiiwuff/capri-desktop.git
cd capri-desktop
npm install
npm start
Keep that terminal open while she runs. Not tested on macOS or Linux yet: she should start, but the window tricks (sitting on your windows, possessing them, showing Claude's answer when you're elsewhere) are Windows-only, and on Linux the transparent overlay works best on X11 (Wayland can struggle with click-through windows).
Hook her up to Claude Code by hand
Right-click Capri, then Install Claude Code hooks. Or from the command line:
npm run hooks:install
This adds a hook to ~/.claude/settings.json (a backup is written next to it, your existing hooks are kept).
Restart your Claude Code sessions afterwards. To remove it: npm run hooks:uninstall.
The hooks run async: they never slow Claude down, and when Capri isn't running they do nothing.
Codex or Antigravity instead of Claude Code
Right-click her › Watch › Codex or Antigravity. She says hi and offers to plug herself in, like she does for Claude Code. Then:
- Codex: restart it and trust her hooks when it asks. They go in
~/.codex/hooks.json. Her hook for Codex needs
- Antigravity: start a new conversation. Her hooks go in
~/.gemini/config/hooks.json.
npm run hooks:codex:install or npm run hooks:agy:install (:uninstall to remove them), and npm run test:hooks
runs the tests of both adapters. Watch › Nothing, just keep me company: she stops talking about any of them.
Try it without Claude
npm run demo
Replays a fake session from start to finish (reads, a web fetch, a subagent, writes, a failing test, a permission
prompt, the end), then shows everything she does on her own, a line before each trick: the other minds in her,
zapping your pointer, the whole satellite sequence, possessing a window (a little terminal opens for her, then closes
under her and she falls), sleeping down to her mask, and putting herself away in the bottom-left corner.
It's also in the tray menu, in her language; from the command line it's in English, or add one: npm run demo -- fr
(or es, pt, ru).
Sounds
Every sound is synthesized live (Web Audio), nothing copyrighted ships with the repo.
You can drop your own files in the custom sounds folder (tray › Sound › Open custom sounds folder),
named like this (.mp3, .wav, .ogg or .m4a):
| File | When |
|---|---|
| teleport-out | she vanishes |
| teleport-in | she reappears |
| done | Claude is done |
| alert | Claude is waiting for your permission |
| error | a command failed |
| hello | a session starts |
| star | she looks up at the satellite |
| land | she lands after a fall |
| rise | the launch into her victory pose, the red light going up |
| bolt | her red lightning |
| charge | charging up before the red light goes up |
| possess | the window she took over laughs |
| blip | every syllable while she talks |
| tick | a quiet reminder |
Is it safe?
- All of the code is right here. The installer is built from it with
npm run dist; you can build your own. - Nothing leaves your PC (see below): she only talks to Claude Code through a hook on
127.0.0.1. - What she changes on your system: the hook in
~/.claude/settings.json(a backup is written first, and you can remove
- The SmartScreen warning comes from the installer not being signed, not from anything it does.
FAQ
- Mac, Linux? No installer yet, but you can run her from the source (see above).
- Phone, Android? No, she needs a desktop.
- Other assistants? Claude Code, Codex and Antigravity: her menu › Watch. Cursor, Windsurf and Gemini CLI: not yet.
- Ollama? Two ways. Claude Code running on a local model through Ollama (
ollama launch claude): she sees it like
- She barely moves, her intro just fades in and out. Windows has its animations turned off (Settings ›
- Can I turn her off? Ctrl+Alt+C puts her away, Quit in her menu closes her. Claude Code works exactly the same
- She only floats around and says idle things. That's normal until Claude Code does something. If it never reacts,
What leaves your machine
Nothing. The hook only keeps what the display needs (tool name, file path, command, the start of your prompt,
Claude's last message up to 6,000 characters so she can show it to you, all truncated) and sends it to 127.0.0.1 only.
Your file contents are never sent: for a write, only its size goes through.
Her chat goes to Ollama on your PC (127.0.0.1:11434, or OLLAMA_HOST) with what she knows of the moment (the
project's name, Claude's last action, today's counts). Her mission log stays in her own storage on your PC.
Art direction
The goal: she should feel like she stepped out of the anime, not like a widget.
- Cel animation: her body is redrawn 12 times a second ("on twos") like anime, 24 during teleports.
- Frame by frame, pose to pose: nothing is tweened. Each move is an exposure sheet (
acting.js):
- She acts with her head and her mane, like in the show: the cocked head, the shards bristling or
- Squash and stretch, afterimages: the flat cut-out squashes to a sliver to turn around, stretches when
- The satellite, after the season's ending, where she points at the light in the sky and wonders if they
- Her arms grow when she aims: anime exaggeration, or a raised arm would get lost in her mane. It stretches
- Both arms match: the cut-out had one arm reaching and one hanging. The hanging one is removed
tools/build-sprite.py) and the shader draws the reaching arm mirrored in its place, so both hands are the
same claws and both arms can act. Where an arm crosses her body or her mane it gets a violet line, so it reads.
- Her texture: the red mane is pushed back to the show's hot red and covered in twinkling white specks.
- The violet offset: like in the anime, a misregistered violet copy under her, under the panel, under the shards.
- "Relic" glitch: shifted horizontal slices and RGB split, in the spirit of Johnny Silverhand's appearances.
- Teleport: charge, shards, collapse into a line, and where she was, a black slit with a red line in it,
- Her intro: a close-up of her, cut out so your desktop shows around her mane (
tools/build-intro.py), in six
- Cut-ins: close-ups of her taken from the show, pushed in, with speed lines: her grin or her laugh after a
- Her mask: a vector drawing after the show (and the "Capri Wink Face"), on its own small canvas, only redrawn
- Type: Chakra Petch (bevelled cuts, like her shards) + JetBrains Mono for data.
How it's built
hooks/capri-hook.js run by Claude Code, reads the event on stdin and posts it to the app
scripts/install-hooks.js adds / removes the hook in ~/.claude/settings.json
tools/build-sprite.py rebuilds the sprite from the original cut-out (Python + Pillow, only if you change it)
tools/build-cutins.py cuts the cut-ins and her faces out of frames of the show
tools/build-intro.py cuts her intro's close-ups out of their background, all the same way
src/main/ Electron: full-screen transparent click-through window, tray, local HTTP bridge
windows.js / .ps1 where the other windows are (Windows only), so she can sit on them
ollama.js her chat: the local model, through Ollama
apps.js closing an app you asked her to close (after your click)
src/renderer/js/
sprite.js WebGL shader: head tilt, mane flare, sitting, smears, afterimages, colors, glitch
acting.js the exposure sheets: every move, drawing by drawing
capri.js the character: stances, teleport, sitting, peeking, falling, drag, sleep
fx.js shards, light columns, bolts, glyphs, speed lines, shockwaves, the satellite and the red light, possessed windows, the cut-ins, her intro
panel.js the "transmission" panel, her faces, and the ticker
guide.js her guide: the tutorials, going to things and pointing at them
brain.js turns Claude events into lines and actions
mission.js today's mission log, for her report card
chat.js talking to her: the conversation, who she is, her answers coming in
lines.js what she says (FR / EN / ES / PT / RU)
chip.js her mask: while she sleeps, and bottom left when you put her away
voice.js the sounds
To hack on it: npm run dev turns on debug routes on the bridge (/debug/capture saves a frame of the window to captures/,
/debug/testwin opens test windows she can sit on, one per name, /debug/mouse moves and clicks a stand-in pointer
over Capri's window, without touching the real one, /debug/type types in her chat).
npm run dist builds the Windows installer in dist/.
Credits and rights
Capri / Project Capricorn, Cyberpunk and Cyberpunk: Edgerunners belong to CD PROJEKT RED, Studio Trigger and Netflix.
This is a non-commercial fan project with no affiliation. The character images in assets/capri/ come from frames of
the show, a fan-made cut-out and fan art (her intro's close-ups); they are not covered by the code's MIT license.
If a rights holder wants them removed, open an issue.
Fonts: Chakra Petch and JetBrains Mono, under the SIL Open Font License, via Fontsource.