Cracker is a personal assistant you host yourself. It reads your Gmail and Slack, sends a short brief each morning, and drafts replies that only go out when you press send. Routines and reminders run on a schedule. It works on its own Linux computer with a browser, a shell, MCP servers and skills, and it remembers what you talked about last month.
You talk to it from the web, or from the included iOS and macOS apps. The interface is in Korean.
Feed · Conversation · Tasks · Schedules. Screenshots use made-up sample data.
- One ongoing conversation. Ask in plain language, attach files and come back later. Earlier conversations stay searchable.
- Feed. What needs you comes first, then work in progress, then what has already been done.
- Watching Gmail and Slack. Spots requests, deadlines, promises you made and replies you're still waiting on. An item stays open until there's evidence it was handled.
- Morning brief. One short summary a day, timed to when your day usually starts.
- Drafts you approve. Replies are shown as cards. You can send, edit, postpone or dismiss each one, and nothing goes out unless you approve it.
- Routines and reminders. Daily, periodic, deadline-based and one-off work that starts on its own.
- Its own computer. A Linux VM with Chromium, a shell and files. You can watch the screen live or take over control.
- MCP servers and skills. Connect MCP servers and write versioned skills that the assistant can follow and test.
- Memory. Facts are kept with their source, and you can correct or forget them.
- Durable work. Tasks and actions are journaled. Interrupted runs recover, temporary provider errors are retried within limits, and actions that may have side effects are not replayed blindly.
- Your choice of model. OpenAI or Anthropic APIs, or a ChatGPT subscription through a local proxy. A paid API is never used as a silent fallback.
- Web, iOS and macOS. A React web app plus SwiftUI/WebKit shells with native input and push notifications.
The honey saltine is the default. In settings you can change:
- Look: six biscuit shapes (saltine, butter cookie, graham, sandwich, wafer, ring), eight colors, four eye styles, optional blush and an accessory (headphones, beret or bow), with a live preview.
- Persona: the assistant's name, its role and the way it talks. On first run you can start from a preset (a thinking partner, a careful researcher or a hands-on doer) or write your own.
- Instructions: standing guidance that applies to every conversation.
Clients talk only to the control service. It keeps conversations, tasks, schedules and memory in PostgreSQL and hands work to the daemon on the Linux VM. The daemon runs the model loop, uses the browser, shell, MCP servers and skills, and reports results back. See Architecture for the full picture.
Cracker's memory is a tree, because that's how people take notes and think: a topic gets more specific, splits into branches, and links to something else you talked about last week. When you ask something, BM25 and bge-m3 recall candidate topics, Clef picks one and says how sure it is, and a light model steps in only when Clef is unsure. The answering model then reads the original exchanges, not summaries.
Read the design → docs/MEMORY.md
No. And also yes.
I use Cracker every day, and I fix and improve it as I go. Mail watching, the morning brief, routines and the memory tree all run in my own daily work, so most of what you see here is in real use. It is still a personal project, though, not a product: some parts are experimental, and things change quickly.
Treat it as a reference you can read, borrow from and run. Running your own copy will take some work: a PostgreSQL database, a Cloudflare account, an Ubuntu VM for the assistant's computer, your own model provider, and, for the apps, your own Apple and Firebase setup. See current status and limitations and the setup guide before you start.
Checked toolchain: Bun 1.2.10, pnpm 10.33.2 and Node.js 24.7.0. Use PostgreSQL 16+. Desktop execution requires a separate Ubuntu 24.04 VM; the control API and web interface can run locally without starting the daemon.
git clone https://github.com/<you>/autonomous-assistant.git
cd autonomous-assistantpnpm install --frozen-lockfile
cp .env.example .env
# Edit DATABASE_URL in .env for an empty development database.
bun scripts/migrate.ts
bun scripts/bootstrap.ts
pnpm devIn a second terminal:
pnpm --dir apps/web devOpen the URL printed by Vite. Bootstrap writes separate client and VM credentials to .local/connection.json with restrictive file permissions. Use the client credential to establish a browser session; configure the VM credential only on the daemon. Bootstrap refuses to overwrite an existing connection file.
Configure a provider available to your account. API and ChatGPT authentication paths are explicit; a paid API is not used as an automatic fallback. Provider availability, OAuth access and model identifiers depend on your account.
pnpm check
pnpm exec tsc --noEmit -p tsconfig.worker.json
pnpm --dir apps/web buildDatabase tests must use a separate disposable database. See development and tests for migration and execution commands. Browser/live probes require their documented fixtures and are not substitutes for physical-device testing.
- Architecture and context lifecycle
- Memory as a tree of thought
- Development and tests
- Cloudflare, Linux and Apple setup
- Error recovery
- Parallel runs
- Apple application build
- Contribution guidelines
Deployment names and identifiers are examples. Supply your own database, Cloudflare resources, credentials, Apple identifiers and Firebase configuration. Private conversation exports, operational evidence, credentials and app binaries are excluded.
| Directory | Responsibility |
|---|---|
apps/web |
React conversation, computer viewer and settings |
apps/apple |
SwiftUI/WebKit shells, native input and notification integration |
services/control |
Hono API, sessions, durable work state and screen signaling |
services/daemon |
Linux execution, provider connections and durable action journal |
packages/context |
Source-backed semantic contexts, bounded retrieval and revisioned reorganization |
packages |
Tools, MCP/skills, artifacts, memory, notifications and provider adapters |
infra |
PostgreSQL migrations, Cloudflare configuration and Linux services |
tests |
Unit, database, protocol and opt-in browser/live scenarios |
Cracker builds on the work of these projects. Thank you to their authors.
- CLIProxyAPI by Luis Pater (MIT): the subscription model proxy. The VM installer downloads its official release binary.
- open-computer-use by Leo (MIT): the desktop control MCP server.
- Playwright MCP (Apache-2.0): browser tools.
Details and other dependency licenses are in THIRD_PARTY_NOTICES.md.
MIT. Dependencies keep their own licenses; see third-party components.





