Search documentation

Documentation sections

## Get started

[Start here](/docs)[Source and release](/docs/source)[Local quickstart](/docs/local)

## Run

[GitLab deployment](/docs/installation)[First review](/docs/review)

## Understand

[Architecture](/docs/architecture)[Storage and index](/docs/data)[Tenants and policies](/docs/access)[Integrations](/docs/integrations)

## Operate

[Operations](/docs/operations)[Acceptance](/docs/acceptance)

# Run the local tool.

Single-user evaluation. No GitLab, PostgreSQL or model is needed for the offline rule.

## Try the public example now

The before/after source and tests can run without installing Null. This replays the test cases from a recorded review; it does not call a model.

```sh
curl --fail --location https://null.review/examples/review-journey.zip --output review-journey.zip
unzip review-journey.zip -d review-journey
python3 -m unittest discover -s review-journey/after -p 'test_*.py'
```

Expected: 8 tests pass. See README.md in the archive for the original run and its limits.

## Before you start

Obtain the source package first. These commands run from its extracted root. You need Python 3.12 and uv; dependency installation requires network access. The package is not currently on PyPI.

[Get source and check release status](/docs/source)

## Install locked dependencies

```sh
./scripts/install
.venv/bin/tandem --help
```

Expected: a local .venv, a private .env and CLI help listing serve, index, propose, apply and test. No model call is made.

## Open the isolated demo

```sh
./scripts/dev --port 3278
```

Open http://127.0.0.1:3278. The interface names the sample Orbit API. Index files, propose a final newline, inspect the diff and apply it with confirmation. Stop with Ctrl+C.

## Use your own repository

```sh
./scripts/run --repo /absolute/path/to/project --port 3278
```

Replace the path with an existing local repository. Source files are read only when selected/indexed; proposals need a separate apply action. This single-user server binds to loopback and must stay private.

## What this mode proves

Without a model the only edit rule adds a final newline. This is a real deterministic operation, not AI review. Local history uses SQLite. Corporate services use PostgreSQL and a different deployment path.

[Continue to GitLab deployment](/docs/installation)

## If the start fails

| Problem | Next action  |
| --- | --- |

| uv: command not found | Install uv from docs.astral.sh/uv, then retry install.  |

| Address already in use | Choose another --port and open that same port.  |

| No proposal | Select a text file missing its final newline. Arbitrary tasks require a configured model.  |

[PreviousSource and release](/docs/source)[NextGitLab deployment](/docs/installation)

## On this page

[Try the public example now](#public-example)[Before you start](#before)[Install locked dependencies](#install)[Open the isolated demo](#demo)[Use your own repository](#own-repo)[What this mode proves](#limits)[If the start fails](#errors)[Markdown ↗](/docs/local.md)
