A one-click Pinokio launcher for OpenEval, a local-first, harness-agnostic evaluation dashboard for agent CLIs.
OpenEval runs repeatable cases against agent harnesses (Claude Code, Codex, ncode, and any user descriptor under harnesses/), grades results with deterministic and rubric-based checks, persists run history to a local SQLite database, and turns everything into an operator-friendly Next.js dashboard. Your run history, transcripts, and stats stay on your own machine under app/data/.
This launcher installs and runs OpenEval with a single click, so you don't have to clone the repo, install Node dependencies, or build and serve the app by hand.
- Install — clones the OpenEval repository into
app/, runsnpm install, and builds the production bundle (npm run build) so pages load fast at start time. - Start — serves the pre-built dashboard (
npm starton the next free port), waits for the local URL, and exposes an Open App button. All pages render per-request against your live local data — the production build doesn't make anything stale. - Update — pulls the latest launcher and app code, reinstalls dependencies, and rebuilds the production bundle.
- Reset — deletes the
app/folder to revert to a clean, pre-install state (removes cloned code, dependencies, and local run history).
- Node.js 20+ (bundled/managed by Pinokio's environment).
- OpenEval is local-first and runs entirely on your machine. Optional LLM-judge and cost-estimation features use OpenRouter or a local CLI and are only active if you configure them inside the app's Settings.
- Open this launcher in Pinokio.
- Click Install and wait for the clone + dependency install to finish.
- Click Start. When the server is ready, the sidebar shows an Open App button — click it to open the dashboard.
- Use the dashboard:
/— summary: total runs, case count, latest pass rate, average tokens, recent runs./runs— historical run table with status, pass/fail, runner, cost, tokens, duration./runs/new— new-run wizard (harness, runner, parallelism, samples, filters, explicit cases)./runs/[id]— run detail with per-case grader results, traces, cost, and usage./live— recent local CLI sessions with usage/cost/model provenance./collection— full-history usage rollups, top projects, and a permanent session archive.
To stop the server, use Pinokio's native stop control on the running Start script.
OpenEval exposes HTTP JSON endpoints from the running server. Replace http://localhost:3000 below with the exact URL shown by the Open App button (Pinokio auto-selects a free port, so it may differ).
Primary endpoints:
| Method | Endpoint | Purpose |
|---|---|---|
GET |
/api/runs |
List historical runs. |
POST |
/api/runs |
Start a new run. |
GET |
/api/runs/{id} |
Get a single run's detail. |
GET |
/api/cases |
List available cases. |
GET |
/api/harnesses |
List configured harnesses. |
GET |
/api/live |
List recent local CLI sessions. |
GET |
/api/collection |
Aggregated collection stats. |
Start-a-run request body (all fields optional): harness, runner (headless | tmux), parallel (1–8), samples (1–8), caseIds (string[]), categories (string[]), tags (string[]), difficulty (string[]), model, name.
# List runs
curl http://localhost:3000/api/runs
# Start a new run
curl -X POST http://localhost:3000/api/runs \
-H "Content-Type: application/json" \
-d '{"harness":"ncode","runner":"headless","parallel":2,"samples":1}'
# Inspect a run
curl http://localhost:3000/api/runs/RUN_IDconst BASE = "http://localhost:3000";
// List runs
const runs = await fetch(`${BASE}/api/runs`).then((r) => r.json());
// Start a new run
const started = await fetch(`${BASE}/api/runs`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ harness: "ncode", runner: "headless", parallel: 2, samples: 1 }),
}).then((r) => r.json());
console.log(runs, started);import requests
BASE = "http://localhost:3000"
# List runs
runs = requests.get(f"{BASE}/api/runs").json()
# Start a new run
started = requests.post(
f"{BASE}/api/runs",
json={"harness": "ncode", "runner": "headless", "parallel": 2, "samples": 1},
).json()
print(runs, started)For deeper CLI usage (headless eval runs, accuracy audits, reports), see the upstream OpenEval documentation in app/README.md after installation.
- OpenEval repository: https://github.com/RasputinKaiser/OpenEval
- Pinokio: https://pinokio.computer