Start with the settings UI

Run /settings in an interactive session or autohand --settings from a shell for common UI, agent, session, permission, network, telemetry, auto-mode, team, and search settings. Edit the config file directly for provider blocks, hooks, MCP servers, custom themes, extension providers, and advanced policy.

autohand --setup
autohand --settings
autohand config set ui.promptSuggestions false
autohand config set sessions.awareness coordinate
autohand --permissions

Use the current file names. Autohand does not use a global settings.json. The user configuration is config.toml, config.yaml, config.yml, or config.json. The project file .autohand/settings.local.json is a narrow local overlay, not a second complete config.

Configuration files and lookup

Autohand selects one user configuration source in this order:

  1. An explicit --config <path>
  2. The AUTOHAND_CONFIG environment variable
  3. $AUTOHAND_HOME/config.toml
  4. $AUTOHAND_HOME/config.yaml
  5. $AUTOHAND_HOME/config.yml
  6. $AUTOHAND_HOME/config.json

AUTOHAND_HOME defaults to ~/.autohand. Keep only one of the four standard config files in that directory; multiple formats are rejected instead of being merged. JSON is created with safe defaults on first run when no file exists.

Project-local overlay

When a workspace is known, Autohand also reads .autohand/settings.local.json. The overlay supports provider, model, agent, network, telemetry, and permissions. Those values override or merge with the user config for that workspace.

{
  "version": 1,
  "provider": "openrouter",
  "model": "anthropic/claude-sonnet-4",
  "agent": {
    "maxIterations": 80
  },
  "permissions": {
    "allowList": ["run_command:npm test", "run_command:npm run lint"],
    "denyList": ["run_command:npm publish"]
  }
}

Keep this file local when it contains personal approvals. Project-scoped extensions, agents, skills, hooks, and MCP servers have their own documented storage and lifecycle; do not place arbitrary top-level user config inside this overlay.

Effective precedence

Explicit CLI flags control the current process. For persistent settings, the project overlay is merged over the selected user config, then supported environment variables override API and provider fields. A feature-specific runtime flag such as --no-idle-logout, --offline, or --no-browser applies last for that run.

Complete working example

This example shows the main current sections without embedding real credentials. Remove sections you do not use and provide secrets through your normal local secret-management process.

{
  "provider": "openrouter",
  "openrouter": {
    "apiKey": "replace-locally",
    "model": "anthropic/claude-sonnet-4",
    "contextWindow": 200000
  },
  "workspace": {
    "defaultRoot": "/work/projects",
    "allowDangerousOps": false
  },
  "ui": {
    "theme": "dark",
    "silentToolOutput": false,
    "showThinking": true,
    "completionReportEnabled": true,
    "promptSuggestions": true,
    "activityVerbs": ["Indexing", "Reviewing", "Testing"],
    "activityVerbsEnabled": true,
    "activitySymbol": "✳",
    "statusLine": {
      "showProviderModel": true,
      "showContext": true,
      "showWorkspacePath": true,
      "showGitBranch": true,
      "showCommandHint": true,
      "showPullRequest": true,
      "showSessionLines": false,
      "showQueue": true,
      "showActiveStatus": true,
      "showActiveMetrics": true,
      "showCancelHint": true
    }
  },
  "agent": {
    "maxIterations": 100,
    "enableRequestQueue": true,
    "idleLogoutEnabled": true,
    "idleTimeoutMs": 3600000,
    "sessionRetryLimit": 3,
    "sessionRetryDelay": 1000,
    "parallelToolConcurrency": 5,
    "toolSelectionCache": true,
    "autoMemory": true,
    "debug": false
  },
  "sessions": {
    "awareness": "warn"
  },
  "permissions": {
    "mode": "interactive",
    "allowList": ["run_command:git status --short"],
    "denyList": ["run_command:npm publish"],
    "rememberSession": true
  },
  "features": {
    "usageV2": false,
    "tokenUsageStatus": false,
    "slashGoal": false
  },
  "teams": {
    "enabled": true,
    "teammateMode": "auto",
    "maxTeammates": 5
  },
  "search": {
    "provider": "browser-profile"
  },
  "mcp": {
    "enabled": true,
    "servers": []
  },
  "hooks": {
    "enabled": true,
    "hooks": []
  },
  "telemetry": {
    "enabled": false
  },
  "autoReport": {
    "enabled": true
  },
  "sync": {
    "enabled": true,
    "interval": 300000,
    "exclude": [],
    "includeTelemetry": false,
    "includeFeedback": false
  }
}

Top-level keys

KeyPurpose
providerActive built-in, custom, or trusted extension provider.
autohandai, openrouter, ollama, llamacpp, openai, mlx, llmgateway, azure, zai, sakana, vertexai, xai, cerebras, nvidia, deepseek, bedrockBuilt-in provider-specific settings.
customProvidersUser-defined OpenAI-compatible endpoints selected as custom:<id>.
extensionProvidersSettings owned by a trusted runtime provider selected as extension:<id>.
workspaceDefault root and dangerous-operation preference.
uiTheme, terminal output, activity, notification, prompt, and status-line behavior.
agentIteration, queue, retry, parallelism, memory, and idle-session behavior.
sessionsConcurrent-session awareness for the same workspace.
permissionsPermission mode, allow/deny policy, rules, and decision caching.
networkRetry, timeout, and retry-delay values.
externalAgentsDiscovery of configured external agent directories.
api, authAutohand service endpoint, account state, and bare-mode API-key helper.
communitySkillsCommunity skill discovery, suggestions, and backup.
hooksConfigured shell lifecycle hooks.
automodeAutonomous-loop limits, checkpoints, worktree behavior, and circuit breakers.
share, syncSession sharing and cross-device settings/data sync.
telemetry, autoReportOpt-in telemetry and opt-out operational error reporting.
featuresLocal experimental flags and opt-outs for eligible remote flags.
searchWeb-search provider and provider-specific API keys.
mcpMCP enablement and server definitions.
teamsMulti-agent team enablement, display mode, and concurrency.
chromeBrowser bridge settings. The config key remains chrome; the public command is /browser.

Provider settings

Set the top-level provider to the provider Autohand should use. Common provider fields are model, apiKey, baseUrl, port, contextWindow, and reasoningEffort. Provider-specific integrations add fields such as Azure deployment/authentication data, Vertex project and region, xAI OAuth state, NVIDIA chat-template options, or Bedrock region and API mode.

Provider valueNotes
openrouterDefault provider; requires an API key and model.
ollama, llamacpp, mlxLocal server providers; configure model and optional base URL or port.
openaiAPI-key or ChatGPT authentication.
azure, vertexai, bedrockCloud-platform provider settings and platform credentials.
llmgateway, zai, sakana, xai, cerebras, nvidia, deepseekDirect provider integrations.
autohandaiAutohand Cloud or Apple Silicon local plan; hidden unless features.autohand_inference is enabled.
custom:<id>A configured OpenAI-compatible endpoint from customProviders.
extension:<id>A provider registered by an installed, enabled, trusted runtime extension.

Custom OpenAI-compatible providers

{
  "provider": "custom:company-gateway",
  "customProviders": {
    "company-gateway": {
      "id": "company-gateway",
      "displayName": "Company Gateway",
      "apiFormat": "openai-compatible",
      "baseUrl": "https://models.example.com/v1",
      "apiKey": "replace-locally",
      "apiKeyRequired": true,
      "model": "company-code",
      "contextWindow": 131072,
      "models": [
        {
          "id": "company-code",
          "label": "Company Code",
          "contextWindow": 131072,
          "reasoningEffort": "high"
        }
      ]
    }
  }
}

The object key and its id must match. apiFormat is currently openai-compatible. Set disabled to hide the provider without deleting its saved settings.

Trusted extension providers

{
  "provider": "extension:company-release",
  "extensionProviders": {
    "extension:company-release": {
      "model": "release-model",
      "apiKey": "replace-locally",
      "baseUrl": "https://models.example.com"
    }
  }
}

The extension controls additional fields, but every provider entry requires a non-empty model. The matching extension must be installed, enabled, trusted, and successfully activated. See Extension API v1.

UI settings

FieldDefaultDescription
theme"dark"Built-in, Ghostty, file-based, or inline custom theme name.
customThemes{}Inline theme definitions keyed by name.
autoConfirmfalseSkip confirmation for operations already considered safe; it does not override immutable security.
readFileCharLimit300Terminal display limit for read/find output; full output remains available to the model.
silentToolOutputfalseHide tool-output blocks without removing their transcript/model context.
showCompletionNotificationtrueShow an OS notification when work completes.
completionReportEnabledtrueAsk for a concise completion report after action turns.
showThinkingtrueDisplay returned model thinking/reasoning blocks.
terminalBelltrueRing the terminal bell on completion.
checkForUpdatestrueCheck for CLI releases on startup.
updateCheckInterval24Hours between update checks.
activityVerbsBuilt-in poolOne fixed string or a non-empty string array for the working indicator.
activityVerbsEnabledtrueRotate activity labels; when false, show Working....
activitySymbol"✳"Symbol before the working label.
localeDetectedDisplay locale such as en, fr, or ja.
notificationstrueBoolean or { enabled, title, sound } native-notification settings.
promptSuggestionstrueShow generated next-step suggestions in the prompt placeholder.
useInkRendererIgnoredDeprecated. Ink 7 + React 19 is the interactive renderer.

Status line

Every ui.statusLine field defaults to true except showSessionLines, which defaults to false.

FieldControls
showProviderModelProvider and model.
showContextRemaining or occupied context.
showWorkspacePathCurrent workspace path.
showGitBranchBranch or worktree label.
showCommandHintComposer hints for commands, mentions, skills, and shell entry.
showPullRequestAssociated pull request number.
showSessionLinesLines added and removed in the current session.
showQueueQueued request count.
showActiveStatusCurrent turn status.
showActiveMetricsElapsed time and token metrics.
showCancelHintEscape-key cancellation hint.

Use /statusline for the interactive editor.

Agent and concurrent-session settings

FieldDefaultDescription
agent.maxIterations100Maximum tool iterations for one request.
agent.enableRequestQueuetrueAllow follow-up input while an active turn runs.
agent.idleLogoutEnabledtrueLog out an authenticated interactive session after inactivity.
agent.idleTimeoutMs3600000Positive idle duration in milliseconds before logout.
agent.sessionRetryLimit3Maximum session-level retries.
agent.sessionRetryDelay1000Delay between retries in milliseconds.
agent.parallelToolConcurrency5Maximum parallel tool calls; use 1 for sequential execution.
agent.toolSelectionCachetrueCache local tool-schema selection for equivalent turns.
agent.autoMemorytruePersist durable, evidence-backed lessons after successful, failed, and cancelled interactive turns.
agent.debugfalseEnable verbose internal logging.
sessions.awareness"warn"How this session reacts to other live sessions in the same workspace.
Awareness modeBehavior
passivePublish presence and expose peer status without proactive warnings.
warnWarn about overlapping sessions and repository drift.
coordinateAdd coordination claims so concurrent agents can see active work ownership.
{
  "agent": {
    "autoMemory": true,
    "idleLogoutEnabled": true,
    "idleTimeoutMs": 7200000
  },
  "sessions": {
    "awareness": "coordinate"
  }
}

Use --no-idle-logout for one long-running process without changing the saved config. Run autohand agents --once to print the live local agent/session snapshot.

Permission settings

Autohand's immutable security checks run before configurable policy. Configuration can narrow or approve supported actions, but it cannot override the immutable blacklist.

{
  "permissions": {
    "mode": "interactive",
    "allowList": [
      "run_command:git status --short",
      "run_command:npm test"
    ],
    "denyList": [
      "run_command:npm publish"
    ],
    "rules": [
      {
        "tool": "run_command",
        "pattern": "git diff *",
        "action": "allow"
      }
    ],
    "rememberSession": true
  }
}
FieldDescription
modeinteractive, unrestricted, restricted, or programmatic external.
allowListCanonical exact or glob-like tool/context entries that do not require another prompt.
denyListCanonical entries that are always denied.
whitelist, blacklistDeprecated compatibility aliases for allowList and denyList.
rulesObjects with tool, optional pattern, and action of allow, deny, or prompt.
rememberSessionCache approval decisions for the current session; defaults to true.
allowPatterns, denyPatternsStructured tool patterns with kind and optional argument.
availableTools, excludedToolsStructured allow-only and deny tool filters.
allPathsAllowed, allUrlsAllowedApprove file-path or URL-fetching tool classes after higher-priority denials.

Use /permissions or autohand --permissions to inspect the effective user, project, and session policy. Saved “always” decisions may be written to user or project scope; keep project-local approvals reviewable.

Features and experiments

Use autohand experiments list or /experiments to see the effective feature state. Local flags persist to their config path. Eligible server-controlled flags may be turned off locally through features.remoteOverrides, but a local config cannot force on a server-disabled remote flag.

Feature idConfig pathDefault
mcpmcp.enabledOn
hookshooks.enabledOn
teamsteams.enabledOn
community_skillscommunitySkills.enabledOn
prompt_suggestionsui.promptSuggestionsOn
request_queueagent.enableRequestQueueOn
thinking_displayui.showThinkingOn
completion_notificationsui.showCompletionNotificationOn
terminal_bellui.terminalBellOn
tool_selection_cacheagent.toolSelectionCacheOn
usage_v2features.usageV2Off
cli_usage_v2features.cliUsageV2On
aws_bedrock_providerfeatures.awsBedrockProviderOn; restart required
slash_goalfeatures.slashGoalOff
token_usage_statusfeatures.tokenUsageStatusOff
experimental_forkfeatures.experimentalForkOff
experimental_clonefeatures.experimentalCloneOff
experimental_handofffeatures.experimentalHandoffOff
chrome_integrationchrome.enabledByDefaultOff; restart required
telemetrytelemetry.enabledOff
autohand experiments list
autohand experiments status token_usage_status
autohand experiments enable token_usage_status
autohand experiments disable token_usage_status
autohand experiments refresh

Autohand inference rollout flag

features.autohand_inference separately gates the Autohand Cloud/local provider, setup choices, model discovery, RPC, and ACP surfaces. It is off unless deliberately enabled in config or with AUTOHAND_FEATURE_AUTOHAND_INFERENCE=1 (also accepted in AUTOHAND_FEATURES).

Auto-mode and teams

Auto-mode fieldDefaultDescription
maxIterations50Maximum autonomous-loop iterations.
maxRuntime120Maximum runtime in minutes.
maxCost10Maximum estimated API cost in dollars.
checkpointInterval5Iterations between Git checkpoints.
completionPromise"DONE"Completion marker.
useWorktreetrueUse an isolated Git worktree by default.
noProgressThreshold3No-change circuit breaker.
sameErrorThreshold5Repeated-error circuit breaker.
testOnlyThreshold3Repeated test-only iteration breaker.
sameFileThreshold3Repeated same-file-only iteration breaker.
Team fieldDefaultDescription
enabledtrueEnable team commands and teammate execution.
teammateMode"auto"auto, in-process, or tmux display/execution mode.
maxTeammates5Maximum simultaneous teammates.

Local peer communication

Communication is independent of sessions.awareness and defaults off. Enable it to address other local sessions and published workers with the : composer or peer tools. Peer communication uses local Unix-domain sockets on macOS/Linux and requires no TCP or UDP port. See Required Ports and Agent Transports for agent IPC, local model servers, browser integration, and optional HTTP listeners.

{
  "sessions": {
    "communication": {
      "enabled": true,
      "scope": "workspace",
      "idleBehavior": "notify",
      "alias": "builder"
    }
  }
}
Option Default Behavior
enabled false Start authenticated local IPC and peer tools.
scope workspace Maximum authorized scope: workspace, repository, or machine. Both peer policies must allow it.
idleBehavior notify Notify while idle; auto explicitly allows peer-triggered turns within existing budgets.
alias Generated Up to 64 letters, digits, dashes and underscores; starts with a letter.
coordinationDirectory AUTOHAND_HOME Shared discovery/resource namespace; private inboxes stay in each profile.
allowResourceControl false Permit explicit controller policy installation and resource grants.
resourceWaitTimeoutMs 300000 Maximum parked command-admission wait.
limits Built-in bounded limits Positive integer overrides documented in the protocol reference.

Use /peers list workspace, /peers list repository, or /peers list machine to choose a directory. The listing includes your own ID for controller setup. /peers send, /peers inbox, /peers reply, and /peers status expose delivery without requiring the user to relay model-to-model messages. Leading :peer message sends immediately; an inline selected :peer supplies an exact reference to the local model.

See the user guide, resource coordination, the technical reference, and the two-session lab. The Unix IPC adapter is implemented for macOS/Linux. Windows communication remains unavailable until private pipe and process-job adapters are implemented; keep communication disabled there. Changing auto-confirmation never bypasses an enabled resource policy.

Required ports and agent transports

Autohand Code has no single required inbound TCP port. Normal cloud inference uses outbound HTTPS, usually TCP 443. Local agent communication does not open a TCP listener. Additional ports depend on the provider and optional features you enable. The network settings above control retries and timeouts; they do not configure a listener, peer port, or firewall rule.

Feature Connection and default port Configuration and when it is needed
Peer messages, discovery queries, receipts, and resource coordination Local Unix-domain sockets; no TCP/UDP port Opt in with sessions.communication.enabled. Each root session owns a private socket, normally under <coordinationDirectory>/peer-runtime/; the directory defaults to AUTOHAND_HOME. Long paths use a verified private temporary directory. There is no sessions.communication.port setting.
In-process subagents and teammate communication In-process calls or parent/child stdio; no TCP/UDP port Workers use their owning root's peer runtime. Running more agents does not require allocating a port per agent. Their model requests still use the selected provider's connection.
RPC and ACP agent interfaces JSON messages over stdin/stdout; no TCP/UDP port The embedding application launches the CLI and owns its stdio pipes. These modes do not start an HTTP or WebSocket server.
MCP tools over stdio Child-process stdin/stdout; no CLI transport port Configure mcp.servers[].command and args. A tool server may make its own network connections.
MCP tools over http or sse Outbound to mcp.servers[].url; HTTPS 443, HTTP 80, or the explicit URL port Autohand is the client. A local MCP server must already listen on the port in its URL; there is no fixed Autohand MCP listener.
Cloud inference, account sign-in/sync, downloads, and enabled online services Outbound HTTPS, normally TCP 443 Use the selected provider's baseUrl and the relevant service URL. api.baseUrl / AUTOHAND_API_URL select the account API; AUTOHAND_AUTH_URL selects the sign-in origin. Custom URLs can use other ports.
Ollama CLI connects to http://localhost:11434; TCP 11434 ollama.baseUrl, or ollama.port when no explicit base URL is set. Only required when using that server.
llama.cpp server CLI connects to http://localhost:8080; TCP 8080 llamacpp.baseUrl, or llamacpp.port when no explicit base URL is set. Setup can discover an existing server on another port, including 80.
MLX server CLI connects to http://localhost:8080; TCP 8080 mlx.baseUrl, or mlx.port when no explicit base URL is set. The server must use the same address and port.
Autohand AI Local Local model server, normally http://127.0.0.1:8080; TCP 8080 autohandai.baseUrl and autohandai.port. Setup may start the chosen model on the next port, normally 8081, if a reachable server is serving another model; it saves the resulting endpoint.
OpenAI ChatGPT browser sign-in Temporary callback listener on 127.0.0.1:1455; TCP 1455 If occupied, the CLI asks the OS for a free port. The browser uses the actual http://localhost:<port>/auth/callback redirect. No public inbound rule is needed; the listener closes after sign-in or failure. Device-code sign-in does not use this listener.
autohand review serve HTTP listener on 127.0.0.1; OS-assigned port by default --port 0 selects a free port; --port <1–65535> selects a fixed one. Use the URL printed by the command. The host stays loopback-only.
Chrome extension / native messaging bridge Native messaging and local IPC; no fixed TCP port chrome settings and --browser enable the integration. This is separate from the browser-profile search fallback below.
Browser-profile search's headless Chrome fallback Browser debugging TCP port randomly selected from 9222–10221 Used when this fallback launches Chrome with --remote-debugging-port. There is no CLI setting to pin that port. It is unrelated to agent messaging; the browser also needs outbound access to the search site.
Optional Squad runtime Separate runtime; CLI fallback URL is http://127.0.0.1:19821 Check the separate runtime's status for its actual listener. /squad forwards --host and --port; AUTOHAND_SQUAD_FIXED_PORT is passed through runtime configuration. Core CLI peer messaging does not depend on Squad or port 19821.

Peer communication across sessions and profiles

Peers communicate on the same machine, under the same OS user. The workspace, repository, and machine scopes control which local peers can discover and address each other; machine does not enable LAN or cross-host communication. No router forwarding, public inbound rule, or reserved TCP port is required for peers.

Profiles using different AUTOHAND_HOME directories must set the same sessions.communication.coordinationDirectory to discover one another. Each profile retains its private inbox in its own home. The runtime requires a private local directory and access to its Unix sockets; a shared network folder or opened firewall port does not create cross-host peer support. Windows peer communication is currently unavailable.

Choosing ports and diagnosing conflicts

For a local provider, an explicit baseUrl takes precedence over the provider's port. Change the server's listening port and the matching CLI URL together. For example, after starting Ollama on port 11435, use:

{
  "provider": "ollama",
  "ollama": {
    "baseUrl": "http://127.0.0.1:11435",
    "model": "your-installed-model"
  },
  "sessions": {
    "communication": {
      "enabled": true,
      "scope": "workspace"
    }
  }
}

For a predictable review URL, run autohand review serve --port 4173. If that port is occupied, choose another or use --port 0. Local providers that default to 8080 need distinct ports when running as separate servers at the same time. Optional local listeners should remain reachable only where you intend to use them.

On macOS/Linux, lsof -nP -iTCP:11434 -sTCP:LISTEN identifies the process listening on a model port; substitute the port you are diagnosing. For peer failures, use /peers list and check communication enablement, scope, the shared coordination directory, and socket permissions instead of opening a TCP port. Project dev servers, hooks, external tools, and third-party MCP servers can need additional ports defined by those programs. --offline suppresses startup network refreshes; it is not a firewall and does not force a cloud provider or tool to run locally.

Network, search, telemetry, and reporting

FieldDefaultDescription
network.maxRetries3Maximum request retries, capped at five where enforced.
network.timeout30000Request timeout in milliseconds.
network.retryDelay1000Delay between retries in milliseconds.
search.provider"browser-profile"browser-profile, exa, google, brave, duckduckgo, or parallel.
search.braveApiKeyUnsetBrave Search API key.
search.parallelApiKeyUnsetParallel API key.
search.exaApiKeyUnsetExa API key.
telemetry.enabledfalseOpt in to product telemetry.
telemetry.apiBaseUrlAutohand APITelemetry endpoint override.
telemetry.enableSessionSynctrue when telemetry is activeEnable session sync in the telemetry client.
telemetry.companySecretUnsetCompany API authentication value.
autoReport.enabledtrueOpt out of automatic operational-error reports by setting false.

--offline disables startup network operations such as model-catalog and feature/announcement refreshes while preserving useful cached local state.

MCP and hooks

MCP servers

{
  "mcp": {
    "enabled": true,
    "servers": [
      {
        "name": "repository-tools",
        "transport": "stdio",
        "command": "npx",
        "args": ["-y", "@company/repository-mcp"],
        "env": {
          "LOG_LEVEL": "warn"
        },
        "autoConnect": true
      },
      {
        "name": "remote-tools",
        "transport": "http",
        "url": "https://mcp.example.com/mcp",
        "headers": {
          "Authorization": "Bearer replace-locally"
        },
        "autoConnect": true
      }
    ]
  }
}

A server requires name and transport. stdio requires command; http and sse require url. Optional fields are args, env, headers, and autoConnect. Manage servers with autohand mcp or /mcp. See MCP servers.

Lifecycle hooks

{
  "hooks": {
    "enabled": true,
    "hooks": [
      {
        "event": "post-tool",
        "command": "./scripts/record-tool-result.sh",
        "description": "Record completed tool calls",
        "enabled": true,
        "timeout": 5000,
        "async": false,
        "filter": {
          "tool": ["run_command"]
        }
      }
    ]
  }
}

Each definition requires event and command. It may also set description, enabled, timeout, async, matcher, and a tool/path filter. Current events cover tool, prompt, response, file, session, permission, notification, sub-agent, auto-mode, auto-research, learning, goals, teams, review, mode, and context lifecycles. See Hooks and events for the event payload and control-flow contract.

Authentication, community skills, sharing, and sync

SectionFields
authtoken, user, expiresAt, and apiKeyHelper. The helper prints an explicit API key for bare mode.
apibaseUrl and companySecret; environment overrides are preferred for deployment-specific values.
communitySkillsenabled, showSuggestionsOnStartup, and autoBackup; each defaults to true.
shareenabled; defaults to true for the /share surface.
syncenabled, interval in milliseconds, glob exclude, includeTelemetry, and includeFeedback.
externalAgentsenabled and an array of directory paths.
{
  "communitySkills": {
    "enabled": true,
    "showSuggestionsOnStartup": true,
    "autoBackup": true
  },
  "share": {
    "enabled": false
  },
  "sync": {
    "enabled": true,
    "interval": 300000,
    "exclude": ["temp/*"],
    "includeTelemetry": false,
    "includeFeedback": false
  },
  "externalAgents": {
    "enabled": true,
    "paths": ["/work/shared-agents"]
  }
}

Sync handles canonical memory event logs by event id instead of overwriting one device's history with another. Derived memory caches and locks are not synced. Sensitive config fields are encrypted for account sync, but you should still avoid committing secrets to a repository.

Browser integration

The historical config object remains chrome for compatibility. The public CLI and slash-command surface is browser-neutral: --browser, --no-browser, and /browser. The older --chrome aliases remain hidden compatibility inputs.

{
  "chrome": {
    "extensionId": "installed-extension-id",
    "browser": "auto",
    "userDataDir": "/path/to/browser/user-data",
    "profileDirectory": "Default",
    "installUrl": "https://autohand.ai/chrome",
    "enabledByDefault": false
  }
}
FieldDescription
extensionIdInstalled extension id for direct handoff.
browserauto, chrome, chromium, brave, or edge.
userDataDirBrowser user-data root.
profileDirectoryProfile directory such as Default or Profile 1.
installUrlFallback install/continue URL.
enabledByDefaultStart the bridge with the CLI; defaults to false.

Environment variables

VariablePurpose
AUTOHAND_HOMEBase directory for user config, extensions, agents, skills, sessions, memory, and caches.
AUTOHAND_CONFIGExplicit config path when --config is not supplied.
AUTOHAND_MODELS_CATALOGCustom provider-model catalog path.
AUTOHAND_API_URLAutohand API base URL; overrides api.baseUrl.
AUTOHAND_AUTH_URLSign-in and account-sync origin.
AUTOHAND_SECRETCompany secret; overrides api.companySecret.
AUTOHAND_API_KEYExplicit Autohand API key, including bare-mode authentication.
AUTOHAND_AI_PLAN, AUTOHAND_AI_API_KEY, AUTOHAND_AI_BASE_URLAutohand AI provider overrides when the rollout flag is enabled.
AUTOHAND_FEATURE_AUTOHAND_INFERENCE, AUTOHAND_FEATURESEnable the gated Autohand inference surface.
AZURE_OPENAI_KEY, AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_DEPLOYMENT, AZURE_OPENAI_API_VERSIONAzure OpenAI overrides.
AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRETAzure Entra/service-principal authentication.
AWS_REGION, AWS_DEFAULT_REGIONBedrock region fallback.
AUTOHAND_PERMISSION_CALLBACK_URL, AUTOHAND_PERMISSION_CALLBACK_TIMEOUTExperimental external permission callback.
AUTOHAND_NON_INTERACTIVE, AUTOHAND_YESNon-interactive and auto-confirm runtime controls.
AUTOHAND_NO_BANNER, AUTOHAND_STREAM_TOOL_OUTPUT, AUTOHAND_DEBUGTerminal and diagnostic controls.
AUTOHAND_THINKING_LEVELnone, normal, or extended reasoning depth.
AUTOHAND_CODE_SIMPLEEnable bare mode without --bare.
AUTOHAND_SKIP_UPDATE_CHECKSkip startup release checks.

Runtime-only controls

Some current CLI capabilities intentionally do not persist as config:

ControlContract
--bareMinimal startup: disables ambient hooks, LSP, plugin sync/loading, attribution, auto-memory, background prefetches, keychain/browser login fallback, AGENTS.md discovery, telemetry/reporting/sync, and slash commands. Explicit extensions, MCP config, agents, plugin directories, system prompts, and added directories remain available through their normal explicit inputs.
--offlineSuppress startup network refreshes while retaining local/cached state.
--output-format stream-jsonOne JSON object per command lifecycle event for a one-shot prompt.
--json streamAlias for streamed JSON Lines.
--json localOne final machine-readable result object.
--no-idle-logoutDisable idle logout for this process.
--browser, --no-browserEnable or disable browser integration for the current run.

Structured output requires a one-shot prompt. --output-format stream-json cannot be combined with --json local.