Skip to main content
A task suite holds tasks. A task has an instruction, an expected outcome, the world it starts in, and scorers that grade the result. Editing a suite changes the working copy; publishing freezes a version. If you launched a Worldsmith world, it already made a suite for you. Its ID is world.evaluation.task_suite_id. This page is for building suites yourself or adding to a generated one. Use a configured SDK client. The examples share that client and the IDs returned by earlier steps.

Methods

Choose the source task

Start with the ready duplicate-invoice world from Worlds. This walkthrough copies its two mutation scorers into a new task, then adds a judge for the agent’s summary. It checks real Linear and Slack changes as well as the final answer.
Python
Explore this task and its scorers. Its existing scorers check that ENG-2 moved to In Progress and that the exact handoff text was posted in #erp-alerts. They do not independently verify that the Salesforce case remained open; inspect that state in the trial or add a separate assertion before using it as a strict acceptance criterion.

Build a suite

1

Create the suite

Python
2

Create a scorer

Scorers live in a library and can be attached to many tasks. Two kinds: llm-judge (a prompt) and code (Python or TypeScript).
Python
For a code scorer, pass kind="code", language="python" or "typescript", and code containing a handler(input, output, expected, metadata) that returns {"score": 0..1}. Python scorers can import chronicle_world_scorer to check world changes; the scorers Worldsmith generates are good examples.
3

Add a task

A task that starts in a world needs that world’s environment_version_id (from world.evaluation). Tasks that don’t touch a world can leave it out.
Python
Built-in invoice triage task with two attached Python mutation scorers

The built-in source task has two mutation scorers. The custom task created above adds a summary judge to those checks.

Open the source task image.A scorer binding takes a scorer_id, an optional weight (low, med, high), and an optional pass_threshold that overrides the scorer’s own.
4

Publish

Publishing freezes the tasks, their scorer code and prompts, weights, and thresholds into a version that never changes.
Python
Starting an evaluation publishes automatically if the working copy has changed, so you only need this to name a version explicitly.
Now run it: Evaluations. Explore scorer outcomes to see why execution status and task correctness are separate.

Edit a task

tasks.update changes any of title, instruction, expected_outcome, environment_version_id. Fields you don’t pass are left alone. tasks.set_scorers replaces the whole scorer list, so include every scorer you want to keep.
Python
If you edit a scorer in the library, call set_scorers again on the tasks that use it so the next published version picks up the change.

Create a task from a trace

Turn a real recorded interaction into a test. Chronicle snapshots the trace’s events and drafts a title, instruction, and expected outcome from them. Use a real trace ID from Events in place of <trace-id-from-Timeline>. After creating the task, inspect its events and replace <cutoff-event-id> with the last event the agent should receive as context. Later events are held back as the reference answer.
Python
Everything after the cutoff is the reference answer. New events on the live trace don’t change the task. Add scorers and publish as usual.

Test a scorer

Run a scorer on sample data before attaching it:
Python
error is set when the code failed to run. World-state scorers can’t be tested this way because there’s no world; run them in an evaluation.