← All craftbooks

Corpus Synthesis

Knowledge and researchevalv1.0.0released 2026-06-05workflow: build-loop

Read a provided corpus of documents and synthesize it into a single coherent overview: a planner sets the synthesis question and the extraction schema, a researcher reads every document and extracts structured notes keyed back to each source, and a copywriter synthesizes the extracts into a unified narrative organized by idea rather than by document. The ordering matters because synthesizing before reading everything privileges the first few documents, and a write-up keyed to documents instead of ideas just summarizes each file; locking a synthesis question and per-document extraction first guarantees full coverage and a real cross-document synthesis. Use this for synthesizing a folder of docs/notes/papers, 'pull together everything we know about X', cross-document summaries, knowledge consolidation, and meeting/research-note synthesis.

Steps

Entry step: scope. Each step names the specialist role it wants; the full working prompt is expandable.

  1. Scope the synthesisplannerentry

    synthesis question + per-document extraction schema

    Show working prompt
    1. List the corpus (every document/file in scope) and state the synthesis question in one sentence — what unified understanding the output must deliver. 2. Define a per-document extraction schema: for each doc capture source id, key claims/findings, relevant data points, and any stance or contradiction. 3. Decide the output structure: organize by theme/idea (3-6 themes), not by document, plus an open-questions/contradictions section. 4. Write an acceptance-criteria checklist (e.g. 'every document in the corpus is read and extracted', 'output is organized by theme not by file', 'each synthesized point cites the document(s) it came from', 'contradictions across documents are surfaced', 'nothing is asserted that is not in the corpus'). 5. Record decisions. Call write_task_note with the corpus list, schema, themes, and checklist; write the same to notes/scope.md.
  2. Read & extractresearcher

    structured extract per document, keyed to the source

    Show working prompt
    1. Open and read EVERY document in the corpus — do not skip or sample. 2. For each, append an extract block to notes/extracts.md following the schema: source id [n], its key claims/findings, supporting data points (with the figure), and any stance or point where it conflicts with another document. 3. Tag each extract with which output theme(s) it speaks to. 4. As you read, note explicit cross-document agreements and contradictions. 5. Stay faithful to the source — capture what the document says, not your opinion, and quote load-bearing passages. Good looks like an extract file complete enough that the writer never reopens the originals. Do not write the synthesis yet.
  3. Synthesizecopywriter

    unified narrative organized by idea, citing sources

    Show working prompt
    1. Write synthesis.md organized by the locked themes (one section each), weaving together what the documents collectively say. 2. Each synthesized point cites the document(s) [n] it draws from so a reader can trace it. 3. Open with a 1-paragraph answer to the synthesis question, then the thematic body, then an 'Open questions & contradictions' section that surfaces where the corpus disagrees or leaves gaps. 4. Synthesize across documents — do NOT produce a per-file summary list. 5. Assert only what the corpus supports (from notes/extracts.md). 6. Add a source key so every [n] maps to a document. 7. On a loop-back, fix only the named gaps. 8. Call write_task_note with the synthesis path and which criteria now pass.
  4. Evaluatereviewer

    Grade the deliverable against every acceptance criterion. All pass → finish; any fail → loop back and fix the gap.

    Show working prompt
    Open synthesis.md and check EACH criterion PASS/FAIL: (1) every document in notes/scope.md appears in notes/extracts.md (full coverage) and is cited somewhere in the synthesis; (2) the output is organized by theme, not file-by-file; (3) each synthesized point cites its source document(s); (4) an open-questions/contradictions section surfaces real cross-document disagreement; (5) spot-check 3 points against notes/extracts.md to confirm nothing was asserted beyond the corpus. A per-file summary list, or a synthesis missing documents, FAILS.
    
    Then route — this is the whole point of the loop:
    
    - **Every criterion PASSES →** call `advance_task_step({ ref, stepId: "evaluate", next: "finish" })`.
    - **Any criterion FAILS →** write the specific gaps to notes, then call `advance_task_step({ ref, stepId: "evaluate", next: "synthesize" })` to loop back. The builder fixes exactly those gaps.
    
    Never route to `finish` while any criterion is unmet. The build phase's completion gate already blocked a grossly-incomplete deliverable; your job is the judgment an automated check cannot make (does it actually work, read well, look right). After ~3 unproductive loops, stop and report DONE_WITH_CONCERNS so the user can step in.
  5. Finishdeveloper

    All acceptance criteria met. Stamp a short summary and report DONE.

    Show working prompt
    Every acceptance criterion passed. Write a one-paragraph DONE summary to task notes via `write_task_note`: what was built, the deliverable path(s), and a one-line confirmation that each criterion is met. Then report DONE.

Triggers

Phrases that suggest this craftbook to a crew.

Source

View this craftbook on GitHub · MIT license