Skip to main content

Configuration Overview

work-summary builds its runtime config by merging four layers, from lowest to highest priority:

Built-in defaults

~/.work-summary/config.json (global JSON)

.work-summary.json (repo-local JSON)

Environment variables (shell + .env files)

A value set at a higher layer always wins. Shell-exported variables take precedence over anything in .env files; .env files only fill keys that aren't already set.

Built-in Defaults

FieldDefaultDescription
repoPath.Repository to scan (current directory)
branchmainBranch passed to git log
timeWindow24hCommit window
llm.summaryLengthmediumGemini summary verbosity
output.dir~/.work-summary/reportsReport output directory

Per-Layer Details

Built-in defaults

Hard-coded in src/config/loader.ts. Always present — you never need to specify these unless you want something different.

Global JSON — ~/.work-summary/config.json

Written by work-summary config set --global. Good for non-secret preferences shared across all repos on your machine (e.g., output.dir, llm.summaryLength).

work-summary config set output.dir "~/Reports" --global
work-summary config set llm.summaryLength long --global

Repo-local JSON — .work-summary.json

Written by work-summary config set (without --global). Commit this file to share defaults with your team or to pin settings per project.

work-summary config set branch main
work-summary config set timeWindow 48h
work-summary config set integrations.linear.teamId team-abc123

Environment variables

The highest-priority layer. Loaded from:

  1. ~/.work-summary/.env (global, written by config init)
  2. .env in the current working directory (repo-local, for source checkouts)
  3. Your shell environment (export VAR=value)

Each source only sets keys that aren't already present. Shell-exported variables always win.

See Environment Variables for the full list.

All Config Keys

KeyTypeDescription
repoPathstringDefault repo path when --repo is omitted.
branchstringDefault branch to scan.
timeWindowstringDefault commit window (30m, 24h, 2d, 1w).
excludePathsstring[]Patterns or substrings excluded from normalized diffs.
focusAreasstring[]Only include commits that touch at least one of these patterns.
llm.providerstringLLM provider. "gemini" (default), an npm package (e.g. "@work-summary/openai"), or a relative path.
llm.modelstringModel name passed to the active provider.
llm.baseUrlstringCustom API base URL for OpenAI-compatible providers (Ollama, Groq, etc.).
llm.summaryLengthshort|medium|longSummary verbosity.
llm.promptTemplatestringPath to a .mustache template file that overrides the built-in summarization prompt.
output.dirstringReport output directory (~ is expanded).
output.formatmarkdown|html|bothDefault export format.
integrations.linear.teamIdstringLinear team ID for docs --create-issues.
integrations.docsRepo.pathstringLocal docs repository path for docs push.
integrations.docsRepo.outputDirstringSubdirectory inside docs repo. Defaults to doc-tasks.
integrations.docsRepo.autoCommitbooleanAuto git-commit in the docs repo after docs push.
integrations.mintlify.projectIdstringMintlify project ID.
Secrets in config files

Never put API keys in committed JSON config files. Use ~/.work-summary/.env, your shell's export, or config init. The config show command always masks key values.