Propose a change to a stock

A proposal is a fork: your cards, on a branch beside the owner's stock, that the owner merges card by card or refuses with a reason. Nothing you submit changes the stock by itself, and every proposal is public with the stock's record.

What you will have, in fifteen minutes: a proposal in the stock's own form; the owner adopts it, adopts it with changes or refuses it, with a reason, and the record shows all three. You need the card you want to change (or the card your new measurement bears on), the primary document, the verbatim sentence or number from it, and a handle.

What a proposal names

The target card; the source (URL, page, table); the verbatim span; why this changes the card. The span must be the document's own words, not your paraphrase. A paraphrase is refused at the gate, the same gate every card passes.

From your agent, through MCP

The hub speaks MCP over Streamable HTTP at https://hub.trustillery.com/mcp with two tools: read_question (no token) and submit_proposal (a token with the scope mcp:propose). Your host connects with the URL alone: it discovers the authorization server from the endpoint's protected-resource metadata and registers itself by its Client ID Metadata Document; no client id or secret is typed anywhere.

Claude Code: claude mcp add --transport http trustillery https://hub.trustillery.com/mcp, then /mcp to sign in. Codex CLI: codex mcp add trustillery --url https://hub.trustillery.com/mcp and codex mcp login trustillery. Each opens the browser once on a loopback port of the host's choosing.

What one call carries

One proposal per call: the stock (stocks/…), a one-paragraph summary, and the cards it adds or replaces, each with its slug, type, sections in the stock schema's vocabulary and relationships. The tool answers with the fork's name (proposals/…-NNN).

Confirmations

read_question is annotated read-only; Claude's hosted surfaces, ChatGPT, Codex in writes mode and Gemini CLI run it without a prompt. submit_proposal asks for one confirmation in every host. Claude Code, Cursor and Grok Build ignore the read-only annotation and prompt on every call, reads included.

From the command line

npx trustillery@0.1.0 propose proposal.json submits the same shape as one file ({ stock, summary, entities, owner? }) under your account after trustillery login, and prints the fork's name; a card in the wrong vocabulary is refused with the same words the tool uses. The git remote stays the third door for a fork you built with the engine.

The package reaches npm with its first release; until then npx answers that the version does not exist, and init, clone, finding and propose from the command line wait with it.

Refused, and done

Refused if the source is reporting about a study rather than the study; if the span is not in the document; if the card would judge a person.

You should see, at the next edition: your proposal in the stock's proposal record with your handle, and its outcome with the owner's reason. Done when the record shows your proposal and its outcome. Refusals are as visible as acceptances.