Конфигурация

Справочник конфигурации

Полный справочник по ~/.fathom/config.toml. Все секции опциональны — отсутствующие поля используют значения по умолчанию. Старые конфиги без новых секций загружаются без ошибок.

Full reference for ~/.fathom/config.toml. All sections are optional — missing fields use defaults. Old configs without newer sections load without errors.

Полный пример

~/.fathom/config.toml
# ─────────────────────────────────────────
# LLM Provider
# ─────────────────────────────────────────
[llm]
provider    = "deepseek"
base_url    = "https://api.deepseek.com"
api_key     = "sk-your-key"
model       = "deepseek-chat"
fast_model  = ""
max_tokens  = 8192
temperature = 0.7

# ─────────────────────────────────────────
# Agents
# ─────────────────────────────────────────
[agent]
max_depth         = 2
max_agents        = 20
max_iterations    = 50
timeout_seconds   = 600
use_multiprocess  = false
stall_warn_seconds  = 450
stall_kill_seconds  = 1200
session_token_limit = 0
replan_rounds       = 1
approval_tools      = ["save_contacts", "git_push"]
approval_fallback   = "allow"
approval_timeout_seconds = 300

# ─────────────────────────────────────────
# 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
context_window_profile = "low"
compact_threshold     = 0.50
tool_output_max_bytes = 50000
tool_output_max_lines = 2000
turn_budget_bytes     = 200000

# ─────────────────────────────────────────
# Memory
# ─────────────────────────────────────────
[memory]
enabled           = true
db_path           = ""
embeddings        = "auto"
embedding_model   = "text-embedding-3-small"
semantic_weight   = 0.7
top_k             = 5
min_score         = 0.25
temporal_decay    = 0.01
auto_digest       = true
llm_classify      = true
rerank            = false
gc_ttl_days       = 30
gc_compact_above  = 200
gc_auto           = false

# ─────────────────────────────────────────
# Hooks
# ─────────────────────────────────────────
[[hooks]]
event     = "PreToolUse"
command   = "/usr/local/bin/my-guard.sh"
tool      = "shell"
timeout_ms = 3000

# ─────────────────────────────────────────
# 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-провайдера. Для работы обязателен api_key.

ПолеТипПо умолчаниюОписание
providerstring“deepseek”Provider name
base_urlstring“https://api.deepseek.com”API endpoint
api_keystring“”Required for operation
modelstring“deepseek-chat”Model identifier
fast_modelstring“”Cheap/fast model for entity extraction, memory absorb, reranking. Empty = reuse model
max_tokensu328192Max response tokens
temperaturef320.7Generation temperature

[agent]

Настройки оркестрации агентов: лимиты глубины, конкурентность и таймауты.

ПолеТипПо умолчаниюОписание
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
max_concurrent_childrenu324Максимум дочерних агентов одного родителя, работающих одновременно
stall_warn_secondsu64450Секунды нулевого прогресса до предупреждения о зависании (0 отключает)
stall_kill_secondsu641200Секунды нулевого прогресса до отмены агента (0 отключает)
deny_toolsmap{}Списки запрещённых инструментов по ролям: {"verifier": ["shell", "save_contacts"]}
role_modelsmap{}Переопределение моделей по ролям: {"researcher": "deepseek-chat", "analyst": "deepseek-reasoner"}
session_token_limitu640Бюджет токенов на сессию; 0 отключает. Fan-out останавливается при достижении
replan_roundsu321Goal Mode: максимум доборных раундов после начального fan-out (0 отключает)
approval_toolsstring[][“save_contacts”, “git_push”]Инструменты, требующие одобрения оператора перед выполнением
approval_fallbackstring“allow”Вердикт при отсутствии оператора: "allow" или "deny"
approval_timeout_secondsu64300Секунды ожидания одобрения оператора до применения фолбэка

[context]

Управление контекстом и настройки токен-бюджета.

ПолеТипПо умолчаниюОписание
context_windowu32128000Context window size (tokens)
context_window_profilestring“low”Профиль окна: low (128K) или max (256K). Явное context_window имеет приоритет
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]

ПолеТипПо умолчаниюОписание
dirstring“./research-output”Каталог вывода результатов

[export]

ПолеТипПо умолчаниюОписание
formatstring“html”pdf | html | json | docx. Неизвестный формат откатывается к HTML. PDF/DOCX требуют pandoc.

[notifications]

Уведомления отправляются только когда соответствующее поле непустое.

ПолеТипПо умолчаниюОписание
webhook_urlstring“”URL для JSON POST по завершении
email_tostring“”Получатель email
email_fromstring“”Отправитель email (по умолчанию: fathom@localhost)
smtp_hoststring“”SMTP-сервер (по умолчанию: localhost)
smtp_portu16587SMTP-порт
smtp_usernamestring“”SMTP-логин
smtp_passwordstring“”SMTP-пароль
telegram_bot_tokenstring“”Токен Telegram-бота
telegram_chat_idstring“”ID чата Telegram для уведомлений

[contacts]

ПолеТипПо умолчаниюОписание
db_pathstring“./contacts.db”Путь к базе SQLite
pg_urlstring“”PostgreSQL URL (непустой → использовать PG вместо SQLite)

[crm]

Синхронизация CRM. Оставьте provider пустым, чтобы отключить.

ПолеТипПо умолчаниюОписание
providerstring“”amocrm | bitrix24 | hubspot | пусто
domainstring“”Домен/поддомен (amoCRM, Bitrix24)
api_keystring“”API-ключ/токен

[memory]

Настройки долгосрочной семантической памяти. Подсистема памяти хранит факты в SQLite с гибридным вектор+BM25 поиском, графом сущностей и автоматическим обслуживанием.

ПолеТипПо умолчаниюОписание
enabledbooltrueГлавный переключатель. При false база памяти не открывается и memory_* инструменты не регистрируются
db_pathstring“”Путь к SQLite-файлу памяти. Пусто = ~/.fathom/memory.db
embeddingsstring“auto”Бэкенд эмбеддингов: auto, openai или tfidf
embedding_base_urlstring“”OpenAI-совместимый эндпоинт эмбеддингов. Пусто = использовать llm.base_url
embedding_api_keystring“”API-ключ для эндпоинта эмбеддингов. Пусто = использовать llm.api_key
embedding_modelstring“text-embedding-3-small”ID модели эмбеддингов (OpenAI-совместимый бэкенд)
semantic_weightf320.7Вес гибридного поиска: score = w*semantic + (1-w)*bm25
top_ku325Количество записей, возвращаемых поиском/дайджестом
min_scoref320.25Минимальный гибридный скор для результата поиска
temporal_decayf320.01Линейный распад свежести в день (0 отключает)
auto_digestbooltrueИнжектировать тематический дайджест в system prompt топ-агентов
llm_classifybooltrueИспользовать LLM для классификации новых фактов (duplicate/supersede/contradict/related)
rerankboolfalseВторой проход LLM-реранкинга результатов поиска (+1 LLM-вызов на поиск)
gc_ttl_daysu3230GC: архивировать неиспользованные run-факты старше этого срока
gc_compact_aboveu32200GC: уплотнить scope-группу, когда она содержит больше этого количества активных строк
gc_confidence_decay_ratef640.02GC: ежедневное снижение достоверности неактивных записей
gc_confidence_thresholdf640.15GC: порог достоверности, ниже которого запись архивируется
gc_autoboolfalseАвто-запуск GC + distill по таймеру (каждый час)

[[hooks]]

Хуки жизненного цикла — подпроцессы, вызываемые в определённых точках агентного цикла. JSON на stdin, JSON-вердикт на stdout. Все хуки best-effort: таймаут, ошибка запуска или неразборчивый вердикт = allow.

ПолеТипПо умолчаниюОписание
eventstringrequiredPreToolUse, PostToolUse или Stop
commandstringrequiredКоманда для запуска (получает JSON на stdin, отвечает JSON на stdout)
argsstring[][]Аргументы команды
toolstring“”Срабатывать только для этого инструмента (пусто = все). Применимо к Pre/PostToolUse
timeout_msu645000Таймаут хука в миллисекундах (минимум 500мс в рантайме)

События хуков

ПолеВход (JSON на stdin)Выход (JSON на stdout)
PreToolUse{“event”:“PreToolUse”,“tool”:“…”,“args”:…}{“decision”:“allow|deny”,“reason”:“…”}
PostToolUse{“event”:“PostToolUse”,“tool”:“…”,“result”:“…”,“success”:bool}{“append_context”:“…”}
Stop{“event”:“Stop”,“final_summary”:“…”}{“continue”:bool,“reason”:“…”}

Stop-хуки могут принудительно продолжить до 3 раз (MAX_STOP_CONTINUATIONS). PostToolUse append_context значения конкатенируются и оборачиваются в [hook context].

[[mcp.servers]]

Массив MCP (Model Context Protocol) серверов для расширения возможностей инструментов.

ПолеТипОписание
namestringИмя сервера
transportstringstdio | http
commandstring?Команда (для stdio транспорта)
argsstring[]Аргументы (для stdio транспорта)
urlstring?URL (для http транспорта)

Переменные окружения

Переменные окружения переопределяют значения файла конфига. Поддерживаемые переменные включают PR_CONFIG, FATHOM_API_KEYS и FATHOM_RATE_LIMIT.

Порядок приоритета

  1. 1
    Переменные окруженияНаивысший приоритет

    явные переменные, например PR_CONFIG, PR_MEMORY_DB и PARALLEL_CDP_ENDPOINT

  2. 2
    Файл конфига

    ~/.fathom/config.toml

  3. 3
    Значения по умолчаниюНизший приоритет

    Встроенные значения по умолчанию

Переменная окруженияЭквивалент в конфигеОписание
LLM_API_KEYllm.api_keyLLM API-ключ
LLM_PROVIDERllm.providerИмя LLM-провайдера
LLM_MODELllm.modelИдентификатор модели
LLM_BASE_URLllm.base_urlAPI-эндпоинт
SEARCH_BACKENDsearch.backendПоисковый бэкенд
PARALLEL_VISION_API_BASE—Базовый URL API vision-модели
PARALLEL_VISION_API_KEY—API-ключ vision-модели
PARALLEL_VISION_MODEL—Имя vision-модели
PARALLEL_CDP_ENDPOINT—Chrome DevTools Protocol endpoint для браузерных инструментов (по умолчанию: ws://127.0.0.1:9222)
PARALLEL_2GIS_API_KEY—API-ключ 2GIS Catalog для поиска в бизнес-каталогах
PARALLEL_GOOGLE_PLACES_API_KEY—API-ключ Google Places для поиска в бизнес-каталогах
PARALLEL_YANDEX_MAPS_API_KEY—API-ключ Yandex Maps Geosearch для поиска в бизнес-каталогах
PARALLEL_TWITTER_BEARER_TOKEN—Bearer-токен Twitter/X API v2 для поиска в соцсетях
FATHOM_API_KEYS—API-ключи через запятую для аутентификации HTTP-сервера
FATHOM_RATE_LIMIT—Rate limit HTTP-сервера на клиента (по умолчанию: 120 запросов/минуту)
PR_CONFIG—Переопределить путь к файлу config.toml
PR_MEMORY_DBmemory.db_pathПереопределить путь к SQLite-базе памяти
PR_OUTPUT_DIRoutput.dirКаталог вывода сессии (передаётся воркер-процессам)
PR_JOBS_DB—Переопределить путь к базе задач
PR_JOBS_DIR—Переопределить каталог вывода задач
FATHOM_CREDENTIAL_KEY—32-byte AES-256-GCM vault key, supplied as 64-character hex or base64
FATHOM_COMPUTER_SERVICE_URL—Computer relay service URL (default: http://127.0.0.1:8765)
COMPUTER_TOKEN—Authentication token for the computer service or supervisor
COMPUTER_ALLOW_PRIVATE_HOSTS—Development-only override for private/localhost browser targets (default: false)

Worker control plane

Persistent coworkers, schedules, credentials, notifications, replay and observability are HTTP control-plane capabilities. They are configured through the authenticated /api/v1 routes rather than additional TOML sections. Use the API reference for current routes and request contracts.

Computer use is enabled by the service settings above. The relay supports browser actions, screenshots, accessibility snapshots, confined files and operator control leases; Docker supervisor options are documented in the root docs/COMPUTER-USE.md.

CLI-команды конфига

Управляйте конфигурацией из командной строки.

Показать текущий конфиг

bash
fathom config show

Задать значение

bash
fathom config set llm.api_key "sk-..."

Использует точечную нотацию для вложенных ключей: section.field.

Обратная совместимость

Все новые секции используют #[serde(default)]. Конфиги старых версий (только с [llm], [agent], [search]) загружаются корректно — новые поля автоматически получают значения по умолчанию.

All new sections use #[serde(default)]. Configs from older versions (with only [llm], [agent], [search]) load correctly — new fields receive default values automatically.