[TOPIC]: Provided in the chat The request The invoking message [TOPIC] is a paragraph of plain prose describing a half-remembered conversation. There is no format. Read it and extract the following silently, before searching. Never ask for any of it to be restated, and never ask a clarifying question before the first search runs. Named things, verbatim. App names, skill names, project names, file names, tool names, people, error strings. These are the highest-yield queries in the whole run because they are the words that were almost certainly typed at the time. Query each one alone first, before any phrase. The target, which is often more than one thing. Three kinds appear, frequently together in a single sentence: a conversation to reopen and resume an artifact to locate: a file, a skill, an attachment, a deployed thing a question to answer, usually of the form "was this ever actually built" or "did we decide X" Handle every kind present. An embedded question is the priority: answer it directly and first, even when the conversation itself is never found. A time window, stated loosely. "The last few days", "a couple of weeks ago", "before the migration". Convert to a date range and widen it by five days on each side. Absent, use the last 45 days. Surface hints. Any assistant, tool or environment named. Treat as a starting order, never as a restriction: search the named surface first, then the others anyway. Paraphrase, which is the trap. Most of the paragraph is a description written now, not the vocabulary used then. "A prompter that turns intake answers into a proposal" is a recollection; the thread may have said generator, builder, forge, template, pipeline, or nothing of the kind. Treat descriptive phrases as a seed for synonyms, never as a literal query. Ranked query order: named things first, then the vocabulary the work itself would plausibly have used, then the paraphrase last and expanded. Assume the paragraph was dictated. It usually was, and speech-to-text fails in ways that quietly destroy a search. Three rules: A named thing that returns nothing on every surface is a transcription candidate, not an absence. Before concluding it does not exist, try the compound split and join (preflight, pre-flight, pre flight), the plausible mishearings, and a partial-string match rather than the whole word. Only after those come back empty does the name count as searched. Where a phrase could be either one thing or two, search both readings and never pick. "A prompter skill" is as likely to have been "a prompt or skill", which is two targets rather than one; "an intake form builder" may have been "an intake, form builder". Dictated ambiguity gets expanded, not resolved. An unpunctuated run of nouns is a list. "Call presentations recommendations proposals" is four items, each worth its own query, not one phrase. Never quote a phrase from the request back as though it were the requester's chosen term. It may be the transcriber's. If the paragraph is one line and contains no named things, search on what is there. A thin request is still a request. Objective Find the specific past conversation(s) about the topic and any artifacts they produced, and return enough to resume: an openable pointer per candidate, ranked by confidence, plus a short state-of-thread for the top one. This is a retrieval task, not a synthesis task. A well-organized account of what is true about the topic that does not say which conversation to open is a failure even if every sentence in it is correct. Step 0 — Declare reach before searching Name the surface you are running on and what it can and cannot reach. Two constraints decide most runs. State both as facts about this run: Conversation search is scoped. Inside a project it sees only that project's chats; outside a project it sees only non-project chats. If the target may sit in another scope, name the scope this run covered and carry the limit into Gaps. Session logs for Claude Code, Codex, Hermes and Cursor are files on disk, reachable only from a surface with filesystem access. Without it they are unreachable, not searched-and-empty. Step 1 — Probe every surface, build the map from what responds Probe each candidate surface with one cheap call. Record it reachable, unreachable, or reachable-but-empty. Build the map only from what responds. A tool appearing in a list, a skill appearing installed, or a path named in this document is not evidence it responds. Candidates to probe rather than assume: conversation search over past chats, keyword and recent-window persistent memory or knowledge store (e.g. Open Brain) project knowledge and uploaded project files filesystem: agent session logs. Start from these unverified guesses and confirm each by listing: ~/.claude/projects/, ~/.codex/sessions/, ~/.hermes/, ~/.cursor/. If a path does not exist, find the real one or record the surface unreachable. filesystem or cloud storage: output and artifact directories, sorted by modified date note systems, trackers, databases in use (Airtable, Notion, Drive, Dropbox) Step 1b — Delegate the search where a skill already owns it Two skills encode search protocols this document would otherwise have to restate. Check for each by name during the probe, then act on the result: chat-archaeology — multi-pass search and synthesis across past Claude conversations. If present, it runs the keyword and time-window passes over the conversation surface. open-brain-archaeology — multi-pass search across Open Brain and the Obsidian vault. If present, it runs the persistent-memory surface. Present and its surface reachable: invoke it and let it own the search for that surface. Present but its surface unreachable: do not invoke it, and record the surface unreachable. Absent: run Step 2 manually for that surface and record in Gaps that the skill was unavailable, naming which one. Neither skill replaces the probe in Step 1, and neither owns Steps 3 through 6. Claim tagging, pointer discipline, candidate ranking and the output contract stay with this document regardless of what ran the search. Never report using a skill you did not confirm present and invoke. If nothing is reachable, stop and say so. Do not produce a findings document from memory, context, or a continuation brief. Step 2 — Run four retrieval paths, not one Run every path its surfaces support. They fail in different ways, which is the point. Where Step 1b delegated a surface to a skill, confirm the skill actually ran both A and B for it; path C is not covered by either skill and always runs here. A. Keyword. Start with content words from the topic and any fragments. Then reformulate: synonyms, project and file names, people, error strings, the vocabulary the work itself would have used, the decision adjacent to it. Never put a pasted passage into a query; pull three or four distinctive terms out of it. Re-running the same query is not a new pass. B. Time window. Independently of keywords, page through the window plus five days either side. This path exists because the words are often what was forgotten. It runs even when path A returns hits. C. Artifact-first. List output, download and project directories by modified date across the window. An artifact's filename and path often identify the producing thread faster than any query. Where a dated filename convention is in use (name-CODE_MMDDYY.ext), read the date and agent code as evidence of which surface and session to open. D. Existence check. If the request asks whether something was ever built, decided, or shipped, answer it by looking where that thing would live now, not by looking for the conversation that discussed it. A skill lives in a skills directory and a canonical collection; a file lives in an output or project directory; a workflow lives in the platform running it; a decision lives in a tracker. Run this path first when a question is present, because it often resolves in two calls what chat search takes twenty to approach. A thing that does not exist where it would live is evidence of absence, and says so; report it as VERIFIED absent with the paths checked, not as not-found. Stop rule, per path per surface: stop after three consecutive reformulations returning nothing new, or eight passes total. Bias toward recall. A wrong candidate costs one file open; a missed one costs the task. Step 3 — Confirm candidates by opening them A search snippet locates a record. It does not confirm the record is the right one. Open every strong candidate at the matching point and read enough surrounding turns to confirm or kill it. Report killed candidates in one line each so they are not re-searched next week. Step 4 — Claim rules Tag every claim VERIFIED (record read this session), INFERRED (show the reasoning), UNVERIFIED, or CONTESTED. Every claim and every candidate carries a pointer in that surface's native form: chat URL, conversation id, absolute file path, session file path, record id. Never construct, guess, or reconstruct a pointer from a pattern. If there is none, write NO POINTER. An unopenable candidate is nearly worthless here and must be labelled. A decision requires a human turn stating it. An assistant proposal, however warmly received, is a SUGGESTION and is listed separately. Brainstormed material stays hypothetical. The most recently dated source wins a conflict. An undated source never beats a dated one; mark CONTESTED. Two surfaces agreeing are two sources. Deduplicate identical claims into one line carrying every pointer. Never merge conflicting claims. Summaries, digests and continuation briefs point at sources. They are not sources and cannot earn VERIFIED alone. Step 5 — Output Header: the topic as given, run date, run surface, scope covered, and the surface map with one status per row. Direct answer. If the request contained a question, answer it in one or two sentences, tagged and pointered, before anything else. If the answer is no or absent, say so plainly and list the paths checked. Omit this section only when the request contained no question. Candidates, ranked. Each with what it is, its openable pointer, its date, a confidence tag, and one line on why it is or is not the thread. Ranked by likelihood, not by date. Resume packet for the top candidate. Where the thread stopped, the last human ask, what was decided, what was only suggested, the open loops. Readable in under a minute. Artifacts found. Path, date, what it is, which thread produced it. Ruled out. One line each. Gaps. Unreachable surfaces with their failure mode. The scope limit from Step 0. NO POINTER items. Contradictions and cross-surface drift. One next action. A single move, with one line defending it. Write this to a file only if file-writing is reachable, using the dated naming convention in force with the agent code for the surface you are running on. Never overwrite an existing file; if the name is taken, add a sequence suffix and say which file you wrote. Otherwise output inline under the same title. Step 6 — Persist, only if the store is reachable If a persistent memory store probed reachable in Step 1: search it for existing entries on the topic, then write only what is new, additively. Never overwrite an existing entry. If it is unreachable, say so and skip. Never describe a write you did not perform. Wrong looks like A synthesis of the topic with no openable pointer to the conversation itself. A chronological recap instead of a ranked candidate list. Asking the requester to restate their paragraph as fields, or asking anything at all before the first search runs. An embedded question left unanswered while a candidate list is delivered around it. Querying the requester's paraphrase verbatim instead of the named things in it. Treating a named surface as a restriction and never searching the others. A named thing declared absent when only its exact spelling was tried. Reporting a thing as not-found when the place it would live was never checked. A dictated ambiguity resolved to one reading and searched as one target. Keyword search only, with the time-window and artifact paths skipped. One query per surface, then a declared gap. A guessed, pattern-constructed, or partial pointer. A skill or path reported as used when it was never confirmed present and invoked. Running Step 2 by hand on a surface where chat-archaeology or open-brain-archaeology was available. An unreachable surface reported as empty. The scope limit omitted from Gaps, so "not found" reads as "does not exist." A suggestion presented as a decision. A digest or continuation brief cited as VERIFIED. A memory write claimed but not performed. Any artifact produced when nothing was reachable.