Reference: configuration
Comma is configured via environment variables and the model command. There is no config file.
Environment variables
$env.COMMA_CFG
Used by transform, generate, research, and pipeline (for its LLM critics).
| Field | Default | What |
|---|---|---|
provider |
gemini |
One of anthropic, openai, gemini, openrouter, ollama |
model |
gemini-3.1-flash-lite-preview |
Provider-specific model ID |
tools |
none |
One of all, code, web_search, none, or comma-separated subset |
Set it:
$env.COMMA_CFG = {provider: openai, model: gpt-4o, tools: none}
$env.COMMA_ANALYZE_CFG
Used by LLM commands in analyze (detect, sentiment, keywords, entities, readability, classify). Separated from COMMA_CFG so analyze NLP can be tuned independently.
| Field | Default | What |
|---|---|---|
provider |
gemini |
Same options as COMMA_CFG |
model |
gemini-3.1-flash-lite |
Fast, cheap NLP — analyze tasks don’t need a stronger model |
tools |
none |
No tools — analyze’s commands are pure text-in, text-out |
Override:
$env.COMMA_ANALYZE_CFG = {
provider: anthropic
model: claude-haiku-4-5-20251001
tools: none
}
$env.COMMA_VALIDATE_CFG
Used by validate commands (factcheck, quotes, claims). Separated because these need web_search to do real verification — without it they would hallucinate citations.
| Field | Default | What |
|---|---|---|
provider |
gemini |
Same options as COMMA_CFG |
model |
gemini-3-pro-preview |
A model with reliable tool use and stronger reasoning |
tools |
web_search,nu |
Web search + nushell tool |
Override:
$env.COMMA_VALIDATE_CFG = {
provider: anthropic
model: claude-sonnet-4-6
tools: web_search
}
The model command
A convenience wrapper that sets COMMA_CFG:
model <name> [--provider <string>]
| Argument | What |
|---|---|
name |
Model ID |
--provider |
Provider (if changing); otherwise keeps the current provider |
Example:
model claude-sonnet-4-6 --provider anthropic
model gpt-4o --provider openai
model gemini-2.5-pro # keeps provider=gemini
The new config persists for the rest of the session. ,? (or status) shows the active config.
Alias: ,m
Module-specific configuration
convert.nu
No environment variables. PDF engine is controlled per-call via --engine. Templates are passed per-call via --template.
publish.nu
Reserved module. No commands exported yet; per-platform configuration will be defined as commands are added.
feeds.nu
$env.COMMA_FEEDS_PROVIDER selects the feed-reader backend.
| Value | Backend | Required binary |
|---|---|---|
blogtato (default) |
https://github.com/kantord/blogtato | blog |
Each provider’s data lives wherever that provider stores it — blogtato keeps its store at ~/Library/Application Support/blogtato/stores/default on macOS (or $RSS_STORE if set). comma does not interpose its own storage; it shells out and reshapes the output into pipe-friendly tables.
research.nu
No environment variables besides what iwe itself reads from your shell (e.g. IWE_ROOT if set, or the discovery of .iwe/ in the current directory tree). Comma does not impose any additional configuration on top of IWE.
Polish-loop configuration
polish has its own per-call flags rather than environment variables:
| Flag | Default | Tunes |
|---|---|---|
--lix-min |
30 | Lower readability bound |
--lix-max |
50 | Upper readability bound |
--repeat-min-length |
4 | n-gram length flagged as repetition |
--max-passes |
4 | Hard pass cap |
See reference/pipeline for the full polish reference.
Inspecting current config
,? # alias for `status` — prints active config + command inventory
status # same
$env.COMMA_CFG # raw value
$env.COMMA_ANALYZE_CFG # if set
Scoping changes to one block
with-env {COMMA_CFG: {provider: openai, model: gpt-4o, tools: none}} {
"Hello, world" | tr da
}
The override applies only within the block; the original COMMA_CFG is restored after.