florianbruniaux/claude-code-ultimate-guide/eval-agents

Claude Code and agent skill by florianbruniaux/claude-code-ultimate-guide

Trust tier 2
  • community
LLM review pending
Source check pending

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-ultimate-guide/eval-agents

SKILL.md

The same SKILL.md was published earlier as florianbruniaux/claude-code-plugins/eval-agents.

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:

PriorityLocationScope
1Managed 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
5Plugin agents/ directoryWhere 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-dir or /add-dir also contribute their .claude/agents/.
  • Plugin subfolders become part of the scoped identifier: agents/review/security.md in plugin my-plugin registers as my-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.
  • name starting with - or containing :: skipped, error in the debug log.
  • name without description: 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.

FieldNotes
nameRequired. Unique identity; hooks receive it as agent_type. The filename does not have to match.
descriptionRequired. When the parent should delegate.
toolsComma-separated string or YAML list. Omitted: inherits every tool available to subagents. No resolvable entry: the agent usually fails to launch.
disallowedToolsRemoved from the inherited or declared list. A specifier such as Bash(git push *) removes the whole tool.
modelsonnet, opus, haiku, fable, a full model ID, or inherit.
permissionModedefault (alias manual), acceptEdits, auto, dontAsk, bypassPermissions, plan. Ignored when the main conversation runs in bypassPermissions, acceptEdits or auto mode.
maxTurnsAgentic turn cap; output is returned marked partial.
skillsSkills preloaded in full at startup.
mcpServersServer names or inline server definitions.
hooksHooks active while this agent runs; Stop becomes SubagentStop. Project agent hooks run only after workspace trust is accepted.
memoryPersistent memory scope: user, project, or local.
backgroundtrue keeps the agent in the background.
omitClaudeMdtrue launches without user, project and local CLAUDE.md files.
effortlow, medium, high, xhigh, max; available levels depend on the model.
isolationworktree runs the agent in a temporary git worktree.
colorDisplay color.
initialPromptFirst user turn when the agent runs as the main session agent.
experimentalMap; 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
  1. The per-invocation model parameter passed by the parent
  2. The agent's model frontmatter (inherit selects the main conversation's model)
  3. CLAUDE_CODE_SUBAGENT_MODEL, when set to an alias or model ID
  4. 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
ItemRule
LocationOne TOML file per agent in ~/.codex/agents/ (personal) or .codex/agents/ (project)
Required keysname, description, developer_instructions
Identityname is the source of truth; the filename is only a convention
Optional keysAny 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 agentsdefault, 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)
#CriterionMaxWhat is checked
1loadable2Frontmatter 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.
2description3States 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)
3model2Declared or deliberately inherited (1); tier fits the task (1)
4tools3tools 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)
5system prompt5Role 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)
Bonusfield hygiene+1No 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)
#CriterionMaxWhat is checked
1loadable3TOML parses (1); name and description present (1); developer_instructions present and non-empty (1)
2description3Same checks as Claude Code, against other Codex agents and the built-ins
3model and effort2model and model_reasoning_effort set together when the model is overridden (1); tier fits the task (1)
4instructions4Role and scope (1); boundaries (1); return contract (1); no placeholder (1)

Thresholds: Good >= 80%, Needs work 60-79%, Fix < 60%.

Model tier signals
WorkClaude CodeCodex (per the Codex subagent docs)
Mechanical: lookup, extraction, binary verificationhaikulighter model such as gpt-6-luna
Bounded judgment: review, debugging, tests, documentationsonnetgpt-6-sol, medium effort
Cross-cutting synthesis: architecture, threat model, multi-system trade-offsopusgpt-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.

RequestRun
DefaultSteps 1-6, with the interactive review
audit-only, or the user asks for no changesSteps 1-4 and 6: list proposed changes instead of asking or editing
More than 20 agents in scopeTriage: 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
bash
# Claude Code: every .md file, recursively (-L follows symlinked directories)
find -L .claude/agents -name "*.md" 2>/dev/null
find -L ~/.claude/agents -name "*.md" 2>/dev/null # user scope, when requested
# Codex: one TOML file per agent
find -L .codex/agents -name "*.toml" 2>/dev/null
find -L ~/.codex/agents -name "*.toml" 2>/dev/null # user scope, when requested

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

Popularity

Repository stars
6,074
Repository forks
798
7-day trend score
44

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
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/florianbruniaux/claude-code-ultimate-guide/eval-agents/badge)](https://verified-skill.com/skills/florianbruniaux/claude-code-ultimate-guide/eval-agents)

Something wrong with this skill or its page? Tell us.