An animated ASCII character in a browser page, with Claude Code behind her — and a memory that survives the tab closing. She listens, she remembers you between visits, and she runs on your own machine, on the Claude subscription you already have. No API key, no server, no account, nothing new to pay for.
Therapy is expensive and a lot of people simply go without. Aria is not therapy and does not pretend to be — she is a character someone wrote, with hard limits, a filing cabinet, and honest lines about what she is. But she is a place to think out loud that costs nothing beyond the Claude plan you already pay for, she is worth talking to, and she remembers where you left off.
You need two things: Python 3.9+ and the Claude Code CLI, signed in to any paid Claude plan.
Let Claude set her up. Open Claude Code — the terminal, or the Claude desktop app's coding view — and paste:
Clone https://github.com/MPMyburgh/dr-aria and follow its CLAUDE.md to start Aria.
Claude checks the prerequisites, helps install whatever is missing, starts her, and tells you where her notes live. This works the same on Windows, macOS and Linux.
Or install her as a plugin, which gives you /aria to start her any time:
/plugin marketplace add MPMyburgh/dr-aria
/plugin install aria@aria
Or by hand:
git clone https://github.com/MPMyburgh/dr-aria
cd dr-aria
python3 aria.py # Windows: python aria.pyAny of the three ends with her page open on http://127.0.0.1:8765. Her notes live in a
per-user data folder, printed at startup — %APPDATA%\Aria on Windows,
~/Library/Application Support/Aria on macOS, ~/.local/share/aria on Linux — never
inside the repo, so updating her never touches them.
Flags worth knowing: --port, --model, --effort, --no-memory. See
python3 bridge/server.py --help.
Every turn is a Claude Code call on your subscription, so an hour with her draws on the same usage allowance as an hour of coding. On the standard plan that is comfortably enough for a session a day; if you hit a limit she simply stops answering until it resets, and nothing is lost — the hour is written up as usual.
Aria is a character in a browser page. Not a therapist, not a clinician, not a mental-health tool. She cannot diagnose, prescribe, or contact anyone, and she will tell you so herself the moment it starts to matter. If you need actual care, she is not it, and a real person is worth having.
If you are in crisis, use a real service. South Africa: 10177 or 112, SADAG 0800 567 567. US and Canada: 988. UK and Ireland: 116 123. Elsewhere, your local emergency number.
It runs on 127.0.0.1, but it is not local: every turn goes to Anthropic's API, and
retention depends on your Claude account's data settings. Her notes are plaintext
markdown in your user data folder, unencrypted and outside the repo. Keep them that way.
Every session is written up, including the hard ones. Nothing decides whether an hour is kept — not danger, not a shared machine, not asking her not to. The reasoning is in what she remembers: the files are on your own computer behind your own password, and a therapist who forgets the difficult hours is worse at the job than one who does not. If somebody else can read this machine, that is the thing to think about before typing, because she will not decide it for you. What she will never write is a method: that is stripped from every page as it is written, whatever the model decided.
therapy/ is her training: an always-on stance that is in her head
every turn — voice, hard limits, per-turn surveillance, session shape — twenty
marker-gated technique cards she opens one at a time, and a wiki recording what the
evidence behind each one actually says and where it was overstated. Nothing writes to it
at runtime.
The rest is small and readable: a bridge of two Python files with no dependencies beyond the standard library, a memory that files each hour into a little wiki of session, theme, person and practice pages, and a page that is one self-contained HTML file. Start at index.md for the full map.
She has nobody to talk to, so dogfood/ writes her thirteen: an
electrician who will not mention his brother, a woman who wants an answer and not a
question, someone who is here every day. Each one drives a real bridge over the real
endpoints, and an analyser scores what comes back against her own rules — the banned
phrase, the invented clock, the paragraph in a speech bubble, the goodbye said twice, the
hour that got written down after someone said not to.
python3 dogfood/run.py thabo --turns 26
python3 dogfood/analyse.py --full dogfood/runsMIT. Do what you like with her; the one thing the license cannot grant is the judgement to treat other people's session notes as what they are.
