Echo is now refactored into an Electron architecture with explicit main / preload / renderer boundaries.
- Global shortcut registration (
Command+Kby default) - Overlay window near cursor with remembered window position
- Dashboard window with
Home / History / Commands / Settings - Codex runtime via persistent
codex app-serverJSON-RPC session - Streaming output, cancel flow, timeout/reset handling
- Slash command normalization and prompt interpolation (
{{input}}) - History retention policy and token summary
- Whisper voice input (set OpenAI API key in Settings, or via
OPENAI_API_KEY) - Secure preload bridge (
contextIsolation: true,nodeIntegration: false)
src/main: system integration and Electron servicessrc/preload: IPC whitelist API exposed to renderersrc/renderer: overlay + dashboard UIsrc/shared: shared domain logic and IPC contractsTests/unit: unit tests for core domain rules
pnpm install
pnpm run devOpen Dashboard -> Settings -> API Key to set your OpenAI API key. You can also use env fallback:
export OPENAI_API_KEY="sk-..."Voice shortcuts:
Command + K: open/close input overlayCommand + Shift + K: start/stop voice dictation that inserts text into the focused field
pnpm run build# current OS default target
pnpm run dist
# platform-specific targets
pnpm run dist:mac
pnpm run dist:win
pnpm run dist:linuxPackaged artifacts are generated under release/.
pnpm run storybookBuild static Storybook site:
pnpm run build-storybookpnpm testpnpm run lint
pnpm run lint:fixpnpm run format:check
pnpm run formathusky runs lint-staged on staged files during git commit.
pnpm run lint-staged