Eval Skills logo

Eval Skills

CommunityPopular
FlorianBruniaux
eval-skills

Audit all skills in the current project for frontmatter completeness, effort level appropriateness, allowed-tools scoping, and content quality. Produces a scored report with effort-level recommendations for each skill. Use when onboarding to a new project, reviewing skill quality before shipping, or adding effort fields to an existing skill library.

Overview

PublisherFlorianBruniaux
Repositoryclaude-code-ultimate-guide
Skill nameeval-skills
Stars
6K
Forks
782
Bundled files
Instructions only
LicenseCC-BY-SA-4.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by FlorianBruniaux on GitHub. Read the source before you install it.

Installation

Install the Eval Skills AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/FlorianBruniaux/claude-code-ultimate-guide.git /tmp/claude-code-ultimate-guide
mkdir -p .claude/skills
cp -r /tmp/claude-code-ultimate-guide/examples/skills/eval-skills .claude/skills/eval-skills
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Eval Skills in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Eval Skills on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Eval Skills is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Skill Evaluator

Discover all skills in the project, score them across 6 criteria, and infer the appropriate effort level based on content analysis.

When to Use

  • New project: run once to establish baseline quality
  • Before committing a skill to a team repo
  • After bulk-importing skills from another project
  • When adding effort fields for the first time
  • When a skill doesn't auto-trigger and you want to diagnose why

What Gets Audited

All SKILL.md files and flat .md files found in:

  • .claude/skills/**
  • ~/.claude/skills/** (if requested)
  • .claude/commands/** (legacy flat files, still valid)
  • Any path passed as argument: /eval-skills ./my-skills-dir

Valid Frontmatter Fields

Claude Code skills follow the agentskills.io open standard, extended with Claude Code-specific fields. Flag any field not in this table as unsupported.

agentskills.io spec fields

FieldRequiredNotes
nameNoDisplay label shown in skill lists. The command name always comes from the directory name, not this field.
descriptionRecommendedCombined with when_to_use, truncated at 1,536 chars in context. First paragraph used if omitted.
when_to_useNoAdditional trigger phrases and example requests. Appended to description in context; counts toward the 1,536-char cap.
allowed-toolsNoTools usable without per-use approval while the skill is active. Space-separated string or YAML list (both valid).
licenseNoLicense identifier (agentskills.io spec)
compatibilityNoCompatibility constraints (agentskills.io spec)
metadataNoArbitrary metadata object (agentskills.io spec)

Claude Code extension fields

FieldRequiredNotes
argument-hintNoHint shown during autocomplete. Example: [issue-number] or [filename] [format]
argumentsNoNamed positional args for $name substitution. Space-separated string or YAML list. Names map to positions in order.
disable-model-invocationNotrue = user-only invocation. Removes skill from Claude's context and prevents preloading in subagents.
user-invocableNofalse = hides skill from / menu but Claude can still auto-invoke it.
disallowed-toolsNoTools blocked while this skill is active. Cleared after the current message.
modelNoOverride model for this skill's turn only. Reverts to session model on next prompt.
effortNoThinking effort: low, medium, high, xhigh, max. Overrides session effort for the turn.
contextNofork = runs skill in an isolated subagent context. The skill body becomes the subagent's prompt.
agentNoWhich subagent type to use when context: fork is set. Options: Explore, Plan, general-purpose, or any custom agent in .claude/agents/.
hooksNoSkill-scoped lifecycle hooks. Same format as session hooks.
pathsNoGlob patterns that limit when Claude auto-loads this skill. Same format as path-specific rules.
shellNoShell for !backtick injection: bash (default) or powershell.

Unsupported fields (flag and remove)

tags, category, keywords, usage, args are ignored by the runtime. Remove them to avoid confusion.


String Substitutions (check for correct usage)

If a skill references substitution placeholders, verify they use the correct syntax:

PlaceholderMeaning
$ARGUMENTSFull argument string as typed
$ARGUMENTS[N] or $NArgument at position N (0-based)
$nameNamed argument declared in arguments: frontmatter
${CLAUDE_SESSION_ID}Current session ID
${CLAUDE_EFFORT}Active effort level (low / medium / high / xhigh / max)
${CLAUDE_SKILL_DIR}Absolute path to the skill's directory; use it for referencing bundled scripts

Incorrect placeholders ($1 when no arguments: field is declared, ${ARGS}, %ARGUMENTS%) are passed as literal text and silently break the skill.


Scoring Criteria (16 pts per skill)

#CriterionMaxWhat is checked
1name field1name field present and lowercase with hyphens only
2description3Present (1), has "Use when" / trigger phrasing (1), when_to_use field present for skills that need broad matching (1)
3allowed-tools2Present (1), scoped appropriately (1): not Bash without path scoping when read-only tools suffice
4effort3Present (1), appropriate for content per inference engine below (2)
5content structure5Has Purpose or When section (1), has concrete examples or usage (1), has clear workflow or steps (1), no placeholder text (1), no unsupported frontmatter fields (1)
6bonus+2argument-hint present when skill takes args (1), ${CLAUDE_SKILL_DIR} used for bundled scripts instead of hardcoded paths (1)

Thresholds:

  • ✅ Good: >=13/16 (>=80%)
  • ⚠️ Needs work: 10-12/16 (60-79%)
  • ❌ Fix: <10/16 (<60%)

allowed-tools format note

Both formats are valid and parse correctly:

  • Space-separated string: Read Bash Grep
  • YAML list: [Read, Bash, Grep]

Flag skills that use Bash globally (without path scoping like Bash(git *)) when they only need read operations (this grants unnecessary write access).

description length note

The combined description + when_to_use text is truncated at 1,536 chars per skill in Claude's context. Flag skills where the combined text exceeds this limit; the tail (often the trigger examples) gets silently cut.


Effort Level Inference Engine

For each skill, analyze description + content and classify using these signals:

low: Mechanical execution, no design decisions

Signals:

  • Verbs: commit, push, sync, scaffold, generate (template-based), format, rename, bump, wrap, convert
  • No reasoning required: sequential steps, template instantiation, data fetching
  • allowed-tools: Bash only, or Read only
  • No sub-agents spawned
  • Short workflow (<5 steps)

Examples: /commit, /release-notes, /scaffold, /sync, /format

medium: Analysis with bounded scope, categorization

Signals:

  • Verbs: review, triage, analyze, categorize, suggest, evaluate (single file or bounded scope)
  • Requires pattern recognition but not architectural reasoning
  • allowed-tools: Read + Grep + Bash combination
  • May spawn 1-2 sub-agents with predefined scope
  • Produces structured output (tables, categorized lists)

Examples: /code-review (single PR), /issue-triage, /dependency-audit, /test-coverage

high: Design decisions, adversarial reasoning, cross-system analysis

Signals:

  • Verbs: architect, redesign, threat-model, audit (security), orchestrate (multi-agent), score, assess trade-offs
  • Requires reasoning about edge cases, attack vectors, or system-wide implications
  • allowed-tools: broad access (Read + Write + Bash + external tools)
  • Spawns multiple sub-agents or uses parallel execution
  • Produces analysis with explicit uncertainty or trade-off sections
  • Keywords: "security", "architecture", "adversarial", "pipeline", "threat", "design decision"

Examples: /security-audit, /architecture-review, /eval-agents

xhigh / max: Exhaustive, multi-agent, long-running

Signals:

  • Explicit ultrathink or ultracode in skill body
  • Spawns many parallel agents (3+)
  • Uses Workflow tool or fan-out orchestration patterns
  • Expected runtime >5 minutes
  • Deep synthesis across entire codebase or multi-repo scope

Examples: /deep-research, /full-security-audit, /codebase-migration

Mismatch flag

If a skill has effort: already set but the inferred level differs, flag it:

⚠️ Effort mismatch: declared low, inferred high. Skill spawns 4 sub-agents and performs security analysis.


Execution Instructions

Step 1: Discovery

bash
# Find all SKILL.md files
find .claude/skills -name "SKILL.md" 2>/dev/null

# Find legacy flat command files
find .claude/commands -maxdepth 1 -name "*.md" ! -name "README*" 2>/dev/null

# If argument provided, use that path instead

Step 2: Parse each skill

For each skill file found:

  1. Read the full file
  2. Extract YAML frontmatter (between first --- and second ---)
  3. Parse all recognized fields from the table above
  4. Flag any unrecognized fields as potentially unsupported
  5. Note presence/absence of each field
  6. Read the body content for structure analysis and substitution placeholder correctness

Step 3: Score and infer

Apply the scoring criteria to each skill:

  • Check frontmatter fields against the valid fields table
  • Evaluate description quality: does it answer "when to use"? Is combined description + when_to_use under 1,536 chars?
  • Evaluate allowed-tools scope: is Bash used without path scoping when read-only tools suffice?
  • Check context: fork skills for completeness; they must have an actionable task body and an agent field (or a reasonable default applies)
  • Infer effort level from content analysis
  • Compare inferred vs declared effort (if set)
  • Evaluate content structure

Step 4: Output

Produce a structured report:

# Skills Audit: [project name or path]
Date: [today] | Scanned: N skills

## Summary
| Status | Count |
|--------|-------|
| ✅ Good (>=80%) | N |
| ⚠️ Needs work (60-79%) | N |
| ❌ Fix (<60%) | N |

**Effort coverage**: N/N skills have effort field set

---

## Per-Skill Results

### [skill-name] ([score]/16) [✅/⚠️/❌]

| Criterion | Score | Notes |
|-----------|-------|-------|
| name | ✅ 1/1 | ok |
| description | ⚠️ 2/3 | Missing when_to_use field |
| allowed-tools | ✅ 2/2 | Well-scoped |
| effort | ❌ 0/3 | Missing. Recommended: high |
| content structure | ⚠️ 3/5 | No examples section, unsupported field "tags" found |

**Effort inference**: `high`. Skill performs security analysis with adversarial reasoning.
  Signals: "threat", "attack surface", "vulnerability scoring" in content; spawns 4 agents

**Priority fixes** (ordered by impact):
1. Add `effort: high` to frontmatter
2. Add `when_to_use` with trigger phrases
3. Remove unsupported field `tags`
4. Add a concrete usage example section

---

After all skills: print a Fix Summary.


Fix Summary Format

At the end, print a ready-to-use patch block for all missing/mismatched effort fields:

## Recommended effort fields (copy-paste ready)

skill-name-1: effort: low     # mechanical scaffold
skill-name-2: effort: high    # security analysis, spawns agents
skill-name-3: effort: medium  # code review, bounded scope

And a 1-line count: N skills need effort field · N mismatches · N missing allowed-tools · N unsupported fields to remove

Frequently asked questions

What does the Eval Skills AI skill do?

Audit all skills in the current project for frontmatter completeness, effort level appropriateness, allowed-tools scoping, and content quality. Produces a scored report with effort-level recommendations for each skill. Use when onboarding to a new project, reviewing skill quality before shipping, or adding effort fields to an existing skill library.

Why use Eval Skills on TypingMind?

Because you install it once and use it with any model. Eval Skills is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Eval Skills in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/FlorianBruniaux/claude-code-ultimate-guide/tree/main/examples/skills/eval-skills. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Eval Skills?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Eval Skills?

As many as you like. As long as a model supports skills, you can use Eval Skills with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Eval Skills AI skill free?

Yes. It is published on GitHub by FlorianBruniaux under the CC-BY-SA-4.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇