Config
June 12, 2026 · View on GitHub
summarize supports an optional JSON config file for defaults.
Location
Default path:
~/.summarize/config.json
Status
Inspect the effective model selection and positive provider setup:
summarize status
summarize status --verbose
summarize status --probe
summarize status --json
The command omits missing providers and never prints secret values. API providers appear as
configured when an effective key is present. Enabled CLI providers appear as available when
their executable can be resolved. --probe checks supported OpenAI-compatible/local model-list
endpoints without running inference and marks successful providers as usable.
Precedence
For model:
- CLI flag
--model - Env
SUMMARIZE_MODEL - Config file
model - Built-in default (
auto)
For output language:
- CLI flag
--language/--lang - Config file
output.language(preferred) orlanguage(legacy) - Built-in default (
auto= match source content language)
For output length:
- CLI flag
--length - Config file
output.length - Built-in default (
long)
See docs/language.md for supported values.
For prompt:
- CLI flag
--prompt/--prompt-file - Config file
prompt - Built-in default prompt
For environment variables:
- Process environment variables
- Config file
env - Legacy config file
apiKeys(mapped to env names)
For UI theme:
- CLI flag
--theme - Env
SUMMARIZE_THEME - Config file
ui.theme - Built-in default (
aurora)
Format
~/.summarize/config.json:
{
"model": { "id": "google/gemini-3-flash" },
"env": { "OPENAI_API_KEY": "sk-..." },
"output": { "language": "auto", "length": "long" },
"prompt": "Explain like I am five.",
"ui": { "theme": "ember" }
}
output.length accepts the same values as --length:
- Presets:
short,medium,long,xl,xxl - Shorthand:
s,m,l - Character targets:
1500,20k,20000
Shorthand (equivalent):
{
"model": "google/gemini-3-flash"
}
model can also be auto:
{
"model": { "mode": "auto" }
}
Shorthand (equivalent):
{
"model": "auto"
}
Prompt
prompt replaces the built-in summary instructions (same behavior as --prompt).
Example:
{
"prompt": "Explain for a kid. Short sentences. Simple words."
}
Environment defaults
Set any env var in config (process env still wins):
{
"env": {
"ASSEMBLYAI_API_KEY": "...",
"OPENAI_API_KEY": "sk-...",
"OPENROUTER_API_KEY": "sk-or-...",
"FIRECRAWL_API_KEY": "...",
"CUSTOM_FLAG": "1"
}
}
Legacy shortcut (still supported):
{
"apiKeys": {
"openai": "sk-...",
"groq": "gsk-...",
"assemblyai": "...",
"elevenlabs": "...",
"anthropic": "sk-ant-...",
"google": "...",
"openrouter": "sk-or-...",
"xai": "...",
"zai": "...",
"apify": "...",
"firecrawl": "...",
"fal": "..."
}
}
Cache
Configure the on-disk SQLite cache (extracted content, transcripts, summaries).
{
"cache": {
"enabled": true,
"maxMb": 512,
"ttlDays": 30,
"path": "~/.summarize/cache.sqlite",
"media": {
"enabled": true,
"maxMb": 2048,
"ttlDays": 7,
"path": "~/.summarize/cache/media",
"verify": "size"
}
}
}
Notes:
cache.mediacontrols the media file cache (yt-dlp downloads).--no-cachebypasses summary caching only (LLM output); extract/transcript caches still apply. Use--no-media-cachefor media.verify:size(default),hash, ornone.
UI theme
Set a default CLI theme:
{
"ui": { "theme": "moss" }
}
Slides defaults
Enable slides by default and tune extraction parameters:
{
"slides": {
"enabled": true,
"ocr": false,
"dir": "slides",
"sceneThreshold": 0.3,
"max": 20,
"minDuration": 2
}
}
Speaker identification
Define reusable names and context for diarized YouTube transcripts:
{
"speakers": {
"defaultProfile": "modern-wisdom",
"autoIdentify": true,
"model": "openai/gpt-5.5",
"minimumConfidence": 0.85,
"profiles": {
"modern-wisdom": {
"host": "Chris Williamson",
"knownSpeakers": ["Chris Williamson"],
"context": "Modern Wisdom podcast. Chris Williamson is the host."
}
}
}
}
Run with --diarize, then use --speaker-profile, repeatable --speaker-at <timestamp=name>, and
--remember-speakers to verify and persist a video's label mapping. autoIdentify enables identity
resolution whenever diarization is requested. --no-identify-speakers disables it for one run.
Remembered mappings live under speakers.sources["youtube:<video-id>"]. They include a transcript hash
and are ignored if provider output changes. Profile-level model, minimumConfidence, and autoIdentify
override the corresponding top-level speaker settings.
Logging (daemon)
Enable JSON log files for the daemon:
{
"logging": {
"enabled": true,
"level": "info",
"format": "json",
"file": "~/.summarize/logs/daemon.jsonl",
"maxMb": 10,
"maxFiles": 3
}
}
Notes:
- Default: logging is off.
format:json(default) orpretty.maxMbis per file;maxFilescontrols rotation (ring).- Extension “Extended logging” sends full input/output to daemon logs (large). Cache hits skip content logging.
Presets
Define presets you can select via --model <preset>:
{
"models": {
"small": { "id": "openai/gpt-5-mini" },
"or-free": {
"rules": [
{
"candidates": [
"openrouter/google/gemini-2.0-flash-exp:free",
"openrouter/meta-llama/llama-3.3-70b-instruct:free"
]
}
]
}
}
}
Notes:
autois reserved and can’t be defined as a preset.freeis built-in (OpenRouter:freecandidates). Override it by definingmodels.freein your config, or regenerate it viasummarize refresh-free.gpt-fastandfastremain compatibility aliases for OpenAI GPT-5.5 Fast mode. Prefermodel: "openai/gpt-5.5"plusopenai.serviceTier/openai.thinking.codex-fastis the explicit Codex CLI fast preset.
OpenAI request options can be set globally:
{
"openai": {
"serviceTier": "fast",
"thinking": "medium",
"textVerbosity": "low"
}
}
Or per preset:
{
"models": {
"fast-mini": {
"id": "openai/gpt-5.4-mini",
"serviceTier": "fast",
"thinking": "low"
}
}
}
thinking is an alias for reasoningEffort. Supported values: none, low, medium, high, xhigh; shorthand aliases include off, min (low), mid, med, x-high, and extra-high.
serviceTier: "fast" is the summarize/Codex-facing spelling. Direct OpenAI requests map it to service_tier="priority". CLI --service-tier default clears a configured tier for one run.
Use a preset as your default model:
{
"model": "small"
}
Notes:
- For presets,
"mode": "auto"is optional when"rules"is present.
For auto selection with rules:
{
"model": {
"mode": "auto",
"rules": [
{
"when": ["video"],
"candidates": ["google/gemini-3-flash"]
},
{
"when": ["website", "youtube"],
"bands": [
{
"token": { "max": 8000 },
"candidates": ["openai/gpt-5-mini"]
},
{
"candidates": ["xai/grok-4-fast-non-reasoning"]
}
]
},
{
"candidates": ["openai/gpt-5-mini", "openrouter/openai/gpt-5-mini"]
}
]
},
"media": {
"videoMode": "auto",
"embeddedVideo": "auto"
}
}
media.embeddedVideo accepts "auto", "off", "prefer", or "both". Automatic mode uses only high-confidence primary YouTube embeds and free captions, combining the transcript with substantial article text.
Notes:
- Parsed leniently (JSON5), but comments are not allowed.
- Unknown keys are ignored.
model.rulesis optional. If omitted, built-in defaults apply.model.rules[].when(optional) must be an array (e.g.["video","youtube"]).model.rules[]must use eithercandidatesorbands.
Output language
Set a default output language for summaries:
{
"output": { "language": "auto" }
}
Examples:
"auto"(default): match the source language."en","de": common shorthands."english","german": common names."en-US","pt-BR": BCP-47-ish tags.
CLI config
{
"cli": {
"enabled": ["gemini", "agent", "openclaw", "opencode", "copilot", "agy", "pi"],
"autoFallback": {
"enabled": true,
"onlyWhenNoApiKeys": true,
"order": ["claude", "gemini", "codex", "agent", "openclaw", "opencode", "copilot"]
},
"codex": { "model": "gpt-5.5" },
"claude": { "binary": "/usr/local/bin/claude", "extraArgs": ["--verbose"] },
"agent": { "binary": "/usr/local/bin/agent", "model": "gpt-5.2" },
"openclaw": { "binary": "/usr/local/bin/openclaw", "model": "main" },
"opencode": { "binary": "/usr/local/bin/opencode", "model": "openai/gpt-5.4" },
"copilot": { "binary": "/usr/local/bin/copilot", "model": "gpt-5.2" },
"agy": { "binary": "/usr/local/bin/agy" },
"pi": { "binary": "/usr/local/bin/pi" }
}
}
Notes:
cli.enabledis an allowlist (and order) for auto + explicit CLI model ids.cli.autoFallbackcontrols implicit-auto CLI fallback whencli.enabledis not set.- Default auto fallback order:
claude, gemini, codex, agent, openclaw, opencode, copilot. - Antigravity and pi are opt-in unless added to
cli.autoFallback.order. - Auto fallback stores the last successful provider in
~/.summarize/cli-state.jsonand prioritizes it on the next run. cli.<provider>.binaryoverrides CLI binary discovery.cli.<provider>.extraArgsappends extra CLI args.- Antigravity CLI uses the active agy session model;
cli.agy.modelis ignored by runtime selection. - pi CLI runs
pi --print --mode json, passes extracted content over stdin, and accepts configured or per-call models; usePI_PATHto override binary. cli.codex.isolateddefaults totruefor normal summaries, adding Codex ephemeral/no-user-config/no-rules flags, a temporary cwd, and a sanitized temporaryCODEX_HOMEthat carries auth only. Set it tofalseonly when local Codex config/rules are intentional.
OpenAI config
{
"openai": {
"baseUrl": "https://my-openai-proxy.example.com/v1",
"useChatCompletions": true,
"whisperUsdPerMinute": 0.006
}
}
Notes:
openai.baseUrloverrides the OpenAI-compatible API endpoint. Use this for proxies, gateways, or OpenAI-compatible APIs. EnvOPENAI_BASE_URLtakes precedence.openai.whisperUsdPerMinuteis only used to estimate transcription cost in the finish-line metrics when Whisper transcription runs via OpenAI.
Provider base URLs
Override API endpoints for any provider to use proxies, gateways, or compatible APIs:
{
"openai": { "baseUrl": "https://my-openai-proxy.example.com/v1" },
"nvidia": { "baseUrl": "https://integrate.api.nvidia.com/v1" },
"anthropic": { "baseUrl": "https://my-anthropic-proxy.example.com" },
"google": { "baseUrl": "https://my-google-proxy.example.com" },
"xai": { "baseUrl": "https://my-xai-proxy.example.com" },
"zai": { "baseUrl": "https://api.zhipuai.cn/paas/v4" },
"minimax": { "baseUrl": "https://api.minimax.io/v1" },
"ollama": { "baseUrl": "http://localhost:11434/v1" }
}
Or via environment variables (which take precedence over config):
| Provider | Environment Variable(s) |
|---|---|
| OpenAI | OPENAI_BASE_URL |
| NVIDIA | NVIDIA_BASE_URL |
| Anthropic | ANTHROPIC_BASE_URL |
GOOGLE_BASE_URL (alias: GEMINI_BASE_URL) | |
| xAI | XAI_BASE_URL |
| Z.AI | Z_AI_BASE_URL (alias: ZAI_BASE_URL) |
| MiniMax | MINIMAX_BASE_URL |
| Ollama | OLLAMA_BASE_URL |