Onus docs
The web interface · Onus docs

The web interface

The web interface: onus ui opens all of it in your browser

onus ui opens everything Onus does for a repository in your browser: the map, reports, lanes and the judge, environments and evidence, tokens, escalations, the audit log and outcomes. It ships inside the binary; nothing is installed and nothing leaves your machine.

onus ui                      # the repository containing the current directory
onus ui --repo ../shop --port 0 --no-open

It prints an address such as http://127.0.0.1:4387/#token=… and opens it.

What it shows

PageWhat you can do
OverviewMap totals, the component graph, uncommitted work, recent commits, what is set up
MapThe component graph (pan and zoom, by layer or by folder, focus on a component and its neighbours, filter imports, calls and types), a treemap by folder and size, components, files, events and external services; find symbols; per component, symbol and file: owners, public surface, dependents, dependencies, tests, declared invariants, and the impact of a change
ChangesCheck uncommitted work (what onus_check gives an agent), or report any two refs, with an intent; download Markdown or JSON
Lanes & judgeThe lane policy; submissions agents handed in over MCP; make a submission with evidence from the store, classify it and run the judge
EnvironmentsCreate environments, run commands, browse the evidence store and its artifacts, run a test once
OutcomesChanges by week and lane, each agent setup's progress toward auto-merge, pull requests in flight, totals per agent setup and judge, the human-lane share and audit miss rate; record outcomes and incidents and find reverts, or fetch the records the GitHub Action keeps
Tokens & scopesGenerate a root key, plan a task, suggest reads, mint, inspect, check and narrow tokens
EscalationsFile requests with evidence; decide by policy, grant or deny
Audit logEvery decision, and whether the hash chain is intact
onus.yamlEdit it with a form (components, labels, boundary rules, contracts, lanes, events and services, tests, the environment) or as YAML, checked as you type; review the changes and save. Edits touch only the lines they change, so comments and alignment stay as written, and the map is rebuilt with the new config at once. Start from what onus init suggests
GuideThis guide
The map follows the files on disk, so pages show your work as you edit.

Where things are kept

  • Outcome records: .onus/outcomes.jsonl (--outcomes); when that file does not exist, the onus/records branch the GitHub Action keeps (origin/onus/records), read-only
  • The audit log: .onus/audit.jsonl (--audit)
  • Escalation requests: .onus/escalations/ (--escalations), with granted tokens beside them for the agent to collect
  • Submissions from agents: .onus/submissions/
  • The root key pair: ~/.onus-keys (--keys)
  • Evidence: the repository's git directory, as for onus env

Security

The server listens on 127.0.0.1 only and answers only requests addressed to a loopback name, so a web page elsewhere cannot reach it through DNS rebinding. Its API needs the session token from the address it printed; the token travels in the address's fragment, which browsers never send to a server, and the page keeps it for the tab only. Cross-origin requests are refused. Anyone who can run programs as you can already do what the interface does.

Building from source

Release binaries include the interface. A build from source embeds it when ui/build exists:

cd ui && npm ci && npm run build
cargo build --release -p onus-cli

Without it, onus ui serves the API and a page that says how to add the interface. To work on the interface itself, run ONUS_UI_TOKEN=dev onus ui --no-open and, in ui/, npm run dev, then open http://localhost:5173/#token=dev.