---
title: "Configuration"
source: https://docs.autohand.ai/working-with-autohand-code/configuration
---

# Configuration

Configure the current Autohand CLI through one user config file, an optional project-local overlay, environment variables, and explicit command-line overrides.

## 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.

``` bash
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.

``` json
{
  "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.

``` json
{
  "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

| Key | Purpose |
|---|---|
| provider | Active built-in, custom, or trusted extension provider. |
| autohandai, openrouter, ollama, llamacpp, openai, mlx, llmgateway, azure, zai, sakana, vertexai, xai, cerebras, nvidia, deepseek, bedrock | Built-in provider-specific settings. |
| customProviders | User-defined OpenAI-compatible endpoints selected as custom:<id>. |
| extensionProviders | Settings owned by a trusted runtime provider selected as extension:<id>. |
| workspace | Default root and dangerous-operation preference. |
| ui | Theme, terminal output, activity, notification, prompt, and status-line behavior. |
| agent | Iteration, queue, retry, parallelism, memory, and idle-session behavior. |
| sessions | Concurrent-session awareness for the same workspace. |
| permissions | Permission mode, allow/deny policy, rules, and decision caching. |
| network | Retry, timeout, and retry-delay values. |
| externalAgents | Discovery of configured external agent directories. |
| api, auth | Autohand service endpoint, account state, and bare-mode API-key helper. |
| communitySkills | Community skill discovery, suggestions, and backup. |
| hooks | Configured shell lifecycle hooks. |
| automode | Autonomous-loop limits, checkpoints, worktree behavior, and circuit breakers. |
| share, sync | Session sharing and cross-device settings/data sync. |
| telemetry, autoReport | Opt-in telemetry and opt-out operational error reporting. |
| features | Local experimental flags and opt-outs for eligible remote flags. |
| search | Web-search provider and provider-specific API keys. |
| mcp | MCP enablement and server definitions. |
| teams | Multi-agent team enablement, display mode, and concurrency. |
| chrome | Browser 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 value | Notes |
|---|---|
| openrouter | Default provider; requires an API key and model. |
| ollama, llamacpp, mlx | Local server providers; configure model and optional base URL or port. |
| openai | API-key or ChatGPT authentication. |
| azure, vertexai, bedrock | Cloud-platform provider settings and platform credentials. |
| llmgateway, zai, sakana, xai, cerebras, nvidia, deepseek | Direct provider integrations. |
| autohandai | Autohand 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

``` json
{
  "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

``` json
{
  "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](/working-with-autohand-code/extensions/extension-api.html).

## UI settings

| Field | Default | Description |
|---|---|---|
| theme | "dark" | Built-in, Ghostty, file-based, or inline custom theme name. |
| customThemes | {} | Inline theme definitions keyed by name. |
| autoConfirm | false | Skip confirmation for operations already considered safe; it does not override immutable security. |
| readFileCharLimit | 300 | Terminal display limit for read/find output; full output remains available to the model. |
| silentToolOutput | false | Hide tool-output blocks without removing their transcript/model context. |
| showCompletionNotification | true | Show an OS notification when work completes. |
| completionReportEnabled | true | Ask for a concise completion report after action turns. |
| showThinking | true | Display returned model thinking/reasoning blocks. |
| terminalBell | true | Ring the terminal bell on completion. |
| checkForUpdates | true | Check for CLI releases on startup. |
| updateCheckInterval | 24 | Hours between update checks. |
| activityVerbs | Built-in pool | One fixed string or a non-empty string array for the working indicator. |
| activityVerbsEnabled | true | Rotate activity labels; when false, show Working.... |
| activitySymbol | "✳" | Symbol before the working label. |
| locale | Detected | Display locale such as en, fr, or ja. |
| notifications | true | Boolean or { enabled, title, sound } native-notification settings. |
| promptSuggestions | true | Show generated next-step suggestions in the prompt placeholder. |
| useInkRenderer | Ignored | Deprecated. Ink 7 + React 19 is the interactive renderer. |

### Status line

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

| Field | Controls |
|---|---|
| showProviderModel | Provider and model. |
| showContext | Remaining or occupied context. |
| showWorkspacePath | Current workspace path. |
| showGitBranch | Branch or worktree label. |
| showCommandHint | Composer hints for commands, mentions, skills, and shell entry. |
| showPullRequest | Associated pull request number. |
| showSessionLines | Lines added and removed in the current session. |
| showQueue | Queued request count. |
| showActiveStatus | Current turn status. |
| showActiveMetrics | Elapsed time and token metrics. |
| showCancelHint | Escape-key cancellation hint. |

Use `/statusline` for the interactive editor.

## Agent and concurrent-session settings

| Field | Default | Description |
|---|---|---|
| agent.maxIterations | 100 | Maximum tool iterations for one request. |
| agent.enableRequestQueue | true | Allow follow-up input while an active turn runs. |
| agent.idleLogoutEnabled | true | Log out an authenticated interactive session after inactivity. |
| agent.idleTimeoutMs | 3600000 | Positive idle duration in milliseconds before logout. |
| agent.sessionRetryLimit | 3 | Maximum session-level retries. |
| agent.sessionRetryDelay | 1000 | Delay between retries in milliseconds. |
| agent.parallelToolConcurrency | 5 | Maximum parallel tool calls; use 1 for sequential execution. |
| agent.toolSelectionCache | true | Cache local tool-schema selection for equivalent turns. |
| agent.autoMemory | true | Persist durable, evidence-backed lessons after successful, failed, and cancelled interactive turns. |
| agent.debug | false | Enable verbose internal logging. |
| sessions.awareness | "warn" | How this session reacts to other live sessions in the same workspace. |

| Awareness mode | Behavior |
|---|---|
| passive | Publish presence and expose peer status without proactive warnings. |
| warn | Warn about overlapping sessions and repository drift. |
| coordinate | Add coordination claims so concurrent agents can see active work ownership. |

``` json
{
  "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.

``` json
{
  "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
  }
}
```

| Field | Description |
|---|---|
| mode | interactive, unrestricted, restricted, or programmatic external. |
| allowList | Canonical exact or glob-like tool/context entries that do not require another prompt. |
| denyList | Canonical entries that are always denied. |
| whitelist, blacklist | Deprecated compatibility aliases for allowList and denyList. |
| rules | Objects with tool, optional pattern, and action of allow, deny, or prompt. |
| rememberSession | Cache approval decisions for the current session; defaults to true. |
| allowPatterns, denyPatterns | Structured tool patterns with kind and optional argument. |
| availableTools, excludedTools | Structured allow-only and deny tool filters. |
| allPathsAllowed, allUrlsAllowed | Approve 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 id | Config path | Default |
|---|---|---|
| mcp | mcp.enabled | On |
| hooks | hooks.enabled | On |
| teams | teams.enabled | On |
| community_skills | communitySkills.enabled | On |
| prompt_suggestions | ui.promptSuggestions | On |
| request_queue | agent.enableRequestQueue | On |
| thinking_display | ui.showThinking | On |
| completion_notifications | ui.showCompletionNotification | On |
| terminal_bell | ui.terminalBell | On |
| tool_selection_cache | agent.toolSelectionCache | On |
| usage_v2 | features.usageV2 | Off |
| cli_usage_v2 | features.cliUsageV2 | On |
| aws_bedrock_provider | features.awsBedrockProvider | On; restart required |
| slash_goal | features.slashGoal | Off |
| token_usage_status | features.tokenUsageStatus | Off |
| experimental_fork | features.experimentalFork | Off |
| experimental_clone | features.experimentalClone | Off |
| experimental_handoff | features.experimentalHandoff | Off |
| chrome_integration | chrome.enabledByDefault | Off; restart required |
| telemetry | telemetry.enabled | Off |

``` bash
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 field | Default | Description |
|---|---|---|
| maxIterations | 50 | Maximum autonomous-loop iterations. |
| maxRuntime | 120 | Maximum runtime in minutes. |
| maxCost | 10 | Maximum estimated API cost in dollars. |
| checkpointInterval | 5 | Iterations between Git checkpoints. |
| completionPromise | "DONE" | Completion marker. |
| useWorktree | true | Use an isolated Git worktree by default. |
| noProgressThreshold | 3 | No-change circuit breaker. |
| sameErrorThreshold | 5 | Repeated-error circuit breaker. |
| testOnlyThreshold | 3 | Repeated test-only iteration breaker. |
| sameFileThreshold | 3 | Repeated same-file-only iteration breaker. |

| Team field | Default | Description |
|---|---|---|
| enabled | true | Enable team commands and teammate execution. |
| teammateMode | "auto" | auto, in-process, or tmux display/execution mode. |
| maxTeammates | 5 | Maximum simultaneous teammates. |

## Network, search, telemetry, and reporting

| Field | Default | Description |
|---|---|---|
| network.maxRetries | 3 | Maximum request retries, capped at five where enforced. |
| network.timeout | 30000 | Request timeout in milliseconds. |
| network.retryDelay | 1000 | Delay between retries in milliseconds. |
| search.provider | "browser-profile" | browser-profile, exa, google, brave, duckduckgo, or parallel. |
| search.braveApiKey | Unset | Brave Search API key. |
| search.parallelApiKey | Unset | Parallel API key. |
| search.exaApiKey | Unset | Exa API key. |
| telemetry.enabled | false | Opt in to product telemetry. |
| telemetry.apiBaseUrl | Autohand API | Telemetry endpoint override. |
| telemetry.enableSessionSync | true when telemetry is active | Enable session sync in the telemetry client. |
| telemetry.companySecret | Unset | Company API authentication value. |
| autoReport.enabled | true | Opt 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

``` json
{
  "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](/working-with-autohand-code/mcp-servers.html).

### Lifecycle hooks

``` json
{
  "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](/working-with-autohand-code/hooks-and-events.html) for the event payload and control-flow contract.

## Authentication, community skills, sharing, and sync

| Section | Fields |
|---|---|
| auth | token, user, expiresAt, and apiKeyHelper. The helper prints an explicit API key for bare mode. |
| api | baseUrl and companySecret; environment overrides are preferred for deployment-specific values. |
| communitySkills | enabled, showSuggestionsOnStartup, and autoBackup; each defaults to true. |
| share | enabled; defaults to true for the /share surface. |
| sync | enabled, interval in milliseconds, glob exclude, includeTelemetry, and includeFeedback. |
| externalAgents | enabled and an array of directory paths. |

``` json
{
  "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.

``` json
{
  "chrome": {
    "extensionId": "installed-extension-id",
    "browser": "auto",
    "userDataDir": "/path/to/browser/user-data",
    "profileDirectory": "Default",
    "installUrl": "https://autohand.ai/chrome",
    "enabledByDefault": false
  }
}
```

| Field | Description |
|---|---|
| extensionId | Installed extension id for direct handoff. |
| browser | auto, chrome, chromium, brave, or edge. |
| userDataDir | Browser user-data root. |
| profileDirectory | Profile directory such as Default or Profile 1. |
| installUrl | Fallback install/continue URL. |
| enabledByDefault | Start the bridge with the CLI; defaults to false. |

## Environment variables

| Variable | Purpose |
|---|---|
| AUTOHAND_HOME | Base directory for user config, extensions, agents, skills, sessions, memory, and caches. |
| AUTOHAND_CONFIG | Explicit config path when --config is not supplied. |
| AUTOHAND_MODELS_CATALOG | Custom provider-model catalog path. |
| AUTOHAND_API_URL | Autohand API base URL; overrides api.baseUrl. |
| AUTOHAND_AUTH_URL | Sign-in and account-sync origin. |
| AUTOHAND_SECRET | Company secret; overrides api.companySecret. |
| AUTOHAND_API_KEY | Explicit Autohand API key, including bare-mode authentication. |
| AUTOHAND_AI_PLAN, AUTOHAND_AI_API_KEY, AUTOHAND_AI_BASE_URL | Autohand AI provider overrides when the rollout flag is enabled. |
| AUTOHAND_FEATURE_AUTOHAND_INFERENCE, AUTOHAND_FEATURES | Enable the gated Autohand inference surface. |
| AZURE_OPENAI_KEY, AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_DEPLOYMENT, AZURE_OPENAI_API_VERSION | Azure OpenAI overrides. |
| AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET | Azure Entra/service-principal authentication. |
| AWS_REGION, AWS_DEFAULT_REGION | Bedrock region fallback. |
| AUTOHAND_PERMISSION_CALLBACK_URL, AUTOHAND_PERMISSION_CALLBACK_TIMEOUT | Experimental external permission callback. |
| AUTOHAND_NON_INTERACTIVE, AUTOHAND_YES | Non-interactive and auto-confirm runtime controls. |
| AUTOHAND_NO_BANNER, AUTOHAND_STREAM_TOOL_OUTPUT, AUTOHAND_DEBUG | Terminal and diagnostic controls. |
| AUTOHAND_THINKING_LEVEL | none, normal, or extended reasoning depth. |
| AUTOHAND_CODE_SIMPLE | Enable bare mode without --bare. |
| AUTOHAND_SKIP_UPDATE_CHECK | Skip startup release checks. |

## Runtime-only controls

Some current CLI capabilities intentionally do not persist as config:

| Control | Contract |
|---|---|
| --bare | Minimal 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. |
| --offline | Suppress startup network refreshes while retaining local/cached state. |
| --output-format stream-json | One JSON object per command lifecycle event for a one-shot prompt. |
| --json stream | Alias for streamed JSON Lines. |
| --json local | One final machine-readable result object. |
| --no-idle-logout | Disable idle logout for this process. |
| --browser, --no-browser | Enable 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`.

## Related references

[

Reference

### CLI reference

Flags, subcommands, structured output, tools, sessions, and keyboard controls.

Open CLI reference](/working-with-autohand-code/cli-reference.html)[

### Extensions

Choose declarative packages, trusted runtime extensions, or an Agent SDK application.

Choose a build path](/working-with-autohand-code/extensions/index.html)[

### Hooks and events

Hook events, payloads, filters, commands, and control-flow responses.

Configure automation](/working-with-autohand-code/hooks-and-events.html)[

### MCP servers

Install and operate stdio, HTTP, and SSE tool servers.

Extend tools](/working-with-autohand-code/mcp-servers.html)