Skip to content

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.preferredEditorstring—Editor 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.lspboolean—Enable LSP support globally (auto-enabled when .lsp.json exists)

output ​

SettingTypeDefaultValues
output.formatstringtexttext, json

ui ​

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

model ​

SettingTypeDefaultDescription
model.namestring—Default model ID to use on startup
model.generationConfig.enableCacheControlbooleantrueEnable token caching
model.generationConfig.timeoutnumber—Request timeout (ms)
model.generationConfig.maxRetriesnumber—Max retries on failure
model.generationConfig.samplingParamsobject—temperature, 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_PATH—Override path to the system defaults settings file
PROTO_SYSTEM_SETTINGS_PATH—Override 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.selectedTypestring—Active 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.minMemoriesnumber—Min 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.verifyCommandstring—Shell 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.

a2aAgents ​

Map of registered A2A agents, keyed by shortcut name, so you can connect with proto agent <name> without retyping a URL. Normally managed via proto agent add / proto agent remove, but editable directly. Each entry:

FieldTypeDescription
urlstringAgent base URL (e.g. http://host:7870); the /a2a and agent-card paths are derived from it
headersobjectExtra HTTP headers sent on every request (e.g. a static Authorization)
bearerEnvstringEnv var holding a Bearer token, sent as Authorization: Bearer <value>
apiKeyEnvstringEnv var holding an X-API-Key value
descriptionstringHuman description shown in proto agents

See Guides → A2A Agents for the full walkthrough.

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.sttEnvKeystring—Name 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.

Released under the Apache-2.0 License.