Skip to Content
ReferenceSettings

Settings

proto is configured through JSON settings files combined with environment variables and command-line flags.

Configuration layers (precedence, lowest → highest)

LevelSourceScope
1Hardcoded defaultsBuilt-in
2System defaults fileAll users on the machine
3User settings file (~/.proto/settings.json)Current user, all projects
4Project settings file (.proto/settings.json)This project only
5System settings fileAll users (administrator override)
6Environment variables / .env filesSession
7Command-line argumentsThis invocation

Settings file locations

FileLocation
User settings~/.proto/settings.json
Project settings.proto/settings.json (project root)
System defaultsmacOS: /Library/Application Support/ProtoCode/system-defaults.json
System overridesmacOS: /Library/Application Support/ProtoCode/settings.json

Override system file paths with PROTO_SYSTEM_DEFAULTS_PATH and PROTO_SYSTEM_SETTINGS_PATH.

[!note] String values in settings.json support $VAR and ${VAR} environment variable interpolation.

Project directory (.proto/)

In addition to settings.json, the .proto/ directory can contain:

  • .proto/agents/ — custom sub-agent definitions
  • .proto/skills/ — project skills
  • .proto/memory/ — project memory files
  • .proto/session-notes.md — auto-maintained session checkpoint (updated by background agent after each turn; used as summary input when the context window is compacted)
  • .proto/settings.json — project settings
  • .proto/sandbox-macos-custom.sb — custom Seatbelt profile
  • .proto/sandbox.Dockerfile — custom container image
  • .proto/verify-scenarios.json — post-agent verification scenarios

Available settings

general

SettingTypeDefaultDescription
general.preferredEditorstringEditor for opening files
general.vimModebooleanfalseVim keybindings in input
general.enableAutoUpdatebooleantrueCheck for updates on startup
general.gitCoAuthorbooleantrueAdd Co-authored-by trailer to git commits
general.checkpointing.enabledbooleanfalseSession checkpointing for recovery
general.showSessionRecapbooleanfalseAuto-generate one-line recap after idle (>5 min) on focus-in
general.sessionRecapAwayThresholdMinutesnumber5Minutes idle before auto-recap fires
general.debugKeystrokeLoggingbooleanfalseLog keystrokes to console (for debugging)
general.terminalBellbooleantruePlay terminal bell when response completes or needs approval
general.chatRecordingbooleantrueSave chat history to disk (required for --continue / --resume)
general.outputLanguagestringautoLLM output language (auto or a language name like Chinese, English)
general.defaultFileEncodingstringutf-8Encoding for new files (utf-8 or utf-8-bom)
general.lspbooleanEnable LSP support globally (auto-enabled when .lsp.json exists)
general.languagestringautoUI language code (e.g. en-US, zh-CN)

output

SettingTypeDefaultValues
output.formatstringtexttext, json

ui

SettingTypeDefaultDescription
ui.themestringTheme name or path to theme JSON file
ui.customThemesobject{}Custom theme definitions
ui.accessibility.enableLoadingPhrasesbooleantrueShow loading phrases

model

SettingTypeDefaultDescription
model.namestringDefault model ID to use on startup
model.generationConfig.enableCacheControlbooleantrueEnable token caching
model.generationConfig.timeoutnumberRequest timeout (ms)
model.generationConfig.maxRetriesnumberMax retries on failure
model.generationConfig.samplingParamsobjecttemperature, top_p, max_tokens, etc.

Environment variable overrides

These variables take effect at runtime and do not require a settings file entry.

VariableDefaultDescription
PROTO_STREAM_STALL_TIMEOUT_MS300000Max ms to wait between streaming chunks before the stall watchdog fires (throws a retryable error). Increase if complex agentic responses are hitting the limit.
PROTO_SYSTEM_DEFAULTS_PATHOverride path to the system defaults settings file
PROTO_SYSTEM_SETTINGS_PATHOverride path to the system settings override file

modelProviders

Declare available models per auth type. See Model Providers for the full schema.

security

SettingTypeDefaultDescription
security.auth.selectedTypestringActive auth type on startup (openai, anthropic, gemini)
security.folderTrust.enabledbooleanfalseEnable the Trusted Folders security feature

context

Controls workspace discovery and file filtering.

SettingTypeDefaultDescription
context.fileFiltering.respectGitIgnorebooleantrueRespect .gitignore files when searching
context.fileFiltering.respectProtoIgnorebooleantrueRespect .protoignore files
context.fileFiltering.enableRecursiveFileSearchbooleantrueEnable recursive file search
context.fileFiltering.enableFuzzySearchbooleantrueEnable fuzzy search for files
context.includeDirectoriesstring[][]Additional directories to include in workspace context
context.loadFromIncludeDirectoriesbooleanfalseLoad memory files from include directories
context.memoryConsolidation.minSessionsBetweennumber5Min sessions between auto-consolidations
context.memoryConsolidation.minHoursBetweennumber24Min hours between consolidations
context.memoryConsolidation.minMemoriesnumberMin memories before consolidation triggers

permissions

Permission rules controlling tool usage. Rules are evaluated in priority order: deny > ask > allow. Rules match tool class names (e.g. ShellTool) or glob patterns on tool arguments (e.g. Bash(rm -rf *)).

SettingTypeDefaultDescription
permissions.allowstring[][]Tools/commands auto-approved without prompt
permissions.askstring[][]Tools/commands always requiring confirmation
permissions.denystring[][]Tools/commands always blocked (highest priority)

The legacy confirmShellCommands and confirmFileEdits booleans are deprecated in favor of permissions.ask rules.

tools

SettingTypeDefaultDescription
tools.sandboxboolean/stringfalseEnable sandboxing (true, false, docker, podman, sandbox-exec)
tools.shell.pagerstringcatPager command for shell output
tools.shell.enableInteractiveShellbooleantrueUse node-pty for interactive shell (falls back to child_process)
tools.shell.showColorbooleanfalseShow color in shell output
tools.verifyCommandstringShell command run after each edit for verification

agents

Settings for multi-agent collaboration features.

SettingTypeDefaultDescription
agents.displayModestringin-processDisplay mode (in-process only for now)

telemetry

Observability configuration. Set LANGFUSE_PUBLIC_KEY + LANGFUSE_SECRET_KEY to activate tracing.

SettingTypeDefaultDescription

webSearch

| Setting | Type | Description | | -------------------- | ------ | ------------------------- | -------- | --------------------------------------- | | webSearch.provider | array | Array of {type: "tavily" | "google" | "dashscope", apiKey?, searchEngineId?} | | webSearch.default | string | Default provider name |

slashCommands

Lock down or hide slash commands in multi-tenant deployments.

SettingTypeDefaultDescription
slashCommands.disabledstring[][]Slash command names to hide (case-insensitive)

mcpServers

Map of MCP server configurations. See Guides → Connect via MCP for the full schema.

mcp

SettingTypeDescription
mcp.allowedstring[]Allowlist of MCP server names
mcp.excludedstring[]Denylist of MCP server names

voice

SettingTypeDefaultDescription
voice.enabledbooleanfalseEnable push-to-talk voice input (Ctrl+Space)
voice.sttEndpointstringhttp://localhost:8000/v1/audio/transcriptionsOpenAI-compatible STT endpoint URL
voice.sttEnvKeystringName of an environment variable whose value is used as Authorization: Bearer <value> when calling the STT endpoint

See Guides → Voice Input for setup instructions and prerequisites.

experimental

SettingTypeDefaultDescription
experimental.cronbooleanfalseEnable scheduled tasks

env

Map of environment variable names to values. Lowest-priority API key fallback. Do not commit secrets.

hooks

Hook event configuration. See Guides → Use Hooks for the full schema.

disableAllHooks

SettingTypeDefaultDescription
disableAllHooksbooleanfalseDisable all hooks without deleting their config

Configuration migration

Legacy disable* settings are automatically migrated to enable* names. Old files are backed up before migration.

Last updated on