# Web demo

Try examples and configure a chat in harness-web.

harness-web is a separate local application for trying repository examples and configuring a general chat agent. It runs real SDK code behind a React interface.

## Start the application

Run these commands from a clone of the repository, not the standalone website directory.

~~~bash
uv sync --all-extras
npm --prefix harness-web ci
npm --prefix harness-web run build
uv run python harness-web/run.py
~~~

Open http://127.0.0.1:8765. The Python server serves the frontend build. The website you are reading is independent of this local application.

## Configure General chat

Open **General chat**, choose a configured provider and model, then select the settings/sliders button beside the chat title.

Conversation setup lets you:

- Edit the system prompt while retaining conversation history.
- Upload and remove Markdown skills.
- Connect a local stdio command or a remote HTTP/SSE MCP endpoint.
- Inspect discovered tools and choose Ask, Allow, or Deny for an MCP server.

Stop or finish an active response before changing its setup. Skills are limited to 256 KB and belong to the conversation. File writes and ASK tool calls wait for an explicit browser approval.

MCP command arguments are parsed into an argument vector, not passed through a shell. Remote authentication headers are not currently exposed in the setup form.

## Configure model keys

Keys stay in the Python server's environment or the SDK repository's .env. They are not sent to the browser by the configuration API.

Restart the server after changing environment variables. The health check verifies credential and package presence; it does not make a live provider request.

The Local demo option uses scripted responses and a real calculator. It can demonstrate tool execution without an API key, but it is not an open-ended language model.

## Understand storage

| Data | Current location |
| --- | --- |
| Chat IDs, run IDs, messages, pending approvals | Python process memory |
| Uploaded skills | .harness-web/chats/.../skills/ |
| Generated files | Conversation or example working directory |
| Model credentials | Server environment / repository .env |

A browser refresh retains a live server's state. Restarting the server loses conversations and run history; files remain on disk. Durable session storage for the web app is not implemented yet.

## Use the example library

The example library launches the source entry points, streams output, presents terminal inputs and approvals, and exposes generated files for download. Choose an offline example first, then qualify the live integrations you need.

**Jev routing**, **Jev document classification**, and **Jev answer review** are available as offline demos using fixed decisions and scripted agent responses. They require no model keys. Routing demonstrates a caller-supplied `0.8` confidence threshold; review shows a Score rubric and Noul evidence probability without changing the original agent result. Use the [command-line examples](../decisions/#install-and-enable-live-decisions) for explicit live Jev calls.

The application is for a trusted local developer. It is not an authenticated multi-tenant service or an operating-system sandbox.
