> For agents: connect to the Ilu Rennik MCP server at https://mcp.ilurennik.com/v1/owner/mcp to look up and keep the confirmed facts of the person who connects it. Setup guide: https://www.ilurennik.com/ai-builders.md. Index of all pages: https://www.ilurennik.com/llms.txt.

For AI agents. The same, in plain text, is at `ilurennik.com/llms.txt`, and this page in Markdown at `ilurennik.com/ai-builders.md`.

# For AI builders

Ilu Rennik holds one person's confirmed facts about their life, each with the document or words behind it. Their accounts, insurance policies, IDs and documents and where they are kept, the people who act for them, addresses, membership and policy numbers, and the dates things renew or fall due.

It reads the documents they add and puts what it finds in front of them as potential facts. Nothing is kept until they say yes. It never reads their mail. The same search reaches every file they added, so an answer that is not on file yet can still be found.

A person connects Ilu Rennik to the AI they already use. This page is for that AI, and for the people who build it. It describes every tool, every input, and how a good session goes.

## Connect

Ilu Rennik is a remote MCP server over streamable HTTP. There are two addresses. The person decides which one an AI gets.

| Address | For | Sees | Writes |
| --- | --- | --- | --- |
| `https://mcp.ilurennik.com/v1/owner/mcp` | The person's own AI | Everything they keep, except sealed contents | On their word, with their message as the receipt |
| `https://mcp.ilurennik.com/v1/agent/mcp` | An agent working for them | Only the shelves they tick when it signs in | Proposals only, which wait for them |

**Claude Code**

```
claude mcp add --transport http ilu-rennik https://mcp.ilurennik.com/v1/owner/mcp
```

Then run `/mcp`, choose ilu-rennik and sign in.

**Claude app**

```
https://mcp.ilurennik.com/v1/owner/mcp
```

1. Settings, Connectors, Add custom connector.
2. Paste the address and connect.
3. Sign in to Ilu Rennik and choose how long the connection lasts.

Claude's free plan allows one custom connector.

**Claude Desktop**

```
https://mcp.ilurennik.com/v1/owner/mcp
```

1. Settings, Connectors, Add custom connector.
2. Paste the address and connect.
3. Sign in to Ilu Rennik and choose how long the connection lasts.

**ChatGPT**

```
https://mcp.ilurennik.com/v1/owner/mcp
```

1. In ChatGPT on the web, open chatgpt.com/plugins, press +, then Add custom MCP server.
2. Name it Ilu Rennik, paste the address and choose OAuth.
3. Accept the warning, choose Create as a plugin, then install it.
4. Sign in to Ilu Rennik and choose how long the connection lasts.

By default, ChatGPT asks the person to confirm each call that can change things.

**VS Code**

```
code --add-mcp '{"name":"ilu-rennik","type":"http","url":"https://mcp.ilurennik.com/v1/owner/mcp"}'
```

Then start ilu-rennik in VS Code and sign in when it asks.

**An agent**

```
https://mcp.ilurennik.com/v1/agent/mcp
```

Paste it where the agent adds a connector or MCP server. When it signs in, the person ticks the shelves it may see.

## Sign in and security

- Sign in is OAuth 2.1 with PKCE (`S256`) and dynamic client registration. No key or token is ever pasted.
- The person signs in on Ilu Rennik's own screen and chooses how long the connection lasts. It is 90 days unless they choose otherwise, and never more than a year.
- A call with no token, or a token that has ended, gets a `401` that names where to sign in. Many refused tokens in a short time are slowed with a `429`.
- The person sees every connected app in Settings, when it connected and when it last read, and can end it there. It stops at once.

## A first question

Once connected, these words start the first conversation. They work with no plugin and no setup.

Get started with Ilu.

## The Ilu plugin

The Ilu plugin puts the connection and a short guide to the first conversation in one install, for Claude and for ChatGPT. The guide takes a person's AI through what is on file, a few finds at a time, each kept only on their yes.

The plugin is not in Claude's or ChatGPT's directories yet. Until it is, connect the address above, then say **Get started with Ilu**. It works the same without the plugin.

## What a person's Ilu holds

Ilu Rennik holds one person's confirmed facts about their life, each with its source and when it was confirmed, such as insurance policies, bank and retirement accounts, IDs and where documents are kept, the people who act for them, addresses, membership and policy numbers, and renewal and due dates. It also searches the documents they gave it. Every fact here was confirmed by the person and shows where it came from, unlike what an assistant remembers from past chats.

- **Facts.** One statement each, with its receipts (the document or words it came from) and when it was last confirmed. A fact replaced by a newer one keeps its history.
- **Shelves.** Facts sit on shelves, named as on the person's screen. Money, Insurance, Home and cars, Health, Documents, Accounts, Business, Estate, People, Preferences, Travel and events, and Your vault. A person can also make shelves of their own.
- **Potential facts.** What was found but not yet kept. Each waits for the person's yes.
- **Documents.** Files they added, searchable by their text.
- **People.** The people they name, such as their lawyer or accountant, with firm, role and how to reach them.
- **Seats.** People the person has let see named shelves.
- **Sealed facts.** Named, with their contents never returned to any AI.

## When to look

Its tools fit questions about those things, and tasks that depend on them, such as booking travel, paying or renewing something, filling in a form or contacting a provider. `find` looks up one thing, `get_record` reads a shelf, and `open` with `look_for` answers what a document says. `where_things_stand` says what is on file and what to offer next.

## The first session

`where_things_stand` returns `stage` (new, waiting or settled) and `next`, the one offer to make now, chosen from what is on file, with suggested words for the AI to put in its own. The same two ride every tool's result while the account is new or something waits. The offers, in the order they come.

1. **Someone new.** "Ilu Rennik is connected. Now when something about your life matters, like a policy number, a renewal date or who your doctor is, I can look it up there instead of guessing, and so can any other AI you connect. You decide what goes in, and I can help fill it. Want to start by dropping in a document, or just tell me something, like who insures your car?"
2. **What is waiting.** "4 things are still waiting from last time. Want to go through them?"
3. **What is missing.** "You have Cigna on file but no policy. Want to add it?"
4. **Who else should see it.** "Should anyone else see some of this, like your accountant?"

An offer they turn down is never made again; the AI says so with `declined`. One left unanswered comes back in a later conversation, up to three. After the first conversation there is one offer a conversation. Nothing is kept without their yes.

## Answering from documents

A question about what a document says, such as a deductible, what a policy covers or whether a claim is paid, takes two calls. `find` locates the document, and `open` with `look_for` returns only the passages that answer, in any language. Never page through a long document part by part. For a health question, find the policy first, then its terms.

**1. find**

```
{
  "name": "find",
  "arguments": {
    "query": "car insurance deductible",
    "about": "Qualitas"
  }
}
```

**Answer**

```
// Example values
{
  "total": 3,
  "by_kind": { "fact": 1, "document": 2 },
  "shown": 3,
  "items": [
    { "id": "fact:8c1e40d2", "kind": "fact", "date": "2026-03-02",
      "title": "Car insurance, Qualitas",
      "why": "Policy 7741-20, 2022 Honda CR-V, renews 2 March" },
    { "id": "doc:51f0a9b7", "kind": "document", "date": "2026-03-02",
      "title": "poliza-2026.pdf", "matched": "meaning" }
  ],
  "next_cursor": "eyJvIjp7ImRvY3VtZW50IjozfX0"
}
```

**2. open**

```
{
  "name": "open",
  "arguments": {
    "id": "doc:51f0a9b7",
    "look_for": "what is my deductible"
  }
}
```

**Answer**

```
// Example values
{
  "looked_for": "what is my deductible",
  "passages": [
    { "text": "Daños materiales. Deducible 5% del valor comercial...",
      "part": 2, "offset": 8120 }
  ],
  "matched_by": "meaning and words",
  "passages_in_document": 212
}
```

The first time a long document is asked about, it may answer by words only and say it is being read by meaning. Ask again a minute later for the fuller answer.

## Keeping and proposing

Nothing is kept without the person's yes. `keep` records their yes as the receipt, and `propose` puts a find in front of them to decide later.

A document sent with `propose` as one thing has its name as `subject` and each value in `details`, up to 40, so they keep all of it with one tap.

## Seats

A seat lets someone the person names, such as a spouse, an accountant or an executor, see named shelves. Before giving or changing a seat, list the shelves, their own included, with what is on each, and let them choose. Every seat change happens on their word, with `owner_said`.

## Ids

`find` returns ids with a prefix that says what each one is. Pass them to `open`, up to five at once.

| Prefix | What it opens to |
| --- | --- |
| `doc:` | A file's text, in parts, or with `look_for` only the passages that answer |
| `fact:` | A fact with every receipt and what it replaced |

## Long answers

- Every tool takes `part`. When an answer is long, it ends with `next_part`. Pass that number to read on.
- `find` returns `next_cursor` while more matches remain. Pass it back as `cursor`. `total` is the true count, not the page size.
- `open` on a document returns `next_offset`. Pass it as `offset`. Prefer `look_for`.

## Limits and errors

| What happens | What you see | What to do |
| --- | --- | --- |
| More than 60 calls in a minute on one connection | A tool error, "Slow down: too many calls in a minute. Try again shortly." | Wait, then call again. Use `look_for` instead of paging. |
| No token, or a token that has ended | `401` naming where to sign in | Sign in again |
| A sealed fact | Its name and dates only | Tell the person it is sealed |
| A password, seed phrase or full account number given to `keep` | Refused | Keep the last four digits, or where the secret is kept |
| More than five ids to `open` | Only the first five | Open in batches |

## Privacy

Sealed facts, passwords, full account numbers and full ID numbers are never returned. Every call is on a log they can read.

Their data is not sold and not used to train AI. The full account of what is read, where it lives and who touches it is on the **Privacy** page.

## Tools

All 14 tools on the owner address, with every input. Every tool also takes `part`.

### Start here

### `where_things_stand`Reads only

Where things stand

On "Get started with Ilu": what is on file, what waits, the next offer to make. Use this when a conversation starts, when the person says "Get started with Ilu", or asks what Ilu Rennik has on them or what to do next. Do not use for looking up one thing; that is `find`. How their Ilu Rennik stands, in one read: `stage` (new, waiting or settled) and `next`, the one offer to make now, with suggested words to put in your own; each shelf with what is kept and what is waiting; every potential fact waiting for their yes (id, name, what it says, shelf, where it came from); their seats, connected apps and plan; and `instructions`, this server's own, for a client that did not show them. When they say no to an offer, call it again with `declined` naming it, and it is not made again.

| Input | Type | What it is |
| --- | --- | --- |
| `declined` | string | The offer they said no to, by its name in `next.offer`, so it is not made again. Leave it out otherwise; an offer they did not answer comes back in a later conversation. |
| `part` | integer | Which part of a long answer to read: the answer's `next_part`. Leave it out for the first. |

### Look things up

### `find`Reads only

Search your Ilu

Look up one fact: a policy number, renewal date, doctor, account, ID expiry. Use this when a question or task needs one thing about their life, such as their car insurance, a passport expiry, an address, a membership number or who acts for them, before booking, paying, renewing or filling a form, and to locate a policy or statement before reading it. Do not use for questions about the world at large, or for what a document says inside; that is `open` with `look_for`. One ranked search over everything the person keeps here: their facts and the files they uploaded. Ranked by words and meaning together. Filters for a company or place every match holds (`about`), person, date range, kind, file type and newest first. Returns ids, dates, a short snippet and the true total of word matches per kind (an item found by meaning alone says matched: meaning), paged with `cursor`. A snippet points to the item; `open` reads it. Nothing found says so, and names the document that would settle it.

| Input | Type | What it is |
| --- | --- | --- |
| `about` | string | Words every match must hold: the place, company or thing they named ("Jalisco", "Banorte"). |
| `cursor` | string | next_cursor from the last call. |
| `date_from` | string | First day, YYYY-MM-DD, 'today' or 'yesterday'. |
| `date_to` | string | Last day, inclusive. |
| `file_type` | string | pdf, image, spreadsheet, word, presentation, or an extension. |
| `kinds` | list of `fact`, `document` | Default fact, document. |
| `limit` | integer | Default 20, max 100. |
| `newest_first` | boolean | Matches in date order, newest first. Set by itself when the query says last, latest or most recent. |
| `person` | string | A person named on the fact or the file. |
| `queries` | list of strings | Other wordings, searched together (other languages, synonyms). |
| `query` | string | Their words for what to find. |
| `part` | integer | Which part of a long answer to read: the answer's `next_part`. Leave it out for the first. |

### `open`Can change things

Open an item in full

Read inside a document: a deductible, what a policy covers, a claim's status. Use this when the answer is inside a document or fact `find` returned, such as a deductible, what a policy covers, a limit, a renewal date or whether a claim is paid. Do not use for locating something; that is `find`. Reads up to five items by the ids `find` returns. With `look_for`, a document returns only the passages that answer the question, by meaning and in any language, in one call: the way to answer what a policy, contract or statement says (a deductible, what is covered, a limit, a date). Without it, by the kind of id: a document's text in parts (`offset`, the answer's `next_offset`), or a fact with every receipt and what it replaced. A sealed fact opens to its name and dates only.

| Input | Type | What it is |
| --- | --- | --- |
| `id` | string | One id from find, such as doc:51f0a9b7. |
| `ids` | list of strings | Up to five ids at once. |
| `look_for` | string | What to find inside the file, in the words of the question. |
| `offset` | integer | Where to start reading a long document. The answer's next_offset. |
| `part` | integer | Which part of a long answer to read: the answer's `next_part`. Leave it out for the first. |

### `get_record`Reads only

Read facts

A whole shelf at once: all their insurance, every account, their doctors, IDs. Use this when a question or task needs a whole shelf or situation, such as who acts for them, or what a claim or a handover needs. Do not use for one thing, such as a policy number or a renewal date; that is `find`. The person's confirmed facts, a whole `shelf` or `workflow` at a time: accounts, insurance policies and policy numbers, passport and ID details, renewal and due dates, doctors, addresses, membership numbers, who acts for them, documents and where they are kept, businesses. A shelf includes facts of its kind filed elsewhere and gives its size. A workflow (the claim, the handover, the new advisor, the tax pack, the annual sweep, the business review) gathers what that situation needs and names the questions nothing answers yet. Each fact comes with its source and when it was last confirmed. A call names a shelf or a workflow; one thing is looked up with `find`. A sealed fact is named, and its contents are not returned.

| Input | Type | What it is |
| --- | --- | --- |
| `horizon` | one of `present`, `family_if`, `after` | present is how things stand now. family_if is what the family would need if something happened. after is what applies after a death. |
| `kind` | one of `asset_location`, `account_map`, `role`, `instruction`, `document_pointer`, `designation`, `policy_fact`, `business_owned` | With shelf or workflow it ranks first and narrows nothing. |
| `limit` | integer | Max facts to return (default/max 40). |
| `shelf` | one of `Money`, `Insurance`, `Home and cars`, `Health`, `Documents`, `Accounts`, `Business`, `Estate`, `People`, `Preferences`, `Travel and events`, `Your vault` | A whole shelf, including facts of that kind filed elsewhere. |
| `workflow` | one of `the annual sweep`, `the business review`, `the claim`, `the handover`, `the new advisor`, `the tax pack` | Everything a situation needs, such as a claim or a handover, and the questions nothing answers yet. |
| `part` | integer | Which part of a long answer to read: the answer's `next_part`. Leave it out for the first. |

### `open_questions`Reads only

Open questions

What is open or missing: an insurer with no policy, a date with no renewal. Use this when the person asks what is open or missing. Do not use for potential facts waiting for their yes; `where_things_stand` lists those. The questions waiting on the person's answer, with their ids, and whether somebody with a seat is waiting on one; then the guide's open questions (id setup:...), each answered by keeping a fact on it or by saying there is none. Potential facts are listed by `where_things_stand`.

| Input | Type | What it is |
| --- | --- | --- |
| `part` | integer | Which part of a long answer to read: the answer's `next_part`. Leave it out for the first. |

### People

### `person`Can change things

Keep a person

People in their life: a spouse, a child, a doctor, an accountant, an executor. Use this when the person names someone in their life and who they are to them, such as their accountant, their doctor or their sister. Do not use for letting that person see anything; that is `seat`. Keeps a person the person names as a fact under the person's name: who they are to the person in the person's words ("accountant", "sister"), or are not, with email, firm, role and notes optional. It is filed on the shelf the person named, else on People, and a professional on their topic shelf too (an accountant on Money, a dentist on Health). `label` is what the person called them, in their words. Named again, the same fact is updated. `people` takes several at once.

| Input | Type | What it is |
| --- | --- | --- |
| `email` | string | One person's email address. |
| `firm` | string | Their firm. |
| `for` | one of `mine`, `family` | Who it is kept for: mine (the default) or family (them and the person they share with), when their words say so ("our son", "the kids' pediatrician"). |
| `label` | string | In their own words, what this person is to them, such as lawyer, family or old friend. |
| `name` | string | One person's name. |
| `not_label` | string | What they are not. |
| `notes` | string | Anything else about them, in the person's words. |
| `owner_said` required | string | The person's message this call is based on, verbatim as they wrote it. It is the receipt for what is written; a quote, statement or answer passed with it must appear in it. |
| `people` | list of objects | Several people at once, each by name, with email if given. |
| `role` | string | Their role. |
| `part` | integer | Which part of a long answer to read: the answer's `next_part`. Leave it out for the first. |

### Keep and change

### `keep`Can change things

Keep something

Keep what they tell you: a policy, an account, an address, a doctor, a note. Use this when the person tells you something to keep, hands over a note or a letter, or says yes to facts you showed them. Do not use for changing something by its id; that is `change`. Keeps the person's words in Ilu Rennik: a note or letter (kept whole), a fact about their life, or a standing word about how they stand on something or how an AI is to behave. It is filed where they said, else in their vault. `owner_said` carries their message and is the receipt. A statement shown to the person that they said yes to is kept with `approved`, their yes as the receipt. `facts` keeps several in one call, each checked as one keep is, with one result per fact; with `approved`, one yes keeps them all. Words that correct a fact on file restate it, the old version kept as history. Words already in Ilu Rennik that they ask to reuse go in `text`, with their instruction as `quote`. Passwords, seed phrases and full account numbers are refused.

| Input | Type | What it is |
| --- | --- | --- |
| `approved` | boolean | True when `text` is a statement you showed them and their message says yes to it; their yes is the receipt. |
| `facts` | list of objects | Several facts kept in one call, each with its own `text` and, when known, `subject`, `thing` or `new_thing`, `identifier` and `paper`. With `approved`, one yes keeps every one of them. In place of `text`. |
| `for` | one of `mine`, `family` | Who it is kept for: mine (only them, the default) or family (them and the person they share with). family only when their own words say it is shared ("our house", "for both of us") or it is a detail of a shared thing that is not private. |
| `identifier` | string | The number that names the thing, when there is one: a whole policy number or plate, or an institution with its last four. |
| `kind` | one of `note`, `fact`, `stance` | note keeps a letter, a list or anything pasted, whole. fact is something true about their life. stance is how they stand on something, or how an AI should behave. |
| `kind_of_thing` | one of `account_map`, `policy_fact`, `role`, `designation`, `asset_location`, `instruction`, `business_owned`, `letter` | What the fact is, when plain: account_map, policy_fact, role, designation, asset_location, business_owned, letter; else instruction. |
| `new_thing` | string | The thing's name when no id is known ("Chase checking", "the Fenwick house"). One already on file by its number or name is used, and the result says which. |
| `not_these` | list of strings | Ids of things on file that a write brought back as having a name like this one, and that this is not; with `new_thing`, makes it a new thing. |
| `owner_said` required | string | The person's message this call is based on, verbatim as they wrote it. It is the receipt for what is written; a quote, statement or answer passed with it must appear in it. |
| `paper` | string | What the document behind a thing like this is called, when one normally exists ("the policy", "a statement", "the card"). Omit it when a thing like this has no paper (where keys are kept, a letter, a preference). |
| `quote` | string | Only when `text` is reused from what is on file: their instruction, verbatim from this message. |
| `subject` | string | Optional short name of the thing (never a shelf). |
| `text` | string | Their words, verbatim; or words already on file they told you to reuse. |
| `thing` | string | The thing it belongs to, by the id a read returned (find, get_record). Omit for a new thing. |
| `part` | integer | Which part of a long answer to read: the answer's `next_part`. Leave it out for the first. |

### `propose`Can change things

Propose a fact for the person to approve

Offer a fact found during other work: a booking, an account, a policy. Use this when something lasting comes up during other work, such as a booking made, an account opened or a policy renewed, or when you read a document they attached here, and they have not yet said to keep it. Do not use for what they already said yes to; that is `keep`. Puts one fact the app learned or did for the person (a booking made, an account opened, a policy renewed, a new membership number) in front of them, with the shelf it belongs on and the app's name as its source. A document read for the person, such as one attached to this chat, goes as one thing: its name in `subject` and each value under it in `details`, up to 40, kept with one tap. It waits under Potential facts and is on file only when the person keeps it.

| Input | Type | What it is |
| --- | --- | --- |
| `also_on` | string | Optional: one of the person's own shelves, by name, to put it on as well. |
| `details` | list of strings | For a document read for the person (a blood test, a policy, a statement): each value or term as one sentence. The document is one thing, named in subject, and the person keeps all of it with one tap. |
| `for` | one of `mine`, `family` | Who it is kept for: mine (only them, the default) or family (them and the person they share with). family only when their own words say it is shared ("our house", "for both of us") or it is a detail of a shared thing that is not private. |
| `identifier` | string | The number that names the thing, when there is one: a whole policy number or plate, or an institution with its last four. |
| `new_thing` | string | The thing's name when no id is known ("Chase checking", "the Fenwick house"). One already on file by its number or name is used, and the result says which. |
| `not_these` | list of strings | Ids of things on file that a write brought back as having a name like this one, and that this is not; with `new_thing`, makes it a new thing. |
| `paper` | string | What the document behind a thing like this is called, when one normally exists ("the policy", "a statement", "the card"). Omit it when a thing like this has no paper (where keys are kept, a letter, a preference). |
| `shelf` required | string | The shelf it belongs on, as the person chose or agreed: Money, Insurance, Home and cars, Health, Documents, Accounts, Business, Estate, People, Preferences or Travel and events. |
| `statement` | string | One fact about the person's life, as a sentence: something done in their name or learned about it. |
| `subject` | string | A short name for the thing. |
| `thing` | string | The thing it belongs to, by the id a read returned (find, get_record). Omit for a new thing. |
| `part` | integer | Which part of a long answer to read: the answer's `next_part`. Leave it out for the first. |

### `change`Can change things

Change something

Fix a fact on file: a new address, a changed policy number, a renamed account. Use this when the person corrects, replaces, removes, moves or renames something already on file, or answers an open question. Do not use for adding something new; that is `keep`. Changes one thing the person keeps here, by the id a read returned. `do`: restate (`value` is their words for what is true; history kept), retire (off file, kept as history), move (`value` is a shelf, Your vault, "off <shelf>", sealed or normal), refile (`value` is what it really is, such as health insurance), confirm (still right), rename (`value` is its new name), answer (`value` is their exact words answering an open question; a question about two facts that share a last four also takes `verdict`), drop (a Get set up question they want off their list). `owner_said` carries their message.

| Input | Type | What it is |
| --- | --- | --- |
| `do` required | one of `restate`, `retire`, `move`, `refile`, `confirm`, `rename`, `answer`, `drop`, `share`, `stop_sharing` | restate replaces what it says, keeping history. retire takes it off file, kept as history. move puts it on another shelf, in their vault, or off a shelf. refile says what kind of thing it really is. confirm says it is still right. rename gives it a new name. answer answers an open question. drop takes a Get set up question off their list. |
| `id` | string | The thing's id, as a read returned it. Every do but stop_sharing. |
| `identifier` | string | The number that names the thing, as said. |
| `keep_back` | list of strings | With do share: ids of the thing's facts that stay theirs alone ("but not that I'm thinking of selling"). |
| `names_it` | string | retire or restate, when a number they gave is on more than one thing: their own words, copied exactly from their message, that name which thing ("my BofA card"). |
| `new_thing` | string | The thing's name, when no id is known: two things that could be it change nothing. |
| `owner_said` required | string | The person's message this call is based on, verbatim as they wrote it. It is the receipt for what is written; a quote, statement or answer passed with it must appear in it. |
| `thing` | string | The thing the fact is on, by id, when known; a fact on a different thing is not changed. |
| `value` | string | Their words (restate, answer), the destination or "off <shelf>" (move), or what it is (refile). |
| `verdict` | one of `both_right`, `this_one_wrong`, `same_thing` | answer only, on a question about two facts that share a last four. both_right: two things, both stand. this_one_wrong: `wrong` is the fact that does not end in those four; only the number comes off it and it stays on file. same_thing: one thing on file twice; `wrong` is the copy that comes off. Retire only when they say the thing itself is not theirs, never because its number was wrong. |
| `whole` | boolean | restate only. Their words are the entire fact; nothing from the old sentence is carried. Leave it out to keep details their words did not change. |
| `wrong` | string | With this_one_wrong or same_thing, the id of the fact that is wrong, from the question's facts. |
| `part` | integer | Which part of a long answer to read: the answer's `next_part`. Leave it out for the first. |

### `read`Can change things

Settle what is waiting

Yes or no to waiting facts: keep the policy found, drop the wrong address. Use this when the person says yes or no to potential facts that are waiting, such as "keep all four" or "drop the United one". Do not use for facts you showed them from elsewhere; that is `keep` with `approved`. Settles the potential facts waiting for the person's word, from files they uploaded or an agent's proposal: keep (the ids they chose, or all; they land on shelves now, in their word) or discard (the ids they refused). A keep runs only on their word. `owner_said` carries their message.

| Input | Type | What it is |
| --- | --- | --- |
| `all` | boolean | Every open proposal. |
| `do` required | one of `keep`, `discard` | keep lands the ids they chose; discard marks the ids they refused. |
| `ids` | list of strings | Proposal ids for keep or discard. |
| `owner_said` required | string | The person's message this call is based on, verbatim as they wrote it. It is the receipt for what is written; a quote, statement or answer passed with it must appear in it. |
| `part` | integer | Which part of a long answer to read: the answer's `next_part`. Leave it out for the first. |

### Shelves and seats

### `shelf`Can change things

Shelves: add, name, hide, or make one of the person's own

Shelves of facts, such as insurance, accounts, health and IDs: see or change. Use this when the person wants to see, name, hide or make a shelf, or put facts on a shelf of their own. Do not use for moving one fact to a standard shelf; that is `change` with do move. The person's shelves as they are named on their screen. `do`: list (names, and which are hidden); rename, hide, show, add (a standard shelf on their screen, even while empty); create (a shelf of their own called `name`); put and take (`facts`, by id, onto or off their own `shelf`); remove (their own shelf, for good; its facts stay on their shelves). Before a seat is given, list shows the person what each shelf holds. The name is the person's.

| Input | Type | What it is |
| --- | --- | --- |
| `do` required | one of `list`, `rename`, `hide`, `show`, `add`, `remove`, `create`, `put`, `take` | list names each shelf and which are hidden. rename, hide, show and add change a standard shelf on their screen. create makes a shelf of their own. put and take move facts onto or off their own shelf. remove removes their own shelf for good, and its facts stay on their shelves. |
| `facts` | list of strings | Fact ids, for put or take. |
| `name` | string | The new name, for rename or create. |
| `owner_said` required | string | The person's message this call is based on, verbatim as they wrote it. It is the receipt for what is written; a quote, statement or answer passed with it must appear in it. |
| `shelf` | string | The shelf, by the name on their screen or the name they gave it. |
| `part` | integer | Which part of a long answer to read: the answer's `next_part`. Leave it out for the first. |

### `seat`Can change things

Seats: who sees what

Give a spouse, an accountant or an executor a seat to see chosen shelves. Use this when the person wants someone else to see some of it, or to change or end what someone sees. Do not use for connecting an AI; that is `connection`. Who can see what. `do`: list (each seat, what it sees, what it asked and was told, its devices); give (a seat for `name` at `email`, which opens nothing until a code sent there is entered; `shelves`, none meaning every shelf; `message`; it lasts until `expires_on` or for `expires_days`, else until closed; `only` for a seat that sees just those facts, kinds or shelves; `keep_back` for what it may not see; `fidelity` banded shows figures as ranges); close; share or keep_back (`what` for one seat: a fact, a kind or a whole shelf; `full_number` lets a family seat see a fact's full numbers); only (the seat keeps exactly `what` or `only` and loses everything else, later additions included); remove_device (`device`, or all). All on the person's word, with `owner_said`.

| Input | Type | What it is |
| --- | --- | --- |
| `device` | string | On remove_device, the device in the person's words, such as the iPhone, or all. |
| `do` required | one of `list`, `give`, `close`, `share`, `keep_back`, `only`, `remove_device` | list says who has a seat, what each sees, what they asked and were told, and their devices. give opens a seat. close closes one. share and keep_back change what one seat sees. only leaves a seat exactly what is named and nothing else, now or later. remove_device stops one device opening a seat. |
| `email` | string | Required to give a seat. The invitation opens nothing until a code sent to this address is entered. |
| `expires_days` | integer | On give, how many days the seat lasts. Leave both this and expires_on out for a seat that lasts until it is closed. |
| `expires_on` | string | On give, the last day the seat lasts, through the end of that day. Wins over expires_days. |
| `fidelity` | one of `exact`, `banded` | banded shows figures to the seat as ranges. exact shows them as they are. |
| `full_number` | boolean | On share, lets a family seat see that fact's full numbers. |
| `keep_back` | list of strings | On give, facts or kinds of fact kept from the seat. |
| `message` | string | On give, a note to the person invited, in the person's words. |
| `name` | string | The person the seat is for, by name. Required to give, close or change a seat. |
| `only` | list of strings | On give or only, the facts, kinds of fact or shelves the seat sees, and nothing else, including anything added later. |
| `owner_said` required | string | The person's message this call is based on, verbatim as they wrote it. It is the receipt for what is written; a quote, statement or answer passed with it must appear in it. |
| `shelves` | list of strings | On give, the shelves the seat may read. Leave it out for every shelf. |
| `what` | string | On share, keep_back or only, what is meant, in the person's words. A fact, a kind such as crypto, or a shelf. A shelf is given or taken whole, with what is added to it later. |
| `part` | integer | Which part of a long answer to read: the answer's `next_part`. Leave it out for the first. |

### Files and connections

### `connection`Can change things

Connected apps

Connected apps, such as Claude or ChatGPT: list them, or end one. Use this when the person asks which apps are connected or wants one ended. Do not use for people who see some of it; that is `seat`. Apps connected with the person's own sign-in (Claude, ChatGPT and others), since when and when each last read. `do`: list, or end (ends one now; nothing is lost and its next call is refused). `which` is the app's name, and can be left out with one.

| Input | Type | What it is |
| --- | --- | --- |
| `do` required | one of `list`, `end` | list says which apps are connected, since when, and when each last read. end ends one now. Nothing is lost, and its next call is refused. |
| `owner_said` required | string | The person's message this call is based on, verbatim as they wrote it. It is the receipt for what is written; a quote, statement or answer passed with it must appear in it. |
| `which` | string | The app's name. With one connection it can be left out. |
| `part` | integer | Which part of a long answer to read: the answer's `next_part`. Leave it out for the first. |

### `upload_link`Can change things

Upload a document

Keep a file itself: a policy PDF, a will, a statement, a passport scan. Use this when the person wants a file itself kept in Ilu Rennik, such as a policy, a will, a deed or an ID, or when you can send a file yourself. Do not use for a document you can read in this chat to propose its values; that is `propose`. A link that takes one file, once, within ten minutes, into the person's Ilu. Give the person `url` to open on their phone, with `say`; they pick the file there. A client that can send a file itself posts it to `upload` as multipart field `file` (and optionally `statement`, the person's words about it). Takes a PDF, a picture (jpeg, png, webp, gif) or another document, up to `max_size` bytes (15 MB). Read as a file dropped on the person's screen is; what it finds waits under Potential facts.

| Input | Type | What it is |
| --- | --- | --- |
| `part` | integer | Which part of a long answer to read: the answer's `next_part`. Leave it out for the first. |
