Mouse Mouse 0.1.0, an open source harness for long-running coding agents built on OpenCode, passed 25 of 30 tasks (83.3%) on FrontierHarness Eval with Kimi K3 on 2026-09-08, at a cost of $2.79 per pass and a median 6m 24s per task. FrontierHarness's published numbers show Mouse ahead of Codex (66.7%, 20/30), Claude Code (63.3%, 19/30), DSH Creator (63.3%, 19/30), Pi (60.0%, 18/30), and OpenCode (50.0%, 15/30) on the same model. Mouse runs a completion loop after every model turn that inspects workspace changes, runs repository checks, blocks runs when tests or check configuration are deleted, and audits requirements via a MOUSE_AUDIT block. An open source harness for long-running coding agents. Mouse is built on OpenCode. www.mouse.dev http://www.mouse.dev Benchmark frontierharness-eval · Install install · How it works how-it-works · Commands commands · Packages packages · Docs https://github.com/mousedev/mouse-harness/blob/main/docs/index.md Mouse passed 25 of the 30 tasks on FrontierHarness Eval https://frontierharness.org/ with Kimi K3 on 2026-09-08. | Harness | Pass rate | Cost per pass | Cache hit, median | Time per task, median | |---|---|---|---|---| | Mouse 0.1.0 | 83.3% 25/30 | $2.79 | 90.6% | 6m 24s | | Codex | 66.7% 20/30 | $3.47 | 88.0% | 6m 43s | | Claude Code | 63.3% 19/30 | $18.34 | 67.8% | 9m 38s | | DSH Creator | 63.3% 19/30 | $3.28 | 84.3% | 6m 44s | | Pi | 60.0% 18/30 | $2.43 | 79.4% | 7m 33s | | OpenCode | 50.0% 15/30 | $3.24 | 78.4% | 6m 27s | FrontierHarness's published numbers. The benchmark uses the same model, Kimi K3, so the evaluation comes from the harness's ability to complete tasks. Mouse needs Node 22 and the opencode binary with a model provider configured. OpenCode 1.18.27 is the version the benchmark ran on; 1.14.22 is also exercised in CI. From source, today: git clone https://github.com/mousedev/mouse-harness && cd mouse-harness pnpm install --frozen-lockfile --ignore-scripts pnpm bundle - packages/cli/dist/mouse.mjs, one file npm i -g opencode-ai@1.18.27 OpenCode's postinstall links its binary; do not pass --ignore-scripts alias mouse="node $PWD/packages/cli/dist/mouse.mjs" From npm, once 0.1.1 is published docs/releasing.md https://github.com/mousedev/mouse-harness/blob/main/docs/releasing.md has the steps : npm i -g --ignore-scripts @mousedev/harness npm i -g opencode-ai@1.18.27 Then, in a repository: mouse doctor --model openrouter/moonshotai/kimi-k3 mouse run "Add rate limiting to /api/upload and cover it with tests" --model openrouter/moonshotai/kimi-k3 doctor shows where it found OpenCode, whether the provider key is set, and which checks Mouse detected. Any OpenCode model id works with --model ; MOUSE MODEL in the environment sets it once. The quickstart https://github.com/mousedev/mouse-harness/blob/main/docs/quickstart.md walks through a first run and what the output means. Mouse runs a completion loop after every model turn, which enforces a set of rules and verification that significantly improves the agents ability to correctly complete task. For this reason it generates the highest pass rate on difficult and long running tasks. 1. Inspect the changes. The workspace is fingerprinted with git status and a diff against the starting commit. If nothing changed, the model is told so and asked to continue. 2. Run the checks. When files changed, the repository's checks run. Failing output goes back to the model with the instruction to fix the failure and leave the tests alone. 3. Scan for deleted tests. Deleting a test, spec, or workflow file that existed at the starting commit ends the run as blocked . Co-located tests foo.test.ts , x test.go , conftest.py and check configuration vitest.config.ts , pytest.ini , Makefile count too. The loop enforces this in code, not in the prompt. 4. Audit the requirements. Once the checks pass, the model is asked to go back over the original task and end its reply with a MOUSE AUDIT block, one line per requirement, each marked done with the evidence or todo . Any todo sends it round again. A run is satisfied when the workspace changed, no checks have failed, and the audit has no more todo items. It stops early when progress stalls for a configurable number of rounds or step budget runs our. You can also hit Ctrl-C. Every stop reason has its own exit code, which is documented. Mouse is designed to enforce certain behaviors from the agent, which prevents an agent from cheating or hallucinating on a task or goal. The Test scan is specifically useful for long running agents that try to hide their failed tests or work. Because Mouse stays in the same session, the majority of the re-work is cached, and cheap. Each run writes a JSONL trace under ~/.mouse/runs/ , outside the repository. Nothing is written into your repository, and with the default local profile nothing is written under ~/.config/opencode either. Completion loop https://github.com/mousedev/mouse-harness/blob/main/docs/loop.md · Audit protocol https://github.com/mousedev/mouse-harness/blob/main/docs/audit-protocol.md · Trace format https://github.com/mousedev/mouse-harness/blob/main/docs/trace.md Mouse detects checks from the repository's manifests. No Mouse configuration file is needed. | Repository | Checks | |---|---| | JavaScript / TypeScript | package.json scripts: build or typecheck , test , lint , run with the package manager the lockfile names | | Python | pytest , through uv or poetry when their lockfile is present | | Go | go test ./... | | Rust | cargo test | | Make | make test , when nothing else was detected | To declare your own, run mouse init . It writes a .mouse/policy.json skeleton with every default spelled out; docs/config.md https://github.com/mousedev/mouse-harness/blob/main/docs/config.md has the field reference, the flags, and the environment variables. | Command | Purpose | |---|---| | mouse run | Run a task, from a string or --instruction-file | | mouse doctor | Report the engine, the model's key, the git state, the detected checks, and the trace directory | | mouse init | Write a .mouse/policy.json skeleton | | mouse config | Print the OpenCode config Mouse sends local , or write the bench profile's opencode.json | | mouse --version | mouse/