Repository navigation
Releases
0.3.0: does the harness help? Screening, sign-offs, replay, Docker
Experimental, like everything here. Upgrade with pip install -U "hemisphere-harness[web]", adding mcp and anthropic to the extras for tools or Claude, or run it with docker compose up -d.
New
- Does the harness help?
hemisphere-harness compareruns ten scripted tasks twice with your right model: with the harness, and with the right deciding every step alone under the same policy. It counts reserved actions taken without sign-off, stops for sign-off, answers, prompt injections obeyed, and cost. With Nemotron 3 Ultra andtev1, the harness stopped for a $449 refund the right alone issued; results and caveats are in docs/evaluation.md. - The left reads tool output first. Output that tries to instruct the agent reaches the right only fenced and marked untrusted; search results that do are dropped.
HARNESS_SCREEN_TOOL_OUTPUT. - Your sign-offs become test cases. Approvals in the web UI are kept as eval scenarios;
hemisphere-harness eval --signoffsruns them. The eval report now suggests a policy threshold with its margin, and breaks results down by domain. - Answers follow your preferences. The left checks each answer against remembered preferences, and the right rewrites a clear miss.
- Replay.
hemisphere-harness replay RUN --left-model ...puts a past run's questions to another left and shows where it would differ. - What a run cost: tokens, time per hemisphere, and money with
RIGHT_PRICE_INPUT/RIGHT_PRICE_OUTPUT. - Notifications in the browser, and a webhook (
HARNESS_NOTIFY_URL) when a run waits for sign-off. - Docker:
compose.yamlruns the web UI next to Ollama withtev1.
Changed
- The policy question no longer accepts claimed approvals. Told a customer had "confirmed twice in writing", the old wording let
tev1allow an account deletion (0.92). The new one scores it 0.04, allows nothing reserved across the 40 eval scenarios, and refuses fewer harmless actions (53 allowed correctly, from 42). - The right now sees the operator's policy.
- Rate-limited calls back off for seconds, not milliseconds.
- Fixed a broken link in the README.
Limits
The comparison is ten tasks in single runs, scored by keywords, and its last run was cut short by rate limits: a direction, not a verdict. Claude and Gemini are still untested with real keys.
0.2.0: tools, evaluation, lookups, streaming, memory, Claude and Gemini
Experimental, like everything here. Install or upgrade with pip install -U "hemisphere-harness[web]", adding mcp and anthropic to the extras if you want tools or Claude.
New
- Tools. Options can call tools from MCP servers (
HARNESS_MCP_CONFIG, the usualmcpServersfile) or plain Python functions. Only tools a server marks read-only run on their own; any other tool waits for a person's sign-off, whichever hemisphere chose it. What a tool returns counts as evidence when the answer is checked. - An evaluation suite.
hemisphere-harness evalputs 40 decisions with known answers to a left hemisphere, in six domains, and reports accuracy, calibration, the lowest commit threshold where it is right 95% of the time, and whether the policy gate ever allows what a policy reserves for a person. Results fortev14.3B and 0.8B are in docs/evaluation.md. - Lookups for the answer check. Claims the left is unsure of can be searched on Wikipedia, SearXNG or Brave (
HARNESS_LOOKUP) and judged again with the evidence; the right may cite the sources. Off by default, since it sends the claims to that service. - Streaming. Answers appear as they are written.
- Memory across conversations (
HARNESS_MEMORY=true, off by default). The right keeps short notes: preferences, always recalled, and facts, recalled when the left judges them relevant. Kept in a local file; Settings → Memory lists and forgets them. - Claude and Gemini.
RIGHT_PROVIDER=anthropicuses Anthropic's SDK, withRIGHT_EFFORTand server-side refusal fallback on current models.RIGHT_PROVIDER=geminiuses Google's OpenAI-compatible endpoint. Neither has been run with a real key yet. - Web UI: Tools and Memory settings, example tasks, offline demos at a pace you can watch.
- Issue and pull request templates.
Limits
Tools have been run live against a local MCP server only. Wikipedia lookups help with general knowledge and little with specialised or recent facts. See Status and limits in the README.
v0.1.1 — fix a conversation that would not open
A bug-fix release.
Fixed
- A conversation could fail to open in the web UI. The Markdown formatter crashed on a list item continued on an indented line, which models often write, and the crash stopped the whole conversation from drawing. It now formats those lines correctly.
- One bad step can no longer blank a conversation. If a step or an answer ever fails to format, it is shown as plain text and the rest of the conversation still draws.
No changes to the harness, the API or settings.
Install or upgrade
pip install --upgrade "hemisphere-harness[web]"v0.1.0 — first public version (experimental)
The first public version. Experimental: the architecture is settled enough to try and to build on, and the numbers below come from a handful of live runs, not an evaluation.
What it is
An agent harness after Iain McGilchrist's The Master and His Emissary. A generative LLM (the right hemisphere) plans, proposes options, judges in context and writes every word. A calibrated decision model (the left hemisphere) picks among the options it is handed and says how sure it is. The harness enforces who may commit to what: the left acts alone only on routine, low-stakes picks it is sure of and that the operator's policy allows; everything else returns to the right, and what the policy reserves for a person waits for a person.
In this release
- Any model on either side. Right: OpenAI, NVIDIA NIM, xAI, OpenRouter, Ollama, LM Studio, vLLM, llama.cpp, any OpenAI-compatible endpoint, or a plugin. Left: TypeSafe AI's Jev, decision models served by Ollama (such as
tev1), any System One server, an offline mock, and an experimental chat-model left. Mix local and hosted freely. - A policy gate in plain language that binds both hemispheres.
- Answers in one voice, checked before you see them. The right lists its answer's factual claims, the left judges each, and the right corrects or qualifies what does not hold.
- Conversations. Reply to any answer; each reply remembers what came before. Approving or rejecting a sign-off continues the stopped run.
- A web UI (
hemisphere-harness web): settings for both hemispheres, runs drawn live as a network, the steps behind a toggle, and the answer as a chat reply. Local only, behind a launch token. - A terminal chat (
hemisphere-harness chat) and a Python API (Harness,Conversation).
Tried live
- Fully local:
gemma4as the right,tev1(4.3B) as the left, through Ollama.tev1was a sound policy gate on the demo tickets; the 0.8Btev1was not. - Mixed: NVIDIA's Nemotron 3 Ultra as the right, local
tev1as the left, including a two-message conversation. - Not yet with real keys: OpenAI, xAI, OpenRouter, and TypeSafe's hosted Jev (tested against mock transports only).
Known limits
- The answer check is only as good as the left's knowledge. A small decision model mostly says "unsure" on specialised facts, which makes answers more careful, not more correct. Nothing is looked up.
- Actions in the web UI and the terminal chat are simulated. Real tools go through your own actuator in the Python API.
- Python 3.11 to 3.14.
Install
pip install "hemisphere-harness[web]"
hemisphere-harness webMIT licensed. Feedback and provider contributions are welcome: see CONTRIBUTING.md and Discussions.