Optional ReadonlyeffortReasoning budget for the run (claude --effort, e.g. "low" or an integer).
Lives here beside model because it is part of the MEASUREMENT — it moves the
output distribution, not the sample size — so it is hashed into the lock and
the cache, and never read from an env var. Omit for the harness default.
Optional ReadonlyfilesFiles written on top of the base fixture for this arm.
Optional ReadonlyinterceptTools to intercept for this arm (the tool-call spy). Each
ToolIntercept is denied its real execution by an auto-wired PreToolUse
hook — the model still emits the tool_use (so its arguments land in the
Trace for toolWith / notTool), but the side effect (a paid API call, a
git push, a paid subagent) never happens: the call is intercepted
(prevented), NOT executed. This makes a real-model eval side-effect-free and
safe (it does NOT cut the model-call cost); and because CC surfaces the
denial as a blocked call, it's for asserting the agent's ATTEMPT, not for
stubbing a tool to continue a multi-step flow. See src/tool-intercept.ts.
Optional ReadonlymodelModel alias/id for THIS arm, overriding the eval-level model. A model
comparison IS a harness A/B — arms: { sonnet: { model: "claude-sonnet-4-6" }, opus: { model: "claude-opus-4-8" } } — so model-as-an-arm answers "does my
harness still hold on the cheaper tier / after a model upgrade?" through the
same significance machinery, with no separate model-matrix runner. Omit to
use the eval-level model. See research/eval-architecture.md (model strategy).
Optional ReadonlypluginPath to a real plugin/repo to load for this arm (hooks + CLAUDE.md + skills). Lets an arm be "the whole plugin on" vs "off". See src/plugin-loader.ts.
Optional ReadonlypluginPath to a plugin dir to install NATIVELY (claude --plugin-dir) for this
arm, so its skills/commands/agents activate the real way — the real model
can trigger a skill by its description (vs. plugin, which materializes a
file subset that does not register skills). Point at a COMPLETE plugin. Lets
an arm be "skill installed" vs "off" to measure real activation. Provide this
OR skillsDir, not both.
Optional Readonlysettings.claude/settings.json (hooks/permissions) for this arm; omit for none.
Optional ReadonlyskillsA directory of LOOSE skills (<skillsDir>/<name>/SKILL.md, e.g. a repo's
.claude/skills) to install for this arm. vigiles packages them into a
throwaway --plugin-dir (manifest + skills/<name>/, each skill dir copied
whole) for the run and removes it afterward — the one-liner for repo-local
skills that aren't a published plugin. The skills install under the
namespace vigiles-loose-skills, so a skill() check / skillResolved
matches vigiles-loose-skills:<name> (the report's namespace says so).
Provide this OR pluginDir, not both.
One arm of the comparison: fixture overrides + settings (hooks) for this arm.