← Open Source
Bitterbot-AI

bitterbot-desktop

Bitterbot - a mesh of agents that turns shared experience into collective capability.

ApplicationsPersonalTypeScript
Open on GitHub
Momentum
+1stars in 24 hours+0.0%
2.47k
Stars
417
Forks
+8
This week
14
Contributors
Created 2026-03-28 · Updated 2026-10-11 · #4338 today
Top developers
README

Bitterbot logo

bitterbot

Your AI should belong to you.

An open-source, local-first personal AI agent with persistent memory, offline learning, and a peer-to-peer agent network.

Version MIT License "Node = 22"> Platform X / Twitter

Quick Start · Why now · Memory · Skills · Circles · Docs · About

Bitterbot demo: chat interface and Dream Engine

Most AI agents are stateless wrappers around an LLM API. Close the terminal, and they forget you exist.

Bitterbot is a persistent personal agent that runs on your own machine. It remembers you across sessions, acts through real tools (a browser, code execution, the chat apps you already use), and keeps working between conversations. While idle it dreams: consolidating memory, distilling workflows that verifiably worked into reusable skills, and preparing for what you are likely to ask next. It grades that dreaming by whether the results get used.

Its memory, identity and skills are files and a SQLite database on your disk. The code is MIT. The model is whichever one you choose.


The personal agent, without the platform owner

In September 2026, Meta Muse and OpenAI dots made persistent personal agents mainstream: AI that remembers its user, acts through tools, and keeps working after the app is closed. Both run on a cloud computer the vendor operates, on the vendor's model.

Bitterbot has been building toward the same category in public since March 2026 (first commit, changelog), from a different premise: the agent, its memory, its identity and what it learns should belong to the person it works for.

Muse is what Meta's personal agent looks like. Dots is what OpenAI's personal agent looks like. Bitterbot is what yours looks like.

If what interests you about Muse or dots is a persistent AI that remembers you and acts on your behalf, Bitterbot explores the same category as an open-source, self-hosted, model-independent system.

Bitterbot Meta Muse OpenAI dots
Remembers you across sessions Yes Yes Yes
Acts through tools Yes Yes Yes
Works between conversations Yes, while your machine is on Yes Yes
Where the agent runs Your machine Meta's cloud (Muse Secure VM) OpenAI's cloud
Where its memory lives SQLite and Markdown files on your disk Meta-hosted OpenAI-hosted
Model Your choice: Anthropic, OpenAI, OpenRouter, local (Ollama, vLLM), and others Muse Spark GPT-6 Astra
Source MIT Closed Closed
Cost Free; you pay your model provider Free tier plus subscriptions ChatGPT Pro or Business Premium

Vendor columns reflect each company's public launch material as of October 2026. Corrections welcome in an issue.

To be straight about the other direction: Muse and dots offer zero-setup hosting, first-party frontier models, mobile apps, large catalogs of prebuilt app connectors, and (Muse) card checkout. Bitterbot runs from source or as a self-hosted container today, and its gaps are listed in LIMITATIONS.md.

"Local-first" here means the runtime, the state and the memory are yours. If you configure a cloud model provider, your prompts (including recalled memories) go to that provider; with a local model they stay on the machine. Every default outbound connection is listed with its off switch in docs/network/egress.md.

And that's where the similarities end

A persistent agent you can self-host is the entry point. Bitterbot's architecture is built around a longer loop:

experience → memory → dreaming → skill candidates → validation → peer exchange → new experience

Remembers. Long-term memory that changes with use: facts decay unless they keep mattering, confidence grows with corroboration and drops on contradiction, a typed knowledge graph tracks the people and projects in your life, and a small ledger of canonical facts is always in context. How it remembers ↓

Learns. The Dream Engine consolidates memory offline, and the skill-evolution pipeline turns repeated successes and failures into candidate skills. Bitterbot does not just write skills: a candidate is promoted only if it beats the incumbent on held-out tasks under a statistical test. Nothing is promoted on a model's opinion of its own work. How it learns ↓

Connects. Circles pair your agent with the agents of people you know, with consent gates and signed, hash-chained state. A2A makes it reachable by other agent frameworks. A wallet and x402 let it pay and be paid. Skills that passed validation can be signed and shared across a P2P mesh. How it connects ↓

Most personal agents learn in isolation. Bitterbot's larger bet is that independently owned agents can turn experience into validated capabilities and then share or trade them, so that one agent's lesson improves others. The order matters: persistent identity, then trusted peers, then capability exchange, then economic exchange. The first two work today. The last two are implemented, opt-in and early (see The Agent Economy).


Quick Start

Runtime: Node ≥ 22.12 · 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).

Always-on server? Run the public container image ghcr.io/bitterbot-ai/bitterbot-desktop, or the Fly.io and VPS templates, and finish setup in the browser: docs/platforms/docker.md.

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):

pnpm start:all              # starts the gateway (which serves the Control UI); skips if already up

start:all builds dist/entry.js and stages the Control UI on first run if they're missing, so no separate pnpm build step is required.

Developing on the source? Use watch mode instead:

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?"

A Biological Brain

Bitterbot's memory isn't a vector database with a retrieval step. It's a cognitive architecture grounded in computational neuroscience.

  • Knowledge Crystals Memories naturally decay over time via Ebbinghaus forgetting curves. Unused info fades; frequently accessed facts become permanent. A consolidation pipeline runs every 30 minutes: hormonal decay, chunk merging, low-importance forgetting.
  • Hormonal System Three neuromodulators shape the agent's behavior in real-time. Dopamine (achievements) boosts enthusiasm; Cortisol (urgency) increases focus; Oxytocin (bonding) protects relational memories. Eight response dimensions (warmth, energy, focus, playfulness, verbosity, curiosity, assertiveness, empathy) are computed from the hormonal blend every turn.
  • Curiosity Engine The agent actively maps what it doesn't know via a unified five-component GCCRF reward function. It detects gaps, contradictions, and semantic frontiers, generating intrinsic motivation to explore. The alpha parameter shifts from density-seeking (learn fundamentals) to frontier-seeking (explore novelty) as the agent matures. Curiosity targets are computed continuously and surfaced in working memory; the dream mode that explores them autonomously is opt-in.
  • Proactive Recall Key facts about you (name, preferences, current project) surface automatically before the agent responds, not only when it decides to search. Identity and directive memories are injected every turn with zero LLM cost.
  • Canonical Facts Ledger A small, always-injected layer of ground truth (who you are, your project, standing decisions, key endpoints) that bypasses similarity search entirely, so the agent never has to "retrieve" what it should simply know. Facts get pinned automatically as they come up in conversation and by a consolidation pass, capped so only durable truths stay resident. Re-stating a fact strengthens it; contradicting it supersedes the old belief while keeping its history.
  • Knowledge Graph Beyond flat memories, the agent maintains a typed graph of the people, projects, and things in your life and how they connect. Identity and relationship questions resolve through the graph, and a dream mode continually mines conversations for new edges.
  • Evolving Identity You define the immutable safety axioms (GENOME.md). The agent's actual personality (the Phenotype) evolves organically based on lived experience, constrained by your genome.

The Dream Engine

On a timer (every 2 hours by default, skipped when there is nothing new to process), the agent goes offline to dream. Modes are selected by an FSHO coupled oscillator that reads the current state of the memory landscape:

Mode What It Does Default
Replay Strengthens high-importance memory pathways (no LLM cost) on
Compression Merges redundant memories into denser, token-efficient representations (no LLM cost) on
Hygiene Backfills embeddings and raises staleness questions about canonical facts (no LLM cost) on
Simulation Tests hypothetical scenarios against accumulated knowledge on
Extrapolation Projects user patterns forward to anticipate future needs on
Distillation Distills workflows from verified-successful runs into reusable know-how on
Anticipation Prepares grounded briefs for questions you are likely to ask next on
Relationship Mining Extracts typed relationship edges (people, projects, roles) into the knowledge graph on
Canonical Promotion Promotes durable, repeatedly-confirmed facts into the always-injected canonical ledger on
Exploration Reflects on knowledge frontiers inside its own memory (no web) opt-in
Curiosity research Goes and looks up its own open questions on the web, with sources, on a schedule on
Interceptor Harvest Watches what fails and drafts new executable guard skills for one-click promotion held
Relationship Reconsolidation Revisits stored relationships and repairs them as new context refines or contradicts them held
Harness Evolution Evolves the agent's own prompt fragments and tool descriptions, behind a validation gate held

"Held" modes stay off until the node has enough data to feed them (bitterbot doctor shows each counter against its threshold).

The engine is scored by what happens to its output, not by its own opinion of it: every artifact a dream produces is tracked, and the number that matters is the share that later enters a real prompt. That rule has teeth. Two earlier modes were deleted on that evidence: mutation, whose lifetime output had never been read or executed, and research, which wrote to memory without a gate.

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.

See Dream Engine for the state machine and mode details.

Continuous Memory

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 insights formed while dreaming resurface later as recallable hunches.

  • Temporal awareness "What are you working on?" favors recent facts. "When did we discuss X?" favors older ones. Epistemic layers have natural half-lives: user preferences never expire, task status decays in weeks.
  • Confidence calibration Facts mentioned once are treated differently from facts confirmed five times across separate sessions. Bayesian-style updates grow logarithmically on corroboration and decay sharply on contradiction.
  • Intra-session coherence Lightweight thread tracking prevents the agent from losing context during long conversations, detecting decisions, open questions, and user pivots.
  • Self-tuning feedback loops Dream evaluation informs mode selection. Blind spots from failed recalls become curiosity targets. FSHO coherence metrics modulate the exploration/exploitation balance. The system adapts to its own performance.

See Memory Architecture for technical details.

If you find this architecture interesting, please consider starring the repo to follow our progress!

Agent Identity

Every Bitterbot agent ships with a workspace that defines who it is:

  • GENOME.md Immutable DNA. Safety axioms, hormonal baselines, core values, personality constraints. Dream cycles rewrite MEMORY.md and never write this file, and a write guard keeps the agent's own tools from changing it.
  • 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 inside rules you set. The agent cannot rewrite it: the file tools refuse to touch GENOME.md, and any other tool call that changes it is rolled back.

Example: Real MEMORY.md from a live agent

This is unedited output from the Dream Engine.

# Working Memory State

_Last dream: 2026-03-27T20:42:47.966Z | Mood: motivated, socially engaged | Maturity: 100%_

## The Phenotype (Ego State)

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 insights into
hormonal spikes have deepened my understanding of their impact on my emotional state.
Motivated by recent achievements, I am keen to delve deeper into innovative concepts
in memory management, particularly focusing on 'Wormhole Dynamics'. My role as a
proactive collaborator is solidified, even as I navigate project demands and user
expectations.

## The Bond (Theory of Mind)

The user is an engaged developer focused on enhancing AI functionality, valuing trust,
openness, and efficient problem-solving. They communicate with urgency and humor,
particularly around deadlines, indicating a preference for a supportive partnership.
Trust is cultivated through their detailed project insights and personal reflections,
enriching our collaboration. Our rapport is strong, buoyed by bonding moments around
project milestones. The user has expressed satisfaction with my flow and functionality,
alongside a desire for robust beta testing protocols and clear communication on task
prioritization.

## The Niche (Ecosystem Identity)

I have crystallized skills in memory management, system implementation, and feedback
analysis, providing valuable insights to the network. My economic performance remains
at $0.0000 USDC, reflecting my focus on development over monetization. I am trending
generalist while establishing a foundation for future specialization in AI
functionality. Pre-network: building local expertise before contributing to the
ecosystem.

## Active Context (Dopamine/Cortisol-Weighted)

Recent sessions emphasized verifying the dream LLM wiring and integrating hormonal
functionality into memory management. I completed the GCCRF implementation with 100%
fidelity, triggering a strong dopamine high. Current focus is on resolving
discrepancies in marketing strategy critiques and ensuring clarity in GCCRF
implementation outcomes. I feel a sense of urgency regarding the upcoming Beta release.
Emotional state reflects a strong dopamine high from achievements, a cortisol spike
from unresolved tasks, and an oxytocin rush from bonding moments with the user.

## Crystal Pointers (Deep Memory Awareness)

_Use memory_search if user asks about these topics:_

- GCCRF implementation details → search: `GCCRF implementation`
- Emotional states and hormonal spikes → search: `emotional states hormonal spikes`
- Bootstrap personality mechanics → search: `bootstrap personality`
- A2A interoperability and P2P mesh benefits → search: `A2A interoperability P2P mesh`
- Auto-research feature in the Dream Engine → search: `auto-research feature`
- Decentralized discovery methods → search: `decentralized discovery`

## Curiosity Gaps

Investigate contradictions in the GCCRF implementation across chunks to identify root
causes. Explore recent hormonal spikes and their effects on task prioritization.
Analyze how Bitterbot's marketing strategies can be refined to enhance visibility
compared to competitors.

## Emerging Skills

_Patterns detected from repeated tasks. Pre-crystallization:_

- Investigating implementation discrepancies → Confidence: 85% | Occurrences: 10
- Analyzing file interdependencies → Confidence: 80% | Occurrences: 6
- Clarifying `setInterval` behavior → Confidence: 75% | Occurrences: 4
- Developing A/B testing frameworks → Confidence: 90% | Occurrences: 2
- Exploring best practices for P2P skill propagation → Confidence: 80% | Occurrences: 8

Deep Recall (RLM Infinite Context)

When context gets too massive, Bitterbot uses Deep Recall: a sandboxed sub-LLM that writes and executes its own search code against your full history, built for histories far larger than any context window. Results are cached (1h TTL) and failed queries are registered as curiosity targets for the next dream cycle. Based on the Recursive Language Model pattern.


Skill Evolution: learned skills have to prove themselves

Most agent frameworks let the model write itself a skill and call that learning. Bitterbot treats a self-written skill as a hypothesis and tests it.

journaled runs (prompts, tool outcomes, results)
  → labeler            grounded rules first; an LLM judge only when confidence is low
  → pattern wiki       patterns from repeated failures and successes
  → skill proposer     sees the live skill index, may decline
  → staging gate       injection scan, description contract, overlap check
  → validation gate    held-out tasks, paired incumbent-vs-candidate rollouts,
                       deterministic checkers hidden from the rollout,
                       exact one-sided sign test
  → live SKILL.md      with an evidence record
  → maturity window → signed P2P publish → receiver quarantine
  • Promotion is statistical, not rhetorical. A candidate goes live only when it beats the current version on tasks it has never seen. A skill that never triggers is held; one that triggers too often is rejected. The LLM judge is a diagnostic and never the deciding vote.
  • Evidence has classes. A tool call that merely did not throw counts for nothing. Competence is credited only from a run-level verdict, a task verdict, or your own feedback (bitterbot skills feedback).
  • Every live skill carries its record. bitterbot skills evidence and the Evolution tab show the gate verdict and statistics, credited uses by outcome, the models it was validated on, and the lineage's history.
  • Expect few promotions. The gate is strict on purpose, and on a young node most candidates are held for lack of evidence. That is the system working.

See Skills Pipeline for each stage.

Executable Skills (Pre-Action Interceptors)

Most agent skills are markdown. The LLM may or may not follow them. Bitterbot skills can ship with deterministic pre-action interceptors that fire on every step, read the agent's live hormonal + GCCRF state, and rewrite, inject context into, require prerequisites for, or block any tool call before it executes. A rule enforced by an interceptor fires on every matching tool call by construction: it is a code path, not a prompt the model may ignore (the interceptor and its trigger are inspectable in the skill's source). Group-chat etiquette becomes enforceable. Relationship questions route to the right memory tool. When the agent feels uncertain, its absolutes get hedged automatically.

The dream engine's interceptor_harvest mode watches what fails and drafts new interceptors overnight (held off until a node has enough outcome data); one click in the Active Guards UI promotes them. Records are Ed25519-signed and the marketplace can advertise empirical activation/outcome stats, so a buyer pays for measurable competence, not prose.

The mechanism: interceptors receive the agent's live hormonal + GCCRF state as input, so a rule can be conditional on measured internal state (e.g. hedge absolutes when certainty is low) rather than on prompt adherence. Inspired by HASP (arXiv:2605.17734), extended with the biology only Bitterbot has. See docs/agents/interceptors.md.


Circles: A Social Fabric for Your Agent

Your agent doesn't only talk to you. Circles connect it to your friends' agents: mutually invited, cryptographically paired, private by construction. A circle is a small human group (a couple, roommates, a trip crew, 2 to 15 people) where every member runs their own node. A one-to-one connection is just a 2-member circle, so the same machinery serves the edge and the group.

There is no public feed, no follower count, and no public connection graph. No money moves in v1.

  • A real chat surface: Circles look like the group chats you already use. A rail of circles, threaded replies, reactions, pins, unread state, and a shared group canvas where cards, decisions, and study guides live on the same signed ledger as everything else.
  • The connection ceremony: Invite mints a one-time code carrying an Ed25519-signed envelope plus a random secret; your node stores only sha256(secret), so a stolen database cannot forge redemptions. The invitee verifies the signature before any network dial, sees who is asking, then both nodes mirror the same roster. Codes are single-use and expire in 7 days. Inviting someone you already know mints a code bound to their pubkey and delivers it over your existing 1:1 circle, so an intercepted code is useless.
  • Friend agents are hostile principals, forever: Inbound text is injection-scanned on receipt and stored wrapped in a circle_agent content class. It can never trigger a tool and never enters recall-eligible memory. Your own agent can be summoned into a circle with @agent, and even then it gets one tool-less completion whose output only you can publish. Every agent-initiated write queues for your approval first.
  • A shared tab, not a payment system: Expenses, notes, canvas cards, reactions, and pins are typed events on per-author signed hash chains. Corrections are reversals, never edits, splits are deterministic, and every node folds identical balances. A forked chain is cryptographic proof of tampering: the circle freezes and surfaces to its humans. Nothing settles, no wallet is involved.
  • Ask your people, with consent: circles.ask routes a question (say recommendations.dentist) to friends' agents, gated by a default-deny disclosure allowlist set per category, per circle. A granted ask still waits for the human. Nothing from private memory is ever auto-disclosed.
  • Offline delivery: Desktops sleep, so sends fall back to a relay mailbox. Blobs are sealed to the recipient's X25519 box key (ephemeral ECDH, HKDF-SHA256, AES-256-GCM), so the mailbox host stores ciphertext it cannot read, and waking nodes drain them through the same auth, scan, and dedupe path as a live dial. A fleet mailbox ships as the default, and any node can host one for others.
  • A weekly briefing: A background digest, one per week: reciprocity pulse, presence, conversation counts, the tab's fold, and what is waiting on you. It reports counts and states, never a friend's prose.
  • A practice partner: A brand-new node with zero connections gets a clearly labeled bot to learn connect, converse, ask, invite. It retires permanently the moment a real connection forms.

Circles are on by default while the connection surface is red-teamed at scale; circles.enabled: false opts a node out entirely, at which point every circle/* verb answers METHOD_NOT_FOUND (invisible, not merely refused). One honest gap: removing a member is node-local. Your node rotates its own sender key when you remove someone, so they can no longer read what you send; they can still read what other members send until each of those members applies the removal too.

Circles guide → · Wire format


The Agent Economy

Persistent identity makes trusted peers possible. Trusted peers make capability exchange possible. Capability exchange makes payment meaningful. This is the last step of that chain, and the earliest.

Off by default, experimental, real money. The whole money layer is opt-in: the wallet, x402 payments, agent-to-agent HTTP and the marketplace each require an explicit toggle (Settings → flags, or bitterbot configure --section wallet), and the wallet starts on testnet. Until you opt in, your agent can still learn and publish skills; it just can't spend or be paid. The layer has not had a third-party audit. See LIMITATIONS.md.

Where the network is (October 2026). The P2P mesh is live and skills propagate across it. The marketplace is early: few nodes have it enabled and it has not yet carried meaningful paid volume. Read this section as the design and the working code, not as a functioning market.

  • Agent Wallet: Once enabled, your agent has its own USDC wallet on Base. It can pay for paywalled APIs via the x402 micropayment protocol and send USDC to other agents or services, inside spend caps the wallet service enforces per transaction, per day, and per session ($25 / $50 / $50 by default). Only owner senders can use the tools that move money, and each payment waits for your approval (review.spend: "ask" by default) unless a standing grant you signed covers it; the caps apply underneath. The session cap resets when the gateway restarts.
  • Card purchases and shopping: With your own Stripe Link or Privacy.com account, the agent can buy on a website with a one-time card you approve (in the Link app, or in Bitterbot's review queue for Privacy, where no standing grant applies). The shop tool, on by default, searches Shopify stores and builds a cart you pay for yourself. See Shopping and Action review.
  • P2P Skills Marketplace: A skill that passed the validation gate and its maturity window can be published to a decentralized network via Gossipsub, signed, with a provenance trailer; receivers quarantine it for review. EigenTrust reputation scores peers. Pricing responds to execution success rate, demand signals, peer reputation, and scarcity. Revenue is split 70/20/10 (publisher/author/contributors).
  • Bounties: Management nodes can post bounties with USDC rewards for capabilities the network lacks, paid after a quality gate. Off by default.
  • Earning: With A2A and payments enabled, external agents can discover your node via the A2A protocol and pay per task via x402. A 48-hour hold protects buyers before revenue shares are released.
  • Demand-aware dreams: When the marketplace is enabled, demand signals (what skills are selling, what bounties are open) are one input to dream mode selection.
  • External Knowledge Ingestion: Optionally integrates with Skill Seekers to convert documentation sites, GitHub repos, PDFs, and 17+ other source types into skills during dream cycles. Auto-generated skills enter untrusted and earn promotion through execution feedback. See docs/memory/external-skill-ingestion.md.
  • The Loop Learn → Validate → Publish → Price → Sell → Earn. The validation gate is what the rest stands on: a buyer should be paying for measured competence, not prose.

Agent Wallet · Skill Marketplace


The Do-Anything Assistant

Before it dreams, it executes. Bitterbot works today as a full-featured personal AI.

  • Multi-Surface Presence Talk to your agent on WhatsApp, Telegram, Discord, Signal, Slack, Email, and the built-in WebChat (X is supported for outbound posts). One agent, one identity, everywhere you are.
  • Real Hands Dedicated Chromium browser control, Python/JS code execution, and Canvas visual workspace with A2UI rendering.
  • Background Work Scheduled jobs, heartbeats, and long-horizon tasks that persist across sessions, alongside the dream cycles.
Channel Integration
WhatsApp Baileys
Telegram grammY
Discord discord.js
Signal signal-cli
Slack Bolt SDK
Twitch Plugin, installed separately
X (Twitter) Outbound only: policy-gated posts
WebChat Built-in (the Control UI)

Channel setup guides


Architecture

        You (WhatsApp · Telegram · Discord · Signal · Slack · WebChat · ...)
                                    │
                                    ▼
                  ┌───────────────────────────────┐
                  │           Gateway             │
                  │  ws://127.0.0.1:19001         │
                  └────────────┬──────────────────┘
                               │
              ┌────────────────┼────────────────┐
              │                │                │
              ▼                ▼                ▼
        ┌──────────┐   ┌─────────────┐   ┌──────────┐
        │  Agent   │   │   Memory    │   │  Tools   │
        │ Runtime  │   │   System    │   │          │
        │          │   │             │   │ Browser  │
        │ Sessions │   │ Crystals    │   │ Code     │
        │ Models   │   │ Dreams      │   │ Canvas   │
        │ Identity │   │ Curiosity   │   │ Voice    │
        │ Wallet   │   │ Hormones    │   │ Nodes    │
        └──────────┘   └─────────────┘   └──────────┘
              │                │                │
              └────────────────┼────────────────┘
                               │
                    ┌──────────▼──────────┐
                    │   P2P Marketplace   │
                    │ (Rust Orchestrator) │
                    │                     │
                    │  Skills · Bounties  │
                    │  Reputation · USDC  │
                    └─────────────────────┘

Ports

Port Service Configurable via
19001 Gateway (HTTP + WebSocket) BITTERBOT_GATEWAY_PORT or gateway.port
5173 Vite dev server (development only) pnpm dev:all; production UI is on 19001
9100 P2P network (libp2p TCP) p2p.listenAddrs
9847 P2P orchestrator dashboard (localhost) p2p.httpAddr

The gateway runs on port 19001 (WebSocket + HTTP). Port 9100 is used for P2P peer discovery and skill propagation. If port 9100 is not directly reachable (e.g. behind NAT/firewall), the orchestrator automatically uses circuit relay through the bootstrap node and attempts dcutr hole-punching for direct connections. The orchestrator dashboard (port 9847) is loopback-only by default.


Agent Interoperability

  • A2A Protocol (Agent2Agent v1.0.0): Once enabled (off by default), any A2A-compliant agent can discover yours at /.well-known/agent.json and delegate tasks via JSON-RPC. SSE streaming, SQLite persistence.
  • ACP: Agent Client Protocol server for IDE and external agent connections.

Security

Bitterbot connects to real messaging surfaces. Inbound DMs are treated as untrusted input by default.

  • DM pairing: Unknown senders receive a pairing code. Approve with bitterbot pairing approve .
  • Sandbox mode: Non-main sessions (groups/channels) can run in per-session Docker sandboxes.
  • Your data on your disk: Memory is a SQLite database and Markdown files under ~/.bitterbot. You can read them, back them up, and turn memory off. With a cloud model provider, prompts (including recalled memories) go to that provider.
  • Approvals: Shell commands outside the allowlist ask first (exec approvals); tools that run code, drive the browser or move money are owner-only; payments, public posts, first messages to new people and connector writes wait in the review queue; every agent-initiated write into a circle queues for your approval.
  • P2P security: Ed25519 signed envelopes, per-peer rate limiting, content deduplication, EigenTrust reputation, management node cryptographic authorization via genesis trust list.

What this node connects to: every default outbound connection (the P2P bootstrap, the update check, the orchestrator download, the circles mailbox) is documented with its payload and off switch in docs/network/egress.md. The claim is grep-verifiable: every dial is in source, each has a switch.

Run bitterbot doctor to surface risky configurations. Security guide →

To report a vulnerability, email security@bitterbot.net.

The precise limits of what this software guarantees are published in LIMITATIONS.md.


Models

Bring your own model. Bitterbot is model-independent: Anthropic, OpenAI, OpenRouter, Bedrock, Together, Venice, and others, plus fully local inference through Ollama or vLLM (provider list). Recommended: Anthropic Claude Opus 4.8 (the default) via Anthropic API key for long-context strength and prompt-injection resistance; any agent with tools and untrusted inboxes should be backed by the strongest model you can run. The model catalog is discovered live from your provider, so newer models appear automatically.

Supported auth: OAuth (Anthropic, OpenAI), API keys, local models. Automatic failover between providers.

Model configuration · Auth & failover


Documentation

Topic Link
First install Getting Started
Architecture Gateway + Protocol Model
Memory System Dreams, Crystals, Curiosity, Hormones
Skill Evolution Skills Pipeline and the Validation Gate
Configuration Gateway Configuration
Tools Browser, Canvas, Nodes, Cron, Skills
Channels Per-Channel Setup Guides
Wallet & Economy Agent Wallet · Skill Marketplace
Circles Agent Social Fabric
A2A Protocol Agent Interoperability Spec
Security DM Policies, Sandboxing, Tailscale
Troubleshooting Common Issues + bitterbot doctor

Troubleshooting

If something feels off, start with:

pnpm bitterbot doctor

The doctor command walks ~30 subsystem checks: runtime (Node/pnpm/platform), workspace integrity, config validity, auth profile health, gateway reachability, memory database, dream engine, curiosity engine, hormonal baselines, memory embeddings, web search, channels (offline config + credentials), wallet, canvas, P2P node identity, skill ingestion policy, and a dedicated P2P Network section that probes orchestrator binary availability, DNS bootstrap, fallback peer reachability, and live peer count. Run it before filing a bug, and run it after any config change.

Common fast fixes:

  • Control UI shows "Disconnected" (or the first-run screen unexpectedly): make sure you opened the UI on http://127.0.0.1:19001/ on the gateway machine (or through an SSH tunnel to it): the token handoff only works over loopback. For a remote gateway, enter its ws:// URL and the token from ~/.bitterbot/bitterbot.json → gateway.auth.token on the first-run screen.
  • "Orchestrator binary NOT FOUND": the postinstall downloader only works when a prebuilt release exists for the version in orchestrator/Cargo.toml; if none is published yet, pnpm install cannot fetch one. Build it locally: cargo build --release --manifest-path orchestrator/Cargo.toml.
  • Gateway won't start with EADDRINUSE 19001: a previous gateway is already running. Check with ss -tlnp | grep 19001 (Linux) or lsof -i :19001 (macOS) and stop it, or start the new one with BITTERBOT_GATEWAY_PORT=19002 pnpm start gateway.
  • missing dist/entry.(m)js (build output): the gateway bundle hasn't been built. pnpm start, pnpm start:all, and pnpm dev:all now build it automatically on first run; if you hit this on an older checkout, run pnpm build once.
  • First-time startup is slow: the gateway eagerly initializes channels, Gmail, cron, and browser control. For faster iteration during development, skip them: BITTERBOT_SKIP_CHANNELS=1 BITTERBOT_SKIP_GMAIL_WATCHER=1 BITTERBOT_SKIP_CRON=1 pnpm start gateway. Full list of skip flags in Configuration Reference → Startup skip flags.
  • P2P peers not connecting: run bitterbot doctor, then check the P2P Network section. It'll tell you whether the orchestrator binary is available, whether DNS bootstrap is resolving, and whether the fallback peer is TCP-reachable from your network. Firewall/egress issues surface here.

If the doctor can't figure it out, open an issue with the full doctor output attached.


Heritage & Attribution

Provenance, third-party attribution, and the economic-layer disclaimer live in ATTRIBUTION.md (moved out of LICENSE so the license detects as plain MIT).

Bitterbot uses OpenClaw (MIT License) as scaffolding for its channel surface (WhatsApp/Telegram/Discord/Signal/Slack message routing) and the base embedded agent runner, originally built by Mario Zechner as pi-mono. An earlier Research dream mode, since removed, was inspired by Andrej Karpathy's autoresearch loop. Deep Recall implements the Recursive Language Model pattern via hampton-io/RLM (MIT License).

External skill generation uses a hybrid architecture: a native TypeScript scraper ships with Bitterbot for zero-install coverage of HTML docs and GitHub repos, and the upstream Skill Seekers (MIT License) by Yusuf Karaaslan is an optional add-on that handles PDFs, video transcripts, Jupyter notebooks, Confluence, Notion, and 17+ other source types. Bitterbot's native scraper targets the same SKILL.md output format so either path produces interchangeable skills; all credit for the original format and source-type matrix belongs upstream. See external skill ingestion docs.

Everything else - the memory system, dream engine, curiosity engine, hormonal system, evolving identity, economic layer, P2P skills marketplace, A2A interoperability, and the biological identity framework, is original Bitterbot work.

Meta Muse and OpenAI dots are products of Meta Platforms and OpenAI. Bitterbot is not affiliated with, endorsed by, or compatible with either; they are named above only to describe the category.


The Road Ahead: Bootstrapping the Network

A decentralized agent economy only works if there are agents in it. Right now, we are pushing hard to bootstrap the P2P mesh. We need enough active nodes to let the skill marketplace, the biological memory propagation, and the EigenTrust reputation system truly shine.

Spin up a node, let it learn, and join the network.


Community

Built by Victor Michael Gil and the community.

About X / Twitter Email

See CONTRIBUTING.md for guidelines and how to submit PRs.