what does lulu collect do?
Asks every question in the subject file k times, writes each answer to the ledger as it comes back, and seals the round when it closes. This is the only command that spends money on purpose and at scale, so everything that could stop it stops it before the first call.
how do you run it?
In the parser’s own words, ask one subject's questions k times each and write the round down. Every flag this build accepts, on one line:
lulu collect --subject PATH --k K --budget USD [--ledger LEDGER] [--provider PROVIDER] [--model MODEL] [--max-searches MAX_SEARCHES] [--no-search]
lulu collect --subject PATH --k 5 --budget 5.00 ± one round, under a five dollar ceilinglulu collect --subject PATH --k 5 --budget 5.00 --provider anthropic --model claude-opus-5 --max-searches 3 ± the engine, the model and the search cap statedlulu collect --subject PATH --k 5 --budget 5.00 --no-search ± the arm with no search tool
what does the subject file hold?
The tracked names and the questions. A prompt id in it is permanent identity, because that is what every comparison groups by, so a file with two prompts under one id is refused rather than renumbered, and so is one with no prompts, an empty brand, or a key this build does not read.
why does the budget have no default?
--budget is a hard ceiling in dollars. This is the command that spends real money on a prepaid account, and a default ceiling is a default amount of somebody else's. It is built from the published price of the model that will actually answer, so a model with no price on file is refused rather than collected unpriced, and the worst case at that ceiling is printed before the first call rather than reported after the last one.
--k has no default either. It decides whether the round can carry an interval at all, and a number chosen in the code would be one nobody decided, spent for. Nothing is asked along the way: what the person running it has to decide, they decide on the command line, once.
what happens at the ceiling?
A round the ceiling stops is a shorter round rather than a failed one. It says how many questions were never asked, seals itself at the length it reached, and comes back with a non-zero code so nothing downstream reads it as the design that was bought.
A call that fails is written down with the provider's own reason and never retried. Asking again until the answer is good is a filter over model output, which is the thing this exists to refuse.
what does --no-search collect?
The other arm: the same questions with no search tool attached at all, which is the difference between a brand the model knows from its weights and one it finds by retrieval. That arm records itself under its own surface, api_unsearched, so the two are two files and two conditions, and comparing them is refused by the same rule that refuses a comparison between a logged-in browser and an API.
On a fee charged per search it owes nothing, and lulu usage prices it that way instead of charging the one-search floor for a search it was never able to run.
which flags does it take?
where does it lead?
lulu plan ± lulu report ± lulu verify ± lulu usage
the engines it can ask: perplexity sonar, claude.
every command: setup, init, doctor, collect, draft, usage, ablate, lift, screened, publish, rivals, report, verify, plan, size. back to the docs