Configuration
Ideon merges configuration from multiple sources and validates the result before execution.
Precedence Rules
Lowest to highest priority:
- Saved settings file
- Job file settings
- Environment variables
- Direct CLI arguments (
--style,--intent,--primary,--secondary, idea input)
Secret precedence:
IDEON_OPENROUTER_API_KEYandIDEON_REPLICATE_API_TOKENfrom environment variables override keychain-stored secrets.- If env vars are not set, Ideon attempts to read keychain values saved through
ideon settings. - Keychain support (
keytar) is loaded lazily at runtime when secret reads/writes are needed. - If keychain access fails (for example D-Bus is unavailable in a container), Ideon falls back to environment variables for secret resolution.
- Set
IDEON_DISABLE_KEYTAR=trueto skip keychain access entirely in container or CI environments.
Per-field merge behavior:
modelSettingsmerges by key (temperature,maxTokens,topP) across sources.contentTargetsis replaced as a full array when provided by a higher-priority source.- Scalar settings (for example
model,style,intent,targetLength,markdownOutputDir) are replaced by the highest-priority source.
Settings Schema
Core settings include:
model: LLM model identifiermodelSettings.temperature: 0..2modelSettings.maxTokens: positive integermodelSettings.topP: 0..1modelRequestTimeoutMs: positive integer request timeout in milliseconds (default90000)t2i.modelId: selected text-to-image modelt2i.inputOverrides: model-specific user overridesnotifications.enabled: toggles OS notifications for write lifecycle updatesmarkdownOutputDirassetOutputDircontentTargets: array of output targets with per-type countsstyle: run-level writing styleintent: run-level content intenttargetLength: run-level target length in words (positive integer). Aliases are accepted as input:small=500,medium=900,large=1400.
contentTargets entries:
contentType: one ofarticle,blog-post,linkedin-post,newsletter,press-release,reddit-post,science-paper,x-post,x-threadrole:primaryorsecondarycount: positive integer
Rules:
- Exactly one
contentTargetsentry must have roleprimary. - Primary count must be
1. - Secondary entries are optional and can use counts greater than
1.
Style values:
academicanalyticalauthoritativeconversationalempatheticfriendlyjournalisticminimalistpersuasiveplayfulprofessionalstorytellingtechnical
Intent values:
announcementcase-studycornerstonecounterargumentcritique-reviewdeep-dive-analysishow-to-guideinterview-q-and-alisticleopinion-piecepersonal-essayroundup-curationtutorial
Defaults:
contentTargets:[ { "contentType": "article", "role": "primary", "count": 1 } ]style:professionalintent:tutorialtargetLength:900
Target length aliases:
small:500wordsmedium:900words (default)large:1400words
Saved Settings Location
Saved via OS config path (using env-paths), typically:
- macOS:
~/.ideon/settings.json
To edit saved settings, run ideon settings again. The wizard is the supported way to update values and stored credentials.
Example Environment Override
IDEON_MODEL=openai/gpt-4.1-mini \
IDEON_TEMPERATURE=0.6 \
IDEON_MAX_TOKENS=2400 \
IDEON_STYLE=technical \
IDEON_INTENT=tutorial \
IDEON_TARGET_LENGTH=1200 \
ideon write "An idea"
Note: content target arrays are not currently configurable through environment variables. Use CLI --primary/--secondary flags or job-file settings.contentTargets.
See Environment Variables for full list.