comet eval works out of the box to evaluate built-in tasks and any local Skill. But when you want to evaluate how your own Skill performs in your own scenario, you need a custom task. This article walks you through the entire process step by step: from defining a task, to configuring an evaluation profile, to running a report.
If you haven’t run an eval yet, first read Evaluating Any Skill · Quickstart to set up the environment. This article assumes you can already run
comet eval —collect successfully.The Big Picture of Eval Configuration
A complete eval is assembled from three parts, and understanding their division of labor is the foundation of customization:
Task decides what to test, Treatment decides what to inject, Profile and Rubric decide how to score
| Configuration | Question it answers | Location |
|---|---|---|
| Task | What scenario to test? What to produce? How to verify correctness? | local/tasks/<name>/ |
| Treatment | Which Skills to inject in this run (including the no-Skill baseline)? | local/treatments/ |
| Profile + Rubric | Which dimensions to score by? | [evaluation] in task.toml |
Define a Task
Each task is a directory underlocal/tasks/ containing four files:
local/tasks/my-task/
task.toml
instruction.md
environment/
Dockerfile
validation/
test_my_task.py
The task directory convention comes from the eval harness (
eval/), not your business repo. Custom tasks live under eval/local/tasks/ in the Comet repo and are registered in eval/local/tasks/index.yaml.1. Write task.toml
task.toml is the core configuration of a task, divided into four sections:
| Section | Role |
|---|---|
[metadata] | Task identity. category = "comet" or a name starting with comet- will be automatically inferred as the comet-workflow profile |
[environment] | What Docker environment the validation runs in, and the timeout |
[validation] | Which scripts to validate with, which artifacts are expected |
[evaluation] | Which profile to score with, which Skills must be invoked, custom judging criteria |
[interaction] | Single-turn or multi-turn simulated interaction |
Key fields in [evaluation]
These fields directly determine the scoring result and deserve separate explanation:
| Field | Role |
|---|---|
profile | Select the rubric: generic (7 dimensions) / comet-workflow (9 dimensions) / authoring-skill (11 dimensions). See Scoring Metrics and Dual-Agent Evaluation for dimension details |
expected_artifacts | The artifact_presence dimension of the rubric checks whether these artifacts exist (supports glob) |
required_skills | Lists Skills that must be invoked; the skill_invocation dimension scores based on this |
require_skill_invocation | When set to true, a required Skill not being invoked produces a hard failure (the run is directly judged as not passed) |
rubric_criteria | Custom judging criteria, passed to the LLM judge as additional dimensions (custom_0, custom_1…) |
2. Write instruction.md
This is the task instruction for the agent, supporting template variables like {run_id}:
3. Write the validation script
The validation script runs inside Docker and writes results to_test_results.json. This is the source of truth for “did this run get it right”:
failed list reported by the validation script is empty. Both pass@k and pass^k are based on this judgment.
4. Write the Dockerfile
The Dockerfile provides the runtime and dependencies needed for validation. A minimal example:5. Register the task
Finally, register it inlocal/tasks/index.yaml:
--task my-task.
Configure Treatment
Treatment answers “which Skills to inject in this run”. Located atlocal/treatments/:
| Treatment | Meaning |
|---|---|
CONTROL | No-Skill baseline — no Skill injected, tests the agent’s bare capability floor |
COMET_FULL_040_BETA | Injects the full Comet workflow Skill bundle |
| Custom | Inject your own Skill to compare “with Skill vs without Skill” |
Choose a Profile
The profile determines which rubric to score with. Choosing the wrong profile makes the dimension scores meaningless:| Profile | Suitable for | Dimensions | Interaction mode |
|---|---|---|---|
generic | Smoke-testing any generic Skill | 7 | none (single-turn) |
comet-workflow | Classic /comet five-phase | 9 | auto_user (multi-turn) |
authoring-skill | /comet-any artifacts | 11 | auto_user (multi-turn) |
Profile resolution priority:
—profile override > manifest’s skill.profile > task’s evaluation.profile > generic. Comet-type tasks (category = “comet”) are automatically inferred as comet-workflow.Multi-turn interaction: auto_user mode
A single-turn task (mode: none) runs only once, suitable for simple scenarios of “give an instruction and see the result”. But workflow-type Skills need to pause at decision points, ask the user, and continue after receiving a reply — single-turn can’t test this.
auto_user mode solves this: it uses two Agents interacting automatically — one runs the Skill under test (subject), the other simulates the user replying at decision points (simulator).
The simulator’s behavior is controlled by a prompt file. It reads eval/simulator-instruction.md by default, and you can point BENCH_SIMULATOR_PROMPT_FILE to your own version to simulate “a more demanding user” or “a user who asks for clarification”:
max_turns controls the loop limit (comet-workflow typically 12 outer round-trips, authoring-skill typically 8 outer round-trips). It is not the number of internal messages or tool calls of the Agent under test; one outer round-trip means the Agent under test reaches a decision point, the user simulator replies, and the Agent under test continues with --resume. Hitting a “complete” signal (such as archive complete) ends the loop early.
A complete custom evaluation from scratch
Putting the above steps together, to evaluate your own Skill from scratch:pass@1andpass^k: capability ceiling vs reliability floor. See Scoring Metrics.- Rubric dimension scores: which dimension dragged you down?
- Failure attribution (
harness/workflow/task/model): is the failure a Skill problem, or a task/environment problem?
Evaluating /comet-any generated bundles
A Skill bundle generated by /comet-any comes with its own comet/eval.yaml manifest, so you don’t need to hand-write a task.toml. Just run with the manifest:
authoring-skill profile, injects recommended tasks and quality gates. For the complete manifest format, see Evaluation System Overview.
Next steps
- Scoring Metrics and Dual-Agent Evaluation — dimensions, weights and pass@k/pass^k of the three rubrics
- Evaluation System Overview — manifest format, profile system and task system
- comet eval command — complete command-line argument reference

