Skip to content

Config file

Gormes loads exactly one config file:

$GORMES_HOME/config.toml

The default $GORMES_HOME is ~/.gormes. There is no project-local override, no XDG path, and no implicit YAML location — the only YAML fallback is $GORMES_HOME/config.yaml, which exists solely so a Hermes user can paste their config.yaml while migrating. Secrets are never written to config.toml; they live in $GORMES_HOME/.env.

Precedence: CLI flag > environment variable > config.toml > built-in default.

Use the binary to inspect and edit the file:

Terminal window
gormes config path # absolute path to the active config
gormes config show # resolved config with secrets redacted
gormes config get <key> # read one value
gormes config set <k> <v> # write to config.toml or .env (auto-routed)
gormes config check # schema + dotenv presence
gormes config edit # open in $EDITOR / $VISUAL
gormes config migrate # apply Gormes-native schema migrations

Every section below is read by internal/config. Defaults are the values the binary applies when the key is missing. Boolean values default to false unless noted.

Provider and model identity for the default agent.

FieldDefaultPurpose
endpoint"" (empty — provider client picks the URL)Override the provider’s base URL.
provider""Provider name (e.g. openai, anthropic, openrouter).
model"hermes-agent"Default model. The literal hermes-agent is a sentinel that triggers per-provider default-model resolution.
api_key""API key. Always written to .env, never to config.toml.
api_key_refunsetOptional SecretRef pointing at an external secrets provider.

Per-turn runtime knobs for the default agent.

FieldDefaultPurpose
max_turns60Hard cap on agent turns per session.
reasoning_effort"medium"Reasoning effort hint for compatible providers.
gateway_timeout1800 (seconds)Hermes-compatible gateway request timeout.
gateway_timeout_warning0Warning threshold for slow turns.
api_max_retries3Retry budget for provider calls.
image_input_mode""Image input handling for vision-capable models.
verbosefalseVerbose turn diagnostics.
active_personality""Name of the personality preset to apply.
personalitiesbuilt-in map (helpful, concise, technical, creative, teacher, kawaii, catgirl, noir, pirate, philosopher, hype, shakespeare)Personality preset text. Operators may add or override entries.

Cross-agent runtime policy.

FieldDefaultPurpose
max_tool_iterations90Per-turn tool call ceiling.
terminal_backend"local"Default terminal backend label.
tts_provider"edge"Default TTS provider.
compression_threshold0.5History compression trigger.
session_reset_policy"inactivity"One of inactivity, daily, off.
session_reset_after_minutes1440Inactivity window (24 hours).
session_reset_daily_hour4Hour of the day for daily reset.
session_reset_memory_summarytrueCapture a memory summary on reset.

Free-form provider-keyed TTS settings (map[string]any). Provider-specific keys live under [tts.<provider>]. Defaults to {}.

Free-form provider-keyed image generation settings. Defaults to {}.

Hermes-compatible gateway transport.

FieldDefaultPurpose
proxy_url""Outbound proxy URL. Mirror of GATEWAY_PROXY_URL.
proxy_key""Proxy bearer token. Auto-routed to .env when set via gormes config set.
platforms.<name>.gateway_restart_notificationunsetPer-platform restart-notification toggle.
FieldDefaultPurpose
backend"" (uses runtime.terminal_backend)Override terminal backend per-section.
cwd"."Default working directory for terminal sessions.
FieldDefaultPurpose
mode"strict"execute_code policy. strict blocks anything outside the shell sandbox.
FieldDefaultPurpose
language""UI language. Overridden by GORMES_LANGUAGE.
personality""Personality preset name shown in UI.
tool_progress""Tool progress display mode.
tool_progress_commandfalseShow the command for each tool step.
show_reasoningfalseRender reasoning blocks in the TUI/transcripts.
streamingfalseStream provider output.
bell_on_completefalseTerminal bell at end of turn.
compactfalseCompact transcript layout.
cleanup_progressfalseErase progress lines after completion.
interim_assistant_messagesfalseShow interim assistant turns.
background_process_notifications""Background-task notification mode.
busy_input_mode""TUI behavior while a turn is in flight.
platforms.<name>.tool_progressunsetPer-platform tool progress override.
FieldDefaultPurpose
theme"dark"TUI theme.
mouse_trackingtrueEnable mouse capture. Override with GORMES_TUI_MOUSE_TRACKING.
FieldDefaultPurpose
max_bytes200000Maximum bytes the input box accepts in one submission.
max_lines10000Maximum lines per submission.
FieldDefaultPurpose
cron_mode"deny"Approval policy for cron-scheduled actions.
FieldDefaultPurpose
record_key"ctrl+b"TUI hot-key for voice recording. Override with GORMES_VOICE_RECORD_KEY.
FieldDefaultPurpose
enabledfalseEnable STT for voice inputs.
provider""STT provider name (e.g. openai, local).
local.model""Local model identifier.
local.language""Local model language hint.
openai.model""OpenAI Whisper model name.

Auxiliary inference tasks (curator, vision). Each subkey accepts the same shape.

FieldDefaultPurpose
auxiliary.curator.provider"auto"Provider override (auto, main, or any provider name).
auxiliary.curator.model""Model override.
auxiliary.curator.base_url""Endpoint override.
auxiliary.curator.api_key""API key override (routed to .env).
auxiliary.curator.timeout600Timeout seconds.
auxiliary.curator.extra_body{}Free-form provider request extras.
auxiliary.vision.*emptySame shape, vision provider.

Legacy alias for [auxiliary.curator]. curator.auxiliary accepts the same fields as auxiliary.curator for Hermes parity.

The Telegram bot adapter. See Telegram for the intended setup path. Selected defaults:

FieldDefaultPurpose
bot_token""Bot token (routed to .env).
allowed_chat_id0Single allow-list chat ID.
allowed_chatsunsetList of allow-list chat IDs.
allowed_user_ids[]Allow-list user IDs.
require_mentionfalseRequire @bot mention in groups.
guest_modefalseAllow unknown users (read-only).
coalesce_ms1000Edit coalescer interval (milliseconds).
fresh_final_after_seconds60.0Mark a message as final after this idle window.
notifications"important"Notification level.
first_run_discoverytrueDiscover the home chat on first run.
memory_queue_cap1024Async memory queue capacity.
extractor_batch_size5Memory extractor batch size.
extractor_poll_interval10sMemory extractor poll interval.
recall_enabledtrueEnable graph recall.
recall_weight_threshold1.0Recall weight cutoff.
recall_max_facts10Max recalled facts per turn.
recall_depth2Graph traversal depth.
recall_decay_horizon_days180Linear weight decay horizon.
mirror_enabledtrueMirror memory to USER.md.
mirror_path$GORMES_HOME/memory/USER.mdMirror destination.
mirror_interval30sMirror flush interval.
semantic_enabledfalseOpt-in semantic fusion.
semantic_endpoint / semantic_model / semantic_top_k / semantic_min_similarity"" / "" / 3 / 0.35Semantic recall tuning.
embedder_poll_interval30sEmbedder poll interval.
embedder_batch_size10Embedder batch size.
embedder_call_timeout10sEmbedder request timeout.
query_embed_timeout60msQuery-side embedding timeout.
FieldDefaultPurpose
token""Bot token (routed to .env).
allowed_channel_id""Primary allowed channel ID.
allowed_channelsunsetList of allowed channel IDs.
ignored_channelsunsetList of channels to ignore.
free_response_channelsunsetChannels where mentions are not required.
no_thread_channelsunsetChannels where threads must not be created.
require_mentionunsetRequire @bot mention (defaults to false when unset).
auto_threadunsetAuto-create threads.
reply_to_mode"first"One of first, all, off.
allow_bots"none"One of none, mentions, all.
server_actions[]Server action allow-list.
coalesce_ms1000Edit coalescer interval.
first_run_discoveryfalseDiscover channels on first run.
FieldDefaultPurpose
enabledfalseMaster toggle for the Slack adapter.
bot_token""xoxb token (routed to .env).
app_token""xapp token (routed to .env).
allowed_channel_id""Primary allowed channel ID. There is no default_channel_id field.
allowed_channelsunsetList of allowed channel IDs.
coalesce_ms1000Edit coalescer interval.
first_run_discoveryfalseChannel discovery on first run.
require_mentiontrueRequire @mention in shared channels.
strict_mentionunsetReject indirect mentions.
reply_in_threadtrueReply in thread by default.
free_response_channelsunsetChannels where mentions are not required.

Microsoft Teams adapter. Uses TEAMS_* env vars rather than GORMES_TEAMS_*.

FieldDefaultPurpose
enabledfalseMaster toggle.
client_id""Azure app client ID.
client_secret""Azure app secret (routed to .env).
tenant_id""Azure tenant ID.
port3978Local webhook port.
allowed_users[]Allow-list of user IDs.
allow_all_usersfalseSkip the user allow-list.

Disabled-by-default adapter. enabled=false, login_token="", hy_source="", agent_id="", allowed_conversation_id="", coalesce_ms=0, first_run_discovery=false.

FieldDefaultPurpose
backend""Web search backend (e.g. tavily, serper). Override with GORMES_WEB_BACKEND.
use_gatewayfalseRoute web requests through the gateway. Override with GORMES_WEB_USE_GATEWAY.
FieldDefaultPurpose
cdp_url""CDP endpoint URL. Overridden by GORMES_BROWSER_CDP_URL, BROWSER_CDP_URL, or CHROME_REMOTE_DEBUGGING_URL.
FieldDefaultPurpose
website_blocklist.enabledfalseEnable the website blocklist.
website_blocklist.domains[]Hostname blocklist entries.
website_blocklist.shared_files[]Paths to shared blocklist files.

External secret-provider routing for SecretRef lookups.

FieldDefaultPurpose
defaults.env"default"Provider alias used by SecretRef{source="env"}.
defaults.file""Provider alias for file-backed refs.
defaults.exec""Provider alias for exec-backed refs.
providers.<alias>.sourceunsetProvider source kind (env, file, exec).
providers.<alias>.path / mode / allowlist / max_bytes / allow_insecure_pathunsetProvider-specific knobs.

[agents], [[agents.list]], [agents.defaults]

Section titled “[agents], [[agents.list]], [agents.defaults]”

Multi-agent registry. agents.defaults carries fallback workspace/model; [[agents.list]] defines named agents with id, name, workspace, model, and default.

Channel-to-agent routing rules. Each entry: agent_id plus a bindings.match table (channel, account_id, etc.).

FieldDefaultPurpose
enabledfalseEnable scheduled tasks.
call_timeout60sPer-cron-call timeout.
mirror_interval30sCRON.md mirror flush interval.
mirror_path"" (defaults to $GORMES_HOME/cron/CRON.md at runtime)CRON.md mirror destination.
FieldDefaultPurpose
root"" (defaults to $GORMES_HOME/skills at runtime)Skills root directory.
selection_cap3Maximum skills considered per turn.
max_document_bytes65536Per-document byte ceiling.
usage_log_path"" (defaults to <skills_root>/usage.jsonl)Append-only skill usage log.
FieldDefaultPurpose
enabledfalseEnable subagent delegation.
max_depth2Maximum recursion depth.
max_concurrent_children3Concurrent child cap.
default_max_iterations8Per-child iteration cap.
default_timeout45sPer-child timeout.
run_log_path"" (defaults to $GORMES_HOME/subagents/runs.jsonl)Run log destination.
max_waiting128Maximum waiting children.

In-process Honcho-compatible memory facade.

FieldDefaultPurpose
enabledtrueEnable Goncho.
workspacegoncho.DefaultWorkspaceIDWorkspace identifier.
observer_peergoncho.DefaultObserverPeerIDObserver peer identifier.
recent_messagesgoncho.DefaultRecentMessagesRecent-window message count.
max_message_sizegoncho.DefaultMaxMessageSizePer-message byte ceiling.
max_file_sizegoncho.DefaultMaxFileSizePer-file byte ceiling.
get_context_max_tokensgoncho.DefaultGetContextMaxTokensToken budget for get_context.
reasoning_enabledtruePersist reasoning blocks.
peer_card_enabledtruePersist peer cards.
summary_enabledtruePersist summaries.
dream_enabledfalseEnable dream/idle consolidation.
dream_idle_timeout_minutesgoncho.DefaultDreamIdleTimeout (in minutes)Idle window before dream.
deriver_workersgoncho.DefaultDeriverWorkersDeriver worker pool size.
representation_batch_max_tokensgoncho.DefaultRepresentationBatchMaxTokensRepresentation batch budget.
dialectic_default_level"low"Default dialectic level.
FieldDefaultPurpose
pre_update_backupfalseSnapshot before gormes update.
backup_keep5Backup retention budget.
_config_version = 1
[hermes]
provider = "openai"
model = "gpt-4o"
[input]
max_bytes = 200000
max_lines = 10000
[telegram]
allowed_user_ids = [123456789]
[goncho]
enabled = true

Secrets for the same example live in ~/.gormes/.env:

GORMES_API_KEY=sk-...
GORMES_TELEGRAM_TOKEN=123:abc