⚠️ No affiliation with any cryptocurrency. Dani Bot has no token. Any coin using the Dani Bot name is not created, endorsed, or affiliated with this project or its maintainer. I have received no tokens, payment, or allocation from anyone, and I will not be endorsing any token.
Your own team of AI bots, in a chat app.
Bring-your-own-agent, local-first, on the models you already have.
Every bot in the sidebar is a real agent — Claude or Codex running locally under the hood — with its own personality, its own model, its own cloud computer, and its own connected apps. Talk to them like contacts. Watch them work. Approve what matters.
Desktop installers for macOS, Windows, and Ubuntu: download the latest release, or use the direct per-OS links in Quick start below.
One assistant in one box is the wrong shape for agents. Dani Bot is a messaging app for agents — a roster of bots you chat with, each with its own personality, memory of its thread, model, computer, and apps — rebuilt open, local-first, and on the agents you already have:
- Bring your own agents. Bots run on the
claude,codex, andgrokCLIs installed on your own machine — your existing logins and subscriptions, no new accounts, no proxy in the middle. Point any engine at a custom CLI binary (a versioned build or wrapper) in Settings → Engines. - Local first. One small harness server on
127.0.0.1owns every agent process. Transcripts, keys, and events live in~/.danibot, not a cloud. - Agents with hands. Each bot can use a cloud Linux desktop, an isolated Local VM, or—where the platform safety boundary is currently certified—your own computer, plus 500+ apps through Composio. Host control is available on macOS and Ubuntu Xorg after explicit opt-in. Ubuntu Wayland host control remains disabled while issue #345 is resolved.
Keep Work, Personal, and each project in separate channels without cloning your bots. Every channel has its own transcript, shared instructions, working folder, responder rules, and editable bot roster. File a channel and its bots under a named context, then rename it or change its members whenever the team changes.
Browse outcome-driven teams on BotMRR, then choose Add to Dani Bot. The app
opens a review screen before creating the bots, Chief of Staff, channels, playbooks, connector checklist,
and suggested routines. You can also import the same .md file from disk or paste its public GitHub URL
in Teams → Import.
The format stays portable: Dani Bot reads the structured YAML frontmatter for a reliable one-click install, while Grok, Claude, ChatGPT, and people can follow the ordinary Markdown playbook. Connections remain off until you approve them, routines arrive paused, and packages never carry credentials, conversations, permissions, memory, or computer access. Browse the open-source playbook repository or read its portable format.
Press the speaker on any reply, or switch a bot to read its answers out as they land — so you can listen to what ran overnight while you make breakfast. Hit call and it's a conversation: it hears you, tells you what it's doing while it works, and asks for approvals out loud.
Bring your own ElevenLabs key — paste it once in App Settings, pick a voice, and every bot can talk. Give a bot its own voice and a channel stops sounding like one person.
Also in the box: streaming replies with tool-run activity chips · native macOS dictation from the composer mic (on-device Apple speech recognition — desktop app) · cursor mascots with role-aware expressions · screenshots of the bot's work folded into the transcript.
Two processes. The app holds no transports of its own — it sends typed commands over HTTP and folds one SSE event stream into state. The harness server owns every agent process and normalizes each provider's native protocol into one canonical runtime event stream (logged per-thread as NDJSON).
flowchart LR
subgraph app ["App — React + Tailwind (5199)"]
UI[Chat UI · model picker · computer panel]
end
subgraph server ["Harness server (127.0.0.1:8799)"]
REG[Driver registry] --> BUS[Event bus → SSE]
BROKER[Permission broker]
end
subgraph agents ["Agents on your computer"]
CL[claude CLI]
CX[codex CLI]
GR[grok CLI]
end
UI -- "HTTP commands" --> server
BUS -- "one SSE stream" --> UI
REG --> CL & CX & GR
CL & CX & GR -- "permission requests" --> BROKER
server -- "Box API" --> BOX[("Cloud computer<br/>box.ascii.dev")]
server -- "Composio Session" --> APPS[("Gmail · Slack · GitHub · …")]
| Layer | Where | What it does |
|---|---|---|
| Drivers | server/drivers/ |
One per provider: Claude, Codex, and Grok Build over their local CLIs (stream-JSON / JSON-RPC / ACP), plus a cloud-computer agent. Unknown drivers degrade to "unavailable", never crash the fleet. |
| Harness | server/harness/ |
Registry (configs → live instances) and the fan-in event bus every client folds. |
| API | server/index.ts |
Bots, turns, approvals, model catalog, computer lifecycle, connectors, config — HTTP + SSE. |
| Voice | server/tts/ |
ElevenLabs, bring your own key. Runs on the harness so the key never reaches the UI; markdown is rewritten into something worth hearing before it is spoken. |
| App | src/ |
The chat shell. Server-backed store, one reducer, zero client-side transports. |
| Desktop | electron/ |
macOS, Windows, and Ubuntu shells with an embedded harness and platform capabilities; Apple speech stays macOS-only, Ubuntu Xorg has opt-in local control, and Wayland remains fail-closed. |
Dani Bot ships a stdio MCP server for external clients such as Claude Desktop and Cursor. It exposes a deliberately bounded team control plane: inspect bots and channels, read/search compact transcript pages, create and configure bots/channels/tasks, send work, wait for completion, switch models, and interrupt turns. It does not expose approval grants, deletion, arbitrary settings, credentials, or computer lifecycle.
See MCP server setup and tool reference.
Installers - one download per desktop OS (stable names, always resolving to the newest release):
| Platform | Download |
|---|---|
| macOS, Apple silicon | DaniBot-Silicon.dmg |
| macOS, Intel | DaniBot-Intel.dmg |
| Windows | DaniBot-setup.exe |
| Ubuntu, AppImage | DaniBot.AppImage |
| Ubuntu, .deb | danibot-amd64.deb |
The Windows installer is unsigned, so SmartScreen shows an "unknown publisher" prompt on first run. First launch opens the setup wizard on every platform.
See the Ubuntu Desktop guide for platform notes and source-build prerequisites. Any desktop build can also pair as a client to another Windows, macOS, or Ubuntu host over Tailscale; see desktop-to-desktop companion mode.
One command, from nothing to a running app (idempotent - safe to re-run; prints a verified success check):
macOS / Ubuntu:
curl -fsSL https://raw.githubusercontent.com/somdipto/dani-desktop/prod/install.sh | shWindows (PowerShell):
irm https://raw.githubusercontent.com/somdipto/dani-desktop/prod/install.ps1 | iexThe script clones (or reuses) the repo, installs dependencies, packages the
desktop app for your platform, and prints the verified installer path and how
to launch it. First launch opens the setup wizard. These exact commands are
tested against install.sh / install.ps1 in CI, so this block cannot drift
from the scripts it documents.
Or step by step, from source:
git clone https://github.com/somdipto/dani-desktop && cd dani-desktop
pnpm install
pnpm dev:server # harness server → 127.0.0.1:8799
pnpm dev # app → http://127.0.0.1:5199
pnpm dev:desktop # Electron shell; keep the two commands above runningRequirements: macOS, Windows, or Ubuntu 24.04 x64, Node 24+, pnpm, and at least one agent CLI — claude,
codex, or grok — installed and logged in. They appear
in the model picker automatically.
Package the desktop application:
pnpm package:mac # macOS: DMG + ZIP; requires Swift/Xcode tools
pnpm package:win # Windows: installer + ZIP
pnpm package:linux # Ubuntu x64: .deb + AppImage + verified CUA runtime| Capability | macOS | Ubuntu 24.04 Xorg | Ubuntu 24.04 Wayland |
|---|---|---|---|
| Packaged app, embedded harness, local agent CLIs | Supported | Beta | Beta |
| Composio and Box/cloud computers | Supported | Beta | Beta |
| Explicit preview-only local screen capture | Supported | Beta | Beta |
| Bot control of this computer | Supported | Beta, explicit opt-in | Disabled: Wayland safety gate |
| Native on-device dictation | Supported | Planned | Planned |
The Linux preview is user-initiated and never enables local bot control or Auto routing. On Xorg, the reviewed Cua Driver 0.19.3 runtime starts only after explicit opt-in and without its full-screen cursor overlay. On Wayland the app never starts it and clears legacy opt-ins while that real-seat safety gate remains unresolved. Chat, preview, Cloud, and Local VM remain available on both sessions. See the Ubuntu Desktop guide and tracking issues #29, #345, and #113.
The Linux packager downloads only the tag-pinned upstream archive during the build, verifies its size, SHA-256,
complete member allowlist, and inner executable hashes, then packages only the CLI and cursor-theme sidecar. The
installed app never downloads or self-updates native automation code. Cua's MIT notice, Inter's SIL OFL, a generated
third-party license report, and a CycloneDX inventory ship with the runtime. See
third_party/cua-driver/ for the reviewed provenance record.
These credentials are optional — local chat works without them. Paste a key once in App Settings (gear in the sidebar footer) when you want to enable its integration:
| Credential | What it enables | Where to get it |
|---|---|---|
Composio project key (ak_…) |
Connect Gmail, GitHub, Slack, Notion, and other apps to your bots | Dani Bot Composio setup |
| Box API key | Give bots an isolated remote Linux computer with a desktop and terminal | Box API key guide |
| ElevenLabs key | Read replies aloud, and call your bots | ElevenLabs API keys |
Composio and Box are third-party services with their own accounts and terms. Box is a paid service after its trial, and using a cloud computer may incur charges.
pnpm typecheck # app + server
pnpm test # unit, driver, API, and desktop capability tests
pnpm build # typecheck + production build
pnpm check:electron # syntax-check Electron main/preload files
pnpm package:win # Windows installer + zip → release/
pnpm package:linux # Ubuntu x64 .deb + AppImage → release/Routines can run once, on selected weekdays, or every 5–1,440 minutes, using either a bot's configured model/computer or the Cloud VM runner. Interval schedules stay aligned to their chosen start time and skip an occurrence when the previous run is still active, so slow work cannot build an unbounded queue. A separate optional Advanced run limit can safely stop stuck work; no timeout is imposed unless one is chosen. The existing duration field remains calendar/display metadata. Webhook triggers are independent from schedules but reuse the same queued task executor and calendar receipts.
Dani Bot starts a webhook-only receiver on 127.0.0.1:8800 by default (or one port above DANI_PORT).
Set DANI_WEBHOOK_PORT to choose another port. A webhook secret is shown once when the trigger is created
or rotated. Bearer authentication is recommended so the secret stays out of request URLs and most access
logs; a single capability URL remains available for senders that cannot configure headers. The receiver
exposes only /health and secret /hooks/... endpoints; it never exposes the app's broader API.
Dani Bot must remain running to accept a delivery. For public internet delivery, proxy only this
dedicated receiver through a hosted relay or a tool such as Tailscale Funnel.
Uninstalling removes the app completely. The only thing left behind is your data directory, by design:
~/.danibot holds your bots, chats, config, and keys, so a reinstall picks up where you left off. Delete it
too if you want a clean break.
What each platform's uninstall removes, and the one step it cannot do for you:
macOS - move Dani Bot.app to the Trash, then remove the app-support and log folders (macOS has no
uninstaller to do it):
rm -rf "$HOME/Library/Application Support/Dani Bot" "$HOME/Library/Logs/Dani Bot"Windows - uninstall from Settings > Apps. The uninstaller removes the program and the %APPDATA%\Dani Bot
app-data folder (window state, app logs, stored app credentials).
Ubuntu (.deb) - sudo apt remove danibot removes the program, its /usr/bin/danibot link, and its AppArmor
profile. A package manager must not touch home directories, so remove the per-user app data yourself:
rm -rf "$HOME/.config/Dani Bot"The AppImage installs nothing; delete the file and the same ~/.config/Dani Bot folder.
Your data directory is ~/.danibot on every platform (or $DANI_DATA_DIR if you set it). If you upgraded from
OpenMausBot, first launch moves ~/.openmausbot / ~/.opengrokbot into ~/.danibot; when a move is not
possible (different drive, folder busy) the old folder stays behind and can be removed once the new one works.
Early but real — the loop works end to end: message → agent → streamed reply → tools → approvals →
computer use. Installers for macOS, Windows, and Ubuntu 24.04 x64 publish together per release; Ubuntu remains a
beta with the
capability limits above. Rough edges to expect: hosted/mobile connectivity is still being built, and webhook
triggers currently use the local receiver rather than an always-on hosted relay.
Voice needs an ElevenLabs key, and calls are macOS-only for now (they ride the same on-device dictation as
the composer mic) — see docs/voice-mode.md for the design and the known gaps.
Contributions welcome — the driver SPI in server/contracts.ts is deliberately
small; adding a provider is one file in server/drivers/ plus a one-line registration.
No code needed at all for your own engines: any ACP-speaking CLI or OpenAI-compatible endpoint
plugs in through config — see docs/custom-engines.md.
Users can add their own MCP tool servers with zero code via docs/custom-mcp-servers.md.
Apache License 2.0 © 2026 Dani and Dani Bot contributors.
Packaged Cua Driver components retain their upstream MIT, SIL OFL 1.1, MPL-2.0, and other dependency terms;
the corresponding notices, license texts, source locations, and SBOM are in
third_party/cua-driver/ and ship beside the native runtime.
Dani Bot is an independent, open-source project inspired by Grok Bot. It is not affiliated with, endorsed by, or associated with xAI; "Grok" is a trademark of its respective owner.