Skip to main content

Quarry

A config-driven knowledge-ingestion harness — a CLI that owns the deterministic half of turning a source (a YouTube video, a web page, …) into a linked article in a markdown knowledge wiki.

Quarry resolves a source adapter, fetches, writes immutable raw material, hands a machine-readable compile-spec to an LLM (or human) for the one irreducibly-generative step — writing the article — then verifies provenance, lints, and commits. It never calls a model, so it is runnable and testable without API keys.

You extract raw material from the world and refine it into something structured. That is the pipeline, and the name.

Why

The deterministic mechanics of disciplined knowledge ingestion — fetch, immutable raw, a verifiable manifest, provenance checking, structural lint, semantic link discovery — are worth doing the same way every time. Quarry packages exactly that machinery and nothing else: it is not an LLM wrapper, not a note-taking app, and not opinionated about your wiki's shape. Every convention is configuration.

Install

pip install quarry-kb[all]          # all shipped adapters
pip install quarry-kb               # core only (PyYAML); add adapters as extras

Adapters (each an extra): youtube (transcript + Whisper fallback), web, github (gitingest), pdf (PyMuPDF4LLM + OCR), instagram, plus whisper for local audio transcription. Adapters extract raw content deterministically — no LLM. The core needs no API key; a few adapters take optional credentials (e.g. Instagram cookies for private posts) — see each adapter's module docstring for setup.

No Reddit adapter (removed in 0.4.0). Reddit became a losing battle for a deterministic, no-auth fetcher: it fingerprint-blocks pure-Python clients via TLS/JA3 (so it needed curl_cffi impersonation just to get a 200), throttles by IP reputation with no Retry-After (so back-off is guesswork), and its Nov-2025 Responsible Builder Policy gates all API apps — including read-only OAuth — behind manual approval. The net result was a fragile, perpetually-degrading path that violated Quarry's "runnable without keys, deterministically" principle. Rather than ship something that mostly doesn't work, it's gone. To ingest a Reddit thread, save the page (or its .json) and feed it through the web/pdf adapter, or add your own adapter via the entry-point hook. (curl_cffi lives on — the instagram extra uses it for yt-dlp's impersonation.)

Installed as quarry-kb on PyPI (the bare name was taken); the command and import are both quarry.

Requires Python 3.11+.

60-second quickstart

cd your-wiki-repo
quarry init                  # scaffold a documented quarry.toml + gitignore .quarry/
# edit quarry.toml to match your wiki's conventions

quarry ingest <url>          # fetch -> raw/ + compile-manifest, then STOP
# ...now write the wiki article using the printed compile-spec...
quarry finish <slug>         # verify provenance -> lint -> commit (no push unless --push)

Other commands: quarry lint, quarry adapters, quarry related <article>, quarry densify [--apply], quarry doctor.

The two-call seam is deliberate: ingest and finish are separate processes, and the generative step (writing the article) happens between them — done by you or your agent, never by Quarry.

Configuration reference

Quarry is configured by a quarry.toml discovered by walking up from the current directory (a [tool.quarry] table in pyproject.toml is a fallback). quarry init writes a fully-commented default. Tables:

Table Key Purpose
[store] wiki, raw, manifest_dir directories (relative to the store root)
raw_layout raw path template; tokens: {year} {month} {date} {slug} {kebab_title} {ext} {topic} {source_id}
root explicit store root (defaults to the dir containing quarry.toml)
[frontmatter] required, sources_field, related_field article frontmatter schema
[ingest] default_ext, slug, on_duplicate slug template; on_duplicate = refuse | warn | allow
[adapters] enabled allowlist of adapters to run
[discovery] backend, mode, collection, dedup_threshold, densify_topk semantic-link backend (qmd or none)
[lint] broken_links, require_sources_on_disk, orphan_check, index_file, fail_on which checks run and which fail the build
[finish] run_lint, auto_push, commit_template finish behaviour

See examples/quarry.toml for the annotated default.

Authoring an adapter

A new source type is one small adapter discoverable via the quarry.adapters entry-point group — no fork. See CONTRIBUTING.md for the contract, the hermetic-test requirement, and a worked pdf example.

Status

Pre-1.0, but feature-complete for v1 and fully tested. See SPEC.md for the design and ISA.md for the ideal-state criteria and build provenance.

License

MIT — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quarry_kb-0.5.3.tar.gz (75.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

quarry_kb-0.5.3-py3-none-any.whl (41.5 kB view details)

Uploaded Python 3

File details

Details for the file quarry_kb-0.5.3.tar.gz.

File metadata

  • Download URL: quarry_kb-0.5.3.tar.gz
  • Upload date:
  • Size: 75.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for quarry_kb-0.5.3.tar.gz
Algorithm Hash digest
SHA256 73af560b45ab274e97b92ec3c5d129bfea38c6f51ad971c38903587013a21c96
MD5 035d45686097a392024cb0591cacc152
BLAKE2b-256 b5f7212f7ba9e7fed1ed0274ead3998edf70379030075795c88ca5c6a245d88c

See more details on using hashes here.

Provenance

The following attestation bundles were made for quarry_kb-0.5.3.tar.gz:

Publisher: ci.yml on asachs/quarry-kb

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file quarry_kb-0.5.3-py3-none-any.whl.

File metadata

  • Download URL: quarry_kb-0.5.3-py3-none-any.whl
  • Upload date:
  • Size: 41.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for quarry_kb-0.5.3-py3-none-any.whl
Algorithm Hash digest
SHA256 a4e37e154dcfac57b54a6a3d2399003e66427a5b53435c55c47776f14d85739e
MD5 3841c9cd0a1394e586b67cc9ec1bb8bb
BLAKE2b-256 1b2264d056dc5428322c0f2547b0c4ddcc2ae5646b648ba132c9e4d1dfbe8ad7

See more details on using hashes here.

Provenance

The following attestation bundles were made for quarry_kb-0.5.3-py3-none-any.whl:

Publisher: ci.yml on asachs/quarry-kb

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.5.3 This release

2 files

0.5.1

2 files

0.5.0

2 files

0.4.0

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page