Panels#
A panel is a self-contained, themed mini-app the Web Terminal shows as a tab beside the chat. OSPREY’s own tools — Channel Finder, ARIEL, the lattice dashboard, the artifact gallery — are all panels, and you can add your own. Because panels use the shared design tokens (Theming), they match your theme automatically, in light and dark, with no extra work.
Enable OSPREY’s built-in panels in config.yml:
web:
panels:
ariel: true
channel-finder: true
lattice: true
Panels backed by a URL#
An entry under web.panels can also declare a URL-backed panel — a tab
that shows another web service inside the terminal. This is how the EVENTS
dashboard and the Bluesky PLAN / RESULTS tabs ship in the
control-assistant preset (a build that includes those stacks registers
the entries for you):
web:
panels:
events:
label: EVENTS
url: http://127.0.0.1:8020 # the backing service
path: /dashboard # optional: page the tab opens (default /)
health_endpoint: /healthz # optional: lets the hub report status
The hub shows the service as a tab and proxies requests to it from the same origin, so the browser never needs direct access to the backing port.
Adding your own panel#
The easy path is the guided skill — a coding agent follows it to produce a panel that already meets every rule:
osprey skills install creating-an-osprey-panel
Once the panel is written and validated, drop its folder under your project’s
panels/ directory and turn on discovery:
web:
allow_runtime_panels: true # off by default
On the next start, every valid panel under panels/ shows up as a tab. Invalid
ones are skipped and logged, so one bad panel never breaks the others.
Warning
The Web Terminal has no application-level login. Turning on
allow_runtime_panels serves whatever panels are on disk to anyone who can
reach the port — right for the intended single-operator, local setup, but a
facility that exposes the terminal more widely should put its own
authentication in front of it.
Panel layouts (“presets”)#
A layout is a named set of panels an operator applies in one click — “the
machine-setup view is these four panels.” Define them under web.presets, where
each key is the menu label and each value is the exact set of panels to show:
web:
presets:
"Machine setup": [channel-finder, lattice, artifacts, okf]
"Logbook review": [ariel, artifacts]
Each layout appears under a Layouts section at the top of the panel +
menu. Picking one is exclusive: its panels open and every other panel closes.
Members must be enabled built-in panels or custom panels you have declared; an
unknown id is dropped with a warning, and a layout with no valid members is
skipped. When no web.presets are configured — the default — the + menu is
unchanged, so layouts never add clutter to a deployment that has not opted in.
Layouts are just a shortcut over the ordinary show/hide of panels, so the OSPREY
agent can achieve the same result with its show_panel / hide_panel tools;
list_panels reports the configured layouts so the agent can honor a request
like “set up for machine setup.”
Going deeper — how panels work
You only need this to write a panel by hand or wire a new one into the hub;
the creating-an-osprey-panel skill and the source (which the panel
validator and its browser test suite back) are the real reference. The rough
idea:
A panel is one HTML entry point plus a manifest.json (its id, label,
entry file, and version). Two rules make it theme itself for free, and a
validator enforces both: it must boot the shared theme before the page
paints (so it never flashes the wrong colors), and it must use only
design tokens for color — never a raw hex value. Copy OSPREY’s
reference panel and you start compliant.
Discovered panels are served straight from disk, from the same origin as
the terminal — no proxy. Discovery is fail-closed: only a fully valid
panel is ever served. The allow_runtime_panels switch is deliberately
off by default because it is also what lets the agent register panels at
runtime — turning it on is your explicit decision to trust the panels the
terminal makes available.
The hub and its panels coordinate over a small shared contract — enough for a panel to pick up the current theme and to hide its own logo when embedded, so it sits flush inside the hub instead of showing two titles. The browser test suite is the exact, up-to-date spec; this is only the shape of it.
See also
- Theming
The design tokens panels style against.
- Run the Web Terminal
Running the terminal that hosts them.