Best practices for creating expectations and grader files to evaluate guidance quality.

Apache-2.0Auto-check passedAI & LLM Engineering

Install Project Evals

skills CLI
$ npx skills add GoogleChrome/modern-web-guidance-src --skill project-evals -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install GoogleChrome/modern-web-guidance-src project-evals --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/GoogleChrome/modern-web-guidance-src.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/project-evals .claude/skills/project-evals && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
project-evals
GitHub stars
1.1k
Token cost
~2.3k tokens
SKILL.md length
1,311 words
Files
1
Skills in repo
14
Repo updated
First seen
Licence
Apache-2.0

At a glance

Best practices for creating expectations and grader files to evaluate guidance quality.

  • Works in 3 steps: Stage 1: Identifying use cases for a… → Stage 2: Authoring guidance for a use case → Stage 3: Evaluating guidance for a use…
  • Tasks that involve LLM evaluation
  • SKILL.md covers What the eval agent sees vs…, How the eval files work together, Writing expectations.md and Grading Note, plus 3 more sections
  • Calls node

What it does

Project Evals is an agent skill from GoogleChrome/modern-web-guidance-src. Best practices for creating expectations and grader files to evaluate guidance quality. Use this skill any time you're writing or reviewing an expectations.md or grader.ts file.

Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in AI & LLM Engineering, covering LLM evaluation. The licence is Apache-2.0.

When your agent uses it

  • Tasks that involve LLM evaluation

Example prompts

  • “/project-evals”

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Stage 1: Identifying use cases for a feature
  2. Stage 2: Authoring guidance for a use case
  3. Stage 3: Evaluating guidance for a use case (you are here)

What it can do on your machine

Read from SKILL.md and the folder at commit c312847. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Project Evals loads about 2.3k tokens when it runs. Until then it costs about 49 tokens; SKILL.md has 1,311 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~49
When it runs · the whole SKILL.md, loaded when a task matches
~2.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from GoogleChrome/modern-web-guidance-src at commit c312847, republished under its Apache-2.0 licence (© GoogleChrome). 1,311 words, ~2,325 tokens.

Download SKILL.mdSave it as .claude/skills/project-evals/SKILL.md (or your agent's skills folder).
name
project-evals
description
Best practices for creating expectations and grader files to evaluate guidance quality. Use this skill any time you're writing or reviewing an `expectations.md` or `grader.ts` file.

Stage 3: Evaluating guidance for a use case (Needs evals)

This is the third of three stages in creating guidance:

  1. Stage 1: Identifying use cases for a feature
  2. Stage 2: Authoring guidance for a use case
  3. Stage 3: Evaluating guidance for a use case (you are here)

What the eval agent sees vs real-world agents

Real-world coding agents see only guide.md — retrieved automatically via the RAG skills system when a developer asks for help. Every other file in a use case directory is eval infrastructure.

The eval harness runs a separate coding agent in a controlled environment to test whether the guidance works. This eval agent receives the first prompt from tasks/task.md and has access to guide.md via the same RAG system. The harness then runs grader.ts against the eval agent's output.

None of the following are ever seen by real-world coding agents:

FileRole in eval pipeline
tasks/task.mdSimulated developer prompts and base application name fed to the eval agent by the harness
demo.htmlReference implementation — grader runs against it to confirm tests pass on correct code
negative-demo.htmlAnti-example — grader runs against it to confirm tests fail on incorrect code
expectations.mdSpec used to generate grader.ts
grader.tsPlaywright tests run against the eval agent's output

How the eval files work together

tasks/task.md, expectations.md, and grader.ts form a tightly coupled pipeline:

  1. tasks/task.md — Simulated developer prompts used only by the eval harness. It must start with a YAML frontmatter specifying the base_app, followed by a list of prompts. Each prompt should sound like a real developer request, without naming specific APIs or best practices — the eval agent is expected to discover those by reading guide.md via RAG. The first prompt is the most important: it is used as the default task.

  2. expectations.md — The ground truth for what a correct implementation looks like. Each bullet becomes exactly one test in grader.ts. Write expectations assuming the eval agent read guide.md and implemented it faithfully; they describe the observable output, not the implementation approach.

  3. grader.ts — A Playwright test file generated 1:1 from expectations.md. Every bullet maps to one test() block. If an expectation cannot be translated into a Playwright assertion (static file check or browser automation), it does not belong in expectations.md.

Writing expectations.md

Write a natural language, bulleted list of assertions that must be true if an agent implements the guide.md correctly (e.g., "The input element is styled with a red border only AFTER a blur event").

  • 1:1 with grader tests — Each bullet becomes exactly one test. Write one bullet per assertion. Do not combine multiple checks into a single bullet.
  • Plain declarative phrasing — Write each bullet as a plain statement of what is true of a correct implementation (e.g., "The dialog closes when the Escape key is pressed"). Imperative directives such as MUST, MUST NOT, DO, and DO NOT are a guide.md convention for steering coding agents; expectations.md is consumed only by the internal grader generator, so the The implementation MUST… boilerplate adds nothing and should be omitted.
  • Concrete, Testable Criteria (No API Facts) — Expectations must be verifiable browser behaviors we can check with Playwright (e.g., computed styles, DOM layout), not just factual statements about an API or code structure.
  • Exercised in Demo: Ensure that every expectation written here is actively exercised in the accompanying demo.html. Expectations that aren't covered by the demo lead to unreliable grader calibration.
  • Scoped to this use case — Only include expectations that apply to the specific use case being graded. Do not copy generic expectations from other guides if they describe behavior that won't appear in an implementation of this guide (e.g., don't include URL input expectations in a sign-in form grader).
  • No external links — The grader generator cannot resolve them.
  • Avoid over-constraining — Don't assert implementation details that don't affect correctness (e.g., don't require a direct child relationship if a descendant also works).

Grading Note

  • Graders (grader.ts) live within their respective guide folders. These are Playwright test files.
  • AVOID using static assertions (like regex or str.includes() on fs.readFileSync) to test CSS or HTML syntax whenever possible. These are extremely brittle and will fail if the agent uses a different class name, semantic element, or formatting.
  • Instead, PREFER using Playwright's browser APIs to test computed styles and actual DOM layout. Use element.evaluate((el) => window.getComputedStyle(el).propertyName) to robustly verify that the browser is rendering the feature correctly, regardless of how the agent authored the code.
  • A human may manually edit the .ts file if the generator struggles to get it perfectly tailored.

Once a guide has its guide.md, demo.html, and expectations.md completely written, it is ready for the evaluation pipeline.

Show full SKILL.md (546 more words)Show less

Generating the Eval Graders

To generate the eval graders, use the gd dev tool.

Run the following command:

bash
node ./bin/gd.ts dev <path-to-guide-directory>

This command will automatically:

  1. Generate a negative-demo.html based on the guidance.
  2. Generate a grader.ts Playwright test that asserts your expectations.md against both demo.html (should pass) and negative-demo.html (should fail).
  3. Test and calibrate the grader by running the test suite.
  • Eval Performance Thresholds: A guide is not considered ready if evaluation pass rates are low. A 0% unguided pass rate is a critical blocker, indicating the guide may lack sufficient scaffolding for the model to discover the solution.

Writing tasks/task.md

tasks/task.md contains realistic developer prompts used to run AI agents end-to-end against the guide's grader, prefixed by a YAML frontmatter specifying the base application.

Format:

md
---
base_app: daily-grind
---
- make my images load faster on the page
- Optimize the priority of my LCP image 'hero.jpg' and deprioritize the gallery images below the fold.

Critical: The first prompt is the most important. It is used as the default task for the harness, and it must be specific enough to produce a grader-testable result.

Rules:

  • DO write prompts as a developer talking to an AI coding assistant — casual, lowercase, sometimes vague.
  • DO phrase prompts as action requests or directives (e.g. "add X", "can you build Y", "implement Z").
  • DO NOT phrase prompts as advisory questions (e.g. "how can I?", "what's the best way to?", "can you explain?"). The agent must implement, not just explain.
  • DO vary specificity: include at least one vague/intent-based prompt and one specific/technical ask.
  • DO assume the developer is working on an existing app (the base app). Reference its real assets and endpoints if needed (e.g., hero.jpg, /api/analytics).
  • DO NOT mention the guide, the feature name, or hint that guidance exists.
  • DO NOT name the base app (e.g., "daily-grind") — a real developer wouldn't refer to it that way.
  • DO NOT tell the agent which web API or CSS property to use unless a real developer would naturally do so. The point is to test whether the agent discovers the right solution via the guide.

    [!IMPORTANT] Functional Locators vs. Technical Solutions It is completely acceptable (and sometimes necessary) to mandate specific DOM IDs or CSS classes (e.g., "add a .fan-card class") if the grader requires them to locate elements. What is strictly banned is mandating the underlying implementation technology (e.g., commanding the model to "use sibling-index()" or "use the Temporal API").

Quantity: 1–4 prompts is typical. A single highly specific prompt is fine for technical use cases. Multiple prompts are useful for use cases with multiple valid entry points (e.g., "accordion", "tabs", "drawer" all exercising the same feature).

Test your prompts: Before finalizing, ask yourself: would an agent reading this prompt understand what they need to build? Vague phrases like "I should be able to search" may not convey browser-native "Find in page" behavior to a model. If the prompt is ambiguous, rewrite it to make the intent explicit.

Consistency: If writing multiple prompts, consider starting them with the same verb or structure (e.g., all starting with "Create a...") to make the list scannable and consistent.

Troubleshooting

If gd dev fails to calibrate the grader:

  • Read the command output to see which assertions failed.
  • If the grader logic generated by the pipeline is wrong, you may need to tweak the language in expectations.md so the generated grader is more accurate, or simply run gd dev again (it attempts to fix itself using failure context).

© GoogleChrome, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/project-evals of GoogleChrome/modern-web-guidance-src.

Open the folder on GitHubat commit c312847

Compare with similar skills

Project Evals next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Project Evals compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Project Evals this skillGoogleChrome/modern-web-guidance-src1.1k—~2.3kAutomated safety check: PassApache-2.0
LLM Benchmarking with lm-evaluation-harnessOrchestra-Research/AI-Research-SKILLs13k8 repos~3kAutomated safety check: PassMIT
Azure AI Projects Python SDKmicrosoft/skills3.1k6 repos~2.8kAutomated safety check: PassMIT
Fine-Tuning ExpertJeffallan/claude-skills12k1 repos~1.7kAutomated safety check: PassMIT
Looperksimback/looper710—~2.7kAutomated safety check: NotesMIT
Hugging Face Local Model Evalshuggingface/skills11k2 repos~1.6kAutomated safety check: PassApache-2.0

Similar skills

  • LLM Benchmarking with lm-evaluation-harness

    Orchestra-Research/AI-Research-SKILLs

    Runs lm-evaluation-harness to benchmark language models on academic suites such as MMLU, GSM8K and HumanEval, compare models and track training checkpoints.

    13k GitHub starsUsed in 8 repos~3k tokens
    AI & LLM EngineeringAuto-check passed
  • Official

    Reference for building on Microsoft Foundry with the azure-ai-projects Python SDK: project clients, versioned agents, evaluations, connections, datasets and indexes.

    3.1k GitHub starsUsed in 6 repos~2.8k tokens
    AI & LLM EngineeringAuto-check passed
  • Fine-Tuning Expert

    Jeffallan/claude-skills

    Guides LLM fine-tuning with LoRA and QLoRA through Hugging Face PEFT, from dataset validation and training checks to adapter merging, quantization and deployment.

    12k GitHub starsUsed in 1 repo~1.7k tokens
    AI & LLM EngineeringAuto-check passed
  • Looper

    ksimback/looper

    Scaffold a well-designed agent loop with best-practice coaching and a cross-model review council.

    710 GitHub stars~2.7k tokensUpdated 1 mo ago
    AI & LLM EngineeringAuto-check: notes
  • Official

    Runs evaluations of Hugging Face Hub models on local hardware with inspect-ai or lighteval, and helps choose between vLLM, Transformers and accelerate backends.

    11k GitHub starsUsed in 2 repos~1.6k tokens
    AI & LLM EngineeringAuto-check passed
  • Agent Eval Engineering

    langchain-ai/langchain-skills

    Official

    Builds agent evaluations in stages: inspect the repository and traces, agree a Task Spec with you, then build, audit and run a Harbor task with an independent verifier.

    1.3k GitHub stars~4k tokensUpdated yesterday
    AI & LLM EngineeringAuto-check passed

More from GoogleChrome/modern-web-guidance-src

All 14 skills in this repo
  • Nightly Eval Investigation

    GoogleChrome/modern-web-guidance-src

    Downloads and analyzes the latest three distinct nightly evaluation runs (Claude Code, Codex CLI, and Jetski CLI) from the GCS remote dashboard to identify and flag unhealthy or low-performing tasks…

    1.1k GitHub stars~3.3k tokensUpdated today
    Auto-check passed
  • Chrome Extensions

    GoogleChrome/modern-web-guidance-src

    Build and publish Chrome Extensions using Manifest V3 best practices.

    1.1k GitHub stars~6.6k tokensUpdated today
    Auto-check: notes
  • Coherence Auditor

    GoogleChrome/modern-web-guidance-src

    Run a document coherence, link integrity, and git repository status audit across repository markdown files using a dedicated subagent.

    1.1k GitHub stars~901 tokensUpdated today
    Auto-check passed
  • Privacy

    GoogleChrome/modern-web-guidance-src

    Action-oriented guidelines for privacy by design, data minimization, third-party audits, and modern browser privacy APIs.

    1.1k GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Project Coding Standards

    GoogleChrome/modern-web-guidance-src

    Coding style, architectural conventions, and PR review standards for the modern-web-guidance-src (guidance) repository.

    1.1k GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Project Discipline Guides

    GoogleChrome/modern-web-guidance-src

    Workflow for refactoring discipline-level guides (e.g., JavaScript, CSS) to remove "Common Knowledge" by generating and comparing against model-specific "Knowledge Mirrors".

    1.1k GitHub stars~1.1k tokensUpdated today
    Auto-check passed

Questions about Project Evals

What does Project Evals do?

Best practices for creating expectations and grader files to evaluate guidance quality. Project Evals is an agent skill from GoogleChrome/modern-web-guidance-src. Best practices for creating expectations and grader files to evaluate guidance quality.

When should I use Project Evals?

Project Evals fits situations like: tasks that involve LLM evaluation.

How do I install Project Evals in Claude Code?

Run `npx skills add GoogleChrome/modern-web-guidance-src --skill project-evals -a claude-code`. Or copy the skill folder (.agents/skills/project-evals in GoogleChrome/modern-web-guidance-src) into .claude/skills/project-evals in your project. Claude Code loads it when a task matches its description.

How do I install Project Evals in Codex?

Run `npx skills add GoogleChrome/modern-web-guidance-src --skill project-evals -a codex`. Or copy the skill folder (.agents/skills/project-evals in GoogleChrome/modern-web-guidance-src) into .agents/skills/project-evals in your project. Codex loads it when a task matches its description.

Can I use Project Evals in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add GoogleChrome/modern-web-guidance-src --skill project-evals -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/project-evals, .gemini/skills/project-evals, .github/skills/project-evals and .opencode/skills/project-evals in your project.

What does Project Evals need to run?

Going by SKILL.md and its folder, Project Evals needs the command-line tools its instructions call (node).

Does Project Evals access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Project Evals safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Project Evals use?

Project Evals is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Project Evals use?

About 2.3k tokens (SKILL.md is roughly 9.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Project Evals?

Skills that share tags, products or a category with Project Evals: LLM Benchmarking with lm-evaluation-harness (Orchestra-Research/AI-Research-SKILLs, 13k stars), Azure AI Projects Python SDK (microsoft/skills, 3.1k stars), Fine-Tuning Expert (Jeffallan/claude-skills, 12k stars) and Looper (ksimback/looper, 710 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Project Evals?

GoogleChrome (a GitHub organization) maintains it in GoogleChrome/modern-web-guidance-src, which has 1,134 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 7, 2026.

Source: GoogleChrome/modern-web-guidance-src on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.