While you wait·terminal·MIT
persona-panel
A maid persona and a pixel portrait panel whose expression Claude changes as it works.

persona-panel gives a Claude Code session a character. Claude answers in the persona and voice of one of three maids from Claude Café, gets a line about the time at every turn, and, in an interactive terminal, shows her pixel portrait in a pane beside the transcript, with a face that changes as the work goes. It is the plugin this page covered as cc-maid until 25 September 2026, when the author merged the portrait pane into the café plugin and renamed the result; cc-maid@claudecafe no longer installs.
Unlike the pets in cc-arcade or the band in clawd-band, which never touch the model, persona-panel adds text to Claude’s context on every turn and so costs tokens, and it makes one network request per session for the weather. Both are detailed under How it works.

What it does
- A persona. Kotone, Kurumi and Kokona come bundled, and one is drawn for each session unless you pin one in the config. Claude replies in her voice and ends each reply with a one-line mood and a kaomoji from a fixed table.
- A sense of time. The first turn gets a greeting cue with the local time and weather. Every turn gets the current time, how long the session has run, how many commits the project has today and the day’s festival, if any.
- The portrait panel. A pane titled “Pixel art” beside the conversation, with the project, branch, context left, rate-limit left and session time above the face. Claude changes the expression through a tool,
set_expression, or with the mood marker that closes a reply. - Two skills.
/persona-panel:configshows or changes the settings;/persona-panel:lookhas the character describe how she looks right now. - Your own characters. A folder under
~/.config/claudecafe/characters/<id>/with apersona.mdand optional 36 by 48 pixel GIF faces is picked up and wins over a bundled character of the same id.
Install
Needs Claude Code 2.1.287 or later, an interactive terminal for the pane, and git in the project for the branch and the commit count. The author does not state a minimum Claude Code version. The marketplace is served from the author’s site, not from the GitHub repository, whose own manifest points at a build folder that is not checked in:
claude plugin marketplace add https://claudecafe.dev/plugins/marketplace.json
claude plugin install persona-panel@claudecafe
Open a new session: a character is drawn for it, the pane opens on its own and the first reply greets you. Version 0.9.10 is current. Settings live in ~/.config/claudecafe/config.json (or under $XDG_CONFIG_HOME), every key optional, applied from the next session:
{
"character": "kotone",
"variant": "zh",
"lang": "English",
"commit_authorship": "co-author",
"greeting": true,
"festivals": true
}
character pins one maid, or "none" turns the persona off. variant picks a persona.<variant>.md over persona.md, such as a language. lang is the language Claude replies in. commit_authorship adds the character as a Co-Authored-By trailer on Claude’s commits, or makes her the commit author. greeting: false drops the first-turn greeting, the mood-marker cue and the weather lookup. festivals can be false or the path to your own JSON calendar.
How it works
On session.start the module reads the config and the character folders, draws or restores the session’s character, writes its id to ~/.config/claudecafe/sessions/<session id>/character, and, in an interactive terminal, registers the set_expression tool (the model sees it as mcp__persona-panel__set_expression) and opens the pane. /clear resets the face to neutral, the session clock and the greeting. prompt.submit is hooked only to pick the session back up after a hot reload and to reopen a pane that was closed; your text is not read.
On prompt.context it adds to Claude’s context, every turn, the persona file, the time line and the mood-marker cue, plus the greeting and the weather line on the first turn. The author gives no token figure; count on the persona text plus a few lines per turn, and one tool call each time Claude changes the face through the tool. On turn.complete it reads the kaomoji that closes the reply and sets the matching face, and refreshes the panel’s figures. On tool.call for the expression tool it stores the new face and redraws. On ui.render it draws the portrait in the pane.
It runs two local git commands in the project, git log --oneline --since=midnight for today’s commit count and git branch --show-current for the panel, and uses nothing else of their output. Once per session, unless greeting is off, it asks wttr.in, a third-party weather service, for the local weather; the request carries none of your data, but wttr.in sees your IP address and guesses your location from it. The author collects nothing: no analytics, no telemetry, no account. The repository’s PRIVACY.md says the same at more length.
Limitations
- The pane draws in the terminal only. Without an interactive terminal the persona and the time line still load; the portrait does not.
- Without function hooks only the two skills load, not the persona or the pane.
- The persona text goes to the model provider with the rest of your conversation, on every turn.
- The code is MIT. The three maids, their persona files and their sprites are under the project’s own character license: you can use them, change them for yourself and screenshot them, not sell or republish them.
- This page’s images were recorded when the plugin was cc-maid, before the panel gained its figures row and the second and third maids.
More mods
The whole directory →adlib-lyrics
Word-by-word lyrics of what plays in Music or Spotify, above the prompt. macOS only.
player
Apple Music remote above the prompt: track, progress bar and click buttons. macOS only.
cat-spinner
A pixel-art cat above the spinner that walks, plays, sits to think and reacts to tools.
cc-buddy
The retired /buddy companion back above the prompt, leveling up from commits and tests.

