Ekko Studio is a local-first AI workspace for multi-agent chat, coding, and visual workflows, available on desktop and the web.
See the codeEkko Studio 中文
A local-first AI workspace for multi-agent chat, coding, and visual workflows.
Available as a desktop app and self-hosted web console, with support for
Hermes Agent, Ekko Agent, and 14 coding-agent integrations, including Claude Code and Codex.
Bring conversations, group collaboration, voice, files, and devices together in one place.
Download Ekko Studio Desktop
·
Documentation
·
npm install -g ekko-studio && ekko-studio-web start
Ekko Studio was previously named Hermes Studio / Hermes Web UI. The GitHub
repository is EKKOLearnAI/ekko-studio. The primary npm package is
ekko-studio, with the ekko-studio-web command. The legacy hermes-web-ui
package and command remain supported and receive the same releases.
Captured from the v0.7.33 client on 2026-10-10. Chat, workflows, and Skills use demo data; Agent versions reflect a local installation. See capture notes.
| Visual workflows | Agent Manager |
|---|---|
![]() | ![]() |
| Connect agent steps and add a human approval gate. | Manage agent installations, settings, and updates in one place. |
Follow a task in the conversation, including its plan and per-turn usage.

Browse installed skills, read their instructions, and enable them as needed.

| Area | What Ekko Studio does |
|---|---|
| Multi-agent runtime | Connects the agents listed below with streaming responses, tool traces, generated-file previews, persistent sessions, and standalone desktop chat windows. |
| Studio workspace | Provides shared chats, group chat, global-agent runs, workflows, files, voice, media, devices, themes, logs, usage, and App connectivity across agent runtimes. |
| Agent control planes | Keeps Hermes profiles, providers, models, memory, skills, plugins, jobs, Kanban, channels, and runtime management in their owning agent module. |
| Automation | Builds executable visual workflows and connects the supported runtimes through schedules, approval gates, group-chat rooms, platform channels, and MCP servers. |
| Workspace tools | Provides a file browser, web terminal, Desktop Agent Browser, screenshot capture, voice input/output, coding-agent runners, device discovery, Journey graph, and performance views. |
| Distribution | Ships as a desktop app for Windows/macOS/Linux, an npm CLI package, and a Docker image. |
Single chat, group chat, and workflows share the same Agent catalog. Coding agents run on the machine hosting the Studio backend; their CLI must be installed there.
| Agents | Configuration and installation |
|---|---|
| Ekko Agent, Hermes Agent | Ekko is built in. Desktop and Docker bundle a Hermes runtime; npm installations discover an existing Hermes installation. |
| Claude Code, Codex, Pi, Grok, OpenCode, DeepSeek Harness (DSH) | Studio-scoped or native global configuration; installation and supported updates through Agent Manager. |
| Qwen Code, Kimi Code, CodeBuddy, GitHub Copilot CLI, ZCode | Studio-scoped or native global configuration. ZCode requires manual installation; the others support npm installation through Agent Manager. |
| Cursor, Qoder, Antigravity | Cursor and Qoder use native global configuration. Antigravity supports scoped and global launches. Cursor and Antigravity require manual installation. |
Scoped mode uses isolated session configuration; supported runtimes can use the selected Studio provider/model. Global mode uses the CLI's existing configuration and sign-in. Available models, tools, and context controls depend on the runtime. See native coding agents, Antigravity CLI, and DSH setup for details.
/chat-run; Studio dispatches each run to the selected runtime adapterUnified configuration for 10 platforms in one page:
| Platform | Features |
|---|---|
| Telegram | Bot token, mention control, reactions, free-response chats |
| Discord | Bot token, mention, auto-thread, reactions, channel allow/ignore lists |
| Slack | Bot token, mention control, bot message handling |
| Enable/disable, mention control, mention patterns | |
| Matrix | Access token, homeserver, auto-thread, DM mention threads |
| Feishu (Lark) | App ID / Secret, mention control |
| DingTalk | Client ID / Secret, mention control |
| QQBot | App ID / Secret, mention control |
| QR code login (scan in browser, auto-save credentials) | |
| WeCom | Bot ID / Secret |
.env and config.yaml under the selected Hermes profile~/.hermes/auth.json)/v1/models)/v4).tar.gz)~/.agents/skills entries are read-only in Coding Agent pages; runtime-specific settings, private skills, and MCP controls vary by agentweb profile’s plugins. Plugin configuration embeds the plugins’ own settings UI with light/dark theme support; Plugin list manages installed packages. Agent presets have a separate Studio management page.~/.agents/skills entries are display-only in every Coding Agent page; editing and deletion are blocked.Install DSH on the machine running the Studio backend through Agent Manager. Native plugin installation requires pnpm on that machine’s PATH. See DSH setup, profiles, and compatibility for details.
See App connectivity and session sharing for setup and permission boundaries.
See JEV configuration and integration status.
ekko-studio-* servers, profile injection, and api / browser / devices / use / plan toolsets; task plans and clarification use the dedicated ekko-studio-interaction serverAUTH_TOKEN env var)admin / 123456; users are prompted after login to change the default username and passwordCLI maintenance commands:
# Delete persisted login IP lock records
ekko-studio-web clear-login-locks
# Delete login locks and restart the running Studio server
ekko-studio-web clear-login-locks --restart
# Create or reset the default super administrator login to admin / 123456
ekko-studio-web reset-default-login
clear-login-locks removes ${HERMES_WEB_UI_HOME:-~/.hermes-web-ui}/.login-lock.json. If the server is running, restart it to clear in-memory lock state. reset-default-login updates the Studio account database; if an admin user already exists, its password is reset to 123456 and the account is enabled as a super administrator.
docs/voice-dialogue.md.latest assets if the Cloudflare update feed is unavailableDownload the latest Ekko Studio desktop installer from GitHub Releases.
Desktop builds are published for macOS, Windows, and Linux, with separate
architecture assets where applicable. The desktop app bundles the Studio
runtime and stores Hermes Agent data in ~/.hermes on Windows, macOS, and Linux.
The desktop wrapper stores its own Studio state separately in
~/.hermes-web-ui unless HERMES_WEB_UI_HOME is set.
After the packaged desktop app starts, it installs managed command shims so the desktop app, bundled Hermes Agent CLI, and bundled server CLI do not conflict:
| Command | Description |
|---|---|
ekko-studio | Open the Ekko Studio desktop app |
ekko-studio cli ... | Run the bundled Hermes Agent CLI |
ekko-studio web ... | Run the bundled hermes-web-ui command |
ekko-studio -h | Show wrapper help |
ekko-studio-mcp [api|browser|devices|use|plan] | Run one managed Studio MCP toolset |
The desktop command is ekko-studio; the previous managed hermes-studio
command is removed when the new shim is installed. No compatibility alias is created.
Use ekko-studio cli -h for Hermes Agent CLI help and
ekko-studio web -h for server CLI help. ekko-studio-mcp defaults to the
api toolset; choose browser, devices, use, or plan to keep the exposed MCP
surface focused on the current task.
Desktop auto-updates read the latest feed from
https://download.ekkolearnai.com/latest first. If that endpoint is
unavailable, the updater falls back to
https://github.com/EKKOLearnAI/ekko-studio/releases/latest/download.
npm install -g ekko-studio
ekko-studio-web start
The legacy package hermes-web-ui continues to receive the same releases.
Both packages expose ekko-studio-web and the existing commands. Install either
package; their global command aliases overlap. To switch, uninstall the old
package before installing the other. User data remains in ~/.hermes-web-ui.
Requires Node.js 23 or newer. Ekko Agent is included; to use Hermes Agent, install its runtime on the same machine or use the bundled Desktop/Docker distribution.
Single-container deployment with integrated Hermes Agent:
# Use pre-built image (Recommended)
WEBUI_IMAGE=ekkoye8888/hermes-web-ui docker compose up -d
# Or build from source
docker compose up -d --build
docker compose logs -f hermes-webui
./hermes_data./hermes_data/hermes-web-ui/.tokendocker-compose.ymlFor detailed notes and troubleshooting, see docs/docker.md.
When Studio starts backend chat features, it prefers a source checkout that
contains run_agent.py such as ~/.hermes/hermes-agent. If no source checkout
is found, it falls back to the Python environment used by the installed
hermes command, then the system Python. This supports both source installs
and package installs such as pip install hermes-agent.
These variables configure Ekko Studio, its local Hermes runtime integration, and development/preview helpers. Provider API keys and Hermes Agent settings are normally managed through Hermes profiles; environment variables here are process-level overrides.
| Variable | Default | Description |
|---|---|---|
PORT | 8648 | Studio server listen port. |
BIND_HOST | 0.0.0.0 | Studio server bind host. Set :: explicitly for IPv6. |
HERMES_LAN_ADVERTISE_URL | unset | Reachable Studio origin used in App LAN QR codes. Set this to the Docker host's LAN URL when Studio is opened through localhost, for example http://192.168.1.20:6060. |
HERMES_APP_ENTITLEMENT_REQUIRED | true | Require a valid cloud-signed App entitlement before accepting a LAN App relay connection. Set false only for temporary compatibility diagnostics. |
HERMES_APP_ENTITLEMENT_PUBLIC_KEY | built in | Optional PEM public-key override for RS256 App entitlements. The expected issuer is hermes-studio-server and audience is ekko-studio. |
HERMES_WEB_UI_HOME | ~/.hermes-web-ui | Studio data home for auth token, credentials, logs, DB, and default uploads. HERMES_WEBUI_STATE_DIR is also supported as a compatibility alias. |
HERMES_WEBUI_STATE_DIR | unset | Compatibility alias for HERMES_WEB_UI_HOME. |
HERMES_WEB_UI_DISABLE_MCP_AUTOINJECT | unset | Disable startup injection of the managed ekko-studio-* MCP servers into Hermes profile configs. |
HERMES_WEB_UI_ALLOW_TRANSIENT_MCP_AUTOINJECT | unset | Allow managed MCP injection when HERMES_WEB_UI_HOME is under a temporary directory, such as Version Preview runtimes. |
UPLOAD_DIR | $HERMES_WEB_UI_HOME/upload | Upload root override. Files are stored below profile-scoped subdirectories. |
CORS_ORIGINS | same host only | Comma- or space-separated cross-origin allowlist for HTTP, Socket.IO, and WebSocket requests. Set * only when you intentionally need legacy wildcard CORS. |
AUTH_TOKEN | auto-generated | Explicit bearer token. If unset, Studio creates one under HERMES_WEB_UI_HOME. |
AUTH_JWT_SECRET | AUTH_TOKEN | JWT signing secret override for username/password sessions. |
HERMES_WEB_UI_AUTH_JWT_EXPIRES_IN | 30d | Username/password session JWT lifetime. Accepts seconds or s/m/h/d suffixes, for example 12h or 7d. |
PROFILE | default | Startup/default Hermes profile. Runtime requests use the profile selected by the frontend and authorized for the current account. |
LOG_LEVEL | info | Server log level. |
BRIDGE_LOG_LEVEL | $LOG_LEVEL or info | Bridge log level. |
MAX_DOWNLOAD_SIZE | 200MB | Maximum file download size. |
MAX_EDIT_SIZE | 10MB | Maximum editable file size. |
WORKSPACE_BASE | current user's home directory | Base directory for workspace browsing. |
HERMES_HOME | ~/.hermes | Hermes data home on Windows, macOS, and Linux. |
HERMES_BIN | hermes | Custom Hermes CLI binary path. |
HERMES_AGENT_ROOT | auto-discovered | Hermes Agent source checkout containing run_agent.py. |
HERMES_AGENT_BRIDGE_PYTHON | auto-discovered | Python interpreter used to launch the agent bridge. |
HERMES_AGENT_BRIDGE_UV | auto-discovered | uv executable used to launch the agent bridge when available. |
UV | auto-discovered | Fallback uv executable path. |
PYTHON | auto-discovered | Fallback Python executable for the agent bridge. |
HERMES_AGENT_BRIDGE_ENDPOINT | platform default | Agent bridge broker endpoint. Windows defaults to tcp://127.0.0.1:18765; macOS/Linux defaults to ipc:///tmp/hermes-agent-bridge.sock. |
HERMES_AGENT_BRIDGE_TIMEOUT_MS | 120000 | Timeout for Node requests to the bridge broker. |
HERMES_AGENT_BRIDGE_CONNECT_RETRY_MS | 5000 | Short retry window for connecting to the bridge socket. |
HERMES_AGENT_BRIDGE_STARTUP_TIMEOUT_MS | 120000 | Timeout while waiting for the Python bridge to become ready. |
HERMES_AGENT_BRIDGE_STOP_ON_SHUTDOWN | enabled | Stop the bridge broker during Studio shutdown and restart. Set 0, false, no, or off to keep the bridge across restarts. |
HERMES_AGENT_BRIDGE_AUTO_RESTART | enabled | Auto-restart the bridge broker after unexpected exit. Set 0, false, no, or off to disable. |
HERMES_AGENT_BRIDGE_RESTART_DELAY_MS | 1000 | Base delay for bridge auto-restart backoff. |
HERMES_AGENT_BRIDGE_PLATFORM | cli | Platform identity passed to Hermes Agent. |
HERMES_AGENT_BRIDGE_WORKER_TRANSPORT | platform default | Profile worker transport. Set tcp for loopback TCP or ipc/unix for Unix domain sockets; defaults to Windows TCP and macOS/Linux IPC. |
HERMES_AGENT_BRIDGE_WORKER_PORT_BASE | 18780 | Base port for TCP worker endpoints. |
HERMES_BRIDGE_PROVIDER | profile/default | Provider override for bridge runs. |
HERMES_BRIDGE_TOOLSETS | profile/default | Toolset override for bridge runs. |
HERMES_BRIDGE_MAX_TURNS | profile/default | Maximum turn override for bridge runs. |
HERMES_BRIDGE_SUPPRESS_PLATFORM_HINT | cli | Controls bridge platform hint suppression passed to Hermes Agent. |
HERMES_OPENROUTER_APP_REFERER | https://ekkostudio.xyz | OpenRouter attribution referer sent by bridge runs. |
HERMES_OPENROUTER_APP_TITLE | Ekko Studio | OpenRouter attribution title sent by bridge runs. |
HERMES_OPENROUTER_APP_CATEGORIES | cli-agent,personal-agent | OpenRouter attribution categories sent by bridge runs. |
HERMES_WEB_UI_MANAGED_GATEWAY | enabled | Controls Studio-managed Hermes gateway process handling. Set 0, false, no, or off to use hermes gateway start instead. |
HERMES_WEB_UI_DISABLE_GATEWAY_AUTOSTART | unset | Override the opt-in Hermes Gateway autostart policy. Set 1, true, yes, or on to disable startup checks and configuration-driven reconciliation even when enabled in settings. |
HERMES_WEB_UI_DISABLE_SKILL_INJECTION | unset | Skip startup bundled skill injection. Set 1, true, yes, or on when bundled skills are managed outside Studio. When injection is enabled, Studio updates only skills it previously installed or identical existing bundled copies; local edits and user-owned same-name skills are skipped. |
HERMES_WEB_UI_STOP_GATEWAYS_ON_SHUTDOWN | enabled | Controls whether Studio shutdown also stops only the gateway processes started and tracked by this Studio process. Set 0 or false to detach them; externally discovered gateways are never adopted or stopped. |
HERMES_WEB_UI_SHUTDOWN_FORCE_EXIT_MS | 10000 | Short cleanup budget before Studio force-stops its owned process trees and exits. |
HERMES_DESKTOP_STOP_TIMEOUT_MS | 20000 | Desktop host's existing outer deadline before it force-stops the complete Web UI process tree; independent from the Web UI's 10-second cleanup budget. |
HERMES_GATEWAY_URL / GATEWAY_URL | unset | Explicit Hermes gateway upstream URL for proxy routes. |
GATEWAY_HOST | 127.0.0.1 | Default Hermes gateway upstream host for proxy routes. |
GATEWAY_PORT | 8642 | Default Hermes gateway upstream port for proxy routes. |
HERMES_WEB_UI_PREVIEW_REPO | package repository | GitHub repository used by Version Preview. |
HERMES_WEB_UI_PREVIEW_AGENT_BRIDGE_TRANSPORT | platform default | Version Preview broker transport. Set tcp to use loopback TCP for Preview on macOS/Linux; when unset, Preview follows HERMES_AGENT_BRIDGE_WORKER_TRANSPORT=tcp. |
HERMES_WEB_UI_PREVIEW_AGENT_BRIDGE_ENDPOINT | isolated preview endpoint | Directly overrides the Version Preview broker endpoint. |
HERMES_WEB_UI_BACKEND_PORT | 8648 | Backend port used by the Vite dev proxy. |
HERMES_WEB_UI_FRONTEND_PORT | 8649 | Frontend Vite dev server port. |
hermes-web-ui remains an alias for the ekko-studio-web commands below.
| Command | Description |
|---|---|
ekko-studio-web start [port] | Start in background; accepts a positional port or --port <port> |
ekko-studio-web client [port] | Start for a remote client with gateway autostart disabled and permissive CORS |
ekko-studio-web restart [port] | Restart; stops the bridge by default |
ekko-studio-web stop | Stop the background process |
ekko-studio-web status | Check if running |
ekko-studio-web clear-login-locks [--restart] | Clear persisted login locks, optionally restart |
ekko-studio-web reset-default-login | Create or reset the default administrator login |
ekko-studio-web update / upgrade | Update to the latest version and restart |
ekko-studio-web version / -v | Show the version |
ekko-studio-web -h | Show help |
hermes-web-ui-mcp [api|browser|devices|use|plan] | Run one managed Studio MCP toolset (same as ekko-studio-mcp) |
Add --no-open to start or client when no browser should open.
restart, update, and upgrade stop the Agent Bridge broker by default so restarted or updated servers do not reuse stale Python bridge processes. Set HERMES_AGENT_BRIDGE_STOP_ON_SHUTDOWN=0 before restarting only when you explicitly want to keep the bridge broker and running bridge sessions alive.
update / upgrade first attempt npm cache clean --force, then install the latest version of the running package (ekko-studio@latest or hermes-web-ui@latest) and restart that package. The Web UI version check uses the same package identity. Cache cleanup is best-effort; if it fails, the updater continues with the install.
On startup the BFF server automatically:
--no-open is setgit clone https://github.com/EKKOLearnAI/ekko-studio.git
cd ekko-studio
npm install
npm run dev
npm run harness:check
npm run test
npm run build # outputs to dist/
See DEVELOPMENT.md for contributor commands and ARCHITECTURE.md for the complete package and state model.
Browser / Desktop / App
│ HTTP + Socket.IO
▼
Koa bootstrap (composition only)
│
├─ Studio platform ── chat, groups, global agent, workflows,
│ sessions, files, voice, devices, webhooks
├─ Hermes family ─── profiles, models, skills, memory, jobs,
│ Kanban, channels, terminal, Hermes bridge
├─ Ekko family ───── Ekko runtime and agent-owned services
└─ Coding family ─── coding-agent adapters, scoped config, native CLI execution
The server is organized by business ownership under
packages/server/src/modules/{studio,hermes,ekko,coding-agents}. Routes stay
thin, controllers own HTTP concerns, services own reusable behavior, and only
packages/server/src/bootstrap may compose concrete modules and adapters.
Cross-agent code belongs to Studio; an agent module must not absorb a shared
product surface merely because it uses that agent today.
Studio state and Hermes Agent state remain separate. Studio defaults to
~/.hermes-web-ui; Hermes profile data remains under the Hermes home. For the
full ownership tree, dependency rules, and API migration contract, see
docs/harness/server-module-boundaries.md.
Frontend: Vue 3 + TypeScript + Vite + Naive UI + Pinia + Vue Router + vue-i18n + SCSS + markdown-it + highlight.js
Backend: Koa 2 + Socket.IO + SQLite + node-pty
The license covers Ekko Studio, the hermes-web-ui npm package and CLI,
desktop applications, firmware, release
artifacts, documentation, and associated files in this repository.
The MCP entry point is bin/ekko-studio-mcp.mjs; tools use the ekko_studio_* prefix. Existing hermes-studio-mcp / hermes-web-ui-mcp commands and hermes_studio_* calls remain compatible. Restart the MCP client to discover the new tool names. Studio migrates managed server configurations to ekko-studio-api, ekko-studio-browser, ekko-studio-devices, ekko-studio-use, and ekko-studio-interaction.
(top 24 of 26)
2,337 followers · starred May 2026
46 followers · starred May 2026
102 followers · starred May 2026
453 followers · starred May 2026
Ekko Studio is a local-first AI workspace for multi-agent chat, coding, and visual workflows, available on desktop and the web.
See the codeEkko Studio 中文
A local-first AI workspace for multi-agent chat, coding, and visual workflows.
Available as a desktop app and self-hosted web console, with support for
Hermes Agent, Ekko Agent, and 14 coding-agent integrations, including Claude Code and Codex.
Bring conversations, group collaboration, voice, files, and devices together in one place.
Download Ekko Studio Desktop
·
Documentation
·
npm install -g ekko-studio && ekko-studio-web start
Ekko Studio was previously named Hermes Studio / Hermes Web UI. The GitHub
repository is EKKOLearnAI/ekko-studio. The primary npm package is
ekko-studio, with the ekko-studio-web command. The legacy hermes-web-ui
package and command remain supported and receive the same releases.
Captured from the v0.7.33 client on 2026-10-10. Chat, workflows, and Skills use demo data; Agent versions reflect a local installation. See capture notes.
| Visual workflows | Agent Manager |
|---|---|
![]() | ![]() |
| Connect agent steps and add a human approval gate. | Manage agent installations, settings, and updates in one place. |
Follow a task in the conversation, including its plan and per-turn usage.

Browse installed skills, read their instructions, and enable them as needed.

| Area | What Ekko Studio does |
|---|---|
| Multi-agent runtime | Connects the agents listed below with streaming responses, tool traces, generated-file previews, persistent sessions, and standalone desktop chat windows. |
| Studio workspace | Provides shared chats, group chat, global-agent runs, workflows, files, voice, media, devices, themes, logs, usage, and App connectivity across agent runtimes. |
| Agent control planes | Keeps Hermes profiles, providers, models, memory, skills, plugins, jobs, Kanban, channels, and runtime management in their owning agent module. |
| Automation | Builds executable visual workflows and connects the supported runtimes through schedules, approval gates, group-chat rooms, platform channels, and MCP servers. |
| Workspace tools | Provides a file browser, web terminal, Desktop Agent Browser, screenshot capture, voice input/output, coding-agent runners, device discovery, Journey graph, and performance views. |
| Distribution | Ships as a desktop app for Windows/macOS/Linux, an npm CLI package, and a Docker image. |
Single chat, group chat, and workflows share the same Agent catalog. Coding agents run on the machine hosting the Studio backend; their CLI must be installed there.
| Agents | Configuration and installation |
|---|---|
| Ekko Agent, Hermes Agent | Ekko is built in. Desktop and Docker bundle a Hermes runtime; npm installations discover an existing Hermes installation. |
| Claude Code, Codex, Pi, Grok, OpenCode, DeepSeek Harness (DSH) | Studio-scoped or native global configuration; installation and supported updates through Agent Manager. |
| Qwen Code, Kimi Code, CodeBuddy, GitHub Copilot CLI, ZCode | Studio-scoped or native global configuration. ZCode requires manual installation; the others support npm installation through Agent Manager. |
| Cursor, Qoder, Antigravity | Cursor and Qoder use native global configuration. Antigravity supports scoped and global launches. Cursor and Antigravity require manual installation. |
Scoped mode uses isolated session configuration; supported runtimes can use the selected Studio provider/model. Global mode uses the CLI's existing configuration and sign-in. Available models, tools, and context controls depend on the runtime. See native coding agents, Antigravity CLI, and DSH setup for details.
/chat-run; Studio dispatches each run to the selected runtime adapterUnified configuration for 10 platforms in one page:
| Platform | Features |
|---|---|
| Telegram | Bot token, mention control, reactions, free-response chats |
| Discord | Bot token, mention, auto-thread, reactions, channel allow/ignore lists |
| Slack | Bot token, mention control, bot message handling |
| Enable/disable, mention control, mention patterns | |
| Matrix | Access token, homeserver, auto-thread, DM mention threads |
| Feishu (Lark) | App ID / Secret, mention control |
| DingTalk | Client ID / Secret, mention control |
| QQBot | App ID / Secret, mention control |
| QR code login (scan in browser, auto-save credentials) | |
| WeCom | Bot ID / Secret |
.env and config.yaml under the selected Hermes profile~/.hermes/auth.json)/v1/models)/v4).tar.gz)~/.agents/skills entries are read-only in Coding Agent pages; runtime-specific settings, private skills, and MCP controls vary by agentweb profile’s plugins. Plugin configuration embeds the plugins’ own settings UI with light/dark theme support; Plugin list manages installed packages. Agent presets have a separate Studio management page.~/.agents/skills entries are display-only in every Coding Agent page; editing and deletion are blocked.Install DSH on the machine running the Studio backend through Agent Manager. Native plugin installation requires pnpm on that machine’s PATH. See DSH setup, profiles, and compatibility for details.
See App connectivity and session sharing for setup and permission boundaries.
See JEV configuration and integration status.
ekko-studio-* servers, profile injection, and api / browser / devices / use / plan toolsets; task plans and clarification use the dedicated ekko-studio-interaction serverAUTH_TOKEN env var)admin / 123456; users are prompted after login to change the default username and passwordCLI maintenance commands:
# Delete persisted login IP lock records
ekko-studio-web clear-login-locks
# Delete login locks and restart the running Studio server
ekko-studio-web clear-login-locks --restart
# Create or reset the default super administrator login to admin / 123456
ekko-studio-web reset-default-login
clear-login-locks removes ${HERMES_WEB_UI_HOME:-~/.hermes-web-ui}/.login-lock.json. If the server is running, restart it to clear in-memory lock state. reset-default-login updates the Studio account database; if an admin user already exists, its password is reset to 123456 and the account is enabled as a super administrator.
docs/voice-dialogue.md.latest assets if the Cloudflare update feed is unavailableDownload the latest Ekko Studio desktop installer from GitHub Releases.
Desktop builds are published for macOS, Windows, and Linux, with separate
architecture assets where applicable. The desktop app bundles the Studio
runtime and stores Hermes Agent data in ~/.hermes on Windows, macOS, and Linux.
The desktop wrapper stores its own Studio state separately in
~/.hermes-web-ui unless HERMES_WEB_UI_HOME is set.
After the packaged desktop app starts, it installs managed command shims so the desktop app, bundled Hermes Agent CLI, and bundled server CLI do not conflict:
| Command | Description |
|---|---|
ekko-studio | Open the Ekko Studio desktop app |
ekko-studio cli ... | Run the bundled Hermes Agent CLI |
ekko-studio web ... | Run the bundled hermes-web-ui command |
ekko-studio -h | Show wrapper help |
ekko-studio-mcp [api|browser|devices|use|plan] | Run one managed Studio MCP toolset |
The desktop command is ekko-studio; the previous managed hermes-studio
command is removed when the new shim is installed. No compatibility alias is created.
Use ekko-studio cli -h for Hermes Agent CLI help and
ekko-studio web -h for server CLI help. ekko-studio-mcp defaults to the
api toolset; choose browser, devices, use, or plan to keep the exposed MCP
surface focused on the current task.
Desktop auto-updates read the latest feed from
https://download.ekkolearnai.com/latest first. If that endpoint is
unavailable, the updater falls back to
https://github.com/EKKOLearnAI/ekko-studio/releases/latest/download.
npm install -g ekko-studio
ekko-studio-web start
The legacy package hermes-web-ui continues to receive the same releases.
Both packages expose ekko-studio-web and the existing commands. Install either
package; their global command aliases overlap. To switch, uninstall the old
package before installing the other. User data remains in ~/.hermes-web-ui.
Requires Node.js 23 or newer. Ekko Agent is included; to use Hermes Agent, install its runtime on the same machine or use the bundled Desktop/Docker distribution.
Single-container deployment with integrated Hermes Agent:
# Use pre-built image (Recommended)
WEBUI_IMAGE=ekkoye8888/hermes-web-ui docker compose up -d
# Or build from source
docker compose up -d --build
docker compose logs -f hermes-webui
./hermes_data./hermes_data/hermes-web-ui/.tokendocker-compose.ymlFor detailed notes and troubleshooting, see docs/docker.md.
When Studio starts backend chat features, it prefers a source checkout that
contains run_agent.py such as ~/.hermes/hermes-agent. If no source checkout
is found, it falls back to the Python environment used by the installed
hermes command, then the system Python. This supports both source installs
and package installs such as pip install hermes-agent.
These variables configure Ekko Studio, its local Hermes runtime integration, and development/preview helpers. Provider API keys and Hermes Agent settings are normally managed through Hermes profiles; environment variables here are process-level overrides.
| Variable | Default | Description |
|---|---|---|
PORT | 8648 | Studio server listen port. |
BIND_HOST | 0.0.0.0 | Studio server bind host. Set :: explicitly for IPv6. |
HERMES_LAN_ADVERTISE_URL | unset | Reachable Studio origin used in App LAN QR codes. Set this to the Docker host's LAN URL when Studio is opened through localhost, for example http://192.168.1.20:6060. |
HERMES_APP_ENTITLEMENT_REQUIRED | true | Require a valid cloud-signed App entitlement before accepting a LAN App relay connection. Set false only for temporary compatibility diagnostics. |
HERMES_APP_ENTITLEMENT_PUBLIC_KEY | built in | Optional PEM public-key override for RS256 App entitlements. The expected issuer is hermes-studio-server and audience is ekko-studio. |
HERMES_WEB_UI_HOME | ~/.hermes-web-ui | Studio data home for auth token, credentials, logs, DB, and default uploads. HERMES_WEBUI_STATE_DIR is also supported as a compatibility alias. |
HERMES_WEBUI_STATE_DIR | unset | Compatibility alias for HERMES_WEB_UI_HOME. |
HERMES_WEB_UI_DISABLE_MCP_AUTOINJECT | unset | Disable startup injection of the managed ekko-studio-* MCP servers into Hermes profile configs. |
HERMES_WEB_UI_ALLOW_TRANSIENT_MCP_AUTOINJECT | unset | Allow managed MCP injection when HERMES_WEB_UI_HOME is under a temporary directory, such as Version Preview runtimes. |
UPLOAD_DIR | $HERMES_WEB_UI_HOME/upload | Upload root override. Files are stored below profile-scoped subdirectories. |
CORS_ORIGINS | same host only | Comma- or space-separated cross-origin allowlist for HTTP, Socket.IO, and WebSocket requests. Set * only when you intentionally need legacy wildcard CORS. |
AUTH_TOKEN | auto-generated | Explicit bearer token. If unset, Studio creates one under HERMES_WEB_UI_HOME. |
AUTH_JWT_SECRET | AUTH_TOKEN | JWT signing secret override for username/password sessions. |
HERMES_WEB_UI_AUTH_JWT_EXPIRES_IN | 30d | Username/password session JWT lifetime. Accepts seconds or s/m/h/d suffixes, for example 12h or 7d. |
PROFILE | default | Startup/default Hermes profile. Runtime requests use the profile selected by the frontend and authorized for the current account. |
LOG_LEVEL | info | Server log level. |
BRIDGE_LOG_LEVEL | $LOG_LEVEL or info | Bridge log level. |
MAX_DOWNLOAD_SIZE | 200MB | Maximum file download size. |
MAX_EDIT_SIZE | 10MB | Maximum editable file size. |
WORKSPACE_BASE | current user's home directory | Base directory for workspace browsing. |
HERMES_HOME | ~/.hermes | Hermes data home on Windows, macOS, and Linux. |
HERMES_BIN | hermes | Custom Hermes CLI binary path. |
HERMES_AGENT_ROOT | auto-discovered | Hermes Agent source checkout containing run_agent.py. |
HERMES_AGENT_BRIDGE_PYTHON | auto-discovered | Python interpreter used to launch the agent bridge. |
HERMES_AGENT_BRIDGE_UV | auto-discovered | uv executable used to launch the agent bridge when available. |
UV | auto-discovered | Fallback uv executable path. |
PYTHON | auto-discovered | Fallback Python executable for the agent bridge. |
HERMES_AGENT_BRIDGE_ENDPOINT | platform default | Agent bridge broker endpoint. Windows defaults to tcp://127.0.0.1:18765; macOS/Linux defaults to ipc:///tmp/hermes-agent-bridge.sock. |
HERMES_AGENT_BRIDGE_TIMEOUT_MS | 120000 | Timeout for Node requests to the bridge broker. |
HERMES_AGENT_BRIDGE_CONNECT_RETRY_MS | 5000 | Short retry window for connecting to the bridge socket. |
HERMES_AGENT_BRIDGE_STARTUP_TIMEOUT_MS | 120000 | Timeout while waiting for the Python bridge to become ready. |
HERMES_AGENT_BRIDGE_STOP_ON_SHUTDOWN | enabled | Stop the bridge broker during Studio shutdown and restart. Set 0, false, no, or off to keep the bridge across restarts. |
HERMES_AGENT_BRIDGE_AUTO_RESTART | enabled | Auto-restart the bridge broker after unexpected exit. Set 0, false, no, or off to disable. |
HERMES_AGENT_BRIDGE_RESTART_DELAY_MS | 1000 | Base delay for bridge auto-restart backoff. |
HERMES_AGENT_BRIDGE_PLATFORM | cli | Platform identity passed to Hermes Agent. |
HERMES_AGENT_BRIDGE_WORKER_TRANSPORT | platform default | Profile worker transport. Set tcp for loopback TCP or ipc/unix for Unix domain sockets; defaults to Windows TCP and macOS/Linux IPC. |
HERMES_AGENT_BRIDGE_WORKER_PORT_BASE | 18780 | Base port for TCP worker endpoints. |
HERMES_BRIDGE_PROVIDER | profile/default | Provider override for bridge runs. |
HERMES_BRIDGE_TOOLSETS | profile/default | Toolset override for bridge runs. |
HERMES_BRIDGE_MAX_TURNS | profile/default | Maximum turn override for bridge runs. |
HERMES_BRIDGE_SUPPRESS_PLATFORM_HINT | cli | Controls bridge platform hint suppression passed to Hermes Agent. |
HERMES_OPENROUTER_APP_REFERER | https://ekkostudio.xyz | OpenRouter attribution referer sent by bridge runs. |
HERMES_OPENROUTER_APP_TITLE | Ekko Studio | OpenRouter attribution title sent by bridge runs. |
HERMES_OPENROUTER_APP_CATEGORIES | cli-agent,personal-agent | OpenRouter attribution categories sent by bridge runs. |
HERMES_WEB_UI_MANAGED_GATEWAY | enabled | Controls Studio-managed Hermes gateway process handling. Set 0, false, no, or off to use hermes gateway start instead. |
HERMES_WEB_UI_DISABLE_GATEWAY_AUTOSTART | unset | Override the opt-in Hermes Gateway autostart policy. Set 1, true, yes, or on to disable startup checks and configuration-driven reconciliation even when enabled in settings. |
HERMES_WEB_UI_DISABLE_SKILL_INJECTION | unset | Skip startup bundled skill injection. Set 1, true, yes, or on when bundled skills are managed outside Studio. When injection is enabled, Studio updates only skills it previously installed or identical existing bundled copies; local edits and user-owned same-name skills are skipped. |
HERMES_WEB_UI_STOP_GATEWAYS_ON_SHUTDOWN | enabled | Controls whether Studio shutdown also stops only the gateway processes started and tracked by this Studio process. Set 0 or false to detach them; externally discovered gateways are never adopted or stopped. |
HERMES_WEB_UI_SHUTDOWN_FORCE_EXIT_MS | 10000 | Short cleanup budget before Studio force-stops its owned process trees and exits. |
HERMES_DESKTOP_STOP_TIMEOUT_MS | 20000 | Desktop host's existing outer deadline before it force-stops the complete Web UI process tree; independent from the Web UI's 10-second cleanup budget. |
HERMES_GATEWAY_URL / GATEWAY_URL | unset | Explicit Hermes gateway upstream URL for proxy routes. |
GATEWAY_HOST | 127.0.0.1 | Default Hermes gateway upstream host for proxy routes. |
GATEWAY_PORT | 8642 | Default Hermes gateway upstream port for proxy routes. |
HERMES_WEB_UI_PREVIEW_REPO | package repository | GitHub repository used by Version Preview. |
HERMES_WEB_UI_PREVIEW_AGENT_BRIDGE_TRANSPORT | platform default | Version Preview broker transport. Set tcp to use loopback TCP for Preview on macOS/Linux; when unset, Preview follows HERMES_AGENT_BRIDGE_WORKER_TRANSPORT=tcp. |
HERMES_WEB_UI_PREVIEW_AGENT_BRIDGE_ENDPOINT | isolated preview endpoint | Directly overrides the Version Preview broker endpoint. |
HERMES_WEB_UI_BACKEND_PORT | 8648 | Backend port used by the Vite dev proxy. |
HERMES_WEB_UI_FRONTEND_PORT | 8649 | Frontend Vite dev server port. |
hermes-web-ui remains an alias for the ekko-studio-web commands below.
| Command | Description |
|---|---|
ekko-studio-web start [port] | Start in background; accepts a positional port or --port <port> |
ekko-studio-web client [port] | Start for a remote client with gateway autostart disabled and permissive CORS |
ekko-studio-web restart [port] | Restart; stops the bridge by default |
ekko-studio-web stop | Stop the background process |
ekko-studio-web status | Check if running |
ekko-studio-web clear-login-locks [--restart] | Clear persisted login locks, optionally restart |
ekko-studio-web reset-default-login | Create or reset the default administrator login |
ekko-studio-web update / upgrade | Update to the latest version and restart |
ekko-studio-web version / -v | Show the version |
ekko-studio-web -h | Show help |
hermes-web-ui-mcp [api|browser|devices|use|plan] | Run one managed Studio MCP toolset (same as ekko-studio-mcp) |
Add --no-open to start or client when no browser should open.
restart, update, and upgrade stop the Agent Bridge broker by default so restarted or updated servers do not reuse stale Python bridge processes. Set HERMES_AGENT_BRIDGE_STOP_ON_SHUTDOWN=0 before restarting only when you explicitly want to keep the bridge broker and running bridge sessions alive.
update / upgrade first attempt npm cache clean --force, then install the latest version of the running package (ekko-studio@latest or hermes-web-ui@latest) and restart that package. The Web UI version check uses the same package identity. Cache cleanup is best-effort; if it fails, the updater continues with the install.
On startup the BFF server automatically:
--no-open is setgit clone https://github.com/EKKOLearnAI/ekko-studio.git
cd ekko-studio
npm install
npm run dev
npm run harness:check
npm run test
npm run build # outputs to dist/
See DEVELOPMENT.md for contributor commands and ARCHITECTURE.md for the complete package and state model.
Browser / Desktop / App
│ HTTP + Socket.IO
▼
Koa bootstrap (composition only)
│
├─ Studio platform ── chat, groups, global agent, workflows,
│ sessions, files, voice, devices, webhooks
├─ Hermes family ─── profiles, models, skills, memory, jobs,
│ Kanban, channels, terminal, Hermes bridge
├─ Ekko family ───── Ekko runtime and agent-owned services
└─ Coding family ─── coding-agent adapters, scoped config, native CLI execution
The server is organized by business ownership under
packages/server/src/modules/{studio,hermes,ekko,coding-agents}. Routes stay
thin, controllers own HTTP concerns, services own reusable behavior, and only
packages/server/src/bootstrap may compose concrete modules and adapters.
Cross-agent code belongs to Studio; an agent module must not absorb a shared
product surface merely because it uses that agent today.
Studio state and Hermes Agent state remain separate. Studio defaults to
~/.hermes-web-ui; Hermes profile data remains under the Hermes home. For the
full ownership tree, dependency rules, and API migration contract, see
docs/harness/server-module-boundaries.md.
Frontend: Vue 3 + TypeScript + Vite + Naive UI + Pinia + Vue Router + vue-i18n + SCSS + markdown-it + highlight.js
Backend: Koa 2 + Socket.IO + SQLite + node-pty
The license covers Ekko Studio, the hermes-web-ui npm package and CLI,
desktop applications, firmware, release
artifacts, documentation, and associated files in this repository.
The MCP entry point is bin/ekko-studio-mcp.mjs; tools use the ekko_studio_* prefix. Existing hermes-studio-mcp / hermes-web-ui-mcp commands and hermes_studio_* calls remain compatible. Restart the MCP client to discover the new tool names. Studio migrates managed server configurations to ekko-studio-api, ekko-studio-browser, ekko-studio-devices, ekko-studio-use, and ekko-studio-interaction.
(top 24 of 26)
2,337 followers · starred May 2026
46 followers · starred May 2026
102 followers · starred May 2026
453 followers · starred May 2026