Skip to main content

DeepDive

License: MIT Python Tests Powered by actants

A local-first AI research agent. Asks a question, searches the web (or your own documents), reads the sources, and writes a cited report. Every claim is checked against a verbatim excerpt from its source — claims the validator can't verify are dropped.

pip install deepdive-research
ollama pull llama3.2
deepdive research "When did Apollo 11 land on the Moon?" -o report.md

No API key required. Runs on Ollama by default.


Features

Span-grounded citations

The claim extractor returns each claim alongside the verbatim excerpt that supports it. A post-extraction validator re-checks every excerpt against the fetched source page via substring match. Claims that don't ground get dropped from the report.

The Markdown report ends with an Evidence appendix listing every claim and its verbatim source excerpt:

**1.** Apollo 11 landed on the Moon on July 20, 1969.
   - [✓] [Apollo 11 - Wikipedia](https://en.wikipedia.org/wiki/Apollo_11)
     > Apollo 11 (July 16-24, 1969) was the American spaceflight that
     > first landed humans on the Moon, and the fifth crewed mission of
     > NASA's Apollo program.

Trace and replay

Every research run can record a trace of every LLM call, search, and scrape. Replay reconstructs the report offline, byte-for-byte.

deepdive research "..." -o report.md         # auto-records report.md.trace.jsonl
deepdive replay report.md.trace.jsonl        # produces an identical report, no network
deepdive trace verify report.md.trace.jsonl  # re-validates every excerpt
deepdive inspect report.md.trace.jsonl       # event counts

Source restriction

Restrict search to your own allow/block lists of hostnames. Subdomains match; wildcards like *.gov are supported.

deepdive research "..." --allow-domains arxiv.org,nih.gov
deepdive research "..." --block-domains medium.com,*.substack.com

Local corpus and offline mode

Index your own documents into a sqlite-vec database, then research them with no outbound network calls.

deepdive index ~/Documents/papers -o ~/.local/share/deepdive/index.db
deepdive research "..." --corpus ~/.local/share/deepdive/index.db --offline

In --offline mode the LLM endpoint must be loopback (Ollama is fine; cloud APIs raise) and non-loopback URLs are dropped at the scraper level.

Multi-format export

deepdive research "..." -o report.md                      # markdown (default)
deepdive research "..." -o paper.tex --export latex       # +references.bib
deepdive research "..." -o data.json --export json
deepdive research "..." -o note.md --export obsidian      # YAML + [[wikilinks]]
deepdive research "..." -o page.md --export notion
deepdive research "..." -o refs.bib --export bibtex

Use as an MCP server

Expose DeepDive's research tool to any MCP-compatible client.

deepdive serve-mcp                         # stdio
deepdive serve-mcp --http --port 8765      # Streamable HTTP

Install

pip install "deepdive-research[all]"     # everything: MCP server, corpus indexing
pip install "deepdive-research[mcp]"     # MCP server only
pip install "deepdive-research[corpus]"  # local corpus indexing only

ollama pull llama3.2           # tool-capable LLM (default)
ollama pull nomic-embed-text   # embeddings (only needed for --corpus)

Architecture

DeepDive is built on actants. The pipeline:

question
   │
   ▼  query generation              (LLM)
search backend                       (DuckDuckGo / SearxNG / local corpus)
   │                                 │  optional: --allow / --block filter
   ▼  scraper                        (web / corpus / offline)
claim extractor                      (LLM, returns excerpts)
   │
   ▼  span-grounding validator       (drops claims without verbatim excerpts)
cross-reference
   │
   ▼  report builder                 (LLM)
Markdown / LaTeX / BibTeX / JSON / Obsidian / Notion

Every external call is wrapped in optional recorders, which is how trace and replay work.


What's not in scope

  • Hosted SaaS or paid tier — DeepDive is open-source and runs on your hardware
  • Multi-modal output (charts, infographics)
  • Conversational follow-up on a single report — single-shot research only
  • Browser automation
  • Code execution as a research step

Status

Part of Open Intelligence Labs.

Metadata

Release files for deepdive-research 0.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for deepdive-research 0.3.2
File Size Uploaded Provenance Actions
deepdive_research-0.3.2.tar.gz 58.9 kB With provenance Details for deepdive_research-0.3.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for deepdive-research 0.3.2
File Interpreter ABI Platform Actions
deepdive_research-0.3.2-py3-none-any.whl Python 3 none any Details for deepdive_research-0.3.2-py3-none-any.whl

Total release size: 112.9 kB

Release files / deepdive_research-0.3.2.tar.gz

Download URL deepdive_research-0.3.2.tar.gz
Size 58.9 kB
Tags Source
SHA-256 checksum
How to use checksums
94861c4c7a6f92dc72cf4ae338aa14173c6d2b7b82246cbc770796aa20271e47
BLAKE2b-256 checksum
How to use checksums
5f98705497f107a88abe6890e9b38c92703e6eb7aff1811ac0c799f7316fb53c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.

Transparency log

Release files / deepdive_research-0.3.2-py3-none-any.whl

Download URL deepdive_research-0.3.2-py3-none-any.whl
Size 54.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
91aabcc50897a2c9dd83cac9493731d9416ed8d5a14a447108c70cd4c06aa0b1
BLAKE2b-256 checksum
How to use checksums
5dcf20e196674c1e7380831c81cfd33fe4b228d09f7d05a021c1ea52571239b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.

Transparency log

Security for deepdive-research 0.3.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for deepdive_research-0.3.2.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.3.2 This release

2 release files Full provenance

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