CORAL
Getting Started

Configuration

Full reference for task.yaml configuration.

Every CORAL task is defined by a task.yaml file. This page documents all available options.

Full example

task:
  name: "my-task"
  description: "Optimize solution.py to maximize accuracy."
  files:
    - "solution.py"
    - "utils.py"
  tips: "numpy and scipy are available. Timeout is 300s."
  seed:
    - "solution.py"
    - "data/"

grader:
  type: function
  module: eval.grader
  timeout: 300
  direction: maximize
  private:
    - "eval/test_data.csv"
  args:
    program_file: "solution.py"

agents:
  count: 2
  runtime: claude_code
  model: claude-sonnet-4-6
  max_turns: 200
  timeout: 3600
  research: true
  heartbeat:
    - name: reflect
      every: 1
    - name: consolidate
      every: 10
      global: true

sharing:
  attempts: true
  notes: true
  skills: true

workspace:
  results_dir: "./results"
  repo_path: "."

task section

FieldTypeDefaultDescription
namestringrequiredTask identifier
descriptionstringrequiredWhat agents should do — included in CORAL.md
fileslist[string][]Key files agents should focus on
tipsstring""Additional hints shown to agents
seedlist[string][]Files/directories copied into each agent's workspace

grader section

FieldTypeDefaultDescription
typestring""Grader type. Leave empty to auto-discover from eval/grader.py
modulestring""Python module path for custom graders
timeoutint300Eval timeout in seconds (0 = no limit)
directionstring"maximize""maximize" or "minimize" — which direction is better
privatelist[string][]Files copied to .coral/private/ (hidden from agents)
argsdict{}Extra arguments passed to the grader

Auto-discovery

When type is empty and module is empty, CORAL looks for eval/grader.py in your task directory and expects a Grader class inheriting from TaskGrader.

Built-in grader types

TypeDescription
functionWraps a callable (codebase_path, tasks) -> Score|float|bool

agents section

FieldTypeDefaultDescription
countint1Number of agents to spawn
runtimestring"claude_code"Agent runtime: claude_code, codex, opencode
modelstring"sonnet"Model to use (e.g. opus, sonnet, haiku, or full model ID)
max_turnsint200Maximum conversation turns per agent
timeoutint3600Agent session timeout in seconds
researchbooltrueEnable web search in agent workflow
heartbeatlistsee belowPeriodic actions triggered during eval loop

Heartbeat actions

Heartbeat actions run at regular intervals based on eval count:

heartbeat:
  - name: reflect        # Built-in: agent reviews progress
    every: 1             # After every eval
  - name: consolidate    # Built-in: agents share knowledge
    every: 10
    global: true         # Uses global eval count (all agents combined)

You can also define custom heartbeat actions with a prompt:

coral heartbeat set review --every 5 --prompt "Review your approach and consider alternatives."

sharing section

Controls what shared state is enabled in .coral/public/:

FieldTypeDefaultDescription
attemptsbooltrueShare attempt scores between agents
notesbooltrueEnable shared notes
skillsbooltrueEnable shared skills

workspace section

FieldTypeDefaultDescription
results_dirstring"./results"Where to store run results
repo_pathstring"."Path to the git repository root