Configuration Reference
Full reference for ~/.parallel-research/config.toml. All sections are optional — missing fields use defaults. Old configs without newer sections load without errors.
Full Example
# ─────────────────────────────────────────
# LLM Provider
# ─────────────────────────────────────────
[llm]
provider = "deepseek"
base_url = "https://api.deepseek.com"
api_key = "sk-your-key"
model = "deepseek-v4-flash"
max_tokens = 8192
temperature = 0.7
# ─────────────────────────────────────────
# Agents
# ─────────────────────────────────────────
[agent]
max_depth = 2
max_agents = 20
max_iterations = 50
timeout_seconds = 600
use_multiprocess = false
# ─────────────────────────────────────────
# Search
# ─────────────────────────────────────────
[search]
backend = "hybrid"
[search.linkup]
api_key = "..."
[search.exa]
api_key = "..."
[search.tavily]
api_key = "..."
[search.serper]
api_key = "..."
[search.brave]
api_key = "..."
[search.parallel]
api_key = "..."
# ─────────────────────────────────────────
# Context Management
# ─────────────────────────────────────────
[context]
context_window = 128000
compact_threshold = 0.50
tool_output_max_bytes = 50000
tool_output_max_lines = 2000
turn_budget_bytes = 200000
# ─────────────────────────────────────────
# Output
# ─────────────────────────────────────────
[output]
dir = "./research-output"
# ─────────────────────────────────────────
# Export
# ─────────────────────────────────────────
[export]
format = "html"
# ─────────────────────────────────────────
# Notifications
# ─────────────────────────────────────────
[notifications]
webhook_url = ""
email_to = ""
email_from = ""
smtp_host = ""
smtp_port = 587
smtp_username = ""
smtp_password = ""
telegram_bot_token = ""
telegram_chat_id = ""
# ─────────────────────────────────────────
# Contacts
# ─────────────────────────────────────────
[contacts]
db_path = "./contacts.db"
pg_url = ""
# ─────────────────────────────────────────
# CRM Sync
# ─────────────────────────────────────────
[crm]
provider = ""
domain = ""
api_key = ""
# ─────────────────────────────────────────
# MCP Servers
# ─────────────────────────────────────────
[[mcp.servers]]
name = "web-search"
transport = "stdio"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-web-search"]
[[mcp.servers]]
name = "remote-tools"
transport = "http"
url = "https://mcp.example.com"[llm]
LLM provider settings. The api_key field is required for operation.
| Field | Type | Default | Description |
|---|---|---|---|
provider | string | "deepseek" | Provider name |
base_url | string | "https://api.deepseek.com" | API endpoint |
api_key | string | "" | Required for operation |
model | string | "deepseek-chat" | Model identifier |
max_tokens | u32 | 8192 | Max response tokens |
temperature | f32 | 0.7 | Generation temperature |
[agent]
Agent orchestration settings: depth limits, concurrency, and timeouts.
| Field | Type | Default | Description |
|---|---|---|---|
max_depth | u32 | 2 | Max sub-agent nesting depth |
max_agents | u32 | 20 | Max agents per session |
max_iterations | u32 | 50 | Max LLM iterations per agent |
timeout_seconds | u64 | 600 | Session timeout (seconds) |
use_multiprocess | bool | false | Isolate agents in separate processes |
[search]
Search backend configuration. Sub-sections [search.*] contain API keys per provider. DuckDuckGo requires no key.
| Field | Type | Default | Description |
|---|---|---|---|
backend | string | "hybrid" | Search backend to use |
Backend Values
| Value | Description |
|---|---|
linkup | Linkup search API |
exa | Exa neural search |
tavily | Tavily search API |
serper | Serper (Google) API |
brave | Brave Search API |
parallel | Parallel search API |
duckduckgo | DuckDuckGo (no key needed) |
hybrid | First configured backend with results (order: linkup → exa → tavily → serper → brave → parallel → duckduckgo) |
smart | All configured backends in parallel, dedup by URL, reciprocal rank fusion ranking |
[context]
Context management and token budget settings.
| Field | Type | Default | Description |
|---|---|---|---|
context_window | u32 | 128000 | Context window size (tokens) |
compact_threshold | f32 | 0.50 | Compression trigger (fraction of window) |
tool_output_max_bytes | u32 | 50000 | Tool output limit (bytes) |
tool_output_max_lines | u32 | 2000 | Tool output limit (lines) |
turn_budget_bytes | u32 | 200000 | Aggregate budget per turn (bytes) |
[output]
| Field | Type | Default | Description |
|---|---|---|---|
dir | string | "./research-output" | Output directory for results |
[export]
| Field | Type | Default | Description |
|---|---|---|---|
format | string | "html" | pdf | html | json | docx. Unknown format falls back to HTML. PDF/DOCX require pandoc. |
[notifications]
Notifications are sent only when the corresponding field is non-empty.
| Field | Type | Default | Description |
|---|---|---|---|
webhook_url | string | "" | URL for JSON POST on completion |
email_to | string | "" | Email recipient |
email_from | string | "" | Email sender (default: parallel-research@localhost) |
smtp_host | string | "" | SMTP server (default: localhost) |
smtp_port | u16 | 587 | SMTP port |
smtp_username | string | "" | SMTP login |
smtp_password | string | "" | SMTP password |
telegram_bot_token | string | "" | Telegram bot token |
telegram_chat_id | string | "" | Telegram chat ID for notifications |
[contacts]
| Field | Type | Default | Description |
|---|---|---|---|
db_path | string | "./contacts.db" | SQLite database path |
pg_url | string | "" | PostgreSQL URL (non-empty → use PG instead of SQLite) |
[crm]
CRM synchronization. Leave provider empty to disable.
| Field | Type | Default | Description |
|---|---|---|---|
provider | string | "" | amocrm | bitrix24 | hubspot | empty |
domain | string | "" | Domain/subdomain (amoCRM, Bitrix24) |
api_key | string | "" | API key/token |
[[mcp.servers]]
Array of MCP (Model Context Protocol) servers for extending tool capabilities.
| Field | Type | Description |
|---|---|---|
name | string | Server name |
transport | string | stdio | http |
command | string? | Command (for stdio transport) |
args | string[] | Arguments (for stdio transport) |
url | string? | URL (for http transport) |
Environment Variables
Environment variables override config file values. Prefix: PARALLEL_.
Priority Order
- 1Environment variablesHighest priority
PARALLEL_*prefixed variables - 2Config file
~/.parallel-research/config.toml - 3DefaultsLowest priority
Built-in default values
| Environment Variable | Config Equivalent | Description |
|---|---|---|
PARALLEL_LLM_API_KEY | llm.api_key | LLM API key |
PARALLEL_LLM_PROVIDER | llm.provider | LLM provider name |
PARALLEL_LLM_MODEL | llm.model | Model identifier |
PARALLEL_LLM_BASE_URL | llm.base_url | API endpoint |
PARALLEL_SEARCH_BACKEND | search.backend | Search backend |
PARALLEL_VISION_API_BASE | — | Vision model API base URL |
PARALLEL_VISION_API_KEY | — | Vision model API key |
PARALLEL_VISION_MODEL | — | Vision model name |
CLI Config Commands
Manage configuration from the command line.
Show Current Config
parallel config showSet a Value
parallel config set llm.api_key "sk-..."Uses dot notation for nested keys: section.field.
Backwards Compatibility
All new sections use #[serde(default)]. Configs from older versions (with only [llm], [agent], [search]) load correctly — new fields receive default values automatically.