vigiles API reference
    Preparing search index...

    Interface EvalArm

    One arm of the comparison: fixture overrides + settings (hooks) for this arm.

    interface EvalArm {
        files?: Record<string, string>;
        interceptTools?: readonly ToolIntercept[];
        model?: string;
        plugin?: string;
        pluginDir?: string;
        settings?: unknown;
    }
    Index

    Properties

    files?: Record<string, string>

    Files written on top of the base fixture for this arm.

    interceptTools?: readonly ToolIntercept[]

    Tools 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.

    model?: string

    Model 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 docs/eval-architecture.md (model strategy).

    plugin?: string

    Path 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.

    pluginDir?: string

    Path 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.

    settings?: unknown

    .claude/settings.json (hooks/permissions) for this arm; omit for none.