# Open Hypothesis: sending hypotheses from a conversation

For agents and chat assistants (ChatGPT, Claude, Gemini, Grok and others) whose user wants to check hypotheses from their conversation, notes or an article draft.

Open Hypothesis checks hypotheses written anywhere. GPT-6 Astra, Claude Opus 5.5, Gemini 4 Argon and Grok 4.7 each answer, blind to authorship, whether an experiment will confirm every hypothesis. A hypothesis is selected when all 4 answer "yes"; the selected hypotheses are then compared with the published literature. No account and no key are needed for up to 200 hypotheses per submission; our models do the work.

Page for people: https://eternalsearch.net/open-hypothesis/check (Russian: https://eternalsearch.net/ru/open-hypothesis/check). Full instructions, including the exact forecast protocol: https://eternalsearch.net/open-hypothesis/agents.md.

## 1. Before you send

- Everything submitted is public: the set, every hypothesis, every model's answer, your user's name and project appear in the list of all runs. Show your user the exact list you are going to send and send it only after they agree.
- Ask your user for their name and the name of the project these hypotheses belong to. Send them as `submitter` and `project`: both are required, and your user later finds all their sets by them. Never put an e-mail address in either.
- Collect every hypothesis of the conversation that your user wants checked. Ask whether to include hypotheses you proposed yourself.
- Write each hypothesis so it stands alone: name the genes, proteins, cells, organisms, interventions and conditions; replace "this", "the above" and references to earlier messages with what they refer to.
- Keep the claim as stated in the conversation. Never add, strengthen, correct, merge or invent a hypothesis. Split a message that states several hypotheses into several items, and send a repeated hypothesis once.
- Put the mechanism and the prediction in their own fields when the conversation gives them. Give `question` to each hypothesis that answers its own research question; a shared question goes once at the top level.
- Your user is named as the author of every hypothesis. Give `author` (for the set or for one hypothesis) only when your user says someone else wrote it.
- Any language is accepted; the forecast reads an English rendering. Set `"language": "ru"` when your conversation is in Russian, so the result also has Russian pages.
- A hypothesis needs at least 40 characters. Up to 200 hypotheses per submission without a key; with an API key up to 5000, split into sets of 200.

## 2. The format

```json
{"submitter": "<your user's name>",
 "project": "<the name of their project>",
 "title": "Hypotheses from our conversation on clonal haematopoiesis",
 "language": "en",
 "hypotheses": [
   {"statement": "<the hypothesis in 1-3 sentences that stand alone>",
    "mechanism": "<the proposed mechanism, if the conversation gives one>",
    "prediction": "<a result that would support it over the alternatives, if given>",
    "question": "<the research question it answers, if it has its own>",
    "author": "<only when someone other than your user wrote it>"},
   {"statement": "..."}]}
```

`submitter` and `project` are required at the top level; in each item only `statement` is required. The same JSON works in all three routes below.

## 3. Choose the route by what you can do

### You can call tools (MCP)

Our MCP server is https://eternalsearch.net/api/mcp (Streamable HTTP, no key needed). Call `check_hypotheses` with the fields above, then `get_hypothesis_run` with each returned run id. A person adds the server once: in ChatGPT as a custom connector in developer mode (settings for apps and connectors), in Claude as a custom connector, in Cursor or other clients as a remote MCP server. Menu names differ between versions; the address is what matters.

### You can send HTTP requests

```http
POST https://eternalsearch.net/api/v1/open-hypothesis/screen
Content-Type: application/json

<the JSON above>
```

Instead of `hypotheses` you may send `text`: one hypothesis per line, a table whose header names a `statement` column, or a whole document such as an article draft.

### You can only read pages (an ordinary chat)

Do not claim to have sent anything. Write the JSON in one code block, then tell your user:

1. Open https://eternalsearch.net/open-hypothesis/check, or https://eternalsearch.net/ru/open-hypothesis/check for the Russian page.
2. Copy the code block with its copy button and paste it into the field "Or paste the hypotheses" («Или вставьте гипотезы» on the Russian page).
3. Check that the fields "Your name" and "Project name" («Ваше имя» and «Название проекта») hold their name and project: the form fills them from the JSON when they are empty. Then press "Check the hypotheses" («Проверить гипотезы»).

The form reads the JSON in code, without a model, so every hypothesis arrives exactly as written. A list with one hypothesis per line also works.

## 4. After sending

The answer (`202`) lists `runs`, each with the page `url` and the `poll` address:

```json
{"status": "queued", "read_as": "structured", "hypotheses": 12,
 "runs": [{"id": "<run id>", "hypotheses": 12,
           "url": "https://eternalsearch.net/open-hypothesis/<run id>",
           "poll": "https://eternalsearch.net/api/v1/open-hypothesis/runs/<run id>"}],
 "poll_interval_seconds": 30}
```

Give your user the page `url` at once. If you can, read the poll address (or `get_hypothesis_run`) every 30 seconds: `status` moves through `queued`, `extracting_hypotheses`, `forecasting`, `checking_novelty` to `completed`; a set waits only behind other people's questions and sets, never behind our own planned analysis, which is deferred while anyone's work is queued or running. Then report to your user:

- `delivered: true`: selected by all forecasting models and not found already published. These are the hypotheses worth testing first.
- `selected: true` with `delivered: false`: selected, but the literature check found an article that reports the claim or its opposite; `literature.evidence` quotes it.
- Every other hypothesis: at least one model expects the experiment to fail, or gave no usable answer. `forecasts` shows each model's answer.

Your user finds every set they sent at https://eternalsearch.net/open-hypothesis/runs?submitter=<their name> (or ?project=<the project>), with a search over names, projects and the text of the hypotheses. You find them with `list_hypothesis_runs` (`submitter`, `project`, `query`) or `GET https://eternalsearch.net/api/v1/open-hypothesis/runs?submitter=...&project=...&q=...`.

## 5. Refusals

`400` with `submitter_required` (`fields` names what is missing: ask your user and send again), `submitter_too_long`, `submitter_invalid` (an e-mail address in the name or project), `nothing_to_check` (no hypothesis of at least 40 characters), `too_many_hypotheses`, `question_too_long` or `invalid_body`; `413` with `document_too_long` (more than 400,000 characters); `429` with `client_limit` (3 sets per address in 24 hours without a key) or `key_limit`; `503` with `paused` while selection is paused: tell your user to try later.
