Studio¶
hylo-studio is the playground: one web UI over runs, campaigns, learning artifacts and workcells, and the
control plane for robots. hylo-playground is the FastAPI backend (hylo playground); web/ is the React front end,
built into the package.
The playground reads runs and campaigns through the harness's catalog, runs hylo commands as jobs (the same commands
a person would type, with the same checks), and talks to workcells through the workcell API. It never sends
actions to a robot.
Starting it¶
cd studio/web && npm install --ignore-scripts && npm run build && cd ../.. # once; Node >= 18
uv run hylo playground --repo bench # http://127.0.0.1:8765
| Option | Default | Meaning |
|---|---|---|
--repo DIR |
. |
the working directory: the UI shows its examples/configs, examples/evolve and runs/, and runs jobs in it (a bench checkout) |
--root DIR |
runs |
the runs directory, relative to --repo |
--host, --port |
127.0.0.1, 8765 |
|
--token SECRET |
none | require the token on every API call (x-token header or ?token=; open the UI once with ?token=SECRET) |
--judge PATH_OR_ID |
artifact:l10-trace-v2@54a1efadf00d34d8 when in the store |
the success judge for progress curves; a path or a store id |
--workcell NAME=URL[#TOKEN] |
none | a workcell service (repeatable) |
--policy NAME=WS_URL[#TOKEN] |
none | a policy server endpoint (repeatable) |
--role-token ROLE=TOKEN |
none | viewer / operator / approver tokens (repeatable) |
Development with hot reload: uv run hylo-playground and, in studio/web, npm run dev (Vite proxies /api).
Pages¶
| Page | What it shows and does |
|---|---|
| Overview | runs, campaigns and artifacts at a glance, the improvement cascade over every campaign |
| Live sandbox | one episode of any experiment config, streamed frame by frame |
| Runs | every recorded run; per-task success; episode replay |
| Compare | two runs paired on (task, seed) |
| Self-improvement | campaigns, cycles, candidates, gate statistics, the ledger; approve or roll back |
| Experience & learning | skills, lessons, action memories, sealed artifacts with provenance and calibration |
| Jobs | hylo run, hylo evolve run and hylo calibrate in the background, with their logs |
| Operator station | episodes on a workcell with a chosen policy server; reset, verdicts, stop, e-stop |
Runs and replay¶
The runs page lists every run under the runs directory (benchmark, split, agent, success, episodes), filtered by split or text. Opening an episode replays it from its trace: camera frames, executed actions, chunk boundaries, safety interventions, and the success judge's estimate along the episode.
Compare¶
Two runs of the same benchmark split, paired on (task, seed): wins and losses, the one-sided exact McNemar p-value,
per-task deltas, and side-by-side replays of the discordant pairs (where one run succeeded and the other failed).
This is the same test as hylo bench compare and the gate.
Self-improvement¶
Every campaign under the runs directory: its cycles, the candidates with their hypotheses, the search_val and
group-sequential gate statistics, vetoes, the promotion ledger and the active version
(campaigns). A candidate that passed the gate and waits for approval can be approved here
(hylo evolve approve); the active version can be rolled back with a reason (hylo evolve rollback). Both need the
approver role.
Live sandbox¶
Runs one episode of any experiment config (MuJoCo, LIBERO with SmolVLA, ...) through the unchanged kernel and SafetyShield, streamed as it happens. You choose the task and init state from the benchmark, change config overrides, and give the agent a different instruction (the environment's task and success check stay the same). Overrides of the protected scopes (safety, benchmark, trace, scoring) are refused. Environment and agent stay warm between episodes of the same configuration, since loading a VLA takes tens of seconds.
Live episodes are saved under runs/playground/live/<run_id> with split playground, which no learner and no gate
ever reads.
Jobs¶
Starts the CLI in the background in the --repo directory and follows its log (runs/playground/jobs/<id>.log).
Jobs are subprocesses of the playground; there is no queue or scheduler yet (RFC-0005 part 6). The page offers
evaluation, campaigns and judge calibration; the API (POST /api/jobs) also accepts learn jobs.
Operator station¶
The control plane for workcells: pick a workcell (--workcell) and a policy server (--policy), start an episode
on a benchmark task or with a free-form instruction, and follow the workcell's live stream. When the workcell waits,
confirm the scene reset (reset_done) or judge the outcome (success, partial, failure); stop an episode, press the
e-stop, clear a latched fault. See deployment for what each event does.
uv run hylo serve policy --agent '{"type": "bringup.wave", "params": {"amplitude": 12, "horizon": 15}}' --port 8002
uv run hylo serve workcell --config deployments-template/workcells/sim_arm.yaml --port 8102
uv run hylo playground --repo bench --workcell sim-arm=http://127.0.0.1:8102 --policy wave=ws://127.0.0.1:8002/hylo
Roles¶
Without --role-token (and without --token) the local user has every role. With role tokens:
| Role | Can |
|---|---|
| viewer | read everything, and press the e-stop (stopping is never gated behind a higher role) |
| operator | start episodes; reset, verdict, stop, clear a fault; the live sandbox; jobs |
| approver | everything, plus approving and rolling back campaign versions |
The server binds to 127.0.0.1 by default. Put it behind your own authentication before exposing it on a network.