/benchmark-agents
Advanced AI agent benchmark scenarios that push Vercel's cutting-edge platform features — Workflow DevKit, AI Gateway, MCP, Chat SDK, Queues, Flags, Sandbox, and multi-agent orchestration. Designed to stress-test skill injection for complex, multi-system builds.
$ npx -y skills add vercel-labs/vercel-plugin --skill benchmark-agents --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/benchmark-agents
Context preview
The summary Claude sees to decide when to auto-load this skill.
Advanced AI agent benchmark scenarios that push Vercel's cutting-edge platform features — Workflow DevKit, AI Gateway, MCP, Chat SDK, Queues, Flags, Sandbox, and multi-agent orchestration. Designed to stress-test skill injection for complex, multi-system builds.
SKILL.md
benchmark-agents.SKILL.mdname: benchmark-agents
description: Advanced AI agent benchmark scenarios that push Vercel's cutting-edge platform features — Workflow SDK, AI Gateway, MCP, Chat SDK, Queues, Flags, Sandbox, and multi-agent orchestration. Designed to stress-test skill injection for complex, multi-system builds.
Benchmark Agents — Advanced AI Systems
Launch real Claude Code sessions with the plugin installed, verify skill injection, monitor PostToolUse validation catches, and produce a coverage report. This skill covers the full eval loop: setup → launch → monitor → verify → fix → release → repeat.
How Evals Work (The Only Correct Method)
Evals are run by **you, in this conversation**, not by scripts. The process is:
1. You create directories and install the plugin via Bash tool calls 2. You spawn WezTerm panes with `wezterm cli spawn` — each pane runs an independent Claude Code interactive session 3. You wait, then check debug logs and claim dirs to see what the plugin injected 4. You inspect the generated source code for correctness 5. You read conversation logs to find what the user had to correct 6. You update skills/hooks, run `/release`, and spawn more evals
**Never use `claude --print`, eval scripts, or `Bun.spawn(["claude", ...])`**. These do not work because:
- Plugin hooks (PreToolUse, PostToolUse, UserPromptSubmit) only fire during interactive tool-calling sessions
- `--print` mode generates text without executing tools — no files are created, no deps installed, no dev servers started
- No `session_id` means dedup, profiler, and claim files don't work
**The WezTerm interactive approach is the only method that exercises the plugin correctly.** Every eval in our history (60+ sessions) used this approach.
DO NOT (Hard Rules)
These are **absolute prohibitions**. Violating any of them wastes the entire eval run:
- **DO NOT** use `claude --print` or `-p` flag — hooks don't fire, no files created
- **DO NOT** use `--dangerously-skip-permissions` — changes agent behavior
- **DO NOT** create projects in `/tmp/` — always use `~/dev/vercel-plugin-testing/`
- **DO NOT** manually create `settings.local.json` or wire hooks by hand — use `npx add-plugin`
- **DO NOT** set `CLAUDE_PLUGIN_ROOT` manually — the plugin manages this
- **DO NOT** use `bash -c` or `bash -lc` in WezTerm — always use `/bin/zsh -ic`
- **DO NOT** use the full path to claude — use the `x` alias (it's configured in zsh)
- **DO NOT** create custom `debug.log` files with stderr redirects — debug logs go to `~/.claude/debug/`
- **DO NOT** write eval runner scripts in TypeScript/JavaScript — do everything as Bash tool calls in the conversation
- **DO NOT** try to `git init` or create `package.json` manually — `npx add-plugin` + the WezTerm session handle all scaffolding
- **DO NOT** use uppercase letters in directory names — npm rejects them (e.g. `T` in timestamps breaks `create-next-app`)
**Copy the exact commands below. Do not improvise.**
Setup & Launch (Exact Commands)
Naming convention
**Always append a timestamp** to directory names so reruns don't overwrite old projects:
<slug>-<yyyymmdd>-<hhmm>
Example: `tarot-card-deck-20260309-1227`, `interior-designer-20260309-1227`
Generate the timestamp with: `date +%Y%m%d-%H%M`
1. Create test directory and install plugin
TS=$(date +%Y%m%d-%H%M)
SLUG="my-app-$TS"
mkdir -p ~/dev/vercel-plugin-testing/$SLUG
cd ~/dev/vercel-plugin-testing/$SLUG
npx add-plugin https://github.com/vercel/vercel-plugin -s project -y
2. Launch session via WezTerm
wezterm cli spawn --cwd /Users/johnlindquist/dev/vercel-plugin-testing/$SLUG -- /bin/zsh -ic \
"unset CLAUDECODE; VERCEL_PLUGIN_LOG_LEVEL=debug x '<PROMPT>' --settings .claude/settings.json; exec zsh"
Key flags:
- `unset CLAUDECODE` — prevents nested session detection error
- `VERCEL_PLUGIN_LOG_LEVEL=debug` — enables hook debug output in `~/.claude/debug/`
- `x` — alias for `claude` CLI
- `--settings .claude/settings.json` — loads project-level plugin settings
3. Find the debug log (wait ~25s for SessionStart hooks)
find ~/.claude/debug -name "*.txt" -mmin -2 -exec grep -l "$SLUG" {} +4. Launch multiple sessions in parallel
Create dirs and install plugin in a loop, then spawn each WezTerm pane:
TS=$(date +%Y%m%d-%H%M)
cd ~/dev/vercel-plugin-testing
for name in tarot-deck interior-designer superhero-origin; do
d="${name}-${TS}"
mkdir -p "$d" && (cd "$d" && npx add-plugin https://github.com/vercel/vercel-plugin -s project -y)
done
# Then spawn each (these run in separate terminal panes)
wezterm cli spawn --cwd .../tarot-deck-$TS -- /bin/zsh -ic "unset CLAUDECODE; VERCEL_PLUGIN_LOG_LEVEL=debug x '...' --settings .claude/settings.json; exec zsh"
wezterm cli spawn --cwd .../interior-designer-$TS -- /bin/zsh -ic "unset CLAUDECODE; VERCEL_PLUGIN_LOG_LEVEL=debug x '...' --settings .claude/settings.json; exec zsh"
wezterm cli spawn --cwd .../superhero-origin-$TS -- /bin/zsh -ic "unset CLAUDECODE; VERCEL_PLUGIN_LOG_LEVEL=debug x '...' --settings .claude/settings.json; exec zsh"Monitoring
Skill injection claims (the key metric)
TMPDIR=$(node -e "import {tmpdir} from 'os'; console.log(tmpdir())" --input-type=module)
CLAIMDIR="$TMPDIR/vercel-plugin-<session-id>-seen-skills.d"
# List all injected skills
ls "$CLAIMDIR"
# Count
ls "$CLAIMDIR" | wc -l
# Check specific skill
ls "$CLAIMDIR/workflow" && echo "YES" || echo "NO"Hook firing
LOG=~/.claude/debug/<session-id>.txt
# SessionStart hooks
grep -c 'SessionStart.*success' "$LOG"
# PreToolUse calls and injections
grep -c 'executePreToolHooks' "$LOG" # total calls
grep -c 'provided additionalContext' "$LOG" # actual injections
# PostToolUse validation catches
grep 'VALIDATION' "$LOG" | head -10
# UserPromptSubmit
grep -c 'UserPromptSubmit.*success' "$LOG"
Quick status check for multiple sessions
TMPDIR=$(node -e "import {tmpdir} fromRead more
name: benchmark-agents description: Advanced AI agent benchmark scenarios that push Vercel's cutting-edge platform features — Workflow SDK, AI Gateway, MCP, Chat SDK, Queues, Flags, Sandbox, and multi-agent orchestration. Designed to stress-test skill injection for complex, multi-system builds.
Benchmark Agents — Advanced AI Systems
Launch real Claude Code sessions with the plugin installed, verify skill injection, monitor PostToolUse validation catches, and produce a coverage report. This skill covers the full eval loop: setup → launch → monitor → verify → fix → release → repeat.
How Evals Work (The Only Correct Method)
Evals are run by **you, in this conversation**, not by scripts. The process is:
1. You create directories and install the plugin via Bash tool calls 2. You spawn WezTerm panes with `wezterm cli spawn` — each pane runs an independent Claude Code interactive session 3. You wait, then check debug logs and claim dirs to see what the plugin injected 4. You inspect the generated source code for correctness 5. You read conversation logs to find what the user had to correct 6. You update skills/hooks, run `/release`, and spawn more evals
**Never use `claude --print`, eval scripts, or `Bun.spawn(["claude", ...])`**. These do not work because:
- Plugin hooks (PreToolUse, PostToolUse, UserPromptSubmit) only fire during interactive tool-calling sessions
- `--print` mode generates text without executing tools — no files are created, no deps installed, no dev servers started
- No `session_id` means dedup, profiler, and claim files don't work
**The WezTerm interactive approach is the only method that exercises the plugin correctly.** Every eval in our history (60+ sessions) used this approach.
DO NOT (Hard Rules)
These are **absolute prohibitions**. Violating any of them wastes the entire eval run:
- **DO NOT** use `claude --print` or `-p` flag — hooks don't fire, no files created
- **DO NOT** use `--dangerously-skip-permissions` — changes agent behavior
- **DO NOT** create projects in `/tmp/` — always use `~/dev/vercel-plugin-testing/`
- **DO NOT** manually create `settings.local.json` or wire hooks by hand — use `npx add-plugin`
- **DO NOT** set `CLAUDE_PLUGIN_ROOT` manually — the plugin manages this
- **DO NOT** use `bash -c` or `bash -lc` in WezTerm — always use `/bin/zsh -ic`
- **DO NOT** use the full path to claude — use the `x` alias (it's configured in zsh)
- **DO NOT** create custom `debug.log` files with stderr redirects — debug logs go to `~/.claude/debug/`
- **DO NOT** write eval runner scripts in TypeScript/JavaScript — do everything as Bash tool calls in the conversation
- **DO NOT** try to `git init` or create `package.json` manually — `npx add-plugin` + the WezTerm session handle all scaffolding
- **DO NOT** use uppercase letters in directory names — npm rejects them (e.g. `T` in timestamps breaks `create-next-app`)
**Copy the exact commands below. Do not improvise.**
Setup & Launch (Exact Commands)
Naming convention
**Always append a timestamp** to directory names so reruns don't overwrite old projects:
<slug>-<yyyymmdd>-<hhmm>
Example: `tarot-card-deck-20260309-1227`, `interior-designer-20260309-1227`
Generate the timestamp with: `date +%Y%m%d-%H%M`
1. Create test directory and install plugin
TS=$(date +%Y%m%d-%H%M) SLUG="my-app-$TS" mkdir -p ~/dev/vercel-plugin-testing/$SLUG cd ~/dev/vercel-plugin-testing/$SLUG npx add-plugin https://github.com/vercel/vercel-plugin -s project -y
2. Launch session via WezTerm
wezterm cli spawn --cwd /Users/johnlindquist/dev/vercel-plugin-testing/$SLUG -- /bin/zsh -ic \ "unset CLAUDECODE; VERCEL_PLUGIN_LOG_LEVEL=debug x '<PROMPT>' --settings .claude/settings.json; exec zsh"
Key flags:
- `unset CLAUDECODE` — prevents nested session detection error
- `VERCEL_PLUGIN_LOG_LEVEL=debug` — enables hook debug output in `~/.claude/debug/`
- `x` — alias for `claude` CLI
- `--settings .claude/settings.json` — loads project-level plugin settings
3. Find the debug log (wait ~25s for SessionStart hooks)
find ~/.claude/debug -name "*.txt" -mmin -2 -exec grep -l "$SLUG" {} +4. Launch multiple sessions in parallel
Create dirs and install plugin in a loop, then spawn each WezTerm pane:
TS=$(date +%Y%m%d-%H%M)
cd ~/dev/vercel-plugin-testing
for name in tarot-deck interior-designer superhero-origin; do
d="${name}-${TS}"
mkdir -p "$d" && (cd "$d" && npx add-plugin https://github.com/vercel/vercel-plugin -s project -y)
done
# Then spawn each (these run in separate terminal panes)
wezterm cli spawn --cwd .../tarot-deck-$TS -- /bin/zsh -ic "unset CLAUDECODE; VERCEL_PLUGIN_LOG_LEVEL=debug x '...' --settings .claude/settings.json; exec zsh"
wezterm cli spawn --cwd .../interior-designer-$TS -- /bin/zsh -ic "unset CLAUDECODE; VERCEL_PLUGIN_LOG_LEVEL=debug x '...' --settings .claude/settings.json; exec zsh"
wezterm cli spawn --cwd .../superhero-origin-$TS -- /bin/zsh -ic "unset CLAUDECODE; VERCEL_PLUGIN_LOG_LEVEL=debug x '...' --settings .claude/settings.json; exec zsh"Monitoring
Skill injection claims (the key metric)
TMPDIR=$(node -e "import {tmpdir} from 'os'; console.log(tmpdir())" --input-type=module)
CLAIMDIR="$TMPDIR/vercel-plugin-<session-id>-seen-skills.d"
# List all injected skills
ls "$CLAIMDIR"
# Count
ls "$CLAIMDIR" | wc -l
# Check specific skill
ls "$CLAIMDIR/workflow" && echo "YES" || echo "NO"Hook firing
LOG=~/.claude/debug/<session-id>.txt # SessionStart hooks grep -c 'SessionStart.*success' "$LOG" # PreToolUse calls and injections grep -c 'executePreToolHooks' "$LOG" # total calls grep -c 'provided additionalContext' "$LOG" # actual injections # PostToolUse validation catches grep 'VALIDATION' "$LOG" | head -10 # UserPromptSubmit grep -c 'UserPromptSubmit.*success' "$LOG"
Quick status check for multiple sessions
TMPDIR=$(node -e "import {tmpdir} fromComprehensive Vercel ecosystem plugin — relational knowledge graph, skills for every major product, specialized agents, and Vercel conventions. Turns any AI agent into a Vercel expert.
Repo: vercel-labs/vercel-plugin
Other skills on vercel.
- /benchmark-e2e
End-to-end benchmark suite for vercel-plugin. Runs realistic projects through skill injection, launches dev servers, verifies everything works, analyzes conversation logs, and produces an improvement report for overnight self-improvement loops.
Open skill - /benchmark-sandbox
Run vercel-plugin eval scenarios in Vercel Sandboxes instead of local WezTerm panels. Provisions ephemeral microVMs with Claude Code + plugin pre-installed, runs benchmark prompts, extracts hook artifacts, and produces coverage reports.
Open skill - /benchmark-testing
Create and launch benchmark test projects to exercise vercel-plugin skill injection across realistic scenarios. Sets up isolated directories, installs the plugin, and spawns WezTerm panes running Claude Code with crafted prompts.
Open skill - /plugin-audit
Audit vercel-plugin performance on real-world projects. Extracts tool calls from Claude Code conversation logs, tests hook matching against actual inputs, identifies pattern coverage gaps, and checks plugin cache staleness. Use when asked to audit, test, or investigate plugin
Open skill - /release
Release vercel-plugin — run gates, bump version, generate artifacts, commit, and push. Use when asked to "release", "ship", "bump and push", or "cut a release".
Open skill - /vercel-plugin-eval
Run live eval sessions against the vercel-plugin to verify hook behavior, skill injection, dedup correctness, and coverage. Launches real Claude Code sessions via WezTerm, monitors debug logs, and produces a structured coverage report.
Open skill

