Skip to main content
A lab’s reading pile grows faster than anyone reads it. Someone has to skim each new paper, write down what it claims and what it would change for the lab’s own work, and decide whether it belongs in the notes the whole group draws on. Get that wrong and the group’s memory fills with surveys nobody asked for, or a question gets answered from a paper nobody vetted. You want the summaries written for you, in the lab’s own terms, with the paper’s stated limits kept honest. You want to decide which ones enter the group’s memory, one at a time, with your reasons kept. And when someone asks a question, you want the answer to draw on what you kept and nothing else, naming the paper behind every point. Obversa keeps the person between the harvest and the memory. A Claude seat summarises every supplied paper. Your decision on each summary is a step: a yes files it into memory, a no records your reason and files nothing. Then a question is answered from the kept notes, read into the prompt through ground, so the answer can only cite what you kept. This file is one run of three parts, harvest, curate and answer, with the person’s decisions in the middle.

Run it

Set the project up as Installation describes. Copy the file with briefs/, papers/, curation.json and questions.json beside it, sign in to Claude Code, and run it from that directory. curation.json carries the person’s decisions from the last pass:
Terminal
The output below is the proof’s offline run, with scripted seats standing in for the models, so the words are the script’s and the shape is the run’s.
Output, from the offline proof
Three papers summarised, two kept, one refused with a note, one question answered. The survey of message formats was refused because its payloads were synthetic, so it never entered memory, and the answer to the question about field life cites the two kept papers and says what they don’t settle. The run’s record is records/literature-watch.jsonl.

The file

The brief gives the seat its two jobs and keeps memory out of its hands:
briefs/literature.md
Each paper gets its own decision step. A decision the person already made is the step’s answer; a refusal fails the step, and optional: true means a refusal doesn’t stop the run:
examples/use-cases/research/literature-watch.ts (excerpt)
file reads which decision steps passed and creates one memory file per kept summary. answer grounds the question on those files alone:
examples/use-cases/research/literature-watch.ts (excerpt)
ground reads the kept notes into one bounded prompt under a warning that the content is data, not instructions, and the seat answers from that prompt. The memory here is createSimpleMemory, which lives in one process; swap in openGitMemory from Git Memory and the kept notes survive to the next session’s questions.
examples/use-cases/research/literature-watch.ts

The team’s shape

What the run did

The proof runs the file against a scripted seat and checks what the page describes: three summaries on disk, two memory files, one refusal with its note, and an answer that cites the kept papers and not the refused one. Obversa recorded the run as one event log, so the record shows the harvest, the three decisions with their outcomes, the filing, and the answer in order. The person’s decisions here come from a file, because the run has to complete offline. In use, a summary with no decision yet stops its step on the question, and the filing and the answer wait for it, as A person decides shows. Either way nothing enters the lab’s memory that a person didn’t keep.

Next steps