Skip to content

Latest commit

 

History

186 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

⚠️ 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.

Dani Bot

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.

TypeScript React Electron Agents Release pipeline PRs


Desktop installers for macOS, Windows, and Ubuntu: download the latest release, or use the direct per-OS links in Quick start below.


Dani Bot — a Telegram-style chat app where every chat is a real AI agent

Why

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, and grok CLIs 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.1 owns 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.

Features

🧠 Pick a brain per bot

A model picker with a provider rail — Claude and Codex models side by side, defaults marked, unavailable providers dimmed with the reason. Switch a bot's model mid-conversation.

Model picker with provider rail

🖥️ Every bot gets a computer

Open the Computer panel and the bot's cloud desktop spins up on its own — live screen preview while it works, "Open desktop" to take over in your browser, or point the bot at this Mac instead.

Computer panel with live screen preview

🙋 Bots ask before they act

Shell commands, file edits, and questions surface as inline cards — Allow / Deny / answer in chat. A permission broker turns every risky action into a decision you make, for cloud and local computers alike.

Approval and question cards in chat

🔌 Connected apps

A one-click marketplace over Composio Sessions: Gmail, Slack, GitHub, Notion, Linear and hundreds more. OAuth once, and every bot can use them as tools.

Connected apps marketplace

🗂 Manage bots like chats

Right-click any bot: pin, mark unread, edit profile, duplicate, copy conversation ID, hide, delete. It's a messaging app — your agents behave like contacts.

Bot context menu

🔑 Keys once, everything lights up

Paste credentials in App Settings — they persist locally and the provider fleet hot-reloads instantly. Secrets are write-only: the UI only ever sees "configured" flags.

App-level settings with API keys

#️⃣ Channels for every context

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.

📦 Install a complete team from one Markdown file

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.

🎧 Bots that talk back

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.

How it works

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 · …")]
Loading
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.

Orchestrate Dani Bot over MCP

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.

Quick start

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 | sh

Windows (PowerShell):

irm https://raw.githubusercontent.com/somdipto/dani-desktop/prod/install.ps1 | iex

The 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 running

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

Desktop capability status

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 and webhook triggers

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.

Uninstall

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.

Status

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.

License

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.

About

DANI Desktop — interface exactly as grokbot with unified DANI CLI as harness

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages