neuralmind.uk / Task-outcome benchmark — pre-registration Edit this page on GitHub ↗

Task-outcome benchmark — pre-registration

Status: pre-registered; pilot run 2026-10-20 (claim not supported, see the change log); confirmatory run not started · Harness: evals/task_outcome/

Every number NeuralMind publishes today measures retrieval: whether the right file reaches the agent’s context, and at what token cost. None measures what a company pays for: whether an agent finishes real work for less, without finishing less of it. The headline ratio (51–242× fewer tokens than pasting every source file) uses a baseline no agent follows. Agents search and read a few files. So the saving that matters is the exploration an agent skips, and it can be zero, or negative when NeuralMind’s context is added to a question the agent would have answered in one search.

This document fixes, before any agent runs, what is measured, how, and what result supports which sentence. It is committed before the first run, and any change after that is recorded in the change log at the end with its reason.

Question

Given the same real bug-fix tasks, does the same coding agent cost less per task with NeuralMind than without it, without solving fewer of them?

Design

Tasks. Bug fixes from this repository’s history, each turned into a task by evals/task_outcome/harvest.py:

Selection rule. A commit becomes a candidate task when all of these hold:

evals/task_outcome/select_tasks.py then draws the pilot’s tasks:

  1. It shuffles the candidates, sorted by commit, with random.Random(20261014).
  2. It walks them in that order, skipping any excluded candidate. Each exclusion and its reason is recorded in exclusions.json before the walk. The reasons that count:
    • the failing tests check documentation, wording or test infrastructure rather than the program’s behaviour;
    • the symptom can’t be stated without naming the file or function to change.
    • the FAIL_TO_PASS tests depend on something a symptom can’t reach: a name, parameter, constant or file format the fix itself introduces, or an internal input no user-facing path produces. A correct fix written from the symptom would still fail them, in both arms. SWE-bench Verified drops tasks for the same reason.
  3. It harvests every other candidate a second time, and rejects it as flaky if the oracle comes out different.
  4. It keeps the first 20 that remain.

Prompts. One per task, written from the commit’s description before any agent runs:

Arms. Identical except for NeuralMind:

  baseline neuralmind
Agent Claude Code headless (claude -p) same
Settings loaded project only (--setting-sources project) same
MCP servers none (--strict-mcp-config) neuralmind-mcp only
Hooks none, NEURALMIND_BYPASS=1 from neuralmind install-hooks
Index none neuralmind build before the clock starts
Tools the allowlist in run.BASE_TOOLS same, plus mcp__neuralmind
Budget cap --max-budget-usd 2 same

The agent is not told to use NeuralMind; it gets what a user gets after install. Runs are interleaved in a seeded random order so neither arm runs first in bulk. Each (task, arm) pair runs 3 times.

Pinned versions. The model, Claude Code version and NeuralMind version are fixed for a run and recorded in it. Pilot: NeuralMind 4.15.1. The model and Claude Code version are named in the change log when the pilot starts.

Endpoints

The unit of analysis is the task: each arm’s runs on a task are averaged.

  1. Primary, cost. Per task, d = mean cost with NeuralMind − mean cost without. One-sided Wilcoxon signed-rank test, exact, that d is centred below zero. Cost is Claude Code’s reported total_cost_usd.
  2. Co-primary, solve rate. A task is solved by an arm when most of its seeds solve it. Exact McNemar test on the tasks only one arm solves.
  3. Effect size. Median per-task relative cost change, with a 95% bootstrap interval over tasks (10,000 resamples, seed 20261014).
  4. Secondary, reported, not tested for the claim:
    • cost per solved task in each arm;
    • tool calls before the first edit (the exploration NeuralMind is meant to shorten);
    • turns and wall-clock time;
    • whether the agent’s edit touched a gold file.

Missing data.

Decision rule

The sentence “NeuralMind lowers a coding agent’s cost per task without lowering its solve rate” is supported only when all three hold:

  1. the Wilcoxon p < 0.05;
  2. the upper bound of the 95% interval on the median relative change is below zero;
  3. NeuralMind’s arm solves at least as many tasks as the baseline, minus one (the non-inferiority margin).

Otherwise the result is reported as what it is: no difference shown, or a loss. evals/task_outcome/analyze.py applies this rule mechanically.

The pilot is exploratory. Twenty tasks can show a large effect but not rule out a small one. The pilot’s result is published labelled “pilot”, with its interval, and is not quoted as a product claim. Its spread sets the size of the confirmatory run. That run needs enough tasks for 80% power, at α = 0.05 one-sided, to detect a 15% median cost reduction: n ≈ ((1.645 + 0.842) · σ / 0.15)² / 0.955, where σ is the pilot’s standard deviation of per-task relative change. The confirmatory run uses new tasks, drawn by the same rule, that the pilot didn’t use.

Publication

Threats to validity, stated up front

Change log