Configuration
Every MEMCAL_* knob lives in ~/.memcal/.env (one key=value per line) and is
editable from the web UI's Settings tab, which writes that file, preserves
hand-written lines, and applies immediately. Clearing a field restores the
built-in default. memcal setup owns the provider/model subset; you own the
rest.
Precedence
.env files merge checkout → store → working directory, later winning — so the
working directory outranks the store. Publishing keys read the store file plus
the environment (checkout and working-directory files excluded). A
blank value counts as absent. The Settings tab warns when another file shadows
the store.
Settings
Provider
| Key |
Default |
Meaning |
MEMCAL_LLM_PROVIDER |
codex |
codex, claude-code, antigravity, or openrouter |
MEMCAL_PROPOSE_MODEL |
provider native |
Night-traffic proposer — the main cost |
MEMCAL_SWEEP_MODEL |
provider native |
Stale-row and question revisitor |
MEMCAL_MATCH_MODEL |
provider native |
Merge arbitrator for real conflicts |
MEMCAL_REASONING_EFFORT |
model default |
low, medium, or high |
MEMCAL_MAX_PARALLEL |
8 (1–64) |
In-flight model requests |
MEMCAL_LLM_COMMAND_TIMEOUT |
900 (30–7200s) |
CLI-provider timeout |
MEMCAL_CODEX_COMMAND / MEMCAL_CLAUDE_COMMAND / MEMCAL_AGY_COMMAND |
codex / claude / agy |
Absolute path safest under launchd |
Provider natives: Codex → gpt-5.6-luna, Claude Code → claude-sonnet-5,
Antigravity → gemini-3.8-flash-high. Authenticate the selected CLI first
(codex login, claude auth login, a signed-in agy session); OpenRouter needs
OPENROUTER_API_KEY. Memcal checks that the command exists; the CLI itself
reports authentication trouble on the first real completion. Unknown model names stay valid — catalogs change faster
than validation lists.
Brief
| Key |
Default |
Meaning |
MEMCAL_DAYS_BACK |
3 (0–90) |
Backward window |
MEMCAL_DAYS_FORWARD |
7 (1–365) |
Forward window |
MEMCAL_BRIEF_TOKEN_CAP |
1500 (200–20000) |
Whole-brief budget |
Collection
| Key |
Default |
Meaning |
MEMCAL_SPOOL_HORIZON_DAYS |
30 (1–365) |
Older lines archive but never queue for the model |
MEMCAL_COLLECT_INTERVAL_MINUTES |
5 (1–1440, minutes) |
How often a checked source becomes due for ingest --due |
MEMCAL_EMAIL_BACKFILL_DAYS |
0 = horizon |
First mail reach, then watermark |
MEMCAL_PLATFORM_MUTE |
show |
show, ask, or mute muted-chat evidence policy |
MEMCAL_ITEM_BUDGET |
20000 |
Lines per pass |
MEMCAL_ITEMS_PER_ENTITY |
2000 |
Lines per bundle |
MEMCAL_COLD_START_WAVES |
4 (1–20) |
Wave count for large first passes |
Dream packing
| Key |
Default |
Meaning |
MEMCAL_PACK_BUNDLES |
6 |
Bundles per propose batch |
MEMCAL_PACK_TOKENS |
12000 |
Token budget per batch |
MEMCAL_PACK_STRATEGY |
size |
size or affinity |
MEMCAL_AFFINITY_NEAR_DAYS |
3 |
Near-window for affinity packing |
MEMCAL_PROMPT_VERSION |
v2 |
v2 or v1 |
MEMCAL_PROPOSE_STAGES |
off |
Comma list enabling staged extraction |
MEMCAL_BUNDLE_FORMAT |
v1 |
v1 or v2-quiet-stream |
Merge
| Key |
Default |
Meaning |
MEMCAL_SAME_EVENT_TOKENS |
2 |
Shared title words to merge |
MEMCAL_SAME_EVENT_POOR_TOKENS |
1 |
Threshold without participants/location |
Publishing (off until named)
| Key |
Default |
Meaning |
MEMCAL_PUBLISH_CALENDAR |
off |
macOS calendar name for confirmed events |
MEMCAL_PUBLISH_REMINDERS |
off |
Reminders list for due tasks |
MEMCAL_REMIND_DEADLINES |
on |
Internal deadline timestamps |
Scripted setup:
memcal setup --provider codex
memcal setup --provider claude-code
memcal setup --provider antigravity
memcal setup --provider codex --model gpt-5.6-luna
memcal setup --provider openrouter --api-key "sk-or-..."