Configuration

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

~/.parallel-research/config.toml
# ─────────────────────────────────────────
# 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.

FieldTypeDefaultDescription
providerstring"deepseek"Provider name
base_urlstring"https://api.deepseek.com"API endpoint
api_keystring""Required for operation
modelstring"deepseek-chat"Model identifier
max_tokensu328192Max response tokens
temperaturef320.7Generation temperature

[agent]

Agent orchestration settings: depth limits, concurrency, and timeouts.

FieldTypeDefaultDescription
max_depthu322Max sub-agent nesting depth
max_agentsu3220Max agents per session
max_iterationsu3250Max LLM iterations per agent
timeout_secondsu64600Session timeout (seconds)
use_multiprocessboolfalseIsolate agents in separate processes

[context]

Context management and token budget settings.

FieldTypeDefaultDescription
context_windowu32128000Context window size (tokens)
compact_thresholdf320.50Compression trigger (fraction of window)
tool_output_max_bytesu3250000Tool output limit (bytes)
tool_output_max_linesu322000Tool output limit (lines)
turn_budget_bytesu32200000Aggregate budget per turn (bytes)

[output]

FieldTypeDefaultDescription
dirstring"./research-output"Output directory for results

[export]

FieldTypeDefaultDescription
formatstring"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.

FieldTypeDefaultDescription
webhook_urlstring""URL for JSON POST on completion
email_tostring""Email recipient
email_fromstring""Email sender (default: parallel-research@localhost)
smtp_hoststring""SMTP server (default: localhost)
smtp_portu16587SMTP port
smtp_usernamestring""SMTP login
smtp_passwordstring""SMTP password
telegram_bot_tokenstring""Telegram bot token
telegram_chat_idstring""Telegram chat ID for notifications

[contacts]

FieldTypeDefaultDescription
db_pathstring"./contacts.db"SQLite database path
pg_urlstring""PostgreSQL URL (non-empty → use PG instead of SQLite)

[crm]

CRM synchronization. Leave provider empty to disable.

FieldTypeDefaultDescription
providerstring""amocrm | bitrix24 | hubspot | empty
domainstring""Domain/subdomain (amoCRM, Bitrix24)
api_keystring""API key/token

[[mcp.servers]]

Array of MCP (Model Context Protocol) servers for extending tool capabilities.

FieldTypeDescription
namestringServer name
transportstringstdio | http
commandstring?Command (for stdio transport)
argsstring[]Arguments (for stdio transport)
urlstring?URL (for http transport)

Environment Variables

Environment variables override config file values. Prefix: PARALLEL_.

Priority Order

  1. 1
    Environment variablesHighest priority

    PARALLEL_* prefixed variables

  2. 2
    Config file

    ~/.parallel-research/config.toml

  3. 3
    DefaultsLowest priority

    Built-in default values

Environment VariableConfig EquivalentDescription
PARALLEL_LLM_API_KEYllm.api_keyLLM API key
PARALLEL_LLM_PROVIDERllm.providerLLM provider name
PARALLEL_LLM_MODELllm.modelModel identifier
PARALLEL_LLM_BASE_URLllm.base_urlAPI endpoint
PARALLEL_SEARCH_BACKENDsearch.backendSearch backend
PARALLEL_VISION_API_BASEVision model API base URL
PARALLEL_VISION_API_KEYVision model API key
PARALLEL_VISION_MODELVision model name

CLI Config Commands

Manage configuration from the command line.

Show Current Config

bash
parallel config show

Set a Value

bash
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.