IDE-style inline autocomplete for your macOS terminal.
An open-source, Fig-style completion engine for zsh, bash & fish.
English · 简体中文
Easy Complete is a macOS terminal autocomplete app — IDE-style inline completions for your shell, rendered in a native overlay window that follows your cursor. It is a local-first terminal completion engine focused purely on autocomplete — a lightweight, fully local alternative to Fig.
You get fish-shell-style suggestions for hundreds of CLIs (git, npm, docker,
cargo, …): flags, subcommands, file paths, and arguments, completed as you type.
Autocomplete runs fully on-device — no account, no cloud calls, no AI requests, and
your commands never leave your Mac. The app collects anonymous usage statistics
(app opens, daily completion counts — never command content), which you can disable
any time with ec telemetry disable. See the Privacy page
for the full list of what is and isn't collected.
Platform: macOS only. The published DMG is Apple Silicon / ARM64 only.
Install Easy Complete with one command:
brew install --cask chen86860/tap/easy-completeThen launch Easy Complete from /Applications, grant Accessibility
permission when prompted, and reload your shell:
exec $SHELLOn first launch, Easy Complete sets up the bundled CLI binaries, shell integration, input method, and login startup entries. To verify the installation, run:
ec doctorDownload the latest Apple Silicon DMG:
Download latest DMG · All releases
Then:
-
Open
Easy-Complete-arm64.dmg. -
Drag Easy Complete.app into
/Applications. -
Launch Easy Complete from
/Applications. -
Grant Accessibility permission when prompted.
-
Reload your shell:
exec $SHELL
To verify the installation, run:
ec doctorFor development, or if you need to build locally, clone the repository and run the installer:
git clone https://github.com/chen86860/easy-complete.git
cd easy-complete
./install.shThe source installer will:
- Build the Rust binaries and the TypeScript frontend.
- Assemble
Easy Complete.appand copy it to/Applications. - Symlink the
ecandectermCLIs into~/.local/bin. - Let you enable Launch at Login from Settings (a system Login Item on macOS 13+, with a LaunchAgent fallback on macOS 12).
- Set up shell integration and register the input method.
- Prompt you to grant Accessibility permission (required — see below).
When it finishes, reload your shell:
exec $SHELLEasy Complete positions the completion popup relative to your focused terminal window, which requires the macOS Accessibility permission. The installer triggers the system prompt automatically; approve Easy Complete in:
System Settings → Privacy & Security → Accessibility
If completions never appear, this is almost always the cause. Re-trigger the prompt with:
ec debug prompt-accessibilityOnce installed and granted permission, just start typing in any supported terminal — suggestions appear inline as you type.
| Key | Action |
|---|---|
↑ / ↓ |
Move through suggestions |
⇥ (Tab) / → |
Accept the highlighted suggestion |
Esc |
Dismiss the popup |
The settings & onboarding dashboard is available from the Easy Complete menu bar icon (system tray).
Useful CLI commands:
ec doctor # diagnose common problems
ec diagnostic # print environment / integration status
ec integrations install input-method # (re)register the macOS input method
ec settings list # view settings
ec settings <key> <value> # change a settingMost terminals work out of the box via the PTY integration — including iTerm2, Apple Terminal, VS Code, Cursor, ChatGPT (Codex), and JetBrains IDE terminals. Terminals that bypass the standard PTY path (Ghostty, Kitty, WezTerm, Zed, Alacritty, Otty) additionally rely on the bundled input method for cursor tracking — this is registered automatically during install.
./scripts/uninstall.shThis removes the app bundle, CLI symlinks, LaunchAgent, input method, shell integration, and all application data. It surgically removes only Easy Complete's own input source from the system preferences (your other keyboard layouts and input methods are left untouched).
Easy Complete runs as three cooperating native processes that talk over Unix domain sockets (Protobuf messages):
| Binary | Crate | Role |
|---|---|---|
easy-complete |
fig_desktop |
Native app host — owns the autocomplete overlay and dashboard (React apps in wry WebViews), system tray, and window management |
ecterm |
figterm |
Pseudoterminal between your shell and terminal emulator; intercepts the shell edit buffer to drive completions |
ec |
ec_cli |
CLI entry point — setup, integrations, diagnostic, settings, and more |
Shell hooks (.zshrc, .bashrc, fish config) report shell state — CWD, command text,
cursor position — back to ecterm on every prompt and keystroke. On macOS, the
fig_input_method helper app reports caret position for terminals that bypass the PTY.
Identifiers
- App bundle ID:
dev.emmmm.easy-complete - Input method bundle ID:
dev.emmmm.easy-complete.inputmethod - App bundle:
/Applications/Easy Complete.app
- Rust
1.87.0(pinned inrust-toolchain.toml), edition 2024 - Node
>=22.13 <23, pnpm11.13 - Turborepo for the TypeScript build graph
# Build all release binaries
cargo build --release -p fig_desktop -p figterm -p ec_cli -p fig_input_method
# Run a single crate in dev mode
cargo run --bin ec -- <subcommand>
cargo run --bin easy-complete
cargo clippy --locked --workspace --color always -- -D warnings # lint (CI: -D warnings)
cargo fmt # format
cargo test -p <crate_name> # test a cratepnpm turbo build --filter="./packages/*" # build all packages
pnpm dev:autocomplete # watch the autocomplete UI (port 3124)
pnpm lint # lint
pnpm test # run VitestIn dev, Vite serves the WebView UIs on localhost and fig_desktop connects to those
instead of the bundled Contents/Resources/.
| Crate | Role |
|---|---|
fig_desktop |
Native app host: windowing (tao), WebView (wry), system tray |
figterm |
PTY interceptor, shell edit-buffer tracking |
ec_cli |
CLI crate, providing the ec binary and all its subcommands |
fig_input_method |
macOS input method helper (cursor tracking) |
fig_integrations |
Shell/terminal/editor integration install logic |
fig_ipc / fig_proto |
Unix-socket IPC primitives & generated Protobuf types |
| Package | Role |
|---|---|
autocomplete-app |
Autocomplete overlay React UI |
dashboard-app |
Settings / onboarding React UI |
autocomplete-parser |
CLI spec parser, suggestion generation |
shell-parser |
Shell command-line tokenizer |
api-bindings |
Generated TS Protobuf IPC bindings |
Licensed under the MIT License. Easy Complete is based on the upstream Amazon Q Developer CLI; its original copyright notice is retained in LICENSE. Third-party copyright and license terms are collected in THIRD_PARTY_NOTICES.txt.

