From Last Light
Scaffolds, configures, and runs Last Light EVALS to test workflows on a mocked GitHub, grading models deterministically on pass rate, cost, latency.
How this skill is triggered — by the user, by Claude, or both
Slash command
/lastlight:lastlight-evalsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
`lastlight-evals` runs Last Light's **real** production workflows (issue-triage,
lastlight-evals runs Last Light's real production workflows (issue-triage,
build, …) end-to-end against a mocked GitHub, grades the results deterministically
(no LLM-as-judge), and compares models on pass rate, cost, and latency. It's a
thin CLI on top of the lastlight core package (via the lastlight/evals
barrel), so it exercises the same workflows/skills production does. SWE-bench
compatible. Node 24+.
node --version # need >= 24
command -v lastlight-evals >/dev/null && echo "installed" || npm i -g lastlight-evals
init is non-interactive when there's no TTY (piped/agent/CI) — it never
blocks on a prompt. Two layouts:
If you already have a deployment overlay repo (e.g. your-org/lastlight-instance),
this is the default. It runs your real overlay (its config, workflows, skills,
persona) and keeps the eval datasets out of your deployment repo:
lastlight-evals init my-evals --clone your-org/lastlight-instance
cd my-evals && lastlight-evals run # bare run — overlay + datasets auto-detected
This produces:
instance/ — your overlay, cloned as its own git checkout (git-ignored
here; cd instance && git pull to update it)evals/datasets/ — seeded from the built-in triage + code-fix samples (this
is what you edit; always created from defaults at init)evals/models.json — a copy of the built-in model registry.gitignore (ignores instance/ + eval-results/), README.mdThe runner auto-detects ./instance as the overlay and ./evals/datasets as
the dataset root, so a bare lastlight-evals run "just works" — no --overlay flag.
Re-running init --clone is idempotent: it won't re-clone an existing instance/.
lastlight-evals init my-evals # or: lastlight-evals init (→ ./lastlight-evals-workspace)
The workspace is its own overlay: it gets workflows/, skills/,
agent-context/ placeholders + its own config.yaml alongside evals/. Run it
with --overlay .. In a TTY it offers git init + a private gh repo create
(--no-git to skip, --yes to take the non-interactive path).
.env)Create .env in the workspace with at least one provider key. GitHub is
mocked end-to-end, so no real GitHub token is needed (the harness sets a
dummy one internally).
# any one (or more) of:
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
FIREWORKS_API_KEY=fw-...
OPENROUTER_API_KEY=sk-or-...
DEEPSEEK_API_KEY=...
Useful optional vars: EVAL_MODELS (comma-list override), LASTLIGHT_EVALS_OUT
(scorecard dir, default ./eval-results/), LASTLIGHT_CORE_DIR (point at a local
lastlight checkout to eval un-published asset edits), CI=1 (don't open a
browser). See references/models-json.md for the model registry format and
how --compare is key-gated.
From inside the workspace. For the Separate layout the overlay (./instance)
and datasets (./evals/datasets) are auto-detected — no --overlay needed. For
the Plain layout pass --overlay ..
cd my-evals
lastlight-evals run # default model, triage tier (auto overlay+datasets)
lastlight-evals run triage # one tier
lastlight-evals run triage code-fix # multiple tiers
lastlight-evals run triage --model haiku # fuzzy match in models.json
lastlight-evals run triage --model openai/gpt-5.5,anthropic/claude-opus-4-8
lastlight-evals run --compare # cross-vendor set (only models whose envKey is present)
lastlight-evals run triage --runs 3 # repeat each case 3× (worst-case verdict, mean metrics)
lastlight-evals run triage --no-open # don't open the report
# Plain layout: add --overlay . (e.g. lastlight-evals run triage --overlay .)
Output lands in ./eval-results/<tiers>/: index.html (scorecard),
scorecard.json, predictions.jsonl (SWE-bench format). Re-render a report
without re-running: lastlight-evals report ./eval-results/triage.
Two tiers ship: triage (cheap, issue-triage) and code-fix (heavy, build
workflow with held-out tests). To add cases or a custom tier, read
references/instance-schema.md — it has the SweBenchInstance schema, the
exact files to create for each tier, and worked examples.
Quick shape (paths are relative to the workspace's evals/ dir):
SweBenchInstance to evals/datasets/triage/instances.json
with issue, triage_gold, and expect_github.evals/datasets/code-fix/instances.json and
create evals/datasets/code-fix/repos/<instance_id>/ (fixture repo at base) +
evals/datasets/code-fix/tests/<instance_id>/ (held-out tests applied at grade time).evals/datasets/<tier>/ with tier.json +
instances.json (+ repos/ & tests/ for code-fix-style tiers). Discovery is
automatic — no code change.The workspace is scaffolded (Separate: overlay in instance/, evals at root;
Plain: self-overlay), .env has a working provider key, and a bare
lastlight-evals run produces a scorecard under eval-results/. Report the
workspace path, the layout used, the provider(s) configured, and the run/compare
command.
npx claudepluginhub nearform/lastlight --plugin lastlightDesigns eval harnesses for LLM tasks with task schemas, metrics, and dataset versioning. Useful for implementing eval-as-code patterns.
Adds and manages evaluation results in Hugging Face model cards. Supports extracting eval tables, importing scores from Artificial Analysis API, and running custom evaluations with vLLM/lighteval.
Adds evaluation results to Hugging Face model cards. Extracts tables from README, imports scores from Artificial Analysis API, or runs custom evaluations with vLLM/lighteval. Updates model-index metadata for leaderboard compatibility.