Geoff Code splits configuration into two TOML files under ~/.geoff (or $GEOFF_CODE_HOME if set): Both are created with defaults on first run. Validate them at any time with geoff doctor (see Command Reference). Keys use snake_case.

config.toml

Top-level keys

[providers.<name>]

Each provider declares how to reach an API. The type is one of anthropic, openai, openai_responses, google-genai, vertexai, or kimi.
Get a key from https://geoff.ai/settings/api-keys. Avoid committing keys; set GEOFF_API_KEY in your environment, or pass -k, --api-key for a single invocation.

[models.<alias>]

Aliases map a short name to a concrete model on a provider. The default alias is pyro.

[[hooks]]

Lifecycle hooks (array of tables). See Hooks for events and the I/O protocol.

[permission]

Persistent allow/deny/ask rules for tool calls.

[loop_control]

Tune the agent’s turn-execution limits.

[background]

Control background task execution.

[experimental]

Toggle named experimental features (booleans). Unknown keys are rejected by validation.

Alternate config files

Geoff Code also reads config.toml over RPC at startup. Use geoff doctor config <path> to validate a file at a non-default path.

tui.toml

Client-side preferences for the terminal UI:
Validate it with geoff doctor tui.

Command Reference

Use geoff doctor to validate both files.

Hooks

The full hook event reference.