Web UI
Ene's optional Web UI mirrors terminal sessions in a browser. It does not replace the terminal agent: a hub serves the browser, while each agent continues to run in its own working directory and terminal process.
Architecture
The Web UI uses a hub + agents design:
- One
ene hubprocess owns the HTTP port, serves the UI, authenticates browsers, and multiplexes connected agents. - Each ordinary
eneprocess checks for a local hub at startup and links to it automatically. - Terminal and browser input operate the same live session. Agents continue terminal-only when no hub is available.
- Agents from different directories and terminals appear as separate browser tabs.
The hub binds to 127.0.0.1, so it is local-only unless you explicitly add a tunnel or proxy.
Start the hub
Choose a private access token in ~/.ene.yaml:
ene_web_token: replace-with-a-long-random-secretyaml
Start the hub in a dedicated terminal:
ene hub --web-port 8765bash
The command prints the URL and access token. If ene_web_token is absent, Ene generates a new token for that hub process.
Open the printed URL—normally http://127.0.0.1:8765—and enter the token. Keep the hub terminal running while using the Web UI.
Connect agents
Start each agent in its own terminal after the hub is running:
# Terminal 2
cd ~/projects/project-a
ene --model gptbash
# Terminal 3
cd ~/projects/project-b
ene --model gptbash
The hub writes discovery information to ~/.ene/hub.json. Agents on the same machine read this file and verify that the recorded hub is reachable.
A stale file from a crashed process is ignored. Agents that were already running before the hub started must be restarted to connect.
Browser behavior
The browser shows the same conversation, tool activity, prompts, and process status as the terminal. Input from either interface is sent to the same agent session.
If the browser loses its hub connection, it shows a reconnecting state, preserves draft input, and disables actions until the connection recovers. Stopping the hub does not stop terminal agents; they continue running without the browser connection.
Remote access
Because the hub listens only on loopback, use an authenticated tunnel or reverse proxy rather than exposing it directly. For example, with Cloudflare Tunnel:
# One-time authentication and tunnel creation.
cloudflared tunnel login
cloudflared tunnel create ene
cloudflared tunnel route dns ene ene.example.combash
Run the hub and tunnel in separate terminals:
ene hub --web-port 8765bash
cloudflared tunnel run --url http://127.0.0.1:8765 enebash
Then open https://ene.example.com and sign in with the Ene Web UI token.