SKILL.md to evaluate a Skill with comet eval. Even if you have not written evaluation cases in advance, Eval can automatically generate 2–4 evaluation cases from the Skill content and run them. This page follows the practical order: get one run working, choose an Agent and evaluation backend, configure tasks, generate reports, and diagnose failures.
What You Need
Required
@rpamis/cometinstalled. The npm package includes the eval harness; you do not need to clone the Comet repository.- A local Skill directory containing
SKILL.md. - For a real evaluation run:
uv, Python 3.11+, Docker, the selected Agent CLI, and its model credentials.
--collect only performs static discovery and configuration checks. It does not start the Agent, Docker, plugins, credentials, or network requests, so you can check a Skill before preparing the full model environment.
Before choosing an Agent other than Claude Code, read Eval Agent startup configuration to confirm its CLI, authentication method, and model protocol.
User-level .env configuration
Ordinary users do not need to clone the Comet repository or enter its eval/ directory. On the
first comet eval command, the CLI automatically creates the complete user-level configuration file:
- Windows:
%USERPROFILE%\\.comet\\eval\\.env - macOS/Linux:
~/.comet/eval/.env
.env.
The generated template contains all user-configurable parameters, grouped as follows:
All parameters in the template are commented out by default, so unused entries do not change the
default behavior. Keep real API keys only in the user-level
.env or current shell; never put them
in a Skill, manifest, report, or public repository.
Supported Evaluation Agents
comet eval uses claude-code by default. The subject Agent, user simulator, and optional Judge can use the following Agents:
Custom Agent adapters are a user-level advanced capability and do not require a Comet source
checkout. Clone the source only when you need to modify the built-in Eval harness, tasks, or Docker
environment; see advanced configuration.
PATH
is not enough to enable it.
If an evaluation finishes instantly without a real run, Docker, the Agent CLI, or model credentials are usually not ready. In these cases the harness normally skips instead of fabricating a successful run.
First Run
Start with a model-free pre-check, then run a low-cost smoke test, and finally run the configured or generated task set:comet/eval.yaml, or the manifest has neither evaluation.tasks nor recommendedTasks, a normal run automatically generates 2–4 evaluation cases from the Skill content, freezes and caches them, and then executes them. You do not need to write tasks before starting an evaluation. --quick does not use these generated cases; it always runs generic-skill-smoke, which checks that the Skill can be injected, invoked, and produce result.md.
Passing the Target
You can pass a directory, a directSKILL.md, or a manifest as the target:
--project to specify the project directory where runtime state and reports are stored:
Configure the Evaluation Agent and Judge
The simplest way to choose the subject Agent is on the command line:comet/eval.yaml under the root of the Skill being evaluated to configure the default Agent. The layout is:
comet eval ./my-skill, Comet automatically discovers ./my-skill/comet/eval.yaml. You can also pass the file directly as the target:
eval.yaml. CLI options take precedence over the manifest:
Choose an Evaluation Backend
Use--suite to select the evaluation backend. All three backends use the same target, task, and Agent configuration; they differ in whether results are synchronized to an external evaluation service:
Langfuse example:
--collect:
--collect --suite langfuse does not initialize an SDK, connect to the network, or download plugins.
Report Types
Evaluation state and reports are written to the following directory under the target project by default:--html, the evaluation still generates summary.md. To generate HTML, run:
--report-config <path> or COMET_EVAL_REPORT_CONFIG. The CLI prints Experiment and Report path; use those values when locating a specific report.
When reading a report, start with three questions:
- Did the evaluation pass?
- Is the failure attributed to
harness,workflow,task, ormodel? - Are expected artifacts missing, or are token, cost, or duration values unusual?
harness means an environment or dependency problem, workflow means the Skill flow did not meet expectations, task means the task definition or validation condition needs attention, and model means model behavior or invocation was unstable.
Customize Tasks
Tasks are selected in this order:- The task specified with
--task. generic-skill-smokeselected by--quick.evaluation.tasksin the manifest.recommendedTasksor a task package referenced bysource.- 2–4 evaluation cases automatically generated and cached from the Skill content when no usable task is available.
comet/eval.yaml under the root of the Skill being evaluated, and declare an inline task under evaluation.tasks. For example:
Reference a Task Package Inside the Skill
If a task needs its owntask.toml, instruction.md, Docker environment, or validation script, keep the task package inside the Skill directory and reference it with source. A recommended layout is:
comet/eval.yaml at the Skill root, use evaluation.tasks[].source to point to the task package. The source path is relative to the Skill package root (the directory containing SKILL.md), not to the comet/ directory:
task.toml fields, validation scripts, profiles, and Docker configuration, see Configuring Evaluations and Custom Tasks.
task.toml declares the task metadata, Docker environment, expected artifact, and validation script:
instruction.md contains the task instruction sent to the Agent:
environment/Dockerfile provides the base environment for the task and its validation:
validation/test_summary.py runs inside the task container and checks whether the Agent produced the expected file:
eval-tasks/writes-summary/task.toml describes the task environment and validation, while instruction.md contains the task instruction sent to the Agent. Put any Dockerfile or deterministic validation script in the task package’s environment/ and validation/ directories. A source task cannot also define the inline task fields prompt or expect, and Comet checks that the package contains both task.toml and instruction.md.
You can pass the Skill directory and let Comet discover comet/eval.yaml, or pass the manifest directly:

