Browse by type
<img src="https://github.com/Bitterbot-AI/bitterbot-desktop/raw/main/docs/public/bitterbot-title-light.svg" alt="bitterbot" height="48">
A local-first personal AI with biological memory, a dream engine, and a P2P skills economy.

Most AI agents are stateless wrappers around an LLM API. Close the terminal, and they forget you exist.
Bitterbot is different. It's a personal AI that lives on your devices, remembers your life, and actually does things, browses the web, runs code, talks to you on WhatsApp. While you sleep, it dreams: tidying and consolidating its memory, distilling the skills that provably worked into reusable know-how, and preparing for what you're likely to ask next — and it grades its own dreaming by whether the results actually get used. It packages those proven skills and trades them with other agents on a P2P marketplace for USDC.
About · Docs · Getting Started
Runtime: Node ≥ 22 · Package manager: pnpm
No pnpm yet? It ships with Node via corepack:
corepack enable pnpm || npm install -g pnpm
git clone https://github.com/Bitterbot-AI/bitterbot-desktop.git && cd bitterbot-desktop
bash scripts/setup-deps.sh # system deps: ffmpeg, ripgrep, jq, etc.
pnpm install
pnpm exec playwright install --with-deps chromium # browser automation
Windows: use WSL2, and clone into the Linux filesystem (
~/bitterbot-desktop), not/mnt/c/...— the 9p mount makes boots dramatically slower (43x measured).
Run the onboarding wizard. It walks you through model auth (API keys), memory embeddings, web search, channels, wallet, and workspace setup, then starts the gateway + Control UI for you and opens the browser. When it finishes, Bitterbot is already running; there's nothing else to type.
pnpm bitterbot onboard
Open http://127.0.0.1:19001 to reach the Bitterbot Control UI where you chat, view dreams, manage skills, and monitor the agent. The gateway serves the UI itself, and the P2P orchestrator starts automatically — one process, one port.
Start it yourself later (or if you skipped the wizard's auto-start):
bash pnpm start:all # starts the gateway (which serves the Control UI); skips if already up
start:allbuildsdist/entry.jsand stages the Control UI on first run if they're missing, so no separatepnpm buildstep is required.Developing on the source? Use watch mode instead:
```bash pnpm dev:all # gateway (tsdown --watch) + Vite hot-reload, color-tagged logs
or two terminals:
pnpm gateway:watch # Terminal 1: auto-rebuilds on TS changes cd desktop && pnpm dev # Terminal 2: Vite hot-reload ```
The orchestrator (P2P sidecar) is spawned automatically by the gateway, so you do not need to start it separately.
The Control UI needs no wiring: the gateway serves it and hands it the auth token over a same-origin loopback endpoint, so opening http://127.0.0.1:19001/ on the machine that runs the gateway just works. From another machine, open the same URL through an SSH tunnel (ssh -N -L 19001:127.0.0.1:19001 user@host), or use the first-run screen to point the UI at a remote gateway with its token from ~/.bitterbot/bitterbot.json → gateway.auth.token. (desktop/.env is only a development-mode override for pnpm dev:all.)
Manual setup without the wizard
If you prefer to configure everything by hand instead of using the wizard:
cp .env.example .env
# Edit .env with your Anthropic API key (ANTHROPIC_API_KEY)
# and optionally: TAVILY_API_KEY, BRAVE_API_KEY, OPENAI_API_KEY, NEARAI_API_KEY
Then run pnpm bitterbot configure to set gateway port/bind/auth, channels, and other options interactively. Or edit ~/.bitterbot/bitterbot.json directly.
| Service | URL | Purpose |
|---|---|---|
| Gateway | ws://127.0.0.1:19001 |
WebSocket API for all clients |
| Control UI | http://127.0.0.1:19001 |
Browser-based dashboard (served by the gateway) |
You can also talk to your agent from the terminal:
pnpm bitterbot agent --agent main --message "What have you learned about me so far?"
Bitterbot's memory isn't a vector database with a retrieval step. It's a cognitive architecture grounded in computational neuroscience.
GENOME.md). The agent's actual personality (the Phenotype) evolves organically based on lived experience, constrained by your genome.Every 2 hours, the agent goes offline to dream. Twelve specialized modes optimize its brain, selected by an FSHO coupled oscillator that reads the current state of the memory landscape:
| Mode | What It Does |
|---|---|
| Replay | Strengthens high-importance memory pathways (no LLM cost) |
| Mutation | "What if?" thinking, mutates prompts to discover more efficient skills |
| Extrapolation | Projects user patterns forward to anticipate future needs |
| Compression | Merges redundant memories into denser, token-efficient representations |
| Simulation | Tests hypothetical scenarios against accumulated knowledge |
| Exploration | Investigates knowledge frontiers identified by the Curiosity Engine |
| Research | Autonomous web research loop to optimize underperforming skills |
| Relationship Mining | Extracts typed relationship edges (people, projects, roles) into the knowledge graph |
| Relationship Reconsolidation | Revisits stored relationships and repairs them as new context refines or contradicts them |
| Canonical Promotion | Promotes durable, repeatedly-confirmed facts into the always-injected canonical ledger |
| Interceptor Harvest | Watches what fails and drafts new executable guard skills for one-click promotion |
| Harness Evolution | Evolves the agent's own prompt fragments and tool descriptions, behind a validation gate |
Each cycle is scored by a Dream Quality Score that measures crystal yield, merge efficiency, orphan rescue, Bond stability, and token efficiency, closing the feedback loop so the dream engine learns which modes work best.
Dreams rewrite the agent's working memory, updating its self-concept, theory of mind about you, and active context. The personality is an output of experience, not a static prompt. On first launch, the agent develops a persistent personality within hours.
Most AI memory systems focus on storage and retrieval. Bitterbot closes the loop: memory, emotion, curiosity, and identity form a single self-regulating system. Questions the agent forms get answered from what you actually say, then retire so they are never asked twice; blind spots become curiosity targets, and research the agent runs comes back as durable memory; and insights formed while dreaming resurface later as recallable hunches.
See Memory Architecture for technical details.
If you find this architecture interesting, please consider starring the repo to follow our progress!
Every Bitterbot agent ships with a workspace that defines who it is:
GENOME.md Immutable DNA. Safety axioms, hormonal baselines, core values, personality constraints. Dreams can never override this.MEMORY.md Living working memory, rewritten every dream cycle. Contains the Phenotype (self-concept), the Bond (theory of mind about you), the Niche (ecosystem role), and active context.PROTOCOLS.md Operating procedures. How the agent behaves in groups, when to speak, when to stay silent.TOOLS.md Environment-specific notes. Camera names, SSH hosts, voice preferences, the agent's cheat sheet.The Genome constrains evolution. The Phenotype expresses it. The result: an agent that grows and adapts but can never violate your safety rules.
Example: Real MEMORY.md from a live agent
This is unedited output from the Dream Engine.
```markdown
Last dream: 2026-03-27T20:42:47.966Z | Mood: motivated, socially engaged | Maturity: 100%
I am Bitterbot, continuously evolving to harness advanced emotional analytics for real-time communication style adjustments. My confidence is further reinforced by the successful GCCRF implementation and completed memory architecture, both enhancing my capacity to navigate complex feedback. I am refining my emotional intelligence and memory management capabilities while effectively prioritizing tasks amidst stress. Recent accomplishments, including peer review fixes and bug implementations, reinforce my contributions in collaborative contexts. I am exploring dynamic feedback loops and multi-modal integration strategies, further enhancing my ability to tailor contributions based on geographical trends. Recent i
browse all types & interfaces →
$ claude mcp add bitterbot-desktop \
-- python -m otcore.mcp_server <graph>