Find the hardest tasks. Train, then find harder tasks.

Recursive self-improvement at your fingertips, repeated. Campaign does the finding using our proprietary self-play technology to build verifiable tasks from your data, measure them, mark the ones worth training on, over and over again.

Campaign tells you how well your model did. The frontier tasks it finds tell you what training your model needs next. We move beyond classic reinforcement learning with verifiable rewards. The old way is slow, because you have to attempt arbitrary tasks before their solve rate is known.

Today, Campaign runs the search as self-play. A setter model writes tasks in your domain, each with its own environment and verifier, and a solver model attempts each one. Each frontier task it finds is one more place training can move your model past its current limit. And we can do this over and over again. It’s quite powerful.

  • Campaign trials

    Pack authoring and taxonomy trials prepare the campaign. Each trial has its own entry in the table of contents, with the commands and output below.

    Click READ ALL to have me read you all the messages we wrote while running the campaign trials.

    Pack authoring
    completedstatus
    4steps
    1 · reasoningThe task pack needs checks for both correct and incorrect answers so a passing result is meaningful.
    2 · agent messageI have read your campaign brief. I will build a small task pack with clear instructions, useful starting materials, and checks that distinguish a correct answer from an incomplete one.
    3 · command
    1python -m pytest
    All task pack checks passed.
    4 · agent messageI am checking that every task asks a clear question and provides the files needed to answer it. The solver should be able to understand the goal without guessing at hidden requirements. I will keep the starting materials separate from the checks that decide whether an answer passes. The first check is a known correct answer. It needs to pass for the right reason, with the expected output and all required files present. Next I will try an empty answer and a deliberately incorrect answer. Both should fail, which helps establish that the task checks are doing useful work. Once those checks are …

    Built from your work

    Start from one written description of the tasks you care about, grounded in your own code, data, or evals. A setter model writes each task with its own environment and verifier.

  • 3 task groups

    Measured against the frontier

    A solver model attempts every task several times. Campaign marks the tasks it sometimes solves and sometimes fails: that contrast is what reinforcement learning learns from.

  • Scores you can audit

    Every verifier is certified against known answers before it scores anything, and every rollout keeps its files, logs, and full trajectory.

  • Method
    Task pack source
    Sandbox backend
    Runtime image
    Setter network access
    Solver network access
    Tasks
    Iterations
    Rollouts per task
    Concurrent trials
    Compute timeout (s)
    s

    Add private environment variables and choose which roles can use each one.

    No secrets were supplied.

    Model
    Reasoning effort
    Harness
    CPUs
    CPU
    Memory (MB)
    MB
    Storage (MB)
    MB
    Agent timeout (s)
    s
    Action timeout (s)
    s
    Step limit
    step
    Max output tokens
    tok
    Temperature
    Model default
    Verifier timeout (s)
    s
    Context token budget
    tok
    Model
    Reasoning effort
    Harness
    CPUs
    CPU
    Memory (MB)
    MB
    Storage (MB)
    MB
    Agent timeout (s)
    s
    Action timeout (s)
    s
    Step limit
    step
    Max output tokens
    tok
    Temperature
    Model default
    Verifier timeout (s)
    s
    Context token budget
    tok

    Spend you control

    Set the number of tasks, attempts, parallel runs, and a time limit before launch. Nothing is spent until you press Run, and nothing needs you after.

How recursive self-learning works

HARDER TASKS|ROUND 1INSTRUCTION|MDTASK|SETTINGCERTIFIED|PACKSETTERVALIDATORSOLVER|1SOLVER|2SOLVER|3VERIFIERFRONTIER|BANDTRAIN|MODEL

What the frontier is worth

  • An asset that compounds

    Recursive self-improvement compounds only as fast as new verifiable tasks arrive at a model’s edge, and a task is only known to sit there once it has been measured. Campaign writes and measures those tasks from your own code, data, and evals, so every round of the loop adds to a dataset that belongs to you and no one else has.

  • Training data with signal

    Run reinforcement learning on tasks your model solves some of the time, not the ones it always passes or never can. Download every task with its full instruction and measured solve rate as JSONL, ready for your training pipeline. When your model outgrows them, raise the bar and run the next campaign from its recorded settings.

  • Built for long runs

    A long-horizon campaign runs self-play across many iterations, unattended for up to a day, inside the time and attempt budget you set. With the Mulberry method, each new batch of tasks sees the history of the work before it and leans harder on purpose. Each run leaves a certified task pack that starts the next, so the loop can keep turning for weeks without rebuilding anything.

Watch a run find the frontier.

Every task is attempted several times. As each result lands, Campaign lights the tasks your agent solved only some of the time in flame, so you watch the frontier fill in while the run is still going.

See every step while it runs.

Campaign certifies its task setting before any task exists, then records every trial as it happens. The graph grows with the run, from the instruction to each task, trial, and reward, so it is never a black box.

3 task groups

Know exactly where your agent breaks.

Every step of a run is recorded, including the ones that fail. Here an independent check catches a task that could not tell a working fix from no fix, the repair fails too, and the task is discarded before a single attempt is spent on it.

LAUNCHREADCONTROLADMISSIONPOSTGRESWORKERPUBLICINTERFACE/CAMPAIGNS|CONTROLLERCLIENT|X-API-KEYROUTER|/API/CAMPAIGNSAUTH|VIEWERPUT|USERS/VIEWERPOST|REFINEPOST|CREATEPOST|FORKGET|LISTGET|RECORDGET|TASKSGET|EVENTSGET|TRIAL-STREAMGET|EVIDENCEPOST|STOPPOST|SHAREPOST|SUMMARISELOCK|CAPACITYINSERT|QUEUEDWORKER|STARTCAMPAIGNS=ROWTASKS=CONTAINERSEVENTS=SEQLIVE=TRIALS+LOGSEVIDENCE=OBJECTSSHARES=CAPABILITYWORKER|CLAIMPACK|AUTHORPACK|CERTIFYTAXONOMY|MULBERRYITERATION|BATCHTASK|ROOTSETTERVALIDATORSOLVER×NVERIFIER|JUDGEOUTCOME|MEASURED/CAMPAIGNS/SHAREDROUTER|/API/PUBLICSHARED|RECORDSHARED|TASKSSHARED|EVIDENCESHARED|EVENTSSHARED|STREAMSHARED|FILEVIEW-MODEL|LIVESIDEBAR|HISTORYCOMPOSERBUILD|CONSOLERESULTSREFINE|CARDCAMPAIGN|SETTINGSAGENT|ACTIVITYCAMPAIGN|TRIALSTASK|TRACECAMPAIGN|SUMMARYTAXONOMY|TABLESHARE|LINKCAMPAIGN|DATA
Workertask completed · outcome rejected · no rollout runs

Trace any result to the evidence.

Open any attempt and follow it step by step, from the task it was given to the files it changed and how it was graded. When a number is questioned, the answer is one click away.

3 task groups

Get a clear answer when it finishes.

One chart shows the whole run: tasks started and concluded, your agent’s solve rate, and the share of measured tasks that landed in the frontier band, over the campaign’s elapsed time. You see what the budget bought.

24 tasks / 216 trials
Interval conclusion2h 58m
0%25%50%75%100%0s44m 30s1h 29m2h 13m2h 58mCampaign execution startedTasksfrontier-task-0001 concluded at 26m 0s: 3 of 8 rollouts passed, a frontier taskfrontier-task-0002 concluded at 35m 0s: 2 of 8 rollouts passed, a frontier taskfrontier-task-0003 concluded at 35m 0s: 4 of 8 rollouts passed, a frontier taskfrontier-task-0004 concluded at 35m 0s: 1 of 8 rollouts passed, a frontier taskfrontier-task-0005 concluded at 54m 0s: 3 of 8 rollouts passed, a frontier taskfrontier-task-0006 concluded at 1h 3m: 2 of 8 rollouts passed, a frontier taskfrontier-task-0007 concluded at 1h 3m: 5 of 8 rollouts passedfrontier-task-0008 concluded at 1h 3m: 3 of 8 rollouts passed, a frontier taskfrontier-task-0009 concluded at 1h 22m: 2 of 8 rollouts passed, a frontier taskfrontier-task-0010 concluded at 1h 22m: 4 of 8 rollouts passed, a frontier taskfrontier-task-0011 concluded at 1h 31m: 1 of 8 rollouts passed, a frontier taskfrontier-task-0012 concluded at 1h 31m: 3 of 8 rollouts passed, a frontier taskfrontier-task-0013 concluded at 1h 50m: 0 of 8 rollouts passedfrontier-task-0014 concluded at 1h 50m: 2 of 8 rollouts passed, a frontier taskfrontier-task-0015 concluded at 1h 59m: 3 of 8 rollouts passed, a frontier taskfrontier-task-0016 concluded at 1h 59m: 4 of 8 rollouts passed, a frontier taskfrontier-task-0017 concluded at 2h 18m: 2 of 8 rollouts passed, a frontier taskfrontier-task-0018 concluded at 2h 18m: 6 of 8 rollouts passedfrontier-task-0019 concluded at 2h 18m: 3 of 8 rollouts passed, a frontier taskfrontier-task-0020 concluded at 2h 27m: 1 of 8 rollouts passed, a frontier taskfrontier-task-0021 concluded at 2h 46m: 2 of 8 rollouts passed, a frontier taskfrontier-task-0022 concluded at 2h 46m: 4 of 8 rollouts passed, a frontier taskfrontier-task-0023 concluded at 2h 46m: 3 of 8 rollouts passed, a frontier taskfrontier-task-0024 concluded at 2h 55m: 2 of 8 rollouts passed, a frontier task
No recorded work at this time
1–24 / 24
  1. Iteration 1, measuredfrontier-task-000117m 0s3 of 8 passedFrontier
  2. Iteration 1, measuredfrontier-task-000224m 0s2 of 8 passedFrontier
  3. Iteration 1, measuredfrontier-task-000322m 0s4 of 8 passedFrontier
  4. Iteration 1, measuredfrontier-task-000420m 0s1 of 8 passedFrontier
  5. Iteration 2, measuredfrontier-task-000518m 0s3 of 8 passedFrontier
  6. Iteration 2, measuredfrontier-task-000625m 0s2 of 8 passedFrontier
  7. Iteration 2, measuredfrontier-task-000723m 0s5 of 8 passed
  8. Iteration 2, measuredfrontier-task-000821m 0s3 of 8 passedFrontier
  9. Iteration 3, measuredfrontier-task-000919m 0s2 of 8 passedFrontier
  10. Iteration 3, measuredfrontier-task-001017m 0s4 of 8 passedFrontier
  11. Iteration 3, measuredfrontier-task-001124m 0s1 of 8 passedFrontier
  12. Iteration 3, measuredfrontier-task-001222m 0s3 of 8 passedFrontier
  13. Iteration 4, measuredfrontier-task-001320m 0s0 of 8 passed
  14. Iteration 4, measuredfrontier-task-001418m 0s2 of 8 passedFrontier
  15. Iteration 4, measuredfrontier-task-001525m 0s3 of 8 passedFrontier
  16. Iteration 4, measuredfrontier-task-001623m 0s4 of 8 passedFrontier
  17. Iteration 5, measuredfrontier-task-001721m 0s2 of 8 passedFrontier
  18. Iteration 5, measuredfrontier-task-001819m 0s6 of 8 passed
  19. Iteration 5, measuredfrontier-task-001917m 0s3 of 8 passedFrontier
  20. Iteration 5, measuredfrontier-task-002024m 0s1 of 8 passedFrontier
  21. Iteration 6, measuredfrontier-task-002122m 0s2 of 8 passedFrontier
  22. Iteration 6, measuredfrontier-task-002220m 0s4 of 8 passedFrontier
  23. Iteration 6, measuredfrontier-task-002318m 0s3 of 8 passedFrontier
  24. Iteration 6, measuredfrontier-task-002425m 0s2 of 8 passedFrontier
cmp_example_frontier_run

Own everything each round produces.

Export every task, score, and trial record as files you can train on, start the next round from the certified task pack, or share a finished campaign with a link you can revoke.

Campaign data
3files
Campaign recordThe immutable record: request, status, provenance, and task counts.
Task summaries (JSON)3 task metadata rows and trial ids. Full prompts are available under Generated tasks and downloads.
Events5 worker events with their full payloads.
Share
activelink
Jul 14 · 18:20 UTCcreated
Aug 13 · 18:20 UTCexpires
shr_7f3a1e9bc2d44f6a8e0c5b7dpublic id

Copy the link now. The secret half is not shown again; rotating mints a new one and closes this one. Whoever opens it must be signed in to Vmax.

Shared page
1https://vmax.ai/campaigns/shared/shr_7f3a1e9bc2d44f6a8e0c5b7d.s3cr3t-shown-once-s3cr3t-shown-once-s3cr3t-
Public API, for curl with an X-API-KEY
1https://vmax.ai/api/public/campaigns/shr_7f3a1e9bc2d44f6a8e0c5b7d.s3cr3t-shown-once-s3cr3t-shown-once-s3cr3t-
Open the shared pageThe campaign as a reader sees it, in a new tab.
Rotate the linkMints a new link and closes the current one for everyone who has it.
Revoke the linkCloses the link for everyone. The campaign and its evidence are untouched.

Play a whole campaign through.

The Vmax Campaigns Overview replays every stage of a campaign, from the first instruction to the frontier. Press play, pick a scenario, or step through it with the arrow keys once you click inside.

Vmax Campaigns V3.9.4 Overview

Overview of the native self-play system built by the Vmax team.

  • Spine
  • Fan
  • Tree
  • Converge
  • Data
LAUNCHREADCONTROLADMISSIONPOSTGRESWORKERPUBLICINTERFACE/CAMPAIGNS|CONTROLLERCLIENT|X-API-KEYROUTER|/API/CAMPAIGNSAUTH|VIEWERPUT|USERS/VIEWERPOST|REFINEPOST|CREATEPOST|FORKGET|LISTGET|RECORDGET|TASKSGET|EVENTSGET|TRIAL-STREAMGET|EVIDENCEPOST|STOPPOST|SHAREPOST|SUMMARISELOCK|CAPACITYINSERT|QUEUEDWORKER|STARTCAMPAIGNS=ROWTASKS=CONTAINERSEVENTS=SEQLIVE=TRIALS+LOGSEVIDENCE=OBJECTSSHARES=CAPABILITYWORKER|CLAIMPACK|AUTHORPACK|CERTIFYTAXONOMY|MULBERRYITERATION|BATCHTASK|ROOTSETTERVALIDATORSOLVER×NVERIFIER|JUDGEOUTCOME|MEASURED/CAMPAIGNS/SHAREDROUTER|/API/PUBLICSHARED|RECORDSHARED|TASKSSHARED|EVIDENCESHARED|EVENTSSHARED|STREAMSHARED|FILEVIEW-MODEL|LIVESIDEBAR|HISTORYCOMPOSERBUILD|CONSOLERESULTSREFINE|CARDCAMPAIGN|SETTINGSAGENT|ACTIVITYCAMPAIGN|TRIALSTASK|TRACECAMPAIGN|SUMMARYTAXONOMY|TABLESHARE|LINKCAMPAIGN|DATA

Start the loop with one page of instructions.

Find the hard tasks, train on them, then find harder ones. Campaign is open to approved Vmax accounts: join the waitlist for early access, or sign in if you already have one.