Web interface

For model setup, project conversations, tool installation and autonomous research, start with the research workspace. Running simjecture web without a campaign opens the workspace. /monitor opens the detailed experiment view below, labelled Study details · Evidence & review; supplying a campaign directory still opens that view directly. Workspace studies expose a shared Conversation → Study → Evidence & review trail and Back to this conversation. The owning conversation is resolved from recorded study ownership, not a browser return URL. Standalone CLI studies show Standalone study, without inventing a conversation. Read-only sessions keep navigation while disabling mutations.

The permanent dark rail has an experiment-monitor button above its bottom account button. Open the account menu for theme, workspace details and the GitHub link; local workspaces also offer Connections there. The chat input stays compact when empty, expands with the draft and offers a larger editor for long messages. Its model menu contains the local agent, model and effort choices. Narrow inspector tabs have overflow arrows and accept horizontal scrolling or the mouse wheel.

The hosted service uses the same layout with operator-managed compute and models. Signed-in visitors can upload files and keep their work. Guest work is temporary. Clicking a hosted artifact downloads it; plots can still be previewed inside the conversation.

The local web interface is the primary human-facing view of a Simjecture campaign. It makes the scientific structure visible without replacing the durable record. New native studies default to minimal; mode, backend and model are separate launch choices. Minimal reads research.json, experiment snapshots, commitments and reviews. Legacy mvp_manifest.json, transcript.jsonl, hypothesis_ledger.json, mvp_report.json, and artifact provenance remain the sources of truth.

Minimal studies show actual agent activity instead of the fixed-stage role strip. The header shows mode/backend/model and remaining budget. Long guidance and review rationales fold away, with failed reviews expanded. Usage is pending/unavailable when the backend has not supplied counters, never assumed to be zero. DSH/API remain explicitly labelled legacy routes; incompatible combinations are disabled.

Open a recorded campaign

The browser interface is included in the core installation and has no Node.js build or optional Python dependency:

uv sync --frozen
uv run simjecture web demos/gray_scott_counterexample/record

This starts a local server at http://127.0.0.1:8765/ and opens the default browser. Use --no-open to print the address without opening it, --open to state the default explicitly, or --port 0 to select an available local port automatically.

The interface has five connected projections:

  • Claim graph: one view of the durable ledger, with all four claim kinds as first-class nodes: scientific, instrument, diagnostic, and control. Claim records and inspectors retain their relations, including repairs, refines, alternate, instrument_of, diagnostic_of, and control_for. Scientific-only mode is a visual filter over this graph, not a second hypothesis data structure. A derived commissioning-stage node exposes the workflow dependency hidden by the parent-owned ledger representation. Scientific hierarchy arrows remain parent → child; prerequisite arrows point instrument claim → qualifies → commissioning → enables evidence for → scientific target. Diagnostic and control prerequisites likewise point into their scientific target. The stage and every supporting-claim inspector name that target. This exposes the capability evidence gate and guided starting point without becoming a fifth durable claim kind or changing the underlying ledger.

  • Claim inspector: click any of the four node kinds to see its rationale, parent and child relations, prospective evidence contracts, linked evidence, closure reason, and iteration metadata.

  • Execution monitor: recent simulations and calculations appear as separate runs. Select one run to inspect its state, command binding, elapsed time, heartbeat I/O, workspace size, return code, and bounded console excerpt.

  • Research trace: typed model decisions, the model-authored research_note, tool outcomes, retries, routes, and input/output/reasoning/cache token counts. This is an auditable laboratory trace, not a representation of a provider’s private hidden chain-of-thought. A durable loop strip above the trace names the current stage (commissioning, falsification, repair, or adjudication), active role (Falsifier, Scientist, or Judge), repair cycle, active claim, and remaining wall time. Its moving bar is intentionally indeterminate: an open scientific search has no honest completion percentage.

  • Artifacts and conclusion: contained workspace results, generated figures, audit records, and the terminal answer when one exists.

The graph uses the bundled Dagre engine to compute both left-to-right and top-to-bottom layered layouts, then selects the orientation that permits the largest on-screen text while every visible node still fits. This happens on first load and whenever the claim set changes. Scroll over the canvas to zoom around the cursor, drag empty canvas to pan, use Fit all to recover the complete view, or use the plus/minus controls for centered zoom. Each node is keyboard-selectable and independently draggable. Positions are stored under a campaign-specific browser key and never written into the durable run; Reset layout removes the local arrangement and recomputes the optimal layout. Node copy is line-bounded, ellipsized, and clipped to its box. The four kinds use distinct node treatments while their status is shown separately, so claim type is never inferred from supported or falsified state. Expanded contract and evidence sections remain open while the one-second live refresh advances. The header theme button switches between the high-contrast light and dark palettes and remembers the choice locally.

Human-facing scientific text is rendered as sanitized Markdown throughout the campaign heading, claim inspector, contracts, evidence assessments, research notes, and conclusion. Inline code, fenced code, lists, tables, links, and TeX delimiters are supported; TeX is converted to MathML. The browser bundles its pinned parser, sanitizer, and math renderer locally and makes no CDN request. Raw HTML, images, form controls, embedded objects, and unsafe links are removed before display. For legacy natural-language hypotheses that predate the Markdown convention, a conservative display-only adapter recognizes common ASCII forms such as 0 < theta_0 <= 2.5 rad and T_0 = 2*pi*sqrt(L/g) and supplies TeX delimiters before rendering. Explicit Markdown math and inline code are left untouched. The underlying JSON record remains unchanged.

The built-in scientific-markdown skill tells the autonomous agent how to use this presentation layer without moving estimator definitions, units, normalizations, thresholds, or validation checks out of machine-readable evidence artifacts.

The execution monitor deliberately does not invent a percentage for an unbounded scientific search. A running command uses an indeterminate activity bar and reports only observed state, heartbeat, time, I/O, and resource values. When several runs exist, the left-hand list selects the one shared console view; the page does not create a wall of simultaneous terminals.

Follow or control a campaign

Attach the browser to an existing output directory:

uv run simjecture web artifacts/my-campaign

The server polls only durable, fsynced state. A missing terminal report is not enough to label a process as running: the green running state requires a supervisor record that still matches the PID, process start time, command line, and output directory.

Pause, resume, and stop use the same verified control functions as the CLI and Textual dashboard. Pause is cooperative at the next action boundary. Stop sends SIGINT and a bounded SIGTERM fallback only to a verified process. Closing the browser or pressing Ctrl-C in the server terminal does not stop a campaign.

For review or screen sharing, disable every mutation:

uv run simjecture web demos/gray_scott_counterexample/record --read-only

Advanced hypothesis launch

Open /monitor and select New hypothesis for the advanced launch form. For conversation-led setup and research, use the workspace’s New conversation instead. The form keeps the immutable root hypothesis separate from optional operational guidance and records the execution envelope before starting the runner. The child process inherits provider credentials from the terminal environment; the advanced form does not request an API key. The separate workspace Connections page stores a user-supplied compatible API key in a private mode-0600 server file; it does not send that key back to the browser.

export DEEPSEEK_API_KEY='your-process-local-key'
uv run simjecture web --runs-root artifacts

Campaigns launched in the browser use the same structured operator_input/launch.json contract as the TUI and CLI. No shell command is constructed from hypothesis text. Legacy DSH campaigns use an installed DeepSeek Harness profile. DSH owns provider routing, retries, conversation compaction, and the resumable model session; Simjecture continues to own the hypothesis graph, evidence rules, sandbox, capabilities, jobs, and durable scientific record. The DSH session is stored inside the campaign and reopened by Resume rather than replaced with a blank model conversation.

The built-in reasoning loop remains available for compatibility and diagnosis:

uv run simjecture web --engine native

Viewing and controlling an already recorded campaign does not require Node.js or DSH. Only the explicit legacy DSH route needs the DSH deployment guide.

Local security boundary

For the separate development public trial gateway, see public trials. Its controlled tools and visitor sessions do not change the operator workspace’s boundary described below.

The local web interface is intentionally an operator tool rather than a hosted service:

  • the server refuses non-loopback bind addresses;

  • mutating requests require an unguessable per-process control token and a same-origin JSON request;

  • no cross-origin access is enabled;

  • artifact paths are contained inside the selected run and symbolic links are not served;

  • a restrictive content-security policy blocks external scripts and frames.

It does not provide remote authentication, multi-user ownership, or a public deployment boundary. Use the headless commands or TUI over SSH; do not proxy the local server onto a network. Use SSH port forwarding for remote hosts.

Compatibility clients

The browser, Textual dashboard, status, and watch are clients of the same durable projection. New interactive UX is developed for the browser. The TUI is maintained for SSH and machines without a browser, while status and watch remain the stable headless clients. See Terminal interface.