Recipes

Copy the config.
Change two lines.

Working setups for the jobs people actually run Quire for. Each one is a real config plus the command, contributed by whoever built it first. All of them live in examples/ in the repo.

Recipe 01 · contributed by @halden-ops

Fail the build when the docs go stale.

A GitHub Action that asks a set of questions your documentation is supposed to answer. --strict means an ungrounded answer exits non-zero, so a doc that quietly stopped being true fails the build before a customer finds it.

  • Runs on a local model, so no API key in your Actions secrets
  • About 40 seconds for a 1,200-file docs tree, cached index
  • The question list is a plain text file reviewers can add to
.github/workflows/docs-qa.yml
- name: Index docs
  run: quire index ./docs --quiet

- name: Answerability check
  run: |
    while read -r q; do
      quire ask "$q" --strict --quiet \
        || { echo "::error::unanswerable: $q"; fail=1; }
    done < docs/must-answer.txt
    exit ${fail:-0}
weekly-brief.yml
name: monday-brief
schedule: "0 7 * * 1"
ask: |
  What changed across these notes in 7 days?
  Lead with anything that contradicts an
  earlier note. Cite everything. Max 400 words.
sources: ["interviews/**", "calls/**", "decks/**"]
output: { to: "file", path: "briefs/{date}.md" }
conflicts: show
Recipe 02 · contributed by @rume-o

A Monday brief from six years of notes.

Point it at interview transcripts, call notes and old decks. The agent writes a diff: what moved, and what contradicts something written earlier.

The tuning that mattered: the first version had no word cap and nobody read it. max_words: 400 and "lead with contradictions" were the two changes that made it stick.

agentsconflicts: showlocal model
airgapped.toml
[model]
answer  = "ollama/llama3.1:70b"
verify  = "ollama/qwen2.5:3b"
embed   = "bge-small-en-v1.5"

[network]
offline = true    # hard fail on any outbound call

[index]
store   = "sqlite://./archive.db"
ocr     = "always"

$ quire index ./scans --workers 8
  4,112,880 spans · 61h · resumable
Recipe 04 · contributed by @archive-collective

Four million scanned pages, no network.

A public records archive running entirely offline. offline = true makes any outbound call a hard error where it used to fall back silently, which is the setting you want when the guarantee has to be provable.

  • OCR forced on: everything is a scan
  • Indexing is resumable; it ran over three weekends
  • Postgres would be the usual advice at this size; SQLite held
See it in the showcase →
Recipe 05 · contributed by @sam-p

Answer in Slack, with the source attached.

A small bot that calls quire serve and posts the answer with its citations as a thread reply. It never posts when the answer is ungrounded. It says it doesn't know and tags the channel owner.

  • Roughly 60 lines against the HTTP API
  • Silence is the designed behaviour for low confidence
  • Runs on the same machine as the index; nothing is exposed
bot.py
r = httpx.post("http://localhost:7777/v1/ask",
               json={"question": text, "strict": True})

if r.status_code == 422:
    say("Not in the index. cc @docs-owner")
else:
    a = r.json()
    say(a["answer"] + "\n" + "\n".join(
        f"[{c['n']}] {c['locator']}"
        for c in a["citations"]))

Built something? Add a recipe.

Drop a folder in examples/ with a config, a command and a paragraph on what broke first. That last part is the one people actually need.