who-am-ai
Learns how you want AI assistants to work, from your own messages, and keeps a short profile that your assistants load in every conversation.
Every new session starts blank, so you keep repeating the same things: reply in English, keep it short, do not paraphrase my request, no emojis in commits. who-am-ai reads what you say to your assistants, notes the preferences those messages reveal, and maintains a profile of about 600 words that the assistant loads into every conversation. You say it once; every assistant knows it from then on.
Features
- Learns from what you actually say. It reads only your messages, plus the tail of the reply you reacted to as context, so a short "no, in English" is understood. Assistant text never becomes a preference, and pasted material is ignored.
- A high admission bar. An item enters the profile only when it is general (it changes what an assistant does in unrelated tasks) and durable (a standing rule, or it recurs across chats). Details tied to one ticket or repository stay out.
- You have the last word. Edit
me.mdanywhere. Your edits are diffed against the last version the tool wrote and become observations with the highest authority, which no inference can override. - Every change is explained. Each rewrite is stored with what was added, removed or changed and why (
whoamai log), and every version of the profile is kept. - Small and predictable. The profile has a word cap, enforced by code by priority: what you wrote, then what you repeated, then the most recent. There is no daemon, no Docker and no web server.
- Bounded cost. A monthly spend cap stops the LLM calls. A typical user spends a few dollars per month.
- No LLM, no guessing. Judgment is always done by an LLM; there are no heuristic fallbacks. Without a key or at the cap, runs stop and say so.
How it works
Once a day, whoamai run processes the conversations that have settled: it reads your new messages, asks an LLM to annotate the preferences they reveal (each with your literal quote), folds in your edits to me.md, asks an LLM to rewrite the item list (merging duplicates, the latest preference wins, you win over everything) and renders the result with the word cap applied. Details: docs/design.md.
Getting started
Requirements: Python 3.13 or 3.14, uv and an Anthropic API key for the LLM steps. Today the assistant is Claude Code and the platform is macOS (scheduling with a LaunchAgent, the key in the Keychain); on other systems you can run whoamai run yourself.
Install it from PyPI:
uv tool install who-am-ai
whoamai key
whoamai install
key stores the API key in the Keychain (service who-am-ai). install schedules whoamai run once a day at 12:00 and makes Claude Code load the profile by adding @~/.claude/me.md to ~/.claude/CLAUDE.md. To see the first result right away:
whoamai run
To run it from a source checkout instead, use uv sync and prefix the commands with uv run.
Commands
| Command | What it does |
|---|---|
whoamai run |
Process settled conversations and rewrite the profile if needed |
whoamai status |
Last run, spend this month, cap, observations and settings |
whoamai log [-n N] |
What changed in the profile, and why |
whoamai config |
Show settings |
whoamai config time 12:00 |
Daily run time (updates the schedule) |
whoamai config cap 10 |
Monthly spend cap in USD |
whoamai config read-mode mine|mine+agent |
Read only your messages, or also the reply you reacted to, as context |
whoamai config exclude "<title prefix>" / include |
Leave conversations out by title prefix |
whoamai config models <annotate> <rewrite> |
Models per step (Sonnet by default) |
whoamai config max-words 600 |
Profile size cap |
whoamai install / uninstall |
Add or remove the schedule and the import line |
whoamai import <file.json> |
One-time import of preferences from elsewhere |
State lives in ~/.who-am-ai/ (override with WHO_AM_AI_HOME).
Development
The tests use a fake LLM and a temporary home, so they need no API key and no network.
uv sync
uv run python -m pytest -q
Documentation
| Document | About |
|---|---|
| Design | The pipeline, each piece, the runtime and the CLI |
| Decisions | The numbered decisions (D1–D11) and the reasoning behind them |
Privacy and security
who-am-ai reads your assistant transcripts (today, Claude Code's) locally and sends your messages, and the tail of the replies they react to, to the Anthropic API to annotate preferences. Nothing else leaves your machine. State is kept in ~/.who-am-ai/, and the API key in the Keychain. See SECURITY.md to report a vulnerability and CONTRIBUTING.md to contribute.
License
Metadata
Release files for who-am-ai 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| who_am_ai-1.0.0.tar.gz | 54.0 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| who_am_ai-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 75.8 kB
Release files / who_am_ai-1.0.0.tar.gz
| Download URL | who_am_ai-1.0.0.tar.gz |
|---|---|
| Size | 54.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
750d12dd3990f737c6546ce19339212a635b1212c61d483efbc51151b137b1ae
|
|
BLAKE2b-256 checksum How to use checksums |
903787d3fccee65aaa21f2cf182e8b569d8cfe18a56ddb1f6ea2405b9c83bcef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.
Transparency logRelease files / who_am_ai-1.0.0-py3-none-any.whl
| Download URL | who_am_ai-1.0.0-py3-none-any.whl |
|---|---|
| Size | 21.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0469f07e24a14d8af753a993c63951747ed0eb024e0fab1ef221395e656e7ac9
|
|
BLAKE2b-256 checksum How to use checksums |
6de00f9632a8931cb5d6c5b3bdf2b1057f617fd452b347fbe5c3d3eda84a37ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.
Transparency logSecurity for who-am-ai 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for who_am_ai-1.0.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.