florianbruniaux/claude-code-plugins/eval-agents
Claude Code and agent skill by florianbruniaux/claude-code-plugins
- community
Checking that the SKILL.md file is still in the repository.
Audit custom subagent definitions for Claude Code (.claude/agents/*.md) and Codex (.codex/agents/*.toml): loadability against the native schema, description overlap, model tier, tool scope, and headless-safe instructions. Use when onboarding to a project with agents, after adding or importing agents, or when the parent agent delegates to the wrong agent.
Install
npx vskill@latest install florianbruniaux/claude-code-plugins/eval-agentsSKILL.md
Agent evaluator
Discover every custom agent in scope, validate it against the native schema of its host, score it, then review it with the user one agent at a time.
Agents are selected by the parent agent from their description. A vague or overlapping description makes delegation unpredictable, so overlap is a correctness defect, not a style issue. The goal is to leave every agent loadable, distinct, correctly modeled, and safe to delegate to.
When to use
- Auditing an agent fleet before wiring it into a delegation or orchestration workflow
- The parent agent keeps delegating to the wrong agent, or never delegates
- After copying agents from another project or installing a plugin
- A new agent was added and may collide with existing ones
- Periodic hygiene: do all these agents still do something distinct?
Not for: skills (eval-skills), hooks (eval-hooks), Claude Code rules (eval-rules), or a cross-host configuration health report (eval-agent-config).
Host reference
Claude Code: where agents load
Claude Code picks the definition from the highest-priority location when several share a name:
| Priority | Location | Scope | |
|---|---|---|---|
| 1 | Managed settings directory, .claude/agents/ | Organization | |
| 2 | --agents CLI flag (JSON, or a JSON file path with -p) | Current session | |
| 3 | .claude/agents/ | Project | |
| 4 | ~/.claude/agents/ | User | |
| 5 | Plugin agents/ directory | Where the plugin is enabled |
.claude/agents/and~/.claude/agents/are scanned recursively. Subfolders do not change identity.- Project agents are discovered by walking up from the working directory; every
.claude/agents/up to the repository root is scanned, and the definition closest to the working directory wins. - Directories added with
--add-diror/add-diralso contribute their.claude/agents/. - Plugin subfolders become part of the scoped identifier:
agents/review/security.mdin pluginmy-pluginregisters asmy-plugin:review:security.
Claude Code: files the runtime skips silently
- No
name: treated as documentation kept beside the agents. - Opening
---not on the first line: read as having no frontmatter. namestarting with-or containing:: skipped, error in the debug log.namewithoutdescription: skipped.- YAML that does not parse: skipped. A plugin agent without
name, or with unparseable frontmatter, still loads under its filename.
"Does not parse" means Claude Code's own parser, which accepts some frontmatter a strict YAML library rejects, such as an unquoted multi-line description whose lines contain : . Decide with claude plugin validate <agents directory> (v2.1.233 or later) or with the session's agent list (/agents), never with a strict YAML library alone. A file that only a strict parser rejects loads: report it as a portability warning (other tools may reject it) and suggest a > block scalar.
Two files in the same agents tree that declare the same name: only one loads, chosen by filesystem read order, not by a documented precedence. /doctor reports them.
Claude Code: frontmatter fields
Only name and description are required. Field names are camelCase and must match exactly; an unknown field is ignored without an error.
| Field | Notes | |
|---|---|---|
name | Required. Unique identity; hooks receive it as agent_type. The filename does not have to match. | |
description | Required. When the parent should delegate. | |
tools | Comma-separated string or YAML list. Omitted: inherits every tool available to subagents. No resolvable entry: the agent usually fails to launch. | |
disallowedTools | Removed from the inherited or declared list. A specifier such as Bash(git push *) removes the whole tool. | |
model | sonnet, opus, haiku, fable, a full model ID, or inherit. | |
permissionMode | default (alias manual), acceptEdits, auto, dontAsk, bypassPermissions, plan. Ignored when the main conversation runs in bypassPermissions, acceptEdits or auto mode. | |
maxTurns | Agentic turn cap; output is returned marked partial. | |
skills | Skills preloaded in full at startup. | |
mcpServers | Server names or inline server definitions. | |
hooks | Hooks active while this agent runs; Stop becomes SubagentStop. Project agent hooks run only after workspace trust is accepted. | |
memory | Persistent memory scope: user, project, or local. | |
background | true keeps the agent in the background. | |
omitClaudeMd | true launches without user, project and local CLAUDE.md files. | |
effort | low, medium, high, xhigh, max; available levels depend on the model. | |
isolation | worktree runs the agent in a temporary git worktree. | |
color | Display color. | |
initialPrompt | First user turn when the agent runs as the main session agent. | |
experimental | Map; only cacheTtl: 5m or 1h is read, and only from agent files. |
Plugin agents ignore hooks, mcpServers and permissionMode; initialPrompt is also ignored for plugin agents.
Flag as unrecognized (silently ignored by Claude Code): allowed-tools, disallowed-tools, context, argument-hint, and any other key not in the table. These are skill fields, not agent fields.
Claude Code: model resolution
- The per-invocation
modelparameter passed by the parent - The agent's
modelfrontmatter (inheritselects the main conversation's model) CLAUDE_CODE_SUBAGENT_MODEL, when set to an alias or model ID- The main conversation's model
CLAUDE_CODE_SUBAGENT_MODEL_FORCE=1 makes every agent ignore its model field. A family alias resolves to the main conversation's exact model when that model belongs to the same family. A value blocked by the organization's availableModels is substituted.
Claude Code: tools a subagent never gets
The runtime removes these tools from every non-fork subagent, even when listed in tools: AskUserQuestion, EndConversation, EnterPlanMode, ExitPlanMode (unless permissionMode: plan), ScheduleWakeup, WaitForMcpServers, and Agent at the depth limit.
Codex: custom agents
| Item | Rule | |
|---|---|---|
| Location | One TOML file per agent in ~/.codex/agents/ (personal) or .codex/agents/ (project) | |
| Required keys | name, description, developer_instructions | |
| Identity | name is the source of truth; the filename is only a convention | |
| Optional keys | Any supported config.toml key, such as model, model_reasoning_effort, sandbox_mode, mcp_servers, skills.config; omitted keys inherit from the parent session | |
| Built-in agents | default, worker, explorer; a custom agent with the same name takes precedence | |
| Global settings | [agents] in config.toml: enabled, max_concurrent_threads_per_session (legacy max_threads), default_subagent_model, default_subagent_reasoning_effort, interrupt_message |
A Markdown agent with YAML frontmatter, or a TOML file using prompt instead of developer_instructions, is a Claude-shaped definition and does not satisfy the Codex schema.
Scoring criteria
Claude Code agents (15 pts)
| # | Criterion | Max | What is checked | |
|---|---|---|---|---|
| 1 | loadable | 2 | Frontmatter parses for Claude Code (see above) and name is valid: present, no :, no leading - (1); description present (1). A 0 here means the runtime skips the file: stop scoring and report it as a blocker. A strict-YAML-only failure keeps the point and adds a portability warning. | |
| 2 | description | 3 | States when to delegate (1); distinguishable from every other agent in the same scope (1); concise, since combined descriptions above 15,000 tokens trigger a startup warning (1) | |
| 3 | model | 2 | Declared or deliberately inherited (1); tier fits the task (1) | |
| 4 | tools | 3 | tools explicit (1); no write-capable tool (Bash, Edit, Write, NotebookEdit) unless the task mutates files or runs commands (1); disallowedTools or tools excludes Agent when the agent must not delegate further (1) | |
| 5 | system prompt | 5 | Role and scope in the first paragraph (1); what it does and does not do (1); output or return contract (1); no placeholder or TODO (1); no instruction that requires a tool the runtime removes, such as asking the user a question (1) | |
| Bonus | field hygiene | +1 | No unrecognized field, no invalid field value, and no field that the agent's source ignores (for example hooks in a plugin agent) |
Codex agents (12 pts)
| # | Criterion | Max | What is checked | |
|---|---|---|---|---|
| 1 | loadable | 3 | TOML parses (1); name and description present (1); developer_instructions present and non-empty (1) | |
| 2 | description | 3 | Same checks as Claude Code, against other Codex agents and the built-ins | |
| 3 | model and effort | 2 | model and model_reasoning_effort set together when the model is overridden (1); tier fits the task (1) | |
| 4 | instructions | 4 | Role and scope (1); boundaries (1); return contract (1); no placeholder (1) |
Thresholds: Good >= 80%, Needs work 60-79%, Fix < 60%.
Model tier signals
| Work | Claude Code | Codex (per the Codex subagent docs) | |
|---|---|---|---|
| Mechanical: lookup, extraction, binary verification | haiku | lighter model such as gpt-6-luna | |
| Bounded judgment: review, debugging, tests, documentation | sonnet | gpt-6-sol, medium effort | |
| Cross-cutting synthesis: architecture, threat model, multi-system trade-offs | opus | gpt-6-sol, high or above |
Flag both directions: an under-powered model for judgment work, and an over-powered model for mechanical work that runs many times. State cost from published prices instead of a fixed multiplier; for example the guide lists Opus 5.5 at $4/$20 and Haiku 5.5 at $0.10/$0.50 per million input/output tokens (prompts up to 100K tokens). Haiku 5.5 supports effort and defaults to medium; only the legacy Haiku 4.5 has no effort parameter, so an effort field on an agent pinned to Haiku 4.5 has no effect.
Human-in-the-loop anti-pattern
Subagents do not get AskUserQuestion or plan-mode tools, and by default they run in the background. Any system prompt instruction such as "ask the user", "confirm before deleting", or "wait for approval" cannot be carried out. Safe alternative: "If context is insufficient, return { "status": "needs_context", "missing": [...] } and stop."
Execution instructions
Step 1: Discovery
Resolve the scope from the argument, or default to the project plus user scope of each requested host.
| Request | Run | |
|---|---|---|
| Default | Steps 1-6, with the interactive review | |
audit-only, or the user asks for no changes | Steps 1-4 and 6: list proposed changes instead of asking or editing | |
| More than 20 agents in scope | Triage: run Steps 1-3 and the structural checks of Step 2 on every file, score in full only the agents with a finding plus a sample of the rest, and report the others in one compact table |
Also list nested .claude/agents/ directories between the working directory and the repository root.
When a ctxharness doctor --format json report generated during this task is available, every agents-layer finding it reports must appear in the audit.
Done when: every candidate file is listed with its host and scope, or the report states that no agent directory exists and stops.
Step 2: Parse and check loadability
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingplugins/ai-methodology/skills/eval-agents/SKILL.md
Popularity
- Repository stars
- 32
- Repository forks
- 2
- 7-day trend score
- 17
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/florianbruniaux/claude-code-plugins/eval-agents)