Our family handles tax correspondence, insurance paperwork, housing issues, school matters, medical documents, and legal disputes. That includes reading and writing in German, which is not our first language. Behind this work is an archive of more than 6,600 source files.

Even a short reply can require finding earlier correspondence, gathering supporting documents, and working out what the sender expects. In their research on administrative burden in dealings with government, Moynihan, Herd, and Harvey distinguish the costs of learning what is required, complying with those requirements, and dealing with the psychological strain of the process. The preparation and follow-up around a letter are part of the work I want help with.

I began using ChatGPT and Claude for practical work with family documents: reading letters, discussing what they meant, and drafting replies. A letter would arrive, I would upload it, and the conversation would continue through several rounds of discussion and revision.

This worked well within a single chat. The more interesting problem appeared over time. Correspondence continued, new documents arrived, and the chat became only one part of an ongoing matter. Some conversations grew slow or reached a limit. Moving to a new one meant deciding what to carry forward. The model’s context window held the material for that session; I needed a record that could outlast it.

A summary helped, but it left me choosing what a future conversation might need before I knew the next question. This was lossy summarization: it could preserve the main argument and omit a small qualification. It also could not replace the full documents.

I began treating continuity as an engineering problem. The system needed to preserve the work, find relevant material when needed, and let an agent check how a conclusion had been reached. That investigation gradually became FamilyBoon, or Boon, the system I am building around our family’s documents and context. Context engineering describes this work well: deciding what information to keep, what to load into a session, and how to use it.

My goal is for Boon to take on more of the search, reconstruction, drafting, and follow-up work while asking less of our attention. The time we spend using and maintaining it should be more than repaid by the work it takes off our hands. That should give us the choice to handle more matters or spend the time outside the system.

The handoff problem / Schematic

A summary carries only part of the work.

Session 1 Documents + working draft The source material and the work developed around it.
Handoff A summary Selected context to carry into the next conversation.
Session 2 A fresh conversation Begins from what the summary preserved.
Original attachments A summary cannot replace the files. They still need to be available to the next session.
A small qualification May be omitted even when the main argument survives.
An illustrative handoff, not a screenshot or a claim about a particular product's limits. Summarization can lose information; originals remain necessary.

A conversation is a workspace

The first change was deciding what should survive a conversation.

An incoming letter is part of the record. So is the reply that is eventually sent, followed by the next letter. Their order matters: it shows what prompted a response and what happened afterwards. I think of these files as artifacts, including work still in progress.

The chat is a temporary workspace around that record. Its exact wording does not need to become the permanent memory of the system. A later model can examine the same material again, perhaps with better reasoning or a different question.

An unfinished draft still needs to survive. Closing a chat should not require finishing the entire matter first. If a useful explanation or decision needs to carry forward, it can become a saved note or part of the draft, with enough context to understand it later.

I call this artifact-first design: preserve the artifacts and their sequence, and let conversations work from them. Durable artifacts provide a basis for cross-session memory. The next chat should be able to continue from the documents and saved work without relying on a retelling of the previous chat.

The LongMemEval benchmark tests whether assistants can recall information, combine it across sessions, handle updates, reason about time, and recognise when the history contains no answer. In the ICLR 2025 paper, GPT-4o answered 87% of questions correctly when given only the sessions containing the evidence. When given the full history, roughly 115,000 tokens, it scored 60.6%. Keeping records available and choosing what to load into a session are separate jobs in Boon.

Related work on file-based context in Manus and artifacts between agent sessions at Anthropic addresses similar continuity problems. In Boon, the record follows family matters through successive documents and conversations.

Finding the right material in a mixed archive

Our family already had more than a decade of digital documents. Some were organised into folders; others had accumulated in mixed piles. There were PDFs, emails, Word documents, spreadsheets, scans, and photographs.

I wanted the archive to grow without making every conversation grow with it. The agent needed to find and load relevant material as a question developed. Keeping the original files unchanged was an architectural invariant. Search and extraction could produce new representations; they should not alter the documents themselves.

I built a searchable representation of the archive so the agent could retrieve relevant material and use it to answer a question. In this retrieval-augmented generation (RAG) workflow, each search result also needed a route back to the source.

Consider a scratched car as an illustrative example. The archive might contain photos of the damage, a repair estimate in an email, a scanned invoice, and correspondence with an insurer. A person would connect them through the incident, even if the files used different words.

I experimented with extraction tools and settled on native text extraction where possible, with Apple Vision for optical character recognition (OCR) on scans and photographs of text. Text-based PDFs go through pdftotext; emails and Word documents use their own parsers.

The extracted text goes into a Markdown document sidecar with a reference to the original and its SHA-256 content hash. For plain-text originals, the system can read the file directly without storing a second copy of its contents. Sidecars can be regenerated when extraction improves. The source reference and hash preserve provenance: which file the text came from, and which version of its contents was processed.

Source access & extraction

Different files, different reading paths.

Source Text-based PDF Original file
Read pdftotext Native text extraction
Representation Document sidecar Extracted text + source reference
Source Email or Word document Original file
Read Format-specific parser Read the document structure
Representation Document sidecar Extracted text + source reference
Source Scan or photo of text Original image
Read Apple Vision OCR Recognise visible text
Representation Document sidecar OCR text + source reference
Source Plain-text file Directly readable original
Read Read the file No duplicate text needed
Representation Metadata-only sidecar Source reference + content hash
Source Non-text photograph Original image
Read Preserve the image No invented OCR text
Representation Original + source access Contextual interpretation is separate

Every route retains a source pointer and SHA-256 content hash. The original stays unchanged.

Extracted text is a derived representation, not a replacement for the file. Sidecars can be regenerated; a photograph does not need invented text to remain part of the record.

For semantic search, the current implementation uses multilingual bge-m3 embeddings, SQLite for storage, and NumPy to calculate cosine similarity. The index is built ahead of time, with incremental indexing as the archive changes. Through the Model Context Protocol (MCP), the agent can use tool calling to search during a conversation.

The precomputed index supports just-in-time retrieval. The agent searches when it needs information, follows the returned references, and can make another query as the question develops. Keeping the index ready avoids extracting and embedding the whole archive for every question. Additional searches and source reads still take time.

Semantic search helps when the question and a document use different language. Exact-match search provides another route for identifiers: the search tool has a separate substring-matching channel for identifier-like queries. File inventories and links between records help extend the search. Finding several relevant passages does not establish that every relevant document has been found.

Applying the same principle inside the chat

Daily use exposed failure modes that began before the model formed its answer. OCR could miss characters in a poor photograph. A flattened table could place an amount beside the wrong label. Handwriting could turn into a plausible word that was never written.

I went through several rounds of improving extraction. That helped, but I did not want the reliability of the whole system to depend on producing a perfect text version of every document. I reconsidered how the agent should use the extracted text.

The artifact-first principle applied here too. I had already made the original documents the basis for continuing work across chats. They also needed to remain the basis for claims made inside a chat.

I assigned different jobs to the representations. The sidecar and index help locate a document. Before using a document in a chat, the agent must open the original and check the content it will rely on. An unreadable passage remains uncertain. This is an operating rule for the agent; it does not guarantee that a model will follow it on every occasion.

In Boon, source grounding includes original-source verification: the agent checks that the original supports the claim. A source link alone does not perform that check.

Gao and colleagues separate answer correctness from citation quality in ALCE, their 2023 benchmark for answers with citations. They check whether the cited passages support the answer’s statements and whether individual citations are relevant. A passage can discuss the right subject without supporting the particular amount, date, or conclusion in the answer. Boon also requires the agent to check the original passage, table, or image, since extraction can lose details or their relationship.

Retrieval & verification

Finding a source is not checking a claim.

01Retrieve

Natural-language question Semantic search Multilingual bge-m3 embeddings
NumPy cosine similarity
Identifier-like query Exact-match search A separate substring-matching channel
Candidate documents SQLite index & source references. Results are not verified conclusions.

02Verify

Open the original Check the passage, table, or image behind the claim.
The source supports the claim Use with attribution Preserve who said it and any conflicting accounts.
Unreadable or unsupported Leave it unresolved Seek clearer or additional evidence.
This is an operating rule, not a guarantee of model behaviour. Retrieval can miss relevant documents; an original records its author's account, not necessarily an established fact.

With this separation of concerns, I could improve extraction and verification independently. Better extraction helps find the right documents. Returning to the original helps catch errors in the text used to find them. Neither removes the need for the other: a document missed by search cannot be rescued by checking only the documents that were found.

Original-source verification / Illustrative table

The value belongs to a row, not just a search hit.

Original table Labels and values together
ItemValue
Item A40
Item B90
Possible extraction loss A search hit Item A Item B 40 90 The words and numbers survive. Their row relationship may not.
Verification Open the original table Check the row, its label, and the value before relying on the search hit.
The row can be checked Item B = 90 Use the value with its source and the author's attribution.
The original is unreadable Leave the value unresolved Do not infer the association from flattened text alone.
Synthetic labels and values illustrate a possible extraction failure, not a documented family incident. Returning to the original is an operating rule, not a guarantee of correct model behaviour.

The original also has a specific kind of authority. It establishes what its author recorded. The author may still be mistaken, and another document may contradict the claim. Boon therefore needs to preserve attribution and conflicting accounts, rather than turn every statement in a letter into an accepted fact.

Boon makes mistakes. Human work needs checking too. My wife once found three factual errors in a lawyer’s initial court application. In a separate matter, another lawyer asked for our mail to be forwarded to us, but gave the wrong address in the same letter. Boon caught the mismatch and helped us draft a request for correction. The lawyer then corrected the address. With Boon, I can begin working through documents when a question arises, without waiting for an appointment. Specialist judgment still has a role. My goal is to reduce mistakes across the whole process, make them easier to detect, and use what went wrong to improve the system.

Documents need context around them

The car example also shows another limit. A photo of the damage might contain no text at all. OCR cannot describe the scratch, and a text embedding index does not automatically understand the image.

A model can inspect the photo visually. Without context, though, it might describe the car’s colour, a street lamp, and a bush in the background. Those observations may be accurate and still miss why the photo was taken.

The person adding it knows what happened and which part matters. Related correspondence may explain more. That context needs to be stored somewhere, without being presented as text extracted from the photograph.

I had already spent years using Zettelkasten ideas and linked notes in Obsidian. I adapted that approach into cards for people, organisations, and ongoing matters. Here, a matter means a question or situation that continues over time, such as a repair, an application, or a project.

A matter card connects the participants, relevant documents, timeline, current state, and next actions. In the car example, it can connect the damage photos to the estimate and insurance correspondence. The insurer has an organisation card; the people involved have person cards. Those cards can be linked from other matters too. This entity-centric context gives each person or organisation a reusable place in the archive, while matter cards describe the situations connecting them.

The current architecture separates these responsibilities:

PartRole
Original filesPreserve the documents and images in their original form
L1: source access and extractionProvide source references, hashes, and extracted text where needed
L2: people and organisationsDescribe participants and their relationships
L3: mattersKeep the history, current state, evidence, open questions, and next actions of an ongoing matter

The cards are indexed as well. An agent can find the matter card and follow its links to the photographs, even when the photographs have no searchable text.

This also makes tentative connections possible. The date and appearance of an older photo might suggest a link to a known incident. The agent can investigate that link using the surrounding records. A plausible match remains a hypothesis until it has been checked.

Documents & context / Illustrative example

The matter connects the records.

L2 / Person Vehicle owner A reusable participant record
L2 / Organisation Insurer Linked across relevant matters
L3 / Matter Car repair Timeline, current state, open questions, and next actions

Why the photo matters: it documents the damage involved in this repair. That context belongs to the matter, not to OCR output.

Possible link / Unconfirmed An older photo Does it relate to this incident? Investigate before linking it as evidence.
Damage photo Original image; no searchable text required
Estimate Source file and reference
Invoice Source file and reference
Correspondence Source files and references

Original files + L1 source access. Extracted text where appropriate.

Recorded relationship Hypothesis to investigate
Illustrative records, not private family data. These are linked files and cards, not a claim of GraphRAG implementation.

Keeping the records useful

Cards add context, but they also create derived state that needs maintenance. A status can become stale. An interpretation can be wrong. Each card needs links back to the material from which it was built. Unlike a search index rebuilt from its inputs, a card can contain context supplied by a person and interpretations assembled from several sources. Updating it requires preserving those distinctions.

When a new document enters Boon, the document ingestion pipeline registers the original, extracts text where appropriate, and updates the relevant cards before refreshing the index. The conversational model does the contextual work of identifying people, relating documents, and updating the cards. The next session can then discover the new material through the same matter and source references.

Processing a document can also enrich the context around it. A letter may supply an organisation’s contact details, clarify a person’s role, or connect an existing participant to another matter. The relevant details are added to the cards with references to their sources. Later conversations can reuse that context instead of extracting the same information again.

Keeping the records useful

A new document changes the context, not the original.

01 / Recordkeeping Register the original A new document enters the record with a source reference and content hash. Its contents stay unchanged.
02 / Extraction & metadata Create or validate the sidecar Extract text where appropriate, or retain metadata for a directly readable source.
03 / Model interpretation Update the relevant L2 / L3 cards Add contextual information with source references and links across matters.
Person / L2Role and relationships
Organisation / L2Relevant contact details
Matter / L3Timeline, state, next actions
04 / Indexing Refresh the search index Make the updated representations and cards retrievable.
05 / Retrieval Continue in the next session Find the matter, follow source links, and work from the updated context.

Integrity checks and curation revisit the derived records. Source files remain unchanged throughout.

The arrows show workflow order, not one all-or-nothing database transaction. Extraction and bookkeeping are distinct from the model's contextual interpretation.

Alongside intake, integrity checks look for missing files or sidecars, changed source hashes, documents without links to matters, and a search index that has fallen behind. A separate curation process maintains links between people, organisations, and matters. These checks can flag inconsistencies; they cannot establish that every interpretation in a card is correct.

A daily digest uses the matter cards to show what needs attention, what is approaching, and what is waiting for a reply. The aim is to reduce what we have to keep in mind, without turning every stored detail into another task. The update rules, integrity checks, and digest form an operational loop that deserves a separate account.

The working archive consists of ordinary local files, synchronized through Google Drive. We have also created an encrypted backup in Proton Drive and tested restoring it. Text extraction and search run locally.

In the native client, prompts and responses travel directly between the app and the AI provider. Material read by a cloud model still leaves the device, including context used during document intake. The original files and Markdown records remain accessible independently of the model.

Storage & processing boundaries

Local records. Explicit cloud boundaries.

Local processing Text extraction + search index Run on the device. The local search index is not included in the file-synchronization path below.
On the deviceExternal service
Local files Working archive Original files and Markdown records.
File synchronization
Storage Google Drive A synchronized copy of archive files.
Local source Archive backup A separate backup of the archive.
Encrypted restic backup
Storage Proton Drive Encrypted backup storage.
Local app Native client Intake and answering can read source material and context.
Material + contextModel outputs
Model processing AI provider Processes the material sent to the cloud model.
Material read by a cloud model leaves the device. Backup restoration has been tested; this does not establish that every backup is current. Synchronization, encrypted backup storage, and model processing are separate boundaries.

Folders, linked notes, and document retrieval all contribute to this setup. I use them together with explicit rules for preserving artifacts, updating context, and checking sources. Storing a file or retrieving a relevant passage is only part of the work needed to continue an ongoing matter.

The family determines what is relevant

As the cards developed, another design question emerged: how much of a source belongs in a card?

Take a disagreement about a broken built-in dishwasher. A long rental agreement might contain a relevant clause, alongside many details unrelated to that question. The matter card can include the useful passage and a reference to the full agreement. The agent can return to the surrounding text when needed.

I began applying that selection rule across the system. Context starts with the people in the family, their circumstances, and the matters they are dealing with. Those connections determine which passages to bring into cards, which records to link, and what to revisit.

This is the family-centred principle of Boon. The same source can be relevant to different people or matters for different reasons. A single general summary cannot anticipate all of those uses. Preserving the source allows each use to remain specific without losing access to the rest.

The principle also gives the archive a direction beyond managing paperwork. Family documents describe circumstances and events; books, articles, and conversations with specialists can supply knowledge relevant to them. In the family knowledge base, I organise that material by topic, linked to the people and questions that make it useful. One note can draw on several sources, and one source can contribute to several notes.

Those notes keep source references and explain when the advice or findings apply. Source quality and family relevance remain separate checks: useful-sounding advice can be poorly supported, while a well-supported finding may concern different circumstances. Ideas without adequate sources stay in a research backlog. This creates a route from a family question to a topic and back to the material behind a claim.

Family relevance & the knowledge base

A topic connects sources to a family question.

Source references lead back to the material behind a claim.

Source A A book An external source with a traceable reference.
Source B An article Another source that may qualify or support the topic.
Knowledge base A topic note Relevant knowledge, its source references, and the circumstances in which it applies.
Family context A family member The person whose circumstances make the topic relevant.
Current need An open question The practical question that determines what to examine.
Separate research backlog An unsupported idea Waits for adequate sources. It is not treated as established knowledge.
Illustrative sources and anonymous family context. Source quality and family relevance are separate checks; an appealing idea is not evidence.

This is also a foundation for the proactive side I want to develop: using current family context and relevant knowledge to judge when new information deserves attention. How that knowledge should evolve, and when an agent should make a suggestion or wait, are subjects for later articles.

Continuing from the existing work

When the next letter arrives, I can start a fresh conversation and ask Boon to look up the matter. The agent can read its card, follow the correspondence, check the relevant originals, and work from the saved draft. The history no longer has to arrive through my recollection of the previous chat.

Continuation in practice / Conceptual workspace

A fresh conversation, the same working record.

Fresh conversationDurable record
Fresh conversation 01 / Look up the matter Start a fresh conversation Ask about the ongoing matter.
Durable record Matter card + timeline Read current state, open questions, and the sequence of documents.
Fresh conversation 02 / Check the source Examine a claim Return to the material behind it.
Durable record The original document Check the relevant passage, table, or image.
Fresh conversation 03 / Resume the work Continue writing Use the existing work as the starting point.
Durable record The saved draft Reopen the durable artifact instead of reconstructing it from memory.
Fresh conversation 04 / Preserve the next step After the reply is sent The conversation is still a temporary workspace.
Durable record A new record entry The sent reply joins the document timeline.
Conceptual wireframe, not a capture of an implemented interface. No private documents are shown. A sent reply enters the record after sending; the diagram does not imply autonomous dispatch.

I still need to make this more reliable and easier to maintain. New features can also create work, so I want to judge each change by the work it saves us after accounting for the effort of maintaining Boon itself. The goal is for either of us to open a matter, understand what changed, and take the next step without spending the evening reconstructing its history.