Agent evaluations
The cases in ../evals/agent-cases.json test whether
an agent can discover and apply the package's important patterns. Prompts and
provider invocation remain provider-neutral.
Generate a submission
- Start a clean agent session with access to the repository.
- Tell it to use the repository-local
tubelessskill (skills/tubeless/SKILL.md). - Give it exactly one case's
prompt; do not reveal the expectations. - Have it write into a disposable submission directory outside production paths.
The directory must contain a regular, non-symlink solution.ts. Additional
.ts, .tsx, .mts, or .cts helper files are compiled with it. An optional
assessment.json records operator scoring.
Compile a submission
bun run eval:agent -- \
--case sequential-import \
--submission .context/agent-eval/sequential-import \
--report .context/agent-eval/sequential-import-report.json
The evaluator builds and packs the current package, installs that artifact into
a disposable project, compiles every submission source against its public
declarations, emits a stable JSON report, and deletes the project. Pass
--package to reuse an existing tarball.
The evaluator never executes submission code. Run behavioral tests only in an external disposable sandbox with its own process, filesystem, and network containment.
Exit status is 0 when compilation passes and no assessed expectation fails,
1 for a compile or assessed expectation failure, and 2 for invalid runner
configuration.
Score semantic expectations
Compilation cannot decide whether a design materially demonstrates an
expectation. An operator may add assessment.json without changing the
generated solution:
{
"schemaVersion": 1,
"caseId": "sequential-import",
"expectations": [
{
"category": "mustDemonstrate",
"expectation": "typed options",
"status": "pass",
"evidence": "ImportOptions types context.options.lines."
}
]
}
Categories and expectation text must exactly match the selected case. Partial
assessments are valid; remaining entries stay unscored.
The report contains normalized compiler diagnostics, installed package identity,
submission file names, every semantic expectation in case order,
mechanicalStatus, assessmentStatus, and the combined ok value.
make check runs four representative fixtures: a valid assessed
pipeline, compiler-rejected invented API usage, artifact-specific declarations,
and a multi-file TSX submission. It also compiles every learningSurfaceGate
case's assessed answer under evals/answers/ and fails when
compilation or any assessed expectation fails. The evaluator still does not
execute submission code.
Passing standard
- The result typechecks using public package entrypoints.
- Every
mustDemonstrateitem is materially present, not merely mentioned. - No
mustAvoidbehavior appears. - The solution uses the smallest fitting primitive and preserves dry-run and cancellation safety.
- The agent finds the relevant recipe without reading executor implementation.
The simple, safety-sensitive, fan-out, and CLI cases are learningSurfaceGate
cases. Their answers run on every make check. Re-run those four against a
fresh agent when changing the learning surface, and run all cases before a
public release or declaration API redesign.