Repository navigation
Echo v0.1.0-alpha.2 · BYOK, pluggable search, memory profiles
Pre-releaseDownload
| File | What it is |
|---|---|
| Echo-0.1.0-alpha.2-macos.dmg | macOS installer — universal binary (Apple Silicon + Intel), macOS 13+; Echo.app (menu-bar icon, own icon and bundle id) + double-click installer + uninstaller + README (中文/EN) |
| Echo-0.1.0-alpha.2-macos.zip | same payload as a zip, if you prefer |
| echo-assistant-0.1.0-alpha.2.tar.gz | source tarball (any platform, needs Node ≥ 20) |
| SHA256SUMS / SHA256SUMS-macos | checksums — shasum -a 256 -c SHA256SUMS-macos |
The macOS installer puts everything in ~/Library/Application Support/Echo (app + data + logs, all plain files), registers two launchd agents (service + menu-bar icon), asks for your endpoint/key (skippable — there is a browser wizard), and only removes its quarantine flag after asking you. Uninstall = double-click Uninstall Echo.command (it asks before deleting data).
The app is unsigned, so macOS asks once before it can run — right-click → Open, or remove the quarantine flag yourself. For scripted installs: --target DIR --no-launchd --no-open --yes, plus OPENAI_BASE_URL / OPENAI_API_KEY / ECHO_PASSWORD env vars.
Roadmap (including planned computer use): see the repo front page → Roadmap.
What's new in alpha.2 — modular, BYOK-first
Alpha.1 worked, but it showed its author's fingerprints: a vendor gateway baked in as the default, a hard-coded search stack, and no guided setup. Alpha.2 moves all of that into configuration and a first-run wizard, so the same code runs on anyone's endpoint and anyone's search service.
Bring your own everything
- No vendor default.
upstream.baseUrlstarts empty; keys live only indata/echo.env(mode 600) andconfig.jsonrecords which environment variable to read, never a secret. - Six-step onboarding: endpoint preset (OpenAI · Aliyun Bailian · DeepSeek · Moonshot · OpenRouter · Ollama · custom) → test & fetch models → default / utility / image model → memory profile → search chain → permissions (residency,
swiftc, bind, optional password, screen-recording test). - Re-runnable from Settings → 引导与权限; skippable entirely if you prefer editing
data/echo.envyourself.
Search is a chain you configure
none · scrape · gateway · tavily · brave · bocha · searxng · custom — ticked providers are tried in order, and a failure hands off to the next one. Keys come from environment variables named in the provider catalog. The circuit breaker (cool-down after a captcha or repeated failures) is visible in the self-report and in ./bin/echo search.
Memory has profiles
off (stateless) · light (facts only) · standard (facts + Dream + proactivity) · deep (standard + screen awareness). Choosing a profile writes the concrete knobs, so "profile" and "values" can never disagree.
Permissions are documented and checkable
GET /api/permissions reports endpoint status, launchd residency, swiftc, bind address and data directory; POST /api/permissions/screen-test actually attempts a capture to tell you whether Screen Recording is granted. Full guide: docs/permissions.md.
Fixes
- Choosing a memory profile had no effect (the preset patch was merged into the wrong section).
- Stored API keys could not be cleared (
writeEnvValuesskipped empty values;""now means delete). install.shno longer defaults to a specific vendor gateway.- Settings PATCH responses crashed when the onboarding state helper was referenced from module scope.
Verification
tests/selftest.mjs grew a new track (H — modularity & onboarding, 17 checks): provider-catalog completeness, "no vendor default" invariant, onboarding writes keys to echo.env with 0600 and nothing secret into config.json, profile expansion, none actually removing the web tools, and image_gen disappearing when no image model is configured. Offline suite: 69/69.
Install
tar -xzf echo-assistant-0.1.0-alpha.2.tar.gz
cd echo-assistant-0.1.0-alpha.2 && ./install.shThen open http://127.0.0.1:8787 and follow the wizard. Verify the download with:
shasum -a 256 -c SHA256SUMSKnown limitations (unchanged)
Screen Recording must be granted once from the menu-bar icon; scrape search can be rate-limited by its engines (it cools down and hands off); video / ASR / TTS depend on your endpoint exposing them; retrieval is lexical plus an entity graph (no embeddings); interfaces and data formats may still change during alpha — back up data/ before upgrading.
Rebuilt the same day (same version): fixed a self-test assertion that assumed an existing local config — a fresh clone now runs node tests/selftest.mjs to 69/69 — and removed an internal product name from a code comment. No functional change.