helix studio¶
Launch Helix Studio — a single-page web portal that tails /tmp/helix.log,
parses agent events (LLM requests, tool calls, ReAct iterations, AG-UI
messages), and pushes them to a browser-side dashboard over WebSocket.
Also reverse-proxies the management and health APIs so the portal can
query routes, components, and uptime alongside the live event feed.
Usage¶
Flags¶
| Flag | Default | Description |
|---|---|---|
--port |
4400 |
HTTP port the Studio portal listens on. |
--api |
http://localhost:9090 |
Management API base URL (reverse-proxied as /api/proxy/...). |
--health |
http://localhost:8181 |
Health API base URL (reverse-proxied as /api/health-proxy/...). |
--log |
/tmp/helix.log on Unix, <TempDir>/helix.log on Windows |
Helix log file to tail. |
This is the only Helix subcommand that uses Go's flag package — the
form is --name value or --name=value.
Behavior notes¶
- Requires
$HELIX_LICENSE. Verified at process start. - The portal is shipped as a single embedded HTML file (compiled in via
go:embed). Served at/and/index.html. - WebSocket endpoint:
/ws. New clients receive a replay of the last 2000 broadcast events on connect so reloads don't lose context. - Log tailing polls every 200ms. Handles rotation (different inode) and truncation transparently — when the inode changes or the file shrinks, the position is reset to 0 so events from the new log are picked up.
- The tail parser recognises the structured-slog lines emitted by the
agent and synthesises typed
studioEventrecords:llm_request,llm_response,llm_streaming,llm_error,final_answer,tool_call,tool_result,tool_calls,tool_error,react_start,agui_message, plus a genericerrorfor any line containingERROR. Lines that don't match any pattern are silently skipped. - Reverse proxies use Go's
httputil.NewSingleHostReverseProxywithhttp.StripPrefix—/api/proxy/...rewrites to--api,/api/health-proxy/...rewrites to--health. CORS is handled by proxy origin sameness; the browser only ever talks to the Studio. - The server listens before printing the banner so port-in-use errors surface before "Studio started" is logged.
- Studio is a separate process from the daemon. To get the most out of
it, run
helix start app.yamlfirst (so/tmp/helix.logis being written and--api/--healthare reachable), thenhelix studio.
Examples¶
Run with all defaults — works out of the box after helix start:
Different ports (useful in dev with multiple daemons):
Tail a custom log location:
Source¶
cmd/helix/studio.go lines 412-467 (cmdStudio),
36-98 (wsHub),
155-214 (tailLog),
216-344 (parseLine),
cmd/helix/studio/index.html (embedded HTML).
See also¶
helix start,helix status- Observability guide
- Studio incident-controls TODO