Surface parity — CLI ↔ Web ↔ Desktop

eVi has three front-ends over one engine. The CLI is the most complete (it's the admin + scripting surface); the Web UI is chat-centric with a full settings screen; the Desktop app is the Web UI in a native shell (menus, tray, updater, deep links). This table maps every CLI command group to its Web/Desktop equivalent and is honest about what is intentionally CLI-only.

Legend: ✅ first-class · ◐ partial / via a related surface · ⌨️ CLI-only by design (admin/scripting) · ➕ gap worth filling.

CLIWhat it doesWebDesktopNotes
chatinteractive chat✅ main view✅the core loop
runheadless one-shot◐ /api/chat◐scripting; no "run once" button (not needed)
batchmany prompts → JSONL⌨️⌨️batch/scripting
evalprompt→assertion suites✅ settings → Evals✅browse suites/cases + run with per-case PASS/FAIL
ultracodeexhaustive multi-agent pass✅ settings → Ultracode✅/ultra + /effort ultracode in REPL; stages shown in the panel
agentslist subagent profiles◐ used by delegate◐a "profiles" list could live in Dispatch
workflowrun/list/new/show◐ run+list via 🗂 Dispatch◐authoring stays CLI
peerfederation peers (list/add/remove/scan/run)✅ settings → Peers✅live status + LAN scan; /api/federate serves
linkmake evi:// deep linksn/a✅ scheme handlerdesktop opens the links
statslocal usage analytics✅ settings → Usage✅sessions/messages/tokens, roles, top tools, busy days
sessionslist/resume/fork/handoff✅ tabs/history; handoff API✅resume via /?session=
recipesaved multi-turn flows✅ settings → Routes & Recipes✅browse steps + run; also via routine webhook
routinewebhook → recipe◐ /api/routine/{token}◐inbound trigger
styleoutput styles✅ settings (llm.output_style)✅
voiceTTS engine/speak/listen✅ settings → Voice; speak toggle✅
guardrailscontent filter rules✅ settings → Guardrails✅validated guardrails.toml editor + rule summary
hookspath/list/test (match resolution)✅ settings → Hooks✅validated hooks.toml editor; catches event typos
commandlist/new (slash-command scaffold)◐ /help lists; typed in chat◐authoring stays markdown files
keybindingspath/list (effective bindings)n/an/aREPL-only feature
pluginadd/list/remove/search/install✅ settings → Plugins✅list installed, search marketplace, install/remove
skilllist/show/import/remove (incl. Claude skills)◐ used in chat via invoke_skill◐skills load on demand; no manager UI (file/CLI managed)
mcpservers add/remove/enable/list + serve✅ settings → MCP✅manage servers in-app; env vars via CLI/file
modelslist/use/info/pull✅ Model picker + settings✅recommended-pull flow
configshow/path✅ full settings screen✅the settings UI is config
routemulti-model routing✅ settings → Routes & Recipes✅add/list/remove routing rules
syncgit sync of ~/.evi⌨️⌨️machine admin
backupbackup/restore state⌨️⌨️machine admin
calendar/obsidianintegrations◐ settings → Integrations◐
doctordiagnostics✅ Help → Run Diagnostics✅
updateself-updaten/a✅ Help → Check for Updatesdesktop updater
rewindundo file writes✅ rewind dialog✅checkpoints
setupfirst-run wizard◐✅ first-rundesktop onboarding
reviewmulti-agent code review⌨️⌨️dev workflow
finetuneexport training data⌨️⌨️scripting
worktree/profile/schedulerdev/daemon⌨️⌨️admin

In-chat parity (REPL slash commands ↔ web)

Many CLI REPL builtins have a web equivalent or are inherently REPL-only:

REPL /cmdWeb equivalent
/help(slash commands work in the web chat too)
/modelmodel picker chip
/context, /ctxclick the usage chip → breakdown popover
/recentsession tabs
/tools, /notools, /forcetoolsettings → Tools; per-turn via API
/effort, /fast, /json, /schemaper-turn API params (output_schema for /schema)
/auto, /planauto + plan chips
/compactautomatic (config)
/image, /audioattach button (📎)
/speakspeak toggle (🔇)
/goalgoal chip

Honest take on "full parity"

Several commands are CLI-only by design — they're machine admin (sync, backup, worktree, profile, scheduler), batch/scripting (run, batch, finetune, review), or developer tooling. Forcing a web button for those adds surface without value.

The gaps worth filling (➕) — a web/desktop face for things a non-CLI user might want — are now all shipped as settings sections: the guardrails editor (Guardrails), the plugin browser/installer (Plugins), the usage/stats view (Usage), the evals results panel (Evals), and routes + recipes management (Routes & Recipes). Suite/recipe authoring still happens in TOML files (or via evi eval new / evi recipe new), but browsing and running them no longer requires the CLI.

Edit on GitHub ↗