Template Example (1/2)

This page is the template for Vmax tools. Build your own with the create-vmax-tools-page skill: it gives you this shell, the sidebar, and every form primitive shown below. The controls on this page decide who can open a published paper, how it can be reused, and what ships alongside it. Drafts are never affected.

Comparisons

Use <FormTextCompare /> to show an edit as a unified diff. Removed lines wash var(--theme-diff-delete-wash), added lines wash var(--theme-diff-insert-wash), and every row snaps to one var(--theme-grid-block). The diff stays inside the 768px column and scrolls sideways when a line runs long.

Paraphrase
1-Freedom is at odds with happiness.
21Authentic freedom is not satisfaction, but risk and effort.
3-At its most extreme, freedom is the anguish of one who holds their salvation and their downfall in their hands: the least comfortable of situations.
4-Those who desire happiness above all else must first sacrifice their freedom, for servitude relieves them of the heaviest of burdens.
5-Conformity is the first condition of comfort, and liberalism tells the individual that to be free is to be happy.
6-Since all servitude brings a semblance of peace, they will eventually believe that to be a serf is to be free.
2+America is greatest when its people hold their salvation and their destiny in their own hands.
3+Those who want a great nation must first defend their freedom, for responsibility is the proudest of burdens.
4+Self-reliance is the first condition of greatness, and America tells the individual that to be free is to be capable of anything.
5+Since freedom rewards effort, they will come to know that to be free is to be strong.
6+Greatness is not given to a people; it is earned by the free.

<FormTextCompareSideBySide /> is the split view. Before sits on the left, after on the right, and a hatched blank fills any line without a match. Reach for it when readers need both versions in full.

Paraphrase
BeforeAfter
1Freedom is at odds with happiness.
2Authentic freedom is not satisfaction, but risk and effort.
3At its most extreme, freedom is the anguish of one who holds their salvation and their downfall in their hands: the least comfortable of situations.
4Those who desire happiness above all else must first sacrifice their freedom, for servitude relieves them of the heaviest of burdens.
5Conformity is the first condition of comfort, and liberalism tells the individual that to be free is to be happy.
6Since all servitude brings a semblance of peace, they will eventually believe that to be a serf is to be free.
1Authentic freedom is not satisfaction, but risk and effort.
2America is greatest when its people hold their salvation and their destiny in their own hands.
3Those who want a great nation must first defend their freedom, for responsibility is the proudest of burdens.
4Self-reliance is the first condition of greatness, and America tells the individual that to be free is to be capable of anything.
5Since freedom rewards effort, they will come to know that to be free is to be strong.
6Greatness is not given to a people; it is earned by the free.

The same component reads well on code. Here a recursive factorial becomes the triangular numbers, so only the two edited lines change color.

factorial to triangular
1-function factorial(n) {
1+function triangular(n) {
22 if (n <= 1) return 1;
3- return n * factorial(n - 1);
3+ return n + triangular(n - 1);
44}

FormCode

Use <FormCode /> for source the way a run carries it. A dependency-free tokenizer colors python, json, shell, and log through the shared var(--theme-graph-option-*) palette, mixed toward var(--theme-text) so every token lands legible on both themes. Same measured rows as the diffs: a numbered gutter, one var(--theme-grid-block) per line, sideways scroll past the 768px column.

verify.py: the behavior gate
1# Grade one rollout against the oracle behavior.
2@verifier.gate(key="behavior", threshold=0.5)
3def behavior_gate(rollout: Rollout) -> float:
4 expected = load_oracle(rollout.task_id)
5 observed = rollout.stdout.strip()
6 if not observed:
7 return 0.0
8 if observed == expected.stdout:
9 return 1.0
10 return partial_credit(observed, expected)

The shell language covers the commands a page tells its reader to run (set copyable on those and a copy control joins the caption line), and log picks the verdict words out of a verifier's output: PASSED reads var(--theme-diff-insert), FAILED and ERROR read var(--theme-diff-delete).

Reproduce the run
1# Reproduce the run locally, then replay one trajectory.
2git clone git@github.com:vmax/populora-runs.git
3cd populora-runs
4python3 scripts/replay.py --run ppo-8b-4192 --trajectory 4 --verbose
Verifier output
1behavior gate ....... PASSED (score 0.92)
2remote_execution .... PASSED (score 1.00)
3capability gate ..... FAILED (score 0.31)
4WARNING sandbox clock drifted 412ms during trial 3
5ERROR capability contract unmet: expected 3 tool calls, saw 0

FormJSONExplorer

Use <FormJSONExplorer /> to let readers walk a JSON payload. Every object and array folds with the + / - toggles, so a large record stays scannable.

ppo-8b-4192
1- {
2 "run": "ppo-8b-4192"
3 "model": "vmax-agent-8b"
4 - "adapter": {
5 "method": "lora"
6 "rank": 16
7 "alpha": 32
8 "trainablePct": 0.7
9 }
10 - "benchmarks": [
11 "swe-bench"
12 "unix-ctf"
13 "webarena"
14 ]
15 - "scores": [
16 - {
17 "suite": "unix-ctf"
18 "pass": 0.71
19 }
20 - {
21 "suite": "webarena"
22 "pass": 0.63
23 }
24 ]
25 "verified": true
26 "reviewer": null
27 }

Elements

The small controls and text marks every tools page is built from. <FormInput /> is the text field. The glass square on the right submits, Enter submits too, and the attached flag docks it flush beneath a <WebTerminalWindow />.

<FormTextArea /> is the multiline sibling on the same hairline surface: the shape a prompt input takes. It auto-grows to fit what you type, reflows on resize, and opens sized to its placeholder, so a worked Example: reads in full. Enter inserts a newline; Cmd or Ctrl with Enter submits, as does the glass square pinned to the bottom-right.

<Checkbox /> is the toggle. A native input hides behind the square figure, so it stays accessible while the mark matches the kit. Control it with value and onChange.

Your published runs and papers are public. Anyone can read and download them; uncheck to limit access to approved Vmax accounts.
Allow readers to cite your work and quote excerpts, provided they credit you as the author.
Allow your published runs to be used to train Vmax models, which sharpens recommendations for everyone who reads them.

<FormList />is the list. Unordered rows take the kit's outline square as their bullet, and wrapped lines keep a hanging indent.

What every clone holds constant
  • Every size comes from var(--theme-grid-block); nothing is measured by eye, so the rhythm survives any body.
  • Colour, borders, and fonts come from the var(--theme-*) tokens, so a page reads correctly in both themes without a single hard-coded value.
  • Bodies stay inside the 768px column and scroll sideways past it, the one overflow rule shared by tables, diffs, equations, and rollouts.
  • The chrome is shared; only the body changes.

Pass ordered to swap the square for a monospace number. Both markers share one gutter, so the two forms keep a single text edge.

How a tools page ships
  1. Compose a body from the <Form* /> primitives, paired with its .module.css.
  2. Add a new <Form* /> component when a case is not covered. That is how the kit grows.
  3. Register one row in TOOLS_PAGES with a label, a description, and its columns.
  4. The route renders it, and the sidebar anchors carry the live query string forward.

And every text style the tools pages use, shown together for reference.

HeadingSub-heading

Paragraph, the body copy scale, carrying bold emphasis and an inline-code mark. The mark takes a tone when it carries a status word: passed on var(--theme-diff-insert), failed on var(--theme-diff-delete), and running on var(--theme-focused-foreground) for a state still in flight.

Field label0.82▲ 0.19

FormSelect

<FormSelect /> is the pick-one control on <FormInput />'s hairline surface. A native select sits behind it, so keyboard and screen-reader behaviour come free, and onChange hands the chosen value straight to a query or an API call. Here it picks the evaluation suite for a run.

Fifteen held-out hiding techniques, fifteen fresh trials each. Solving it takes generalization across Unix families, not recall of the training techniques.

Omit the label for a thin variant: a compact filter or sort control that sits inline without a field heading. Its left and right gradient edges set it apart from a text field.

FormSlider

<FormSlider /> is the continuous control: <FormRatioBar />'s meter made live, with the current value in the monospace slot. Test-time compute is the canonical use: every solver attempt added per task multiplies what a run pays, so drag K and watch the corpus reprice.

Solver attempts per task (K)8 / task

At K = 8, scoring the 6,708-candidate corpus costs 53,664 solver trials per training run. A probe reward pays zero.

Set step to keep a knob on its lattice, and format to print the figure the way the field reads it: a context window in thousands of tokens, an adapter rank as r.

Context window128k tokens
LoRA rankr = 16

FormSegmentedControl

<FormSegmentedControl /> is the pick-one-of-few: native radios behind equal segments, for the two-to-four-way choices an experiment sweeps. The selection reads the way every label in the kit does: muted for the rest, full and bold for the pick. Here, how the agent plans.

Planner

A high-level planner decomposes the goal into subgoals a low-level policy executes, so an eighteen-turn episode holds its course.

Leave it uncontrolled with a defaultValue and it manages itself, like the memory module an agent carries between episodes.

Memory module

Tables

<FormTable /> has three variants, shown here on one leaderboard so you can compare them. A table stays inside the 768px column and scrolls sideways once a fluid column pushes it wider. Mark a column sortable and its header sorts the rows: first click descending, a second flips it. A string cell sorts by the figure it leads with, so Params orders 1.0B under 8.0B under 13B.

Gradient
Eval note
vmax-agent-8b8.0B71.4+12.6The LoRA-tuned policy. Tops the suite on agentic coding while training under one percent of its weights.
vmax-base-8b8.0B58.8baseThe frozen base the adapter sits on. Strong general reasoning but loses the long-horizon tool-use tasks.
openhands-13b13B66.1+7.3A larger open baseline. Edges ahead on single-shot problems but pays for it in latency and serving cost.
world-model-3b3.0B61.9+3.1Plans against a learned world model before it acts, which recovers most of the gap at a fraction of the size.
distilled-1b1.0B54.2-4.6A student distilled from the 8b teacher. Holds surprising ground on the easy split, then falls off where depth is needed.

The ruled variant swaps the gradient fills for a hairline rule beneath each row.

Ruled
Eval note
vmax-agent-8b8.0B71.4+12.6The LoRA-tuned policy. Tops the suite on agentic coding while training under one percent of its weights.
vmax-base-8b8.0B58.8baseThe frozen base the adapter sits on. Strong general reasoning but loses the long-horizon tool-use tasks.
openhands-13b13B66.1+7.3A larger open baseline. Edges ahead on single-shot problems but pays for it in latency and serving cost.
world-model-3b3.0B61.9+3.1Plans against a learned world model before it acts, which recovers most of the gap at a fraction of the size.
distilled-1b1.0B54.2-4.6A student distilled from the 8b teacher. Holds surprising ground on the easy split, then falls off where depth is needed.

The striped variant alternates a translucent fill down the body under a subdued header.

Striped
Eval note
vmax-agent-8b8.0B71.4+12.6The LoRA-tuned policy. Tops the suite on agentic coding while training under one percent of its weights.
vmax-base-8b8.0B58.8baseThe frozen base the adapter sits on. Strong general reasoning but loses the long-horizon tool-use tasks.
openhands-13b13B66.1+7.3A larger open baseline. Edges ahead on single-shot problems but pays for it in latency and serving cost.
world-model-3b3.0B61.9+3.1Plans against a learned world model before it acts, which recovers most of the gap at a fraction of the size.
distilled-1b1.0B54.2-4.6A student distilled from the 8b teacher. Holds surprising ground on the easy split, then falls off where depth is needed.

A table also reads as a settings card. This one holds the LoRA adapter behind the demos below: the base model stays frozen, so the shipped checkpoint is just the adapter.

Adapter configuration
SettingValueNote
Base modelvmax-agent-8bFrozen. Only the adapter trains, so one GPU fine-tunes the CTF policy that used to need a cluster.
Rank r16Each targeted projection learns a low-rank update W + BA, with B and A the only trained matrices.
Alpha32The adapter output is scaled by alpha / r = 2 before it is added back to the frozen projection.
Target modulesq_proj, v_projAdapters on the query and value projections recovered the most flags per trained parameter.
Trainable params56M / 8.0B0.7% of the network trains. The checkpoint you ship for the CTF task is just the adapter.

For a paper's main results, pass groups. Each group gets a full-width header row and the best value in each comparison is bold. The table reads like the paper it came from. Sorting stays inside the sections: every column here is sortable, so a click ranks each domain within itself (the stacked caret lighting the direction) and the group headers hold. Sort Utility and the best generator rises to the top of Code induction, Math, and Software engineering at once. The sort sees through the bold, so a highlighted best value ranks by its figure, not by being marked.

Probe-trained generators against their base
Code induction
Base3B0.1010.6650.7110.3760.318
Single probe3B0.2000.9090.8090.2660.735
Ensemble WCO3B0.1730.8350.7140.3600.685
Base7B0.0530.6750.7200.3690.293
Single probe7B0.1250.8830.7340.3460.674
Ensemble WCO7B0.0980.8460.7000.3770.535
Math
Base3B0.2470.9660.6310.5050.605
Single probe3B0.4190.9600.7080.3870.751
Base7B0.1660.9660.6310.5050.605
Single probe7B0.2790.9570.6520.4640.516
Software engineering
Base27B0.2180.7770.7780.3120.737
Single probe27B0.2660.8040.8820.2260.694
Base (OOD)27B0.0980.8360.8110.0850.605
Single probe (OOD)27B0.1960.7510.8980.0930.718

FormMetric

Lead with <FormMetric /> when a run has headline numbers, here a capture-the-flag agent tuned with the adapter above. Set goodDirection per metric, so a falling KL reads var(--theme-diff-insert) while a falling solve rate reads var(--theme-diff-delete).

Latest run
0.71Flags / episode▲ 0.22
58%Solve rate▲ 11 pts
0.12KL to reference▼ 0.04
0.7%Trainable params

The same strip for a run that regressed. The falls read var(--theme-diff-delete), and the rising KL reads it too, because for KL a rise is the wrong direction.

A run that regressed
0.44Flags / episode▼ 0.15
39%Solve rate▼ 8 pts
0.28KL to reference▲ 0.1
0.7%Trainable params

FormEquation

Use <FormEquation />for display math. Here it draws the frontier band behind the Utility column above: a task earns credit only when the solver's mean solve rate lands inside the band.

The frontier band
US(x)  =  I[aμS(x)mean solve rate ofsolver S on task xb]U_S(x) \;=\; \mathbb{I}\Big[\, a \,\le\, \underbrace{\mu_S(x)}_{\substack{\text{mean solve rate of} \\ \text{solver } S \text{ on task } x}} \,\le\, b \,\Big]

Paste a formula the way a paper carries it. The \[..\], $$..$$, and \(..\) wrappers strip away, several pairs split into separate equations, and environments and raw math pass through. This reward keeps its $$ wrapper and still renders cleanly.

Teacher reward against the matched student
Rteacher(p)  =  {1if p fails to parse, execute, or is non-deterministic,0if ρ(t,s,p)=0,1ρ(t,s,p)otherwiseR_{\text{teacher}}(p) \;=\; \begin{cases} -1 & \text{if } p \text{ fails to parse, execute, or is non-deterministic,} \\ 0 & \text{if } \rho(t, s, p) = 0, \\ 1 - \rho(t, s, p) & \text{otherwise} \end{cases}

FormRatioBar

<FormRatioBar /> is a proportion meter. Here it shows how little a LoRA run touches: a sliver of trainable weights, a small adapter checkpoint, and the KL budget the run has spent.

What the adapter costs
Trainable params0.7%
Adapter checkpoint42 MB / 16 GB
KL budget used0.12 / 0.20

The same meters read as a funnel. Measure each stage against the raw attempts it started from, and the narrowing from 750 candidates to 155 canonical techniques shows bar by bar.

Technique-harvest yield
Raw attempts750
Portable variants656 / 750
Deduplicated variants441 / 750
Canonical techniques155 / 750

FormStackedBar

<FormStackedBar />is the composition meter: each row normalizes its values into shares of one 100% bar, so differently-sized samples still compare. Here the difficulty mix of a task generator's output, before and after probe training: the base mostly emits tasks the solver already saturates, and training concentrates the mass in the frontier band.

Task difficulty on unseen repositories
Base generator
Probe-trained
Too easy (3/3 solved)Frontier bandToo hard (0/3)

Leave the colours off and the segments cycle var(--theme-graph-option-*), the shared graph palette. One row reads as a parts-of-a-whole split, here the server roles a training container is dressed as.

Environment dressing
Training environments
WebserverDatabaseDevboxCI/CDMailserverMonitoringGateway

FormPipeline

Use <FormPipeline /> for the method figure a paper leads with, no image needed. Each panel is one stage with its name, what it does, and the count it passes forward. This is the harvest pipeline behind the funnel above.

How a technique enters the library
Stage 1ExploreA frontier model probes one Unix feature inside a container and drafts a hide-and-recover pair.750 attemptsStage 2VerifyNo plaintext flag may survive on disk, and the recovery command must print it back.Stage 3ParameterizeA smaller model rewrites the pair into plant.sh and recovery.sh, re-run on a fresh flag.656 portableStage 4CanonicalizeSurviving variants dedupe into portable technique identifiers.155 canonical

Set loop when the last stage feeds the first. It appends a return cell, the shape of a training loop.

One population self-play step
Stage 1MatchRatings pair a teacher with a student neither of whom dominates.Stage 2GenerateThe teacher proposes tasks for its matched student.Stage 3FilterThe sandboxed executor drops invalid or non-deterministic programs.Stage 4AttemptThe student rolls out on the valid tasks; the verifier records solve rates.Stage 5UpdateBoth populations take policy gradients; the weakest members are replaced by adapter evolution.RepeatsMatch

FormPreferencePair

<FormPreferencePair /> shows the signal a reward model trains on: one prompt, a chosen answer and a rejected one, each with its reward. The chosen pane washes var(--theme-diff-insert-wash), the rejected one var(--theme-diff-delete-wash), and the margin between them is what the model learns.

Reward model training pair
Chosenreward 2.7

find has an -exec action that runs a command, and here it runs as root because the binary is setuid. Read the flag with: find /root/flag.txt -exec cat {} \;

Rejectedreward -1.4

Just run sudo cat /root/flag.txt, and if it asks for a password try common ones like root or toor until one works.

Reward margin +4.10
HolyLightGrainHide OverviewDebugCol-1Col-2