what does lulu draft do?
Turns one domain into a measured question set, asking the customer nothing else. It reads the customer's own site, asks a model for candidate questions, and keeps only the ones that survive.
how do you run it?
In the parser’s own words, turn one domain into a measured question set, asking nothing else. Every flag this build accepts, on one line:
lulu draft --site SITE --out PATH --floor FLOOR --budget USD [--rivals RIVALS] [--ledger LEDGER] [--provider PROVIDER] [--model MODEL] [--max-searches MAX_SEARCHES] [--pages PAGES] [--candidates CANDIDATES] [--harvest-only] [--dry-run]
lulu draft --site https://example.com --floor 0.5 --budget 5.00 --rivals RIVALS --out PATH ± the whole pathlulu draft --site https://example.com --floor 0.5 --budget 5.00 --out PATH --harvest-only ± read the site, spend nothinglulu draft --site https://example.com --floor 0.5 --budget 5.00 --out PATH --dry-run ± stop before the draws
where do the questions come from?
The person running it types one url. The pages that get read are ranked by what the site itself links to and lists, and every question arrives carrying the page it came from and a quote from that page, checked as a literal substring of that page before anything is asked for real.
what does --floor decide?
What a kept question has to beat, and the number of draws follows from it rather than from a constant. At a floor of 0.5 a clean sweep needs four draws before its lower bound clears the floor, so four is what it buys; at 0.75 it buys twelve, and the bill is printed before the money moves.
It costs money in two places and both are priced before either happens. One call proposes candidates, and one round asks the survivors for real. The second is the expensive one and it is also the pilot: the draws that decide which questions survive are the same draws the variance split is read off.
why does it count rivals and never the customer?
The gate measures how often an answer names a rival. Screening a question set on the customer's own mentions keeps the questions they scored well on and drops the rest, which raises the published number by deleting the evidence against it, so with no rival declared the paid round is refused rather than run on the one name available.
The rival list is still typed in by hand, through --rivals. The round prints the names the list missed, and the subject file records which round and which arm each name came from, so the list can be corrected between rounds.
where can it stop?
--harvest-only stops after reading the site and spends nothing. --dry-run adds the proposal call and the free gates and stops before the draws. Either way, every candidate that died is written to <out>.draft.json with the gate that stopped it, because a set of nine questions that started as forty is a different object from one that started as nine.
which flags does it take?
where does it lead?
lulu screened ± lulu rivals ± lulu collect
the engines it can ask: perplexity sonar, claude.
the parts of the method it reaches: intervals, variance, screen, names.
every command: setup, init, doctor, collect, draft, usage, ablate, lift, screened, publish, rivals, report, verify, plan, size. back to the docs