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.
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.
Install locked dependencies
./scripts/install
.venv/bin/tandem --helpExpected: 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
./scripts/dev --port 3278Open 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
./scripts/run --repo /absolute/path/to/project --port 3278Replace 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.
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. |