Source Intelligence

DisclaimerUnofficial, and not affiliated with Anthropic. Nearly all of this is read straight out of what ships: npm bundles, captured prompts, published docs. Anthropic's own notes go in verbatim, marked as theirs. The rest is my reading, and every entry carries the strings behind it. If one looks wrong, vote it down and say why.

All of v2.1.207 Home All releases olderv2.1.206 v2.1.208newer
Claude Code v2.1.207

Walnut Spire (plugin eval General Availability) [In Development]

Feature flag
tengu_walnut_spire Off in both readings

The flag server returned off for the account this site reads and for the anonymous baseline. A reading of off cannot rule out a rollout these two readings sit outside of.

This account: off · anonymous baseline: off · compiled default in v2.1.207: on

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

Read once, for one account on one subscription tier, against v2.1.207. It isn't a statement about your account. What a flag value here can and cannot tell you

What

The plugin eval CLI subcommand (for evaluating plugins against test cases) was previously hard-gated behind tengu_walnut_spire. The gate is still present but is now also unlockable via the CLAUDE_CODE_WALNUT_SPIRE environment variable.

Details
  • When mvc() returns false (both tengu_walnut_spire flag and CLAUDE_CODE_WALNUT_SPIRE env var absent), invoking claude plugin eval or claude plugin eval init immediately aborts with the message "plugin eval is currently in early access" — no command logic runs.
  • claude plugin eval [target] discovers eval cases from evals//case.yaml or evals//prompt.md + graders/*.md under the target directory. The target may be a file-system path, an installed plugin name, or a plugin@marketplace id; skills-dir plugins also resolve and automatically add a no-plugin baseline arm for comparison.
  • The command exposes a full suite of options: --case <glob> (filter cases by name), --tag <tag...> (filter by tag, repeatable), --runs <n> (default from case.runs ?? 3), --model (override model), --judge-model (LLM grader model, default Haiku), --max-cost-usd (hard budget ceiling — breaching it exits with code 2 and reports partial results; the overrunning agent skips paid graders but free graders still score), --output-dir (default ./evals/results/<timestamp>/), --json (emit aggregate-result.json to stdout for CI), --threshold <0..1> (exit 1 if any case score falls below this value, default 1.0), --allow-tools <tools...> (operator grant for gated tools: Bash, Write, Edit, WebFetch, mcp__; supports Tool(pattern:) syntax), --scaffold/--no-scaffold (run scaffold_script from case files, off by default), --ablation (none | with-without, automatically with-without when targeting a plugin by name), --keep-temp (preserve scaffold dirs for debugging), --verbose (stream trace as it runs).
  • claude plugin eval init [name] authors an eval suite under evals/ via an interactive interview (--interactive/--interview) or writes a blank single-case template (--bare).
  • Model-trigger evaluation (the "would the model route to this skill?" check) is still incomplete: when the model callback returns null, the case receives verdict skipped with reason "Model evaluation not yet wired up — tracks the plugin evaluation framework." All other eval machinery (grading, scoring, reporting) does execute.
Status

Feature-flagged via tengu_walnut_spire; also enabled by CLAUDE_CODE_WALNUT_SPIRE env var.

Evidence

Gate helper mvc() (line 184017) with check if (!mvc()) ms(...) at lines 780193–780194 (eval) and line 780275 (eval init); full command definition lines 780196–780284; partial-results skipped verdict at lines 672882–672889 (search for "CLAUDE_CODE_WALNUT_SPIRE" and "Model evaluation not yet wired up")

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

See this entry in the whole of v2.1.207 →