Echo your voice across every app.

Local-first AI that writes replies in your tone.

Press a hotkey → it reads the context → drafts a reply that sounds like you → pastes it.

Free. Open source. Private by default.

Most AI writing tools force you into their voice or require constant copy-pasting between apps.

echodot lives on your machine, works in any application, and learns how you actually write.

- Works everywhere — No integrations needed. Gmail, Slack, LinkedIn, Discord, Notion, Twitter/X, Outlook, etc.

- Your voice — Learns from your writing samples and preferences.

- Local-first — Runs with Ollama / LM Studio / llama.cpp. Your data stays on your device.

- Optional cloud — Bring your own OpenRouter / OpenAI / Anthropic / Groq key when you want higher quality or speed.

- Zero cost by default — Completely free to use offline.

echodot is a compact dark desktop window designed for speed.

Main screen (ready state)

- Header with title + Settings / Hide buttons

- Status bar showing current state and the global hotkey

- Context box (paste or load from clipboard the message you want to reply to)

- Instruction + Tone fields

- Quick tone preset chips

- Model selector (Ollama models or OpenRouter)

- Large Generate Reply button

After generation

- Status updates to “Done • Copied — paste with Ctrl+V / ⌘V”

- Generated reply appears below

- One-click “Copy again” if needed

- Window can be hidden; the app stays running in the background

Typical flow

- Copy a message from Slack / Gmail / LinkedIn / etc.

- Press Ctrl+Shift+E(Windows/Linux) or⌘⇧E(Mac)

- Click Load clipboard

- (Optional) tweak tone or instruction

- Hit Generate Reply

- Paste the result back into the original app

Real screenshots will be added once the UI is more polished.

Runnpm run tauri devto see the live interface.

- Global hotkey (⌘⇧E / Ctrl+Shift+E)

- Clipboard read / write

- Local model support (Ollama)

- Generate reply flow

- Model selector (auto-detects installed Ollama models)

- Improved prompt engineering

- Streaming generation (token-by-token)

- Persistent settings (tone, instruction, model remembered)

- Tone presets (quick chips + custom)

- Mobile strategy documented (Android + iOS)

- Hide-on-close (window hides, app keeps running)

- Auto-copy on finish (ready to paste immediately)

- Manual Hide button

- OpenRouter cloud support (safe model list)

- Writing samples for personalization

- Provider switcher (Ollama ↔ OpenRouter)

- Full system tray icon (requires app icons)

- Better context capture (accessibility APIs)

- True auto-paste into original app

- Voice input

- Per-app tone rules

- Skills / custom instructions

- Better long-term memory

- Team / enterprise features (optional)

Full desktop-style global hotkeys + screen context are limited on mobile. We will support mobile with adapted experiences:

- Share Sheet / Action Extension: Select text → Share to echodot → get reply suggestions

- Custom Keyboard Extension: echodot appears as a keyboard with one-tap AI replies

- Shared core logic (prompts, tone profiles, model settings) between desktop and mobile

- Android: Kotlin + Jetpack Compose (or Flutter). Accessibility Service for better context where permitted.

- iOS: Swift + SwiftUI. Heavy use of Share Sheet + Keyboard Extension (App Store friendly).

Decision: Desktop remains the priority (best product-market fit). Mobile companions will be added after the desktop core is solid. The same local-first + optional cloud philosophy will apply.

- Desktop: Tauri 2 (Rust) + React + TypeScript + Tailwind

- Local AI: Ollama / LM Studio (OpenAI-compatible)

- Cloud AI: OpenRouter and any OpenAI-compatible provider

- Storage: localStorage (current) → SQLite later

- Mobile (planned): Flutter or native Kotlin/Swift companions

Prerequisites

- Node.js 20+

- Rust

- Ollama (recommended for local use) — e.g. ollama pull llama3.2

git clone https://github.com/ohkariku-boop/Echodot.git

cd Echodot

npm install

npm run tauri devDefault global hotkey: ⌘⇧E (macOS) or Ctrl+Shift+E (Windows/Linux).

Behavior notes:

- Closing the window hides it (app keeps running in the background).

- When generation finishes the reply is auto-copied — just paste with ⌘V / Ctrl+V.

- Use the Hide button to dismiss the window quickly.

- Get your own free API key at openrouter.ai/keys

- Open echodot → click Settings

- Switch provider to OpenRouter (cloud)

- Paste your own key

- Choose a model (the Free Models Router is a good default)

Important: Every user must use their own OpenRouter key.

No API keys are shipped with the app. Keys are stored only locally on the user’s device.

Generate icons with

npm run tauri icon your-icon.pngbefore building a release (required for system tray support).

- Local-first & private by default

- Core features will always remain free and open source

- Commercial options (hosted version, team features, priority support) may come later — but will never remove or cripple the free local version

MIT License — see LICENSE

echodot — Echo your voice across every app.