Open-source multi-provider AI deep research CLI (BYOK)
Project description
parallect
Multi-provider AI deep research from the command line. Bring your own keys.
parallect fans a research query out to multiple frontier AI providers in parallel — Perplexity, Gemini, OpenAI, Grok, Anthropic, plus local models via Ollama and LM Studio — then synthesizes their outputs into a single report with cross-referenced citations, extracted claims, and consensus/conflict detection. The result is packaged as a portable, signed .prx archive you can read in any text editor, diff against another run, or publish to prxhub.
$ parallect research "What are the leading theories on dark matter?"
Fanning out to: perplexity, gemini, openai, anthropic
[████████████████] 4/4 providers 4m 32s $0.18
Synthesizing with anthropic ...
Extracting 47 claims from 4 reports ...
✓ Saved to research.prx (127 KB, signed)
$ parallect research "..." - dark matter theories
→ 4 providers · 47 claims · 23 sources · 92% consensus
Why?
- No single provider knows everything. Different models see different sources, reason differently, and disagree in useful ways. Ask several at once, then see where they agree.
- Portable, signed output. Every run saves to an open
.prxarchive — plain text under the hood, verifiable via Ed25519, shareable via prxhub. - BYOK. Your API keys, your bill, your data. No intermediate service sees your queries.
- Local-first option. Run entirely offline against Ollama or LM Studio if you don't want to call frontier APIs.
- Scriptable. Stable CLI, structured output, clean exit codes. Pipe it, chain it, call it from your editor.
Install
From PyPI:
pip install parallect-cli
Or with uv:
uv tool install parallect-cli
Requires Python 3.10+.
Rename note (0.3.0): the canonical PyPI distribution is now
parallect-cli. The legacyparallectname still works as a compatibility shim (pip install parallecttransparently installsparallect-cliand emits aDeprecationWarningon import). The Python import name (import parallect), the CLI command (parallect …), and the config directory (~/.config/parallect/) are unchanged. See parallect/prx-ecosystem#3 for context.
Quick start
# One-time setup — interactive TUI configures providers, keys, and defaults
parallect config
# Run research
parallect research "What are the leading theories on dark matter?"
# Pick specific providers
parallect research "quantum computing progress 2025" -p perplexity,openai,anthropic
# Deep research mode — premium models, higher cost, deeper reasoning
parallect research "CRISPR gene therapy developments" --deep
# Offline — Ollama or LM Studio only
parallect research "explain transformers" --local
# Follow-on research rooted in a prior bundle
parallect continue output.prx "What about practical applications?"
Commands
| Command | Purpose |
|---|---|
parallect config |
Interactive TUI for providers, API keys, backends, plugins |
parallect research <query> |
Run a new research query |
parallect continue <bundle> <query> |
Follow-on research rooted in an existing bundle |
parallect enhance <bundle> |
Send a bundle to the hosted Parallect API for claim extraction + evidence graph |
parallect jobs <subcommand> |
Manage async SaaS-mode jobs (status, download) |
parallect plugins <subcommand> |
Manage data-source and pipeline plugins (list, status, index, config) |
Run parallect <command> --help for full flags.
Providers
| Provider | Default model | Deep model | Env var |
|---|---|---|---|
| Perplexity | sonar-deep-research |
— | PARALLECT_PERPLEXITY_API_KEY |
| OpenAI | gpt-4o-mini |
o3-deep-research |
PARALLECT_OPENAI_API_KEY |
| Gemini | gemini-2.5-flash |
gemini-2.5-pro |
PARALLECT_GOOGLE_API_KEY |
| Anthropic | claude-sonnet-4 |
claude-opus-4 |
PARALLECT_ANTHROPIC_API_KEY |
| Grok | grok-3 |
grok-4 |
PARALLECT_XAI_API_KEY |
| Ollama | llama3.2 |
— | (local, no key) |
| LM Studio | default |
— | (local, no key) |
| LDR | llama3.2 |
— | (local; pip install "parallect-cli[ldr]") |
Install optional provider SDKs with the all extra:
pip install "parallect-cli[all]"
Configuration
parallect config writes to ~/.config/parallect/config.toml (or the platform equivalent). Precedence, highest to lowest:
- Explicit CLI flags
- Environment variables (
PARALLECT_*prefix) - Project-local
parallect.toml - User config
- Defaults
Data source plugins
Plugins let parallect search and cite your local content alongside web sources. Built-in plugins:
| Plugin | Purpose |
|---|---|
filesystem |
Index a directory of markdown / text / PDF |
obsidian |
Index an Obsidian vault, respecting links and graph ranking |
prior_research |
Reuse prior .prx bundles as a knowledge base |
prxhub |
Pull from a prxhub collection |
Add one via parallect config → "Data source plugins" → "Add", or edit config.toml directly.
Pipeline plugins
External Python packages can hook into the research pipeline at four points:
class ResearchPlugin:
async def pre_research(self, query: str, providers: list[str]) -> str: ...
async def post_provider(self, provider: str, result: Any) -> Any: ...
async def post_synthesis(self, synthesis: Any) -> Any: ...
async def post_bundle(self, bundle: Any) -> Any: ...
Register via the parallect.plugins entry point. See docs/PLUGINS.md for the full protocol.
Output format
Every run saves to a .prx bundle — a gzipped tar archive:
research.prx
├── manifest.json JSON-LD envelope: providers, cost, provenance
├── manifest.jws Ed25519 signature of manifest hash
├── public-key.jwk Public key for standalone verification
├── query.md The research question
├── providers/
│ ├── perplexity/report.md + meta.json
│ ├── gemini/report.md + meta.json
│ └── ...
├── synthesis/
│ ├── report.md Unified cross-provider synthesis
│ └── claims.json Extracted atomic claims with provider attribution
├── sources/registry.json Deduplicated, quality-scored sources
├── evidence/graph.json Claim-to-source graph
└── provenance/graph.jsonld W3C PROV-O provenance
Every file is human-readable text or JSON — tar -xzf research.prx and read in any editor.
Use the prx CLI to read, validate, diff, merge, sign, and publish bundles.
Documentation
- Quickstart — get running in 5 minutes
- Architecture — how the orchestrator works
- Providers — write a custom provider adapter
- Plugins — hook into the pipeline or add a data source
Development
git clone https://github.com/parallect/parallect.git
cd parallect
uv sync --group dev
uv run pytest tests/
uv run ruff check src/ tests/
Contributing
Contributions welcome — see CONTRIBUTING.md. For security reports, email security@parallect.ai.
License
MIT — see LICENSE.
Built by SecureCoders. A hosted managed version is available at parallect.ai — same multi-provider pipeline, with billing, team workspaces, and a web dashboard.
Project details
Release history Release notifications | RSS feed
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 parallect_cli-0.3.0.tar.gz.
File metadata
- Download URL: parallect_cli-0.3.0.tar.gz
- Upload date:
- Size: 605.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6cfd87e38b5507a8e9d8fa1ec8bd00e3567dd6b0f7c93be17c9b33ee9ec65f1
|
|
| MD5 |
569b12643e4439a854ed23bd6085ce15
|
|
| BLAKE2b-256 |
42ba4e5919bd7c291e1267a9e25100246acff57ae687ca0bc4bdda94d4e935ed
|
Provenance
The following attestation bundles were made for parallect_cli-0.3.0.tar.gz:
Publisher:
release.yml on parallect/parallect
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
parallect_cli-0.3.0.tar.gz -
Subject digest:
d6cfd87e38b5507a8e9d8fa1ec8bd00e3567dd6b0f7c93be17c9b33ee9ec65f1 - Sigstore transparency entry: 1358115703
- Sigstore integration time:
-
Permalink:
parallect/parallect@67c50f78b45a0db9ee4c5ff57499bf272837a81b -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/parallect
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@67c50f78b45a0db9ee4c5ff57499bf272837a81b -
Trigger Event:
push
-
Statement type:
File details
Details for the file parallect_cli-0.3.0-py3-none-any.whl.
File metadata
- Download URL: parallect_cli-0.3.0-py3-none-any.whl
- Upload date:
- Size: 116.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e1f4d7d22fde2c1320710c68fa0b67f375a0325d31923e31350172266d65e41
|
|
| MD5 |
c10304b6fee2819601d82021971ca534
|
|
| BLAKE2b-256 |
87212571f7e3bbc78f582e48077ed3cfe930b2976bdd0dfb26b9e12a87f50362
|
Provenance
The following attestation bundles were made for parallect_cli-0.3.0-py3-none-any.whl:
Publisher:
release.yml on parallect/parallect
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
parallect_cli-0.3.0-py3-none-any.whl -
Subject digest:
1e1f4d7d22fde2c1320710c68fa0b67f375a0325d31923e31350172266d65e41 - Sigstore transparency entry: 1358115892
- Sigstore integration time:
-
Permalink:
parallect/parallect@67c50f78b45a0db9ee4c5ff57499bf272837a81b -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/parallect
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@67c50f78b45a0db9ee4c5ff57499bf272837a81b -
Trigger Event:
push
-
Statement type: