Open-source personal AI agents that work on their own, on their own computers. Mac app, OpenAI + Composio.
TypeScript
69
4 commits
updated Sep 30, 2026
OpenAI launched Dots on September 29, personal agents that keep working in the background on their own computers, but you need ChatGPT Pro or Business Premium to use them. Open Dot is an open source version that runs on your own Mac with your own OpenAI key, or with open models like Kimi, DeepSeek and Qwen through OpenRouter.
Open Dot is a desktop app. The window runs its own local server, and closing the window keeps your dots working in the background until you quit with ⌘Q.
pnpm install
pnpm desktop:build # makes dist/Open Dot-<version>-arm64.dmg
The build isn't notarized yet, so the first time you open it, right-click the app and choose Open.
Then in Settings:
Your data stays in ~/Library/Application Support/Open Dot.
You'll need Node 22 or newer, pnpm and Google Chrome (Playwright's Chromium works if Chrome isn't installed).
cp .env.example .env.local # add OPENAI_API_KEY, or paste it in Settings later
pnpm install
npx playwright install chromium
pnpm dev # http://localhost:3100
pnpm desktop:dev # optional, opens the desktop window on top of pnpm dev
In development everything is stored in .data/ in the project folder.
| Env var | Default | What it does |
|---|---|---|
OPENAI_API_KEY | none | Your OpenAI key, unless you paste it in Settings |
OPENROUTER_API_KEY | none | Open models through OpenRouter, unless you paste the key in Settings |
COMPOSIO_API_KEY | none | A Composio project key for triggers, unless you paste it in Settings |
DOTS_MODEL | best one your key can use, e.g. gpt-5.5 | Main model for the dots (Responses API) |
DOTS_REVIEW_MODEL | gpt-5.4-mini | Checks actions against your rules and names chats |
DOTS_VOICE_MODEL | gpt-realtime-2.1 | Voice calls |
DOTS_COMPUTER_TOOL | computer | computer lets the model see and click the screen, off limits it to opening pages and reading them |
E2B_API_KEY | none | Cloud computers, unless you paste the key in Settings |
DOTS_COMPUTER | picked automatically | Force cloud, docker or local |
DOTS_BOX_IMAGE | node:22-bookworm | Container image when dots run in Docker |
DOTS_PUBLIC_URL | http://localhost:3100 | Where the app is served, used for the Composio sign-in redirect |
DOTS_DATA_DIR | .data/ | Where chats, the password vault, browser profiles and workspaces are kept |
electron/main.mjs the Mac app: starts the server, opens the window, sends links to your browser
scripts/desktop-*.mjs packs the Next.js server into the app
src/server/
agent/runtime.ts the agent loop: streaming Responses API, a thread per chat,
approval cards that pause and resume a run, pause and stop
agent/tools.ts the dot's tools and how risky each one is
agent/review.ts checks an action against your rules
agent/prompt.ts the system prompt, rebuilt every turn from rules, memory, skills and routines
agent/openrouter.ts open models through OpenRouter, which keeps no history, so the app keeps it per chat
computer/ one interface over E2B cloud computers, Docker and local folders
computer/browser.ts each dot's Chrome profile, computer-use actions, the live view you can take over
composio.ts Composio sign-in and app connections
triggers.ts Composio triggers and the live stream of their events
voice.ts voice calls (OpenAI Realtime)
vault.ts the encrypted password store
scheduler.ts routines
repo.ts, db.ts SQLite (node:sqlite)
src/app/api/events one stream of live updates to the window
src/lib/store.ts the window's state, read with useSyncExternalStore
The dots use OpenAI's built-in web_search and computer tools, or OpenRouter's web search on open models. Everything else is a function tool, so any action can go through your rules first.
OpenAI (GPT-5.5 through the Responses API, Realtime for voice, computer use), OpenRouter for open models, Composio, Next.js, Electron, Playwright with your installed Chrome, E2B and SQLite.
TypeScript
94.6%
JavaScript
4.0%
CSS
1.5%
Open-source personal AI agents that work on their own, on their own computers. Mac app, OpenAI + Composio.
TypeScript
69
4 commits
updated Sep 30, 2026
OpenAI launched Dots on September 29, personal agents that keep working in the background on their own computers, but you need ChatGPT Pro or Business Premium to use them. Open Dot is an open source version that runs on your own Mac with your own OpenAI key, or with open models like Kimi, DeepSeek and Qwen through OpenRouter.
Open Dot is a desktop app. The window runs its own local server, and closing the window keeps your dots working in the background until you quit with ⌘Q.
pnpm install
pnpm desktop:build # makes dist/Open Dot-<version>-arm64.dmg
The build isn't notarized yet, so the first time you open it, right-click the app and choose Open.
Then in Settings:
Your data stays in ~/Library/Application Support/Open Dot.
You'll need Node 22 or newer, pnpm and Google Chrome (Playwright's Chromium works if Chrome isn't installed).
cp .env.example .env.local # add OPENAI_API_KEY, or paste it in Settings later
pnpm install
npx playwright install chromium
pnpm dev # http://localhost:3100
pnpm desktop:dev # optional, opens the desktop window on top of pnpm dev
In development everything is stored in .data/ in the project folder.
| Env var | Default | What it does |
|---|---|---|
OPENAI_API_KEY | none | Your OpenAI key, unless you paste it in Settings |
OPENROUTER_API_KEY | none | Open models through OpenRouter, unless you paste the key in Settings |
COMPOSIO_API_KEY | none | A Composio project key for triggers, unless you paste it in Settings |
DOTS_MODEL | best one your key can use, e.g. gpt-5.5 | Main model for the dots (Responses API) |
DOTS_REVIEW_MODEL | gpt-5.4-mini | Checks actions against your rules and names chats |
DOTS_VOICE_MODEL | gpt-realtime-2.1 | Voice calls |
DOTS_COMPUTER_TOOL | computer | computer lets the model see and click the screen, off limits it to opening pages and reading them |
E2B_API_KEY | none | Cloud computers, unless you paste the key in Settings |
DOTS_COMPUTER | picked automatically | Force cloud, docker or local |
DOTS_BOX_IMAGE | node:22-bookworm | Container image when dots run in Docker |
DOTS_PUBLIC_URL | http://localhost:3100 | Where the app is served, used for the Composio sign-in redirect |
DOTS_DATA_DIR | .data/ | Where chats, the password vault, browser profiles and workspaces are kept |
electron/main.mjs the Mac app: starts the server, opens the window, sends links to your browser
scripts/desktop-*.mjs packs the Next.js server into the app
src/server/
agent/runtime.ts the agent loop: streaming Responses API, a thread per chat,
approval cards that pause and resume a run, pause and stop
agent/tools.ts the dot's tools and how risky each one is
agent/review.ts checks an action against your rules
agent/prompt.ts the system prompt, rebuilt every turn from rules, memory, skills and routines
agent/openrouter.ts open models through OpenRouter, which keeps no history, so the app keeps it per chat
computer/ one interface over E2B cloud computers, Docker and local folders
computer/browser.ts each dot's Chrome profile, computer-use actions, the live view you can take over
composio.ts Composio sign-in and app connections
triggers.ts Composio triggers and the live stream of their events
voice.ts voice calls (OpenAI Realtime)
vault.ts the encrypted password store
scheduler.ts routines
repo.ts, db.ts SQLite (node:sqlite)
src/app/api/events one stream of live updates to the window
src/lib/store.ts the window's state, read with useSyncExternalStore
The dots use OpenAI's built-in web_search and computer tools, or OpenRouter's web search on open models. Everything else is a function tool, so any action can go through your rules first.
OpenAI (GPT-5.5 through the Responses API, Realtime for voice, computer use), OpenRouter for open models, Composio, Next.js, Electron, Playwright with your installed Chrome, E2B and SQLite.
TypeScript
94.6%
JavaScript
4.0%
CSS
1.5%