ohkariku-boop/Echodot

Echo your voice across every app.

TypeScript

0

11 commits

updated Sep 16, 2026

See the code

README

echodot

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.


Why echodot?

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.

UI Preview

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

  1. Copy a message from Slack / Gmail / LinkedIn / etc.
  2. Press Ctrl+Shift+E (Windows/Linux) or ⌘⇧E (Mac)
  3. Click Load clipboard
  4. (Optional) tweak tone or instruction
  5. Hit Generate Reply
  6. Paste the result back into the original app

Real screenshots will be added once the UI is more polished.
Run npm run tauri dev to see the live interface.


Features (Roadmap)

v0.1 – Core (in progress)

  • 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

Later

  • Voice input
  • Per-app tone rules
  • Skills / custom instructions
  • Better long-term memory
  • Team / enterprise features (optional)

Mobile Strategy (Android & iPhone)

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

Phase 2 – Native apps

  • 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).

Tech options for mobile

ApproachProsCons
FlutterFast cross-platformLarger binary
React NativeShare some frontend codeBridge overhead
Native (Kotlin/Swift)Best performance & UXTwo codebases

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.


Tech Stack

  • 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

Getting Started (Development)

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 dev

Default 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.

Using OpenRouter (cloud models)

  1. Get your own free API key at openrouter.ai/keys
  2. Open echodot → click Settings
  3. Switch provider to OpenRouter (cloud)
  4. Paste your own key
  5. 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.png before building a release (required for system tray support).


Philosophy

  • 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

License

MIT License — see LICENSE


echodot — Echo your voice across every app.

Contributors

EchoDot

10 commits

ohkariku-boop

1 commits

ohkariku-boop/Echodot

Echo your voice across every app.

TypeScript

0

11 commits

updated Sep 16, 2026

See the code

README

echodot

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.


Why echodot?

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.

UI Preview

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

  1. Copy a message from Slack / Gmail / LinkedIn / etc.
  2. Press Ctrl+Shift+E (Windows/Linux) or ⌘⇧E (Mac)
  3. Click Load clipboard
  4. (Optional) tweak tone or instruction
  5. Hit Generate Reply
  6. Paste the result back into the original app

Real screenshots will be added once the UI is more polished.
Run npm run tauri dev to see the live interface.


Features (Roadmap)

v0.1 – Core (in progress)

  • 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

Later

  • Voice input
  • Per-app tone rules
  • Skills / custom instructions
  • Better long-term memory
  • Team / enterprise features (optional)

Mobile Strategy (Android & iPhone)

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

Phase 2 – Native apps

  • 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).

Tech options for mobile

ApproachProsCons
FlutterFast cross-platformLarger binary
React NativeShare some frontend codeBridge overhead
Native (Kotlin/Swift)Best performance & UXTwo codebases

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.


Tech Stack

  • 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

Getting Started (Development)

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 dev

Default 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.

Using OpenRouter (cloud models)

  1. Get your own free API key at openrouter.ai/keys
  2. Open echodot → click Settings
  3. Switch provider to OpenRouter (cloud)
  4. Paste your own key
  5. 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.png before building a release (required for system tray support).


Philosophy

  • 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

License

MIT License — see LICENSE


echodot — Echo your voice across every app.

Contributors

EchoDot

10 commits

ohkariku-boop

1 commits

Languages

TypeScript

60.3%

Rust

35.8%

CSS

1.6%

HTML

1.4%