Quilzomanual

Research projects with claims you can check: numbers linked to code, real citations

A report whose every number is linked to the code that produced it, and whose every citation is a work that exists and says what the sentence claims.

In the adminResearch

A research project is a question, a plan registered before the data is analysed, computations run in a box with no network, and a report. Every number the report states is a claim pinned to the computation that produced it, by the digests of its code, its inputs and its environment. Every citation is a work an open index returned, and the sentence citing it must be supported by what the work says. People and AI agents work on a project the same way, and only people register or amend its plan.

A research project's page: two problems flagged in the report, the rendered report with each number linked to its computation and a numbered citation, and the reference list
Every number links to its computation; the two numbers nobody can trace are marked where they sit. The data here is an invented example; the cited trial is real.

Start a project

  1. Ask the question and add the code and data

    quilzo research new fever-children --question "Do children's fevers clear for longer with ibuprofen than with paracetamol?"
    quilzo research add fever-children analysis.py
    quilzo research add fever-children fever.csv --to data

    Each file is kept in the project's folder and recorded by its SHA-256.

  2. Write the plan, and register it before analysing anything

    quilzo research plan fever-children plan.md
    quilzo research register fever-children

    Registering seals the plan: its SHA-256 is signed with the audit log's keys, so anybody holding the published keys can check that this plan existed then. A plan registered after the first computation says so. From then on, a change is an amendment with a reason, and the report shows each one and whether the data had been analysed when it was made:

    quilzo research plan fever-children plan-v2.md --why "the outcome is skewed, so compare medians"

Compute in a box

A script runs in a box with no network, on copies of the code and the inputs named, writing only its own folder:

quilzo research run fever-children analysis.py --input data/fever.csv

Python (.py), R (.R) and Julia (.jl) run with the interpreter installed on the machine. The script writes the numbers it found to values.json, and those are the only numbers a report may state:

{"difference": {"value": 0.33, "unit": "hours"}, "children": {"value": 60, "unit": "children"}}

The record keeps the code, the inputs and every file it wrote, each by digest, with the interpreter's version, the box, how long it took and the start and end of what it printed.

Run it again

quilzo research rerun fever-children r-20261014-c40b032d

A re-run uses the code the computation kept and refuses inputs that changed since. It reports whether every number and every file came out the same. A claim resting on a computation that did not reproduce is a problem in the report.

The registered plan with its SHA-256 and signature, the claims table, and the computations: a re-run marked reproduced, with its code, inputs, environment and values
The plan as registered, the claims, and a re-run that reproduced.

Pin numbers as claims

quilzo research claim fever-children --run r-20261014-c40b032d
quilzo research claim fever-children difference ci_low ci_high --run r-20261014-c40b032d

A claim is a value a computation that finished cleanly wrote down. Pinning a value of the same name again moves the claim to the newer computation.

Ideas: hypotheses, judged, then tested

A model can propose hypotheses the project could test; Quilzo keeps them apart from the evidence until computations and a person have spoken:

quilzo research ideas fever-children --count 3
quilzo research ideas fever-children

Each round asks for new hypotheses, a sceptical critique of each, and judges the ideas in pairs, each pair twice, once each way round: a judge that prefers whichever hypothesis it read first splits, and a split is a tie. Standings are fitted to all the matches at once, so the order they were played in changes nothing, and an idea is ranked once it has played three. A repeat of a standing idea is refused; an idea and its opposite are two ideas. An idea whose text addresses the judge rather than the question is held, shown with the reason, and never judged. Judging uses the gateway consumer research:ideas:judge, so it can be a different model from the one proposing; --play judges the pairs owed without proposing more.

A rating is what judges thought of the text. What an idea is worth is what testing it showed:

quilzo research run fever-children analysis.py --input data/trial.csv --idea i-1ddaff81
quilzo research claim fever-children difference --run r-20261014-c40b032d
quilzo research ideas fever-children --verdict i-1ddaff81 --outcome supported --claim difference

Every idea is listed with the computations that ran it, whether they finished and reproduced, and the verdict a person recorded: supported, refuted or inconclusive, resting only on claims those computations made. An idea proposed after the first computation ran is marked, because testing a hypothesis on the data that suggested it is exploration, not confirmation. A model never writes the plan or a verdict. Reading the ideas needs only view; a round needs use-models as well as edit-draft.

Cite only works that exist

Search the open indexes, then cite a work by its identifier, never by a title somebody remembers:

quilzo research search "paracetamol ibuprofen fever children randomised trial"
quilzo research cite fever-children doi:10.1136/bmj.a1302

A DOI is looked up in OpenAlex, then Crossref; a PubMed ID (pmid:) and an OpenAlex ID in OpenAlex; an arXiv ID (arxiv:) in arXiv. An identifier no index has is refused, so a citation cannot be invented. The work's title, authors, year, venue and abstract are kept, and it is cited as [@hay2008], or the key given with --key.

A sentence citing a work must be supported by what Quilzo holds of it: every figure in the sentence must appear there, and most of its informative words, the test chatbot answers pass (see Chatbot safety). When the index holds no abstract, or the support is in the full text, quote the passage the sentence rests on:

quilzo research quote fever-children hay2008 "Combined therapy cleared fever 23 minutes faster than paracetamol alone"

Write and check the report

The report is Markdown with three marks:

WriteFor
{{difference}}a claim's number, filled in from the computation it is pinned to
{{= 95}}a number from the design rather than a result: a year, a dose, a confidence level; shown as stated
[@hay2008], [@a; @b]a citation, numbered in the order it first appears
quilzo research write fever-children report.md
quilzo research check fever-children

The check fails on every number written in the prose instead of linked, every claim or citation that does not exist, every cited sentence its source does not support, and every claim whose re-run did not reproduce. It also notes a plan that was never registered, one registered after the data, and each amendment. A section, figure, table or list number is not a claim, and neither is a number inside a name (p53, COVID-19), an ordinal or an address.

quilzo research report fever-children -o report.md

The report as a document: the text with every number and citation filled in, the references, and a provenance table giving, for each number, its computation, the digests of its code and inputs, and its environment.

Research agents

An agent holding the research_* operations, through a declaration here or an app at the agent interface, works on a project as a person does:

OperationWhat it does
research_projects, research_projectRead the projects, and one project with its rendered report and what the check found
research_searchFind works in OpenAlex; adds nothing
research_citeAdd a work only if an index has it
research_run, research_claimRun a script in the box and pin the numbers it wrote
research_writeWrite the report; the answer is what the check found

An agent cannot register or amend a plan: that is the researchers' commitment. It cannot put a number in a report except by naming a claim, because any number it writes in the prose is flagged.

Limits and records

  • A computation runs for at most 30 minutes with 4 GiB of memory, with no network, and sees only the files named.
  • Looking up and searching works reaches OpenAlex, Crossref and arXiv under the research purpose of the outbound network rules; with the network off, nothing new is cited and everything else works.
  • Each act is in the audit log: research.created, .planned, .registered, .amended, .added, .ran, .reran, .claimed, .cited, .quoted and .written, each with the digests involved.
  • Reading a project takes a reader's role; changing one takes an author's.

Next