punt-quarry
Local semantic search for AI agents and humans.
Quarry indexes documents in 20+ formats, embeds them with a local ONNX model (snowflake-arctic-embed-m-v1.5), stores the vectors in LanceDB, and serves semantic search to Claude Code, Claude Desktop, and the command line. Everything runs locally — no API keys, no cloud accounts. One quarryd daemon per machine loads the model once; the CLI, the MCP server, and the Claude Code hooks are thin clients over it.
Platforms: macOS, Linux
Quick Start
Install the CLI, the daemon, the MCP server, and the Claude Code plugin:
curl -fsSL https://raw.githubusercontent.com/punt-labs/quarry/606d462/install.sh | sh
Restart Claude Code. Your current project is auto-indexed at session start, so you can search it by meaning right away — see What It Looks Like.
Install the package:
uv tool install punt-quarry
Set up the daemon, TLS certificates, and MCP config:
quarry install
Check health:
quarry doctor
For non-Claude harnesses (Codex, Cursor, a plain terminal) or Claude Code users whose org policy blocks marketplace/plugin installs, --no-plugin installs everything except the marketplace-register and plugin-install steps:
curl -fsSL https://raw.githubusercontent.com/punt-labs/quarry/606d462/install.sh | sh -s -- --no-plugin
Where a flag cannot be passed (CI templating a bare curl … | sh), set QUARRY_NO_PLUGIN=1 — honored only when exactly 1:
curl -fsSL https://raw.githubusercontent.com/punt-labs/quarry/606d462/install.sh | QUARRY_NO_PLUGIN=1 sh
Everything else runs unchanged. Use the CLI and the stdio quarry mcp server directly; both talk to the resident quarryd. Re-run the installer without --no-plugin to add the plugin later.
Download the installer:
curl -fsSL https://raw.githubusercontent.com/punt-labs/quarry/606d462/install.sh -o install.sh
Check its digest (shasum -a 256 install.sh on macOS):
sha256sum install.sh
Read it:
cat install.sh
Run it:
sh install.sh
Features
- 20+ formats — PDFs (with OCR for scanned pages), source code (AST-aware splitting), spreadsheets, presentations, HTML, Markdown, LaTeX, DOCX, images.
- Semantic search — retrieval is by meaning, not keyword. A query about "margins" finds passages about profitability even if they never use that word.
- One daemon, thin clients — a single
quarrydprocess loads the embedding model once and serves the CLI, the MCP server, and the Claude Code hooks over a versioned REST API. Its resource use is bounded so it stays quiet in the background while you work. - Passive knowledge capture —
quarry enablesets up per-project file sync, web-fetch and session-transcript capture, and per-agent memory. Captures are PII/secret-scrubbed at write time and kept separate from the code index. See Knowledge Capture. - Named databases — isolated LanceDB directories with independent sync registries; switch with
quarry usefor work/personal separation. - Remote server — run the engine on a GPU host and connect from any Mac or Linux client over TLS. See Remote Server.
What It Looks Like
Ingest a document:
> /ingest report.pdf
▶ Ingesting report.pdf (background)
Search by meaning:
> /find "what were the Q3 revenue figures"
▶ [report.pdf p.12 | text/.pdf] (similarity: 0.4521)
Third quarter revenue reached $142M, up 18% year-over-year,
driven primarily by expansion in the enterprise segment.
Gross margins improved to 71% from 68% in Q2.
Commands
Slash Commands (Claude Code)
| Command | What it does |
|---|---|
/ingest <source> |
Ingest a URL, directory, or file |
/remember <name> |
Ingest inline text under a document name |
/find <query> |
Semantic search; questions get synthesized answers, keywords get raw results |
/explain <topic> |
Search and synthesize an explanation |
/source <claim> |
Find which document a claim comes from |
/quarry [sub] |
Manage: status, sync, collections, databases, registrations |
MCP Tools
| Tool | Purpose |
|---|---|
find |
Semantic search with filters |
show |
Document metadata or page text |
list |
Documents, collections, databases, registrations |
status |
Database statistics |
ingest / remember |
Index a file/URL, or inline text |
register_directory / deregister_directory |
Manage a synced directory |
sync_all_registrations |
Re-index all registered directories |
delete |
Remove a document or collection |
use |
Switch the active database |
CLI
| Command | What it does |
|---|---|
quarry find "<query>" |
Hybrid search (vector + full-text) |
quarry ingest <file|url> |
Index a file or webpage |
quarry remember --name <name> |
Index inline text from stdin |
quarry list documents |
List indexed documents |
quarry register <dir> |
Watch a directory for changes |
quarry sync |
Re-index registered directories |
quarry enable / quarry disable |
Set up / tear down project collections + captures |
quarry use <name> |
Switch the active database |
quarry status |
Database dashboard |
quarry doctor |
Health check |
quarry install |
Set up the daemon service, TLS certs, and MCP config |
quarry uninstall |
Remove the daemon service (its launchd/systemd unit) |
quarry login <host> --api-key <token> |
Connect to a remote server (TOFU pinning) |
quarry logout |
Disconnect, revert to the local daemon |
Agent-memory tagging is available on ingest/remember/find via --agent-handle, --memory-type, and --summary.
Setup
Quarry works with zero configuration. These environment variables customize it:
| Variable | Default | Description |
|---|---|---|
QUARRY_PROVIDER |
(auto) | ONNX execution provider: cpu, cuda, or unset (auto-detect) |
QUARRY_API_KEY |
(none) | Bearer token for quarryd (required for a non-loopback bind) |
QUARRY_ROOT |
~/.punt-labs/quarry/data |
Base directory for all databases |
CHUNK_MAX_CHARS |
1800 |
Max characters per chunk (~450 tokens) |
CHUNK_OVERLAP_CHARS |
200 |
Overlap between consecutive chunks |
The full configuration reference is in docs/architecture.tex.
Remote Server
Run quarry on a GPU host and connect from any Mac or Linux client over TLS. On the server, set an API key and install in network mode (binds 0.0.0.0, registers a service, prints a CA fingerprint):
export QUARRY_API_KEY=$(openssl rand -hex 32)
curl -fsSL https://raw.githubusercontent.com/punt-labs/quarry/606d462/install.sh | sh -s -- --network
On the client, install normally, then log in — queries redirect to the server over wss:// with TOFU certificate pinning:
quarry login <server-hostname> --api-key <token>
Claude Desktop
The .mcpb bundle is an on-top way to reach the same local index from Claude Desktop. It embeds no engine — it registers the thin quarry mcp client, which talks to the same quarryd that backs the CLI and Claude Code. It is not a standalone install: quarry must already be installed and running.
quarry install configures Claude Desktop automatically. To add it by hand instead, download punt-quarry.mcpb and double-click it.
Uploaded files in Claude Desktop live in a sandbox quarry cannot read — use remember for that content, or give ingest a local path.
Knowledge Capture
As a Claude Code plugin, quarry captures knowledge automatically: it auto-indexes your project at session start, ingests URLs you fetch during research, and captures session transcripts before context compaction. All hooks fail open (a failure never blocks Claude Code) and are individually toggleable in .punt-labs/quarry/config.md.
Captures are PII/secret-scrubbed at write time (secrets, paths, emails, hostnames) through a single choke point, fail-closed. Deliberate ingest/remember content is not scrubbed. An opt-in per-project shadow repo (<repo> → private <repo>-quarry) can push the redacted captures off the public repo. See DES-036 and DES-039 in DESIGN.md and AGENTS.md.
Managing the Daemon
quarry install registers quarryd as a per-user service that starts at login and restarts on crash (launchd on macOS, systemd on Linux). After upgrading the package, restart the service so the new engine loads — a running daemon holds the old code in memory.
macOS:
launchctl kickstart -k gui/$(id -u)/com.punt-labs.quarry
Linux:
systemctl --user restart quarry
quarry doctor confirms the daemon is running and ready.
Documentation
Architecture | Design (ADR log) | Agents | Changelog
Development
| Command | Purpose |
|---|---|
uv sync |
Install dependencies |
make check |
All quality gates (lint, type, test, ratchets) |
make test |
Test suite only |
make format |
Auto-format |
make docs |
Build the LaTeX documents |
make eval |
Retrieval-quality eval harness (MRR/success@k) |
License
MIT
No comments yet
Be the first to share your take.