# Hotel

> Nothing enters without a quote. Hotel is a terminal notebook that won't take anything from the web until someone says what it claims and quotes the sentence that says it.

- Source: https://github.com/Desto2000/hotel
- Agent setup: [/agents.md](/agents.md)
- Index for models: [/llms.txt](/llms.txt)

## 01 · The refusal

Ask a model to research something and you get fluent paragraphs with links underneath. In a study of deployed generative search engines, only about half of the generated sentences were fully supported by the sources they cited [1]. The links make an answer look sourced. They don't make it sourced.

Hotel is built around one refusal. When you or a model bring something in from the web, the next step is refused until someone writes down what the source claims and quotes the passage that says it [2]. Hotel looks for the quote in the text it stored, and a quote that isn't there is rejected [3].

```
> /s exa date range
annotation gate: annotate R:3 before the next call
```

## 02 · One document that only grows

Your notes live in a single plain-text file, the lobby: questions, ideas, reasoning and logs, grouped into rooms. An entry's body can't change; you write a new entry that supersedes it, and both stay [4]. A question closes only on a retrieval that has been annotated [5]. Every search, fetch and model call is a row in an append-only record, enforced by the database [6].

```hotel-lobby
@L0001 [x] bounty origin=user ts=2026-10-18T21:13:29Z
  | Does Exa's search API support filtering by published date?
  + ref: R:4
  + closed-by: R:4
```

## 03 · What a week of it showed

Reg rows by kind, 18–23 October 2026 (Reg head 7417ab65):

| kind | rows |
|---|---|
| model | 119 |
| internal | 29 |
| lobby_edit | 26 |
| blocked | 13 |
| output | 11 |
| retrieval | 10 |
| annotation | 10 |
| review · decision | 6 · 2 |
| total | 226 |

Eleven of the thirteen refusals were one agent retrying the same fetch until the run was stopped [7]. Asked which local embedding model fits a Mac, the agent quoted a real sentence [8], but the note approved from it claims more than the quote says [9]. The gate proves a quote exists; it cannot prove the claim follows. That is the entailment verifier's job, and it was switched off.

## 04 · Reading

- Liu, Zhang, Liang. Evaluating Verifiability in Generative Search Engines. 2023. https://arxiv.org/abs/2304.09848 — why the gate exists.
- Cormack, Clarke, Buettcher. Reciprocal Rank Fusion outperforms Condorcet and individual rank learning methods. SIGIR 2009. https://doi.org/10.1145/1571941.1572114 — merging Exa, Parallel, bm25 and dense results [10].
- Schechter Vera et al. EmbeddingGemma: Powerful and Lightweight Text Representations. 2025. https://arxiv.org/abs/2509.20354 — the local embedder.

## Install

```
git clone https://github.com/Desto2000/hotel.git && cd hotel
scripts/install.sh ~/lobby        # PowerShell: ./scripts/install.ps1 -LobbyDir ~\lobby
hotel
```

## Citations

1. "on average, a mere 51.5% of generated sentences are fully supported by citations and only 74.5% of citations support their associated sentence." — https://arxiv.org/abs/2304.09848
2. `annotation gate: annotate {ids} before the next call` — https://github.com/Desto2000/hotel/blob/fffeda1740a55216d14456b22d8c3cb6511f0a57/hotel/gateway.py#L34
3. `quote does not match stored data at {p.start}:{p.end}` — https://github.com/Desto2000/hotel/blob/fffeda1740a55216d14456b22d8c3cb6511f0a57/hotel/gateway.py#L209-L210
4. `body changed (write a superseding entry instead)` — https://github.com/Desto2000/hotel/blob/fffeda1740a55216d14456b22d8c3cb6511f0a57/hotel/validator.py#L97-L98
5. `closed-by {cb} is not an annotated retrieval` — https://github.com/Desto2000/hotel/blob/fffeda1740a55216d14456b22d8c3cb6511f0a57/hotel/validator.py#L64-L66
6. `RAISE(ABORT, 'reg is append-only')` — https://github.com/Desto2000/hotel/blob/fffeda1740a55216d14456b22d8c3cb6511f0a57/hotel/reg.py#L58-L61
7. "nothing: agent run aborted (model looped on blocked fetch)" — Reg R:57, annotation of R:31
8. "EmbeddingGemma-300M Q8 achieved the best balance of quality (0.891 nDCG@10) and speed (33.5 emb/sec) on Apple Silicon." — Reg R:67
9. "…making it the most suitable local embedding model for a Mac [R:67]." — lobby L0007, origin=approved
10. `for k, score, ranks in rrf(rankings):` — https://github.com/Desto2000/hotel/blob/fffeda1740a55216d14456b22d8c3cb6511f0a57/hotel/search.py#L316
