harness
A local-first agent harness that makes a local quantized 30B model reliable enough to run unattended.
- Repository
- github.com/PositiveControl/harness
The project
An autonomous execution loop drives a planned workplan toward closure: a spec-to-plan compiler behind an operator approval gate, an executor working one issue per turn, and a turn state machine (ASSESS, WRITE_TEST, IMPLEMENT, VERIFY, CLOSE, with halt reachable from any phase). A critic loop requires consecutive clean passes before declaring convergence, because a single clean pass can be a transient model artifact.
Observed failures become deterministic guards rather than prompt tweaks: premise checks before test-writing, synthesis of structurally-always-red gates, plan linting against over-scoped work, and a pre-commit interceptor that blocks a false success acknowledgement before the model can see it.
A cite-grounded verification tool over 2,437 chunks of FAA air-traffic-control phraseology regulation holds a two-gate cite-or-silent policy: empty retrieval short-circuits without invoking the model, and a citation absent from the retrieved anchors is refused rather than returned. It is scored against a hand-labeled fixture that includes real recorded audio.
Eleven eval suites cover retrieval quality, tool-selection accuracy, tool-loop behavior and session resumption. Model selection is fixture-driven: a router bake-off scoring four candidate models from 1.00 down to 0.40 settled which one shipped.
Memory is append-only episodic and semantic stores over SQLite with embeddings, with a three-tier seed, working, consolidated write path and rows that support non-destructive re-embedding when models are swapped. 4,231 tests run against real SQLite stores, with no mocks, and mypy --strict covers 399 source files; both are gated in pre-commit and pre-push.
At a glance
- Role
- Creator and maintainer
- Stack
- Python, MLX on Apple Silicon, SQLite
- Status
- In development
How it was built
Built in phases from April 2026, with most changes tracked as a bd issue from the second day. There is no hosted CI, so ruff, mypy --strict and the test suite are the gates, run in pre-commit and pre-push. In September the /pick chain was ported in and remapped onto bd: issues became beads, and the local gates stand in for CI. The same discipline runs inside the harness: its driver works a planned workplan one issue per turn behind an operator approval gate, and an observed failure becomes a deterministic guard rather than a prompt tweak.