Claimed versus observed: the gap is the product.
The LLM is a sensor, not a judge. The model turns messy reality into typed claims that carry their evidence. Deterministic code verifies those claims, makes every decision and computes every number. Humans approve anything that acts.
Parallax reads two pictures of a project: what the tickets claim is done, and what the commit history shows was actually worked on.
The Drift Index is the measured gap between those two pictures for each stream of work, so a workstream claimed finished with no activity behind it rises to the top.
The morning brief is assembled only from computed statistics, and every number in it traces back to a stored figure.
There is no web application here. Every endpoint below is JSON, and both reads and writes
require a bearer token; unauthenticated requests are refused with 401. The
interactive schema at /docs is deliberately public so the route map can be
read without credentials.
| method | path | what it does |
|---|---|---|
| POST | /api/v1/projects | create a project and its workstreams |
| POST | /api/v1/projects/{id}/claimed/import | import claimed items |
| POST | /api/v1/projects/{id}/observed/import | import observed commits |
| POST | /api/v1/projects/{id}/drift/compute | compute the Drift Index |
| GET | /api/v1/projects/{id}/drift | stored drift rows |
| GET | /api/v1/workstreams/{id}/drift | drift for one workstream |
| POST | /api/v1/projects/{id}/brief | generate the morning brief |
| GET | /api/v1/projects/{id}/brief | latest brief |
| POST | /api/v1/briefs/{id}/narrate | narrate the brief (key-gated) |
version 0.3.2 · commit f87d338 ·
built 2026-08-03T02:41:12Z · environment production
Values are baked from build arguments. unknown means the image was built without
them, which is reported rather than replaced with a plausible-looking string.