Find, summarize, and manage documents—local search by default
Full-text search and retrieval with local LLM summarization. Writer tools for document creation and indexing require approval gates.
What Document Tools do
Document Tools provide full-text search, retrieval, and summarization over your local documents. They work seamlessly with vector memory for RAG-style workflows. Writer tools let you create new documents or index files, but require approval to prevent accidental overwrites.
Reader capabilities
- Full-text search with filters (date, author, tags)
- Document retrieval with metadata
- Chunk summarization via local LLM
- Integration with vector memory for semantic search
Writer capabilities Gated
- Write new documents (requires approval)
- Index files and blobs (gated)
- Update or delete documents (gated)
Who benefits from Document Tools
Individuals
Turn inbox clutter and meeting notes into actionable summaries
Teams & Managers
Draft SOPs and policy updates with review workflows
Developers & IT
Predictable schemas for search and writes; RAG-ready
Security & Compliance
Write gates and explicit ingest allowlists
How it works
Search: Full-text or semantic
Use docs.search_docs with keywords or filters. Optionally combine with vector search for semantic recall.
Retrieve: Get document content
Call docs.get_doc to fetch full content with metadata (author, date, tags).
Summarize: Local LLM processing
Pass retrieved content to the LLM engine for chunk summarization or question answering.
Optional: Write or index (gated)
Use docs.write_doc or docs.index_blob to create or index documents. Both require approval.
Example workflows
Summarize monthly meeting notes
Runs entirely offline"Summarize all meeting notes from the last 30 days"
- docs.search_docs (filter: last 30 days, tag: "meeting")
- docs.get_doc (retrieve each note)
- llm.generate (summarize key points)
Bulleted summary with action items—no network calls, fully private
Draft SOP update
Approval before saving"Update the onboarding SOP to include new security training"
- docs.search_docs (find existing onboarding SOP)
- docs.get_doc (retrieve current version)
- llm.generate (draft updated section)
- docs.write_doc (save new version) — pauses for approval
Updated SOP with tracked changes and approval timestamp
Private RAG over local docs
Runs entirely offline"What did we decide about the Q3 roadmap?"
- llm.embed (query text)
- vector.search (find relevant docs)
- docs.get_doc (retrieve top matches)
- llm.generate (answer with context)
Answer with citations—all embeddings and generation happen locally
Technical details
Key tools
- docs.search_docs
- docs.get_doc
- docs.write_doc (gated)
- docs.index_blob (gated)
- docs.delete_doc (gated)
Configuration
INDEX_PATHS— directories to indexMAX_BLOB_SIZE— max file size for indexingCHUNKING_PARAMS— chunk size and overlapWRITE_ENABLE— false (default)
Performance notes
- Search: 50-200ms for medium document collections
- Retrieval: 10-50ms per document
- Indexing: depends on file size and chunking params
Observability
- Index size and document count
- Query latency and result counts
- Write approvals and rejections
- Indexing throughput
Security posture
Writes disabled by default
All write operations require explicit enablement and approval. Read-only mode is the default.
Explicit ingest allowlists
Indexing is scoped to allowlisted paths. Attempts to index files outside the allowlist are rejected.
Audit logs
Every search, retrieval, write, and index operation is logged with timestamps and approval decisions.
Local-first by default
All search and retrieval happens locally. No network calls unless explicitly configured.
Roadmap & status
Current features
- Full-text search and retrieval
- Chunk summarization via local LLM
- Gated writes and indexing
Coming soon
- Advanced ingestion pipelines (PDF, DOCX, etc.)
- Export formats (Markdown, JSON, CSV)
- Document versioning and change tracking
Frequently asked questions
Ready to search and manage documents locally?
Get started with Document Tools in minutes. Everything runs on your machine by default.