Skip to main content
Glama

punt-quarry

Local semantic search for AI agents and humans.

License CI PyPI Python Working Backwards

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, reachable directly too via an HTTP API.

Platforms: macOS (Apple Silicon), 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/5530609/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

Intel macOS is not currently supported by any install path — two of quarry's dependencies (lancedb, onnxruntime) publish no Intel macOS wheel, so uv tool install/pip install fails there the same way brew install does.

brew install puts the quarry, quarryd, and quarry-hook binaries on PATH. Run quarry install afterward for the model download, TLS certificates, and daemon service:

brew install punt-labs/tap/quarry
quarry install

To add the Claude Code plugin too:

claude plugin marketplace add punt-labs/claude-plugins
claude plugin install quarry@punt-labs

Use one distribution channel per machine — mixing Homebrew with the curl | sh installer puts two copies of quarry on PATH in different locations, and whichever comes first wins. Run which quarry (or command -v quarry) to see which one that is.

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/5530609/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/5530609/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/5530609/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

Related MCP server: claude-context-local

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 quarryd process 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 enable sets 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 use for work/personal separation.

  • Remote server — run the engine on a GPU host and connect from any Mac or Linux client over TLS. See ADVANCED-SETUP.md.

What It Looks Like

Sync a folder:

> /ingest ~/Documents/research

▶  Registering /Users/you/Documents/research as 'research' (task a1b2c3)
▶  Syncing all registrations (task d4e5f6)

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, or register+sync a local file or directory

/remember <name>

Ingest inline text under a document name

/learn <name>

Save a distilled, retrieval-preferred lesson (project-scoped)

/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, missions sync

MCP Tools

Tool

Purpose

find

Semantic search with filters

show

Document metadata or page text

list

Documents, collections, databases, registrations

status

Database statistics

insights

Recall telemetry: query volume, latency, empty-result rate, recall mix

ingest / remember

Index a URL, or inline text

learn

Save a distilled lesson (memory_type=lesson, project-scoped, retrieval boost)

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

missions_sync

File each frozen ethos mission round into the worker's memory

CLI

Command

What it does

quarry find "<query>"

Hybrid search (vector + full-text)

quarry ingest <url>

Index a webpage (local files/directories: quarry register)

quarry remember --name <name>

Index inline text from stdin

quarry learn --name <name>

Save a distilled lesson from stdin (project-scoped, retrieval-preferred)

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 missions sync

File each frozen ethos mission round into memory-<worker> (--mission, --dry-run, --force)

quarry skills install [--agent <id>|--all]

Deposit the quarry-recall/quarry-capture skills into every detected coding-agent harness (pi, opencode, codex); --all is the default

quarry skills status

Report which harnesses have the skills deposited, and whether current

quarry use <name>

Switch the active database

quarry status

Database dashboard

quarry insights

Recall telemetry: query volume, latency, empty-result rate, recall mix

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. --memory-type is one vocabulary on every surface (fact, observation, opinion, procedure; lesson is reserved for quarry learn) — an unknown value is a 400 on remember, ingest, and the capture route alike. Always pass your own handle: the daemon cannot infer it, and a subagent's working directory resolves to the repo's leader, not to the subagent.

Each ethos identity gets a versioned ## Memory (quarry guide v2) block in its session_context — when to remember (the five moments), what never to store, and why the handle is yours — written to the vendored .punt-labs/ethos/identities/<handle>.ext/quarry.yaml on quarry enable (commit it via PR) and to the global identities on quarry install.

Two Agent Skills carry the deep how-to that used to be restated across the SessionStart context, the MCP instructions block, and the memory guide: quarry-recall (understand code, recall a decision, recall memory — all backed by quarry find) and quarry-capture (remember/learn/ingest, the five-moments timing, the agent_handle discipline). Claude Code reads them straight from this repo's plugin/skills/; quarry skills install deposits the same two skills into pi (~/.pi/agent/skills/), opencode (~/.config/opencode/skills/), and codex (~/.codex/skills/, alongside its own preinstalled .system/ skills) — version-stamped by content hash, so a re-run only touches a harness whose deposit is stale. quarry disable retracts them again, but only when the disabled repo's own pyproject.toml names the punt-quarry package (never merely because a plugin/skills/ tree exists — every marketplace-layout plugin ships one) and only for a directory carrying quarry's own deposit manifest; a same-named directory it never wrote is left alone.

A registered directory isn't cron-driven — quarryd runs a live filesystem watch (debounced, ~1s) that reacts to changes as they happen, backed by a 5-minute periodic safety sweep (catches anything the watch missed, self-heals the search index). quarry sync triggers an immediate one-shot pass on top of that; you don't need to run it after every edit.

The watch honors ignore rules the way git does: .gitignore (at every level), a root-level .quarryignore, and built-in scratch/VCS defaults all prune both what gets indexed and which directories consume OS watch resources — a giant node_modules or .venv costs nothing. quarry list registrations shows each collection's live watch state (watched, degraded, or scan-only); a scan-only collection still stays current via the periodic sweep.

Setup

Quarry works with zero configuration. For environment variables and running the engine on a remote/GPU host, see ADVANCED-SETUP.md.

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 hooks into the session lifecycle and captures knowledge automatically, with no action from you:

Hook

What it captures

SessionStart

Auto-registers and syncs the current project, so it's searchable from the first prompt

PostToolUse (WebFetch)

Ingests URLs Claude fetches during research. If the URL was already captured, the hook nudges Claude to find it instead of re-fetching

PostToolUse (WebSearch)

Files a scrubbed digest of search results under <repo>-captures

PostToolUse (Read)

Opt-in (off by default): captures prose files read from outside any registered tree, gated by an in-tree/secret-path/extension/size filter

PreCompact

Captures the session transcript before context compaction discards it

SessionEnd

Captures the full session transcript on every close, even a short session that never compacts

SubagentStop

Archives a subagent's own transcript, separate from the parent session's, and — when agent_type names a registered ethos identity — files the subagent's final report as an observation in memory-<handle>; a bare Agent() (general-purpose) is filed unattributed, never under the leader's pin

Every hook fails open — a hook failure never blocks Claude Code — and each is independently toggleable in .punt-labs/quarry/config.md.

Captures are scrubbed at write time (secrets, paths, emails, hostnames) through a single choke point before they ever reach disk. The scrub is pattern-based and best-effort, not a formal guarantee of catching every possible secret; a failure in the scrubber itself is fail-closed (the write is blocked, not written unscrubbed). Deliberate ingest/remember content is not scrubbed — that's content you chose to add. See DES-036 in DESIGN.md.

Extension: private capture shadow. An opt-in per-project shadow repo (<repo> → private <repo>-quarry) can push the scrubbed captures off the public repo entirely, for projects where even scrubbed transcripts shouldn't live in a public history. See DES-039 in DESIGN.md and AGENTS.md.

Recall telemetry privacy note. Every search records a scrubbed copy of the query text and its ranked hits to a local SQLite file (~/.punt-labs/quarry/data/<db>/telemetry.db) — nothing leaves the machine. Query text goes through the same secret/PII scrub as captures before it ever touches disk. Turn it off with telemetry_enabled: false in Settings (env var TELEMETRY_ENABLED); see DES-056 in DESIGN.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). Re-running the Quick Start installer does this for you on every upgrade — it calls quarry install and then force-restarts the service as a belt-and-suspenders step, so a plain curl | sh re-run is enough.

After upgrading the package some other way (uv tool install --force, a local wheel), restart the service yourself — a running daemon holds the old engine in memory until restarted.

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.

HTTP API

quarryd also exposes a REST API — every CLI/MCP operation is a thin client over it. The CLI is the primary, documented way to drive quarry; the HTTP API is there for scripting or a non-Claude integration that wants to talk to the daemon directly. quarry install generates a self-signed CA for the managed daemon, local or remote, so it's TLS even on loopback:

curl --cacert ~/.punt-labs/quarry/tls/ca.crt "https://127.0.0.1:8420/v1/search?q=Q3+revenue"

Local installs bind loopback-only with no auth required; a --network install additionally requires a Bearer token (QUARRY_API_KEY) — see ADVANCED-SETUP.md. The full endpoint list is generated at docs/openapi.json (make openapi regenerates it).

Documentation

Architecture | Advanced Setup | Design (ADR log) | Agents | Changelog

Development

Quality gates, architecture notes, and the PR process are in CONTRIBUTING.md.

License

MIT

Available Tools

14 tools
deleteA

Use to remove stale or wrong content before re-ingesting it.

Returns immediately — the daemon removes chunks in the background.

Args: name: Document filename or collection name to delete. kind: What to delete — "document" or "collection". collection: Optional collection scope (only for kind="document").

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNodocument
nameYes
collectionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does add one important behavior: the call 'Returns immediately' while the daemon removes chunks in the background. However, it does not disclose the destructive/permanent nature of deletion or possible failure/error behavior, which is significant for a delete tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded with purpose, and then gives the async behavior before a scannable Args list. Every sentence adds information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema and a relatively simple three-parameter tool, the description covers the core purpose, async timing, and all argument semantics. It leaves out irreversibility and error-handling details, but these are not essential for a basic delete invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description compensates fully by explaining all three parameters: name, kind with its allowed values, and collection with its conditional scope. It adds the relationship that collection only applies to kind='document', which the schema does not express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear use-case: remove stale or wrong content before re-ingesting it. The Args section identifies the target resources as documents or collections, making the operation unambiguous. It does not explicitly contrast with sibling tools, but no sibling duplicates this delete operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger ('stale or wrong content before re-ingesting it') and explains why deletion is needed prior to re-ingestion. It does not list when-not-to-use or alternative tools, but the context is sufficient for the provided sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deregister_directoryA

Use to stop tracking a directory — keep its indexed data with keep_data=True, or purge it.

Returns the removed-file count synchronously; the chunk purge runs as a background task. An unknown collection surfaces as an error, not a removal confirmation.

Args: collection: Collection name to deregister. keep_data: If true, keep indexed data in LanceDB.

ParametersJSON Schema
NameRequiredDescriptionDefault
keep_dataNo
collectionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral disclosure burden. It explains the synchronous removed-file count return, the background chunk purge, the effect of keep_data, and the error behavior for unknown collections. This is substantive, non-obvious information beyond a simple 'deregisters' statement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: objective first, then returns/behavior, then error semantics, then parameter definitions. Every sentence provides necessary operational detail with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has moderate complexity—a mutation with asynchronous behavior, a conditional data-preservation flag, and a specific error mode. The description covers the main action, both parameters, return value, background processing, and error semantics. With an output schema present, no return-structure detail is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description fully compensates by defining each parameter: 'collection' as the collection to deregister, and 'keep_data' with its effect on LanceDB indexed data. Both parameters receive meaningful semantic context beyond their raw schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'stop tracking a directory', which is a specific verb and resource. It distinguishes itself from register_directory by its opposite meaning, and from delete by the keep_data vs purge distinction, though it does not explicitly name sibling alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening 'Use to stop tracking a directory' provides clear usage context, and the keep_data=True vs purge option explains the decision branch. However, it does not explicitly state when not to use it or direct users to alternative tools like delete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

findA

Use find before WebSearch or WebFetch for research, or before answering a why/how/what-did-we-decide question. Prefer grep for symbol and value lookups; prefer find for meaning.

Combines vector similarity and BM25 full-text search via Reciprocal Rank Fusion (RRF) for better recall on both meaning and exact terms.

Args: query: Natural language search query. limit: Maximum number of results (default 10, max 50). document_filter: Optional exact document name to filter by. collection: Optional collection name to search within. page_type: Optional content type filter (text, code, spreadsheet, etc.). source_format: Optional source format filter (.pdf, .py, .xlsx, etc.). agent_handle: Your own handle to recall only your memories (e.g. "rmh"); leave empty to search everything. memory_type: Optional memory type filter (fact, observation, lesson, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
page_typeNo
collectionNo
memory_typeNo
agent_handleNo
source_formatNo
document_filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description does substantive behavioral work: it explains the hybrid vector/BM25 search with RRF and clarifies agent_handle scoping ('leave empty to search everything'). It does not explicitly state read-only/no side effects, but search semantics and the output schema make this largely clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The usage guidance is front-loaded, the RRF sentence justifies the search behavior without fluff, and the Args block is dense but necessary given the schema's lack of descriptions. Every part of the description earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter search tool with no annotations, the description covers when to use it, how the search works, all parameter semantics, and limits. The output schema is present, so return-value details are reasonably deferred.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description defines all eight parameters with real meaning: query as natural language, limit with default/max, exact document filter, collection, content type, source format, own-memory scoping, and memory type. This fully compensates for the empty schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies find as a semantic search tool for memories/knowledge, positioned against WebSearch, WebFetch, and grep. The distinction 'prefer grep for symbol and value lookups; prefer find for meaning' makes its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit trigger conditions: use before WebSearch or WebFetch for research, before answering why/how/what-did-we-decide questions, and prefer grep when doing symbol/value lookups. This is directly actionable selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ingestA

Use when you have a URL to add to the knowledge base — a doc, an article, a spec.

remember = a specific durable fact, ingest = a URL, learn = a distilled lesson that gets retrieval preference.

Fetches a URL with smart sitemap discovery and single-page fallback. For local files and directories, use register_directory + sync_all_registrations — the daemon owns the filesystem, so there is no in-process file loader here.

Returns immediately — the daemon indexes in the background.

Args: source: HTTP(S) URL to ingest. overwrite: If true, replace existing data. collection: Collection name. Auto-derived if empty.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
overwriteNo
collectionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that 'Returns immediately — the daemon indexes in the background', mentions 'smart sitemap discovery and single-page fallback', and explains the filesystem ownership. However, it doesn't discuss failure handling or error cases, which is a minor gap given the richness of other disclosed traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured but slightly verbose. It opens with purpose, then usage differentiation, then behavioral details, and a clear 'Args:' section. Every sentence has value, though the sibling differentiation paragraph could be tightened. Overall it's appropriately sized and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter tool with no annotations and an output schema, the description provides comprehensive context: purpose, usage, alternative routing, parameter semantics, and async behavior. Nothing critical is missing for an agent to call it correctly, making it highly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does so fully by explaining each parameter: source is an 'HTTP(S) URL', overwrite 'replace existing data', collection 'Auto-derived if empty'. This adds crucial meaning beyond the bare schema, leaving no parameter vague.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool's purpose: 'Use when you have a URL to add to the knowledge base' and explicitly distinguishes it from siblings via 'remember = a specific durable fact, ingest = a URL, learn = a distilled lesson'. It names the verb and resource precisely, leaving no ambiguity about its function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to use this tool versus alternatives: 'remember = a specific durable fact, ingest = a URL, learn = a distilled lesson' and for local files 'use register_directory + sync_all_registrations'. This clearly routes the agent to the correct sibling, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insightsA

Use to read your own recall stats: query volume, latency, recall mix.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden; it does so by explicitly framing the operation as a read of the caller's own data, implying read-only behavior and scoping. It does not mention caching, latency expectations, or auth, but those are not critical for this simple stats read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler. The primary use case is front-loaded and the three returned metrics are listed compactly, so every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool with an output schema, the description is nearly complete. It could have added a sentence about when not to use it or how it differs from status, but the core invocation information is fully present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and an empty input schema, so the baseline is 4. There is nothing for the description to add beyond confirming no arguments are needed, which it does implicitly by listing outputs rather than inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('read') and a specific resource ('your own recall stats'), then names the exact metrics it returns: query volume, latency, and recall mix. This makes it distinct from sibling tools like status or show, even without explicitly naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening 'Use to read your own recall stats' clearly states the intended context and audience (the caller's own statistics). It does not list exclusions or alternatives, but for a simple read-only introspection tool the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

learnA

Use learn to save a distilled lesson that should outrank ordinary results for related queries -- a rule, a convention, a "do it this way" insight, not a one-off fact.

remember = a specific durable fact, ingest = a URL, learn = a distilled lesson that gets retrieval preference.

The daemon scrubs secrets/PII before indexing, same as remember. Lessons are capped at 500 characters -- use remember for anything longer. Returns immediately -- the daemon indexes in the background.

Args: lesson: The distilled lesson text (<= 500 chars). topic: Optional domain tag (e.g. "testing", "release-process"). name: Optional user-visible slug for later reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
topicNo
lessonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for behavioral disclosure. It covers secret/PII scrubbing, background indexing, immediate return, and the 500-character cap, which are meaningful beyond the basic 'save' semantics. It does not mention whether the operation is reversible or requires auth, but the disclosed behaviors are substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and differentiation, then behavioral details, then parameter semantics. Every sentence carries distinct information and the argument list is compact and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write tool with no annotations and minimal schema, the description covers the what, when, how, behavioral side effects, and parameters. The output schema covers return values, so nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does thoroughly. It adds the 500-character constraint for lesson, explains topic as a domain tag with examples, and defines name as a user-visible slug for later reference — all meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('save') and resource ('distilled lesson') and defines precisely what qualifies as a lesson versus a fact or URL. It explicitly distinguishes learn from sibling tools remember and ingest, so an agent can select it unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit selection criteria: remember for durable facts, ingest for URLs, learn for distilled lessons with retrieval preference. It also provides a boundary condition — lessons over 500 characters should use remember — leaving no ambiguity about when to choose this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listA

Use to see what's already indexed before ingesting it again.

Args: kind: What to list — "documents", "collections", "databases", or "registrations". collection: Optional collection filter (only for kind="documents").

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
collectionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. The word 'see' implies a read-only operation, but the description does not explicitly state that it makes no changes, nor does it mention permissions, pagination, or failure behavior. This is adequate but not richly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loads the purpose in the first line, and then uses a concise Args section to cover both parameters. Every sentence adds value beyond the schema, and there is no redundant or filler language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter listing tool with an output schema, the description covers the task and parameter semantics well. It could be more complete by explicitly stating read-only behavior or noting when to prefer 'find'/'show', but nothing critical is missing for invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage and no enums, making the parameter documentation critical. The description supplies the exact allowed values for 'kind' and clearly states that 'collection' only applies to kind='documents', which is essential semantic information the schema does not provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists what is already indexed and positions it as a pre-ingestion check. It identifies the resource type (indexed items) and action (see/list), but does not explicitly differentiate from sibling tools like 'find', 'show', or 'status' that could also be used to inspect data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'before ingesting it again' gives a clear usage context and helps an agent know when to call this tool. It does not explicitly exclude alternatives or name when to prefer a sibling, but the intended scenario is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

missions_syncA

Use after ethos mission close to file each frozen round into the worker's memory (memory-<worker>, type observation).

Reads this repo's .punt-labs/ethos/missions/ tree; safe to re-run — a round already filed is skipped, and a name held by another checkout is reported as an error, never overwritten.

Args: mission: Sync one mission id only; empty means every mission. dry_run: List what would be filed and post nothing. force: Re-file rounds the daemon already holds (matching key only).

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
dry_runNo
missionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses idempotency (already-filed rounds skipped), conflict behavior (name held by another checkout is reported as an error, never overwritten), and the side-effect distinction of dry_run vs force. This goes well beyond a generic 'syncs missions' statement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the critical usage trigger, then covers safety semantics, then parameters. Each sentence adds distinct value and there is no redundant restatement of the schema or tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given three optional parameters and an output schema, the description provides the trigger, the source tree, idempotency, conflict handling, and parameter semantics. Nothing essential for invoking the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully compensates by explaining all three parameters: mission (single ID vs empty meaning all), dry_run (list only, post nothing), and force (re-file rounds the daemon already holds). Each parameter gets behavioral meaning beyond its type/default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: it files each frozen round into worker memory after `ethos mission close`, reading the repo's missions tree. This precise workflow makes it easy to distinguish from siblings like `sync_all_registrations` or `remember` even without explicit exclusions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger condition ('Use after ethos mission close') and explains safe re-run behavior, plus when to use dry_run and force. It does not name alternatives or explicitly say when not to use the tool, but the intended context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

register_directoryA

Use to track a local directory so future changes sync automatically.

Returns immediately — the daemon records the registration in the background.

Args: directory: Absolute path to the directory. collection: Collection name. Uses directory name if empty.

ParametersJSON Schema
NameRequiredDescriptionDefault
directoryYes
collectionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It usefully discloses that the tool returns immediately while the daemon records the registration in the background, and that sync will happen automatically. It does not cover edge cases like duplicate registrations or missing paths, but the async return behavior is valuable context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-line purpose, a one-line behavioral note, and a concise parameter list. Every sentence earns its place, with no redundant or vague filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter registration tool, the description is largely complete: it states the purpose, the async behavior, and the meaning of each parameter. It could add preconditions like directory existence or what happens when the same directory is registered twice, but the essential invocation details are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain the parameters. The Args section adds meaningful semantics: directory must be an absolute path, and collection defaults to the directory name when empty. This goes well beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool tracks a local directory so future changes sync automatically. It identifies the resource ('local directory') and the purpose, and is easily distinguished from siblings like deregister_directory and sync_all_registrations, though it does not explicitly name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use to track a local directory so future changes sync automatically' provides clear context for when this tool applies. It does not explicitly discuss when not to use it or name alternative tools, but the purpose is stated directly enough for an agent to select it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rememberA

Use remember when you learn something durable — a decision, a gotcha, a non-obvious fact, a procedure — so it survives context compaction.

remember = a specific durable fact, ingest = a URL, learn = a distilled lesson that gets retrieval preference.

Call it at these five moments, not at the end and not never: a non-obvious root cause or gotcha (fact); a ratified design decision with its reason (fact); a repeatable how-to (procedure); a judgement you will revisit (opinion); and once before submitting a mission result (observation). Always pass your own agent_handle — the daemon cannot infer it, and a subagent's working directory resolves to the repo's leader, not to you.

The daemon scrubs secrets/PII before indexing. Returns immediately — the daemon indexes in the background.

Args: content: The text content to remember. document_name: Name for the document (e.g., 'notes.md'). overwrite: If true, replace existing data for this document. If false, an existing document of this name is left untouched. collection: Collection name. Leave empty to route by agent_handle — memory-<handle> when a handle is given, else default. format_hint: Format hint: 'auto', 'plain', 'markdown', 'latex'. agent_handle: Your own handle (e.g. "rmh") — the memory is filed under it and recalled by it. memory_type: Memory classification: fact, observation, opinion, procedure. 'lesson' is reserved for the learn tool. summary: One-line summary of the content.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
summaryNo
overwriteNo
collectionNo
format_hintNoauto
memory_typeNo
agent_handleNo
document_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does well by disclosing that the daemon scrubs secrets/PII, that it returns immediately while indexing happens in the background, and that agent_handle must be passed explicitly because the daemon cannot infer it. It could go further by noting failure modes or eventual consistency, but the key behavioral traits are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-organized: front-loaded usage context, then behavior notes, then parameter explanations. Some phrases are slightly conversational, but no major redundancy exists given the need to document 8 parameters with no schema descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter tool with no annotations and no schema descriptions, this description covers usage timing, sibling distinctions, parameter semantics, background behavior, privacy handling, and the subagent agent_handle gotcha. It is effectively complete for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate — and it does. Every parameter receives a meaningful explanation, including default routing behavior for collection, the reserved 'lesson' value for memory_type, and overwrite semantics. This exceeds what the bare schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'use remember when you learn something durable.' It explicitly distinguishes itself from sibling tools by saying 'remember = a specific durable fact, ingest = a URL, learn = a distilled lesson that gets retrieval preference,' so an agent can clearly tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance: five specific moments to call it, and says 'not at the end and not never.' It also names alternatives (ingest, learn) and differentiates them, providing clear decision rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

showA

Use to read a specific page, or to check whether a document is already indexed.

Without page_number: shows document metadata (pages, chunks, collection). With page_number: shows the full text for that page.

Args: document_name: Document filename (e.g., 'report.pdf'). page_number: Page number (1-indexed). 0 means show metadata only. collection: Optional collection scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
collectionNo
page_numberNo
document_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavior, and it largely delivers. It explains the conditional behavior between metadata-only and full-page text, including the special 0 value for page_number. It does not explicitly state that the operation is read-only, but 'read' and 'shows' strongly imply it, and it avoids destructive or surprising language.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the main purpose, and uses a clean Args list for parameter details. Every sentence contributes meaningful information, and the conditional behavior is laid out efficiently without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a low-complexity, read-style tool with 3 parameters and an output schema. The description covers the main usage modes, the meaningful special value, and the optional collection scope. It does not discuss error handling for missing/unindexed documents, but that is not essential here given the output schema and straightforward nature of the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: document_name is given a filename example, page_number is documented as 1-indexed with a special 0 meaning, and collection is identified as optional scoping. The collection parameter remains somewhat vague, but the core parameter semantics are clearly conveyed beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Use to read a specific page') and immediately adds a second purpose ('check whether a document is already indexed'). This clearly distinguishes it from sibling tools like list, find, or ingest by framing it as a direct read/metadata inspection operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states clear use cases: reading a specific page or checking index status. It also explains when the metadata-only behavior applies. However, it does not explicitly compare against alternatives like find or list, nor say when not to use this tool, so it falls short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statusA

Use to check how much is indexed before you search or ingest.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only says 'check how much is indexed' and gives no detail on what the tool actually reports, whether it is read-only, what shape the output takes, or any operational caveats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that states the action, the target, and the intended use context. Every word contributes, and it is front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless status tool with an output schema present, the description provides the essential context: what to check and when to check it. It could be slightly richer about what 'how much' means (count, bytes, percentage), but it is otherwise sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters, and schema description coverage is 100%. There is nothing for the description to add about parameters, so the baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('check') and a specific resource ('how much is indexed'), and frames it as a precondition for search or ingest. It is clear enough to be understood, though it does not explicitly distinguish itself from siblings like 'show' or 'list'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear timing guidance: use it before search or ingest. It does not mention alternatives or exclusions, but for a zero-parameter status check this is reasonable context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_all_registrationsA

Use after registering a new directory, or when tracked files changed outside quarry's own writes.

Returns immediately — the daemon runs the sync in the background.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden for behavioral disclosure. It does disclose a key behavior: 'Returns immediately — the daemon runs the sync in the background.' However, it does not disclose side effects, whether the operation is safe/idempotent, or what happens if the daemon is unavailable, which matters for an unannotated mutation-like operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence front-loads the usage condition, and the second explains the critical async behavior. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema and clear trigger conditions, the description is nearly complete. It covers when to call and what to expect immediately, though it could slightly improve by explicitly noting that all tracked registrations are covered or how to check sync completion via a sibling like status.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema already covers everything relevant. The description adds context about when invocation is appropriate, which is the only parameter-like information an agent needs. The baseline of 4 applies because there are no parameters requiring explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description tells the agent when to use the tool and references 'the sync' run by the daemon, which combined with the tool name makes the purpose clear. It does not explicitly restate 'sync all registrations' as an operational definition, but the trigger conditions and background behavior remove ambiguity. It is distinguished from siblings by being the only sync-oriented operation among them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage triggers: after registering a new directory, or when tracked files changed outside quarry's own writes. It implicitly tells the agent not to use it after quarry's own writes, but it does not explicitly name alternatives or when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

useA

Use to point every other tool at a different named database.

All tools (find, ingest, sync, etc.) will target the selected database's daemon until changed again. Use list(kind="databases") to see the database the daemon is fixed to.

Only selects among LOCAL databases: while a remote target (QUARRY_URL or a 'quarry login') is active, the remote daemon is fixed to its own database and this has no effect.

Args: name: Database name (e.g., 'coding', 'work'). Use 'default' for the default database.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses the important state-changing effect ('all tools will target the selected database's daemon until changed again') and the remote-target no-op condition. This is sufficient for the tool's scope, though it does not detail error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear purpose up front, behavioral notes, and an args section. The first two sentences restate the same idea somewhat, but the organization is still efficient and easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-argument context-switching tool, this description covers everything an agent needs: persistent side effects, how to verify current state, the local-only constraint, and parameter semantics. The output schema covers the return value, so no additional return-value detail is necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides only a string field with no description, so the schema coverage is 0%. The description compensates by explaining the argument ('Database name'), giving concrete examples ('coding', 'work'), and explaining the special value 'default'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's function: switching the target database for all other tools. It uses a specific verb and resource ('point every other tool at a different named database') and distinguishes itself from sibling data-operation tools by describing its context-setting role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives practical usage context: it names the persistent effect until changed again, tells the user how to see the current target via list(kind='databases'), and explicitly states when the tool has no effect (active remote target). It does not explicitly enumerate alternatives, but the when/when-not guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev3.4.0
    • Addedinsights
  2. 1 tool updatev3.3.0
    • Addedmissions_sync
  3. 2 tool updatesv3.2.0
    • Addedlearn
    • Changedremember1 field changed
      • changedInput schema / properties / collection / default
        Previous value: -"default"New value: +""
  4. 11 tool updatesv2.1.0
    • First observeddelete
    • First observedderegister_directory
    • First observedfind
    • First observedingest
    • First observedlist
    • First observedregister_directory
    • First observedremember
    • First observedshow
    • First observedstatus
    • First observedsync_all_registrations
    • First observeduse

TDQS

A4/5.0

Scored across 14 tools

Disambiguation4/5

Most tools map to clearly distinct operations: search, read, ingest, remember, learn, delete, register, and status all have separate purposes. The only real ambiguity is between remember and learn, since both save durable knowledge and the distinction relies on subtle phrasing like 'specific fact' versus 'distilled lesson'.

Naming Consistency3/5

All names are lowercase and readable, but the set mixes bare verbs like find, show, and use with verb_noun compounds like register_directory and sync_all_registrations, plus one inverted noun_verb compound, missions_sync, and noun-only names like status and insights.

Tool Count4/5

Fourteen tools is within a reasonable range for a knowledge-base and recall server, and each tool has a real role. The surface feels slightly heavy due to the cluster of status/list/insights tools and the niche missions_sync tool, but nothing is clearly redundant.

Completeness4/5

The core lifecycle is well covered: content can be added via ingest, remember, learn, or register_directory; retrieved via find, show, and list; and removed via delete or deregister_directory, with overwrite flags supporting updates. Minor gaps exist around explicit database or collection creation and editing existing indexed content, but agents can work around them.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers