CLI-first local document retrieval tool
Project description
Local-first CLI for agent and human document retrieval with provenance-grounded answers, local vector-store, and predictable machine-readable output.
Why docctl
- Optimized for agentic retrieval loops with fast multi-step questions and answers.
- Runs locally with a persistent Chroma-backed index.
- Ingests
.pdf,.docx,.txt, and.mdwith provenance metadata (doc_id,source,title). - Uses sentence-aware chunking for better retrieval quality.
- Supports deterministic
--jsonoutput for automation and agents. - Exposes stable CLI workflows for ingest, search, diagnostics, and inventory.
Agent Integration
Use SKILL.md when you want an agent to drive docctl end-to-end.
The skill makes session for fast iterative retrieval.
Quickstart
Requirements:
- Python 3.12 or 3.13
pip
# 1) Install from PyPI
pip install docctl
# 2) Verify CLI
docctl --help
# 3) Ingest supported files
docctl ingest ./docs --recursive --approve-write --allow-model-download
# 4) Search indexed content
docctl search "security gateway diagnostics" --top-k 5 --allow-model-download
# 5) Show one chunk by id (replace with an id from search output)
docctl show <chunk_id_from_search> --allow-model-download
Command Overview
| Command | Purpose |
|---|---|
docctl ingest <path> |
Ingest one supported file or a directory of supported files (mutates local index state). |
docctl export <archive_path> |
Export current index data to one .zip snapshot file. |
docctl import <archive_path> |
Import index data from one .zip snapshot file (mutating). |
docctl search <query> |
Search indexed content with optional metadata filters. |
docctl show <chunk_id> |
Show one indexed chunk by exact id. |
docctl stats |
Show index statistics. |
docctl catalog |
Show index summary and per-document inventory. |
docctl doctor |
Run local diagnostics for index and embedding setup. |
docctl session |
Run a read-only NDJSON request session on stdin/stdout. |
JSON and Session Mode
Use --json for deterministic machine-readable output:
docctl --json search "security gateway diagnostics" --top-k 5 --allow-model-download
Use session for NDJSON request/response flows. For agents, this is the preferred fast path whenever one workflow needs two or more read operations:
cat <<'EOF' | docctl session --allow-model-download
{"id":"q1","op":"search","query":"security gateway diagnostics","top_k":5}
{"id":"q2","op":"catalog"}
EOF
Configuration
Global options:
--index-path(default:.docctl)--collection(default:default)--json(deterministic JSON payloads on stdout)--verbose(extra diagnostics)
Model downloads are explicit:
- Use
--allow-model-downloadwhen embedding artifacts are not already available.
Mutation boundaries:
ingestandimportare mutating.search,show,stats,catalog,doctor, andsessionare read-only.exportis read-only.
Development
Run core quality checks:
make lint
make format-check
make typecheck
make security-lint
make import-lint
make test
make test-cov
make check-markdown-links
Apply formatting fixes:
make format
Build release artifacts locally:
make build-dist
make check-dist
make release-dry-run
Documentation Map
- ARCHITECTURE.md
- docs/design-docs/index.md
- docs/product-specs/index.md
- docs/references/index.md
- SECURITY.md (canonical vulnerability disclosure policy)
- docs/RELIABILITY.md
- docs/SECURITY.md (internal implementation security guardrails)
- docs/PLANS.md
Contributing
For implementation and validation workflow, start with:
- AGENTS.md
- ARCHITECTURE.md
- The indexed docs under
docs/listed above.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file docctl-0.3.1.tar.gz.
File metadata
- Download URL: docctl-0.3.1.tar.gz
- Upload date:
- Size: 34.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac2651090c6af4761c269f380ced2125f99c9b6e7d9065f67c00141bf7651b57
|
|
| MD5 |
9bbaef2010a16fa7ea289a1580b31c62
|
|
| BLAKE2b-256 |
6d54ec32fea2dfe1c0c6da46ffe8365be78167aae226f7b373530d83fb9cbfbd
|
Provenance
The following attestation bundles were made for docctl-0.3.1.tar.gz:
Publisher:
publish-pypi.yml on GeorgesAlkhouri/docctl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
docctl-0.3.1.tar.gz -
Subject digest:
ac2651090c6af4761c269f380ced2125f99c9b6e7d9065f67c00141bf7651b57 - Sigstore transparency entry: 1185765235
- Sigstore integration time:
-
Permalink:
GeorgesAlkhouri/docctl@65cc5abf8ea681733bb31662269bcd65463571a0 -
Branch / Tag:
refs/tags/v0.3.1 - Owner: https://github.com/GeorgesAlkhouri
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@65cc5abf8ea681733bb31662269bcd65463571a0 -
Trigger Event:
release
-
Statement type:
File details
Details for the file docctl-0.3.1-py3-none-any.whl.
File metadata
- Download URL: docctl-0.3.1-py3-none-any.whl
- Upload date:
- Size: 40.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f344d05cfa9e04ee23804afcd0b3df6ec5e684f6e5502aa3a93bfda5d928c6f
|
|
| MD5 |
eb048364c2fbe7faee877ec91e2831de
|
|
| BLAKE2b-256 |
3fbd5aa21ae94fcdcacd1bf9ad061e2a8571d0bd2503251d4e9299d8c9225e6d
|
Provenance
The following attestation bundles were made for docctl-0.3.1-py3-none-any.whl:
Publisher:
publish-pypi.yml on GeorgesAlkhouri/docctl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
docctl-0.3.1-py3-none-any.whl -
Subject digest:
6f344d05cfa9e04ee23804afcd0b3df6ec5e684f6e5502aa3a93bfda5d928c6f - Sigstore transparency entry: 1185765237
- Sigstore integration time:
-
Permalink:
GeorgesAlkhouri/docctl@65cc5abf8ea681733bb31662269bcd65463571a0 -
Branch / Tag:
refs/tags/v0.3.1 - Owner: https://github.com/GeorgesAlkhouri
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@65cc5abf8ea681733bb31662269bcd65463571a0 -
Trigger Event:
release
-
Statement type: