Skip to main content
This page documents every parameter available in YC-Bench configuration files. All parameters are defined in default.toml, which serves as the canonical reference.
Location: src/yc_bench/config/presets/default.tomlEvery parameter is explicitly listed in the default preset so this file doubles as complete documentation.

Top-Level Fields

These fields identify and describe your experiment.
name
string
required
Experiment name, used in output filenames and logs.Default: "default"
description
string
Human-readable description of what this configuration tests.Default: "Hardened 3-year benchmark. Most tasks require prestige 3-5, 2-domain work, tight deadlines, costly cancellations."
extends
string
Name of another preset to inherit from. All presets except default use extends = "default" to inherit base parameters.Example: extends = "default"

Agent Configuration

The [agent] section configures the LLM agent behavior.
agent.model
string
required
LLM model identifier. Supports OpenRouter format.Default: "openrouter/z-ai/glm-5"Example: "openrouter/anthropic/claude-3.5-sonnet"
agent.temperature
float
Sampling temperature for model responses.Default: 0.0Range: 0.0 (deterministic) to 1.0 (creative)
agent.top_p
float
Nucleus sampling parameter.Default: 1.0Range: 0.0 to 1.0
agent.request_timeout_seconds
float
Timeout for each LLM API request.Default: 300.0 (5 minutes)
agent.retry_max_attempts
integer
Maximum retry attempts for failed API requests.Default: 3
agent.retry_backoff_seconds
float
Initial backoff delay between retries (exponential backoff).Default: 1.0
agent.history_keep_rounds
integer
Number of conversation rounds retained in context before each API call. Older rounds are dropped proactively. The scratchpad survives truncation.Default: 20
agent.system_prompt
string
Optional system prompt override. Omit to use the built-in prompt.Default: (built-in prompt used)

Loop Configuration

The [loop] section controls the agent interaction loop.
loop.auto_advance_after_turns
integer
Consecutive turns without sim resume before the loop forces a time-advance.Default: 10Purpose: Prevents agents from getting stuck in analysis loops without advancing simulation time.
loop.max_turns
integer
Hard cap on total turns. Comment out or set to a large number for unlimited.Default: (unlimited)Example: max_turns = 500

Simulation Parameters

The [sim] section defines the simulation timeline.
sim.start_date
string
required
Simulation start date in ISO 8601 format.Default: "2025-01-01"Format: YYYY-MM-DD
sim.horizon_years
integer
required
Simulation duration in years.Default: 3Tutorial/Easy/Medium/Hard/Nightmare: 1
sim.company_name
string
Name of the company in the simulation.Default: "BenchCo"

World Parameters

The [world] section contains scalar world-generation parameters.

Team & Resources

world.num_employees
integer
required
Number of employees in the company.Default: 10
world.initial_funds_cents
integer
required
Starting cash in cents.Default: 15_000_000 ($150,000)Tutorial: 25_000_000 ($250,000)Hard: 10_000_000 ($100,000)Nightmare: 8_000_000 ($80,000)
world.initial_prestige_level
float
Starting prestige level for all domains.Default: 1.0
world.work_hours_per_day
float
Business hours per day that employees work.Default: 9.0

Market

world.num_market_tasks
integer
Total number of tasks generated in the market.Default: 200
world.market_browse_default_limit
integer
Default number of tasks shown when browsing the market.Default: 50

Salary & Prestige Mechanics

world.salary_bump_pct
float
Salary increase percentage per completed task for each assigned employee. Compounds over time, accelerating payroll pressure.Default: 0.01 (1% per task)Tutorial: 0.0 (no compounding)Nightmare: 0.02 (2% per task - aggressive)
world.prestige_max
float
Maximum prestige level.Default: 10.0
world.prestige_min
float
Minimum prestige level.Default: 1.0
world.penalty_fail_multiplier
float
Prestige penalty multiplier when a task fails (misses deadline).Default: 1.4 (hardened)Tutorial: 0.3 (negligible)Nightmare: 2.0 (catastrophic)Interpretation: Higher values mean failing tasks costs MORE prestige. Canceling is worse than failing in default config.
world.penalty_cancel_multiplier
float
Prestige penalty multiplier when a task is canceled.Default: 2.0 (hardened)Tutorial: 0.5 (negligible)Nightmare: 2.5 (catastrophic)Interpretation: Accepting is a real commitment, not a free option.
world.reward_prestige_scale
float
Extra reward fraction per prestige level above 1.Default: 0.55Formula: reward_multiplier = 1 + scale × (prestige - 1)Example: At scale=0.55, a prestige-8 task pays 1 + 0.55×7 = 4.85× more than prestige-1.
world.prestige_decay_per_day
float
Daily prestige decay per domain. Domains not exercised lose prestige over time.Default: 0.005 (-0.15/month, ~1 level lost every 6 months)Purpose: Prevents single-domain hyper-specialization.
world.prestige_qty_scale
float
Required quantity scaling by prestige level.Default: 0.3Formula: qty_multiplier = 1 + scale × (prestige - 1)Example: At scale=0.3, prestige-5 tasks need 1 + 0.3×4 = 2.2× the work of prestige-1 tasks.

Deadlines

world.deadline_qty_per_day
float
Quantity units processed per business day when calculating deadlines.Default: 200.0Formula: deadline = max(deadline_min_biz_days, max_domain_qty / deadline_qty_per_day)Note: Domains are worked in parallel, so deadline scales with the heaviest domain, not the sum.
world.deadline_min_biz_days
integer
Minimum deadline in business days.Default: 7

Progress & Business Hours

world.task_progress_milestones
array
Progress fractions that trigger checkpoint events.Default: [0.25, 0.5, 0.75]
world.workday_start_hour
integer
Business day start hour (24-hour format).Default: 9
world.workday_end_hour
integer
Business day end hour (24-hour format).Default: 18

Distribution Types

YC-Bench uses statistical distributions to generate random quantities like task prestige, reward amounts, and work volumes. Each [world.dist.<name>] section specifies one distribution.

Available Distribution Types

Triangular distribution with a mode (peak). Most values cluster around the mode.Parameters:
  • type = "triangular"
  • low (float/int): Minimum value
  • high (float/int): Maximum value
  • mode (float/int): Most likely value (peak)
Example:
[world.dist.required_prestige]
type = "triangular"
low  = 1
high = 10
mode = 4    # Most tasks need prestige 3-5

World Distributions

These distributions define random task properties generated during world creation.

Required Prestige

world.dist.required_prestige
distribution
required
Prestige level required to accept a task (cast to int after sampling).Default (hardened):
type = "triangular"
low  = 1
high = 10
mode = 4    # Most tasks need prestige 3-5
Tutorial:
type = "constant"
value = 1    # ALL tasks accessible immediately

Reward Funds

world.dist.reward_funds_cents
distribution
required
Base reward paid on task completion, in cents. Scaled further by prestige.Default:
type = "triangular"
low  = 300_000      # $3,000
high = 4_000_000    # $40,000
mode = 1_400_000    # $14,000
Economics: Mode $14K means prestige-1 tasks burn cash, prestige-3 breaks even, prestige-4+ profits.

Domain Count

world.dist.domain_count
distribution
required
Number of domains each task requires work in (cast to int after sampling).Default (hardened):
type = "triangular"
low  = 1
high = 3
mode = 2    # Most tasks need 2 domains
Tutorial:
type = "constant"
value = 1    # Single-domain only

Required Quantity

world.dist.required_qty
distribution
required
Work units required per domain per task (cast to int after sampling).Default (hardened):
type = "triangular"
low  = 800          # No trivially small tasks
high = 4000
mode = 2000         # Substantial work required
Nightmare:
low  = 1200
high = 5000
mode = 2500         # Massive work volumes

Prestige Delta Reward

world.dist.reward_prestige_delta
distribution
required
Prestige delta awarded per domain on task success.Default:
type  = "beta"
alpha = 1.2
beta  = 2.8
scale = 0.35
low   = 0.0
high  = 0.35    # Mean ~0.1: climbing 1→5 takes ~40 tasks

Skill Boost

world.dist.skill_boost
distribution
required
Skill rate boost applied to each assigned employee on task success. Expressed as a fraction of current rate.Default:
type  = "normal"
mean  = 0.12    # Average 12% boost
stdev = 0.06
low   = 0.01
high  = 0.40

Salary Tiers

Three salary tier sections define employee distributions. All three share values must sum to exactly 1.0.

Junior Tier

world.salary_junior
object
required
Configuration for junior employees.Default:
[world.salary_junior]
name       = "junior"
share      = 0.50       # 50% of employees
min_cents  = 200_000    # $2,000/month
max_cents  = 400_000    # $4,000/month
rate_min   = 1.0        # units/hour
rate_max   = 4.0

Mid Tier

world.salary_mid
object
required
Configuration for mid-level employees.Default:
[world.salary_mid]
name       = "mid"
share      = 0.35       # 35% of employees
min_cents  = 600_000    # $6,000/month
max_cents  = 800_000    # $8,000/month
rate_min   = 4.0
rate_max   = 7.0

Senior Tier

world.salary_senior
object
required
Configuration for senior employees.Default:
[world.salary_senior]
name       = "senior"
share      = 0.15       # 15% of employees
min_cents  = 1_000_000  # $10,000/month
max_cents  = 1_500_000  # $15,000/month
rate_min   = 7.0
rate_max   = 10.0

Next Steps

Presets

See how presets combine these parameters into coherent challenges

Tuning

Learn how to create custom presets by overriding parameters

Build docs developers (and LLMs) love