{
  "docker_entrypoint_settings": [
    {
      "default": "false",
      "description": "Run the Dockerized MCP server itself as root. Prefer explicit sudo inside commands instead.",
      "env": "DOCKER_RUN_AS_ROOT"
    },
    {
      "default": "true",
      "description": "Persist GitHub CLI, Git HTTPS credentials, GitCode credentials, SSH keys, .netrc, and GPG state across container rebuilds.",
      "env": "DOCKER_PERSISTENT_CREDENTIALS"
    },
    {
      "default": "/persist/credentials",
      "description": "Root directory for persisted credentials. The Docker Compose example stores it in the local-shell-mcp-credentials volume.",
      "env": "DOCKER_CREDENTIALS_DIR"
    },
    {
      "default": "",
      "description": "Optional UID for the agent user at container startup. Leave empty to auto-detect the mounted workspace owner; set explicitly to override.",
      "env": "DOCKER_AGENT_UID"
    },
    {
      "default": "",
      "description": "Optional GID for the agent user at container startup. Leave empty to auto-detect the mounted workspace owner; set explicitly to override.",
      "env": "DOCKER_AGENT_GID"
    },
    {
      "default": "true",
      "description": "chown the mounted workspace to the agent user before starting the server.",
      "env": "DOCKER_CHOWN_WORKSPACE"
    }
  ],
  "precedence": [
    "defaults",
    "config file",
    "LOCAL_SHELL_MCP_* environment variables",
    "CLI arguments"
  ],
  "section_order": [
    "Server",
    "Human interface",
    "Paths and state",
    "Authentication and OAuth",
    "Safety and resource limits",
    "Remote workers",
    "Agent capability bridge",
    "Tool executables"
  ],
  "sections": [
    {
      "headers": [
        "Setting",
        "CLI",
        "Environment",
        "Type",
        "Default",
        "Description"
      ],
      "heading": "Server",
      "kind": "table",
      "rows": [
        [
          {
            "code": "mode"
          },
          {
            "lines": [
              {
                "code": "--mode"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MODE"
          },
          "mcp | http | both | stdio",
          {
            "code": "mcp"
          },
          "Server transport mode."
        ],
        [
          {
            "code": "host"
          },
          {
            "lines": [
              {
                "code": "--host"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_HOST"
          },
          "string",
          {
            "code": "0.0.0.0"
          },
          "Bind host for HTTP/MCP transports."
        ],
        [
          {
            "code": "port"
          },
          {
            "lines": [
              {
                "code": "--port"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_PORT"
          },
          "integer",
          {
            "code": "8765"
          },
          "Bind port for HTTP/MCP transports."
        ]
      ]
    },
    {
      "headers": [
        "Setting",
        "CLI",
        "Environment",
        "Type",
        "Default",
        "Description"
      ],
      "heading": "Human interface",
      "kind": "table",
      "rows": [
        [
          {
            "code": "ui_enabled"
          },
          {
            "lines": [
              {
                "code": "--ui-enabled"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_UI_ENABLED"
          },
          "true | false",
          {
            "code": "true"
          },
          "Mount the browser Human UI and its authenticated API on the HTTP server."
        ],
        [
          {
            "code": "ui_path"
          },
          {
            "lines": [
              {
                "code": "--ui-path"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_UI_PATH"
          },
          "string",
          {
            "code": "/ui"
          },
          "Non-root URL path where the browser Human UI is mounted."
        ],
        [
          {
            "code": "ui_tui_command"
          },
          {
            "lines": [
              {
                "code": "--ui-tui-command"
              },
              {
                "code": "--unset-ui-tui-command clears the value"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_UI_TUI_COMMAND"
          },
          "string",
          {
            "code": "unset"
          },
          "Optional administrator-supplied OpenTUI executable command."
        ],
        [
          {
            "code": "ui_terminal_idle_timeout_s"
          },
          {
            "lines": [
              {
                "code": "--ui-terminal-idle-timeout-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_UI_TERMINAL_IDLE_TIMEOUT_S"
          },
          "integer",
          {
            "code": "3600"
          },
          "Idle timeout for authenticated Human UI terminal WebSockets; 0 disables idle expiry."
        ],
        [
          {
            "code": "ui_terminal_max_connections"
          },
          {
            "lines": [
              {
                "code": "--ui-terminal-max-connections"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_UI_TERMINAL_MAX_CONNECTIONS"
          },
          "integer",
          {
            "code": "8"
          },
          "Maximum concurrent Human UI terminal WebSocket connections."
        ],
        [
          {
            "code": "ui_wallpaper"
          },
          {
            "lines": [
              {
                "code": "--ui-wallpaper"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_UI_WALLPAPER"
          },
          "aurora | grid | none",
          {
            "code": "aurora"
          },
          "Browser Human UI background treatment; no external network image is fetched."
        ]
      ]
    },
    {
      "headers": [
        "Setting",
        "CLI",
        "Environment",
        "Type",
        "Default",
        "Description"
      ],
      "heading": "Paths and state",
      "kind": "table",
      "rows": [
        [
          {
            "code": "workspace_root"
          },
          {
            "lines": [
              {
                "code": "--workspace-root"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_WORKSPACE_ROOT"
          },
          "path",
          {
            "code": "/workspace"
          },
          "Root directory for workspace."
        ],
        [
          {
            "code": "state_dir"
          },
          {
            "lines": [
              {
                "code": "--state-dir"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_STATE_DIR"
          },
          "path",
          {
            "code": "/workspace/.local-shell-mcp"
          },
          "Directory for runtime state. Including audit logs, temporary files, and config"
        ]
      ]
    },
    {
      "headers": [
        "Setting",
        "CLI",
        "Environment",
        "Type",
        "Default",
        "Description"
      ],
      "heading": "Authentication and OAuth",
      "kind": "table",
      "rows": [
        [
          {
            "code": "auth_mode"
          },
          {
            "lines": [
              {
                "code": "--auth-mode"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_AUTH_MODE"
          },
          "none | oauth",
          {
            "code": "oauth"
          },
          "Authentication mode. Do not expose public services with none."
        ],
        [
          {
            "code": "auth_bypass_localhost"
          },
          {
            "lines": [
              {
                "code": "--auth-bypass-localhost"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_AUTH_BYPASS_LOCALHOST"
          },
          "true | false",
          {
            "code": "false"
          },
          "Allow localhost requests without bearer authentication. Keep disabled when exposing HTTP through proxies or shared hosts."
        ],
        [
          {
            "code": "mcp_session_idle_timeout_s"
          },
          {
            "lines": [
              {
                "code": "--mcp-session-idle-timeout-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MCP_SESSION_IDLE_TIMEOUT_S"
          },
          "integer",
          {
            "code": "180"
          },
          "Idle timeout for stateful Streamable HTTP MCP sessions in seconds."
        ],
        [
          {
            "code": "mcp_max_sessions"
          },
          {
            "lines": [
              {
                "code": "--mcp-max-sessions"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MCP_MAX_SESSIONS"
          },
          "integer",
          {
            "code": "1024"
          },
          "Maximum concurrent stateful Streamable HTTP MCP sessions."
        ],
        [
          {
            "code": "base_url"
          },
          {
            "lines": [
              {
                "code": "--base-url"
              },
              {
                "code": "--unset-base-url clears the value"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_BASE_URL"
          },
          "string",
          {
            "code": "unset"
          },
          "Externally reachable base URL used for OAuth metadata, callbacks, and generated links. If unset, URLs fall back to the bind host and port; configure this before exposing the service behind a proxy or public hostname."
        ],
        [
          {
            "code": "oauth_issuer"
          },
          {
            "lines": [
              {
                "code": "--oauth-issuer"
              },
              {
                "code": "--unset-oauth-issuer clears the value"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_OAUTH_ISSUER"
          },
          "string",
          {
            "code": "unset"
          },
          "Override URL for OAuth issuer metadata; usually derived from base_url."
        ],
        [
          {
            "code": "oauth_resource"
          },
          {
            "lines": [
              {
                "code": "--oauth-resource"
              },
              {
                "code": "--unset-oauth-resource clears the value"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_OAUTH_RESOURCE"
          },
          "string",
          {
            "code": "unset"
          },
          "Override URL for OAuth resource metadata; usually derived from base_url plus /mcp."
        ],
        [
          {
            "code": "oauth_admin_pin"
          },
          {
            "lines": [
              {
                "code": "--oauth-admin-pin"
              },
              {
                "code": "--unset-oauth-admin-pin clears the value"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_OAUTH_ADMIN_PIN"
          },
          "string",
          {
            "code": "unset"
          },
          "Admin PIN required to approve OAuth authorization. Public OAuth URLs require a non-placeholder value of at least 8 characters."
        ],
        [
          {
            "code": "oauth_access_token_ttl_s"
          },
          {
            "lines": [
              {
                "code": "--oauth-access-token-ttl-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_OAUTH_ACCESS_TOKEN_TTL_S"
          },
          "integer",
          {
            "code": "3600"
          },
          "Bearer token lifetime in seconds. After this time, the token must be re-authorized and refreshed."
        ],
        [
          {
            "code": "oauth_code_ttl_s"
          },
          {
            "lines": [
              {
                "code": "--oauth-code-ttl-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_OAUTH_CODE_TTL_S"
          },
          "integer",
          {
            "code": "300"
          },
          "OAuth authorization-code lifetime in seconds. The authorization must be done within this time."
        ],
        [
          {
            "code": "oauth_max_pending_codes"
          },
          {
            "lines": [
              {
                "code": "--oauth-max-pending-codes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_OAUTH_MAX_PENDING_CODES"
          },
          "integer",
          {
            "code": "2048"
          },
          "Maximum unused, unexpired OAuth authorization codes kept in memory; set to 0 to disable this capacity limit."
        ],
        [
          {
            "code": "oauth_client_ttl_s"
          },
          {
            "lines": [
              {
                "code": "--oauth-client-ttl-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_OAUTH_CLIENT_TTL_S"
          },
          "integer",
          {
            "code": "86400"
          },
          "Pending OAuth client registration lifetime in seconds. Approved clients are persisted without this TTL; set to 0 to disable pending expiration."
        ],
        [
          {
            "code": "oauth_max_dynamic_clients"
          },
          {
            "lines": [
              {
                "code": "--oauth-max-dynamic-clients"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_OAUTH_MAX_DYNAMIC_CLIENTS"
          },
          "integer",
          {
            "code": "256"
          },
          "Maximum pending OAuth client registrations kept in memory. Approved clients do not count; set to 0 to disable this capacity limit."
        ],
        [
          {
            "code": "oauth_registration_max_body_bytes"
          },
          {
            "lines": [
              {
                "code": "--oauth-registration-max-body-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_OAUTH_REGISTRATION_MAX_BODY_BYTES"
          },
          "integer",
          {
            "code": "16384"
          },
          "Maximum JSON body size accepted by dynamic OAuth client registration."
        ],
        [
          {
            "code": "oauth_registration_max_redirect_uris"
          },
          {
            "lines": [
              {
                "code": "--oauth-registration-max-redirect-uris"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_OAUTH_REGISTRATION_MAX_REDIRECT_URIS"
          },
          "integer",
          {
            "code": "10"
          },
          "Maximum redirect URIs accepted in one dynamic OAuth client registration."
        ],
        [
          {
            "code": "oauth_registration_max_redirect_uri_chars"
          },
          {
            "lines": [
              {
                "code": "--oauth-registration-max-redirect-uri-chars"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_OAUTH_REGISTRATION_MAX_REDIRECT_URI_CHARS"
          },
          "integer",
          {
            "code": "2048"
          },
          "Maximum length of each dynamic OAuth client redirect URI."
        ],
        [
          {
            "code": "oauth_registration_max_client_name_chars"
          },
          {
            "lines": [
              {
                "code": "--oauth-registration-max-client-name-chars"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_OAUTH_REGISTRATION_MAX_CLIENT_NAME_CHARS"
          },
          "integer",
          {
            "code": "200"
          },
          "Maximum length of a dynamic OAuth client display name."
        ]
      ]
    },
    {
      "headers": [
        "Setting",
        "CLI",
        "Environment",
        "Type",
        "Default",
        "Description"
      ],
      "heading": "Safety and resource limits",
      "kind": "table",
      "rows": [
        [
          {
            "code": "allow_full_control"
          },
          {
            "lines": [
              {
                "code": "--allow-full-control"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_ALLOW_FULL_CONTROL"
          },
          "true | false",
          {
            "code": "false"
          },
          "Disable built-in workspace and command restrictions; use only in disposable containers or VMs. MCP safety annotations remain conservative in this mode."
        ],
        [
          {
            "code": "tool_timeout_s"
          },
          {
            "lines": [
              {
                "code": "--tool-timeout-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_TOOL_TIMEOUT_S"
          },
          "number",
          {
            "code": "60"
          },
          "Base MCP/HTTP tool watchdog timeout in seconds. Shell execution tools receive additional bounded cleanup time beyond run_shell_max_timeout_s."
        ],
        [
          {
            "code": "run_shell_default_timeout_s"
          },
          {
            "lines": [
              {
                "code": "--run-shell-default-timeout-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_RUN_SHELL_DEFAULT_TIMEOUT_S"
          },
          "integer",
          {
            "code": "10"
          },
          "Default timeout for bounded shell command calls in seconds."
        ],
        [
          {
            "code": "run_shell_max_timeout_s"
          },
          {
            "lines": [
              {
                "code": "--run-shell-max-timeout-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_RUN_SHELL_MAX_TIMEOUT_S"
          },
          "integer",
          {
            "code": "120"
          },
          "Maximum timeout accepted by bounded shell command calls in seconds."
        ],
        [
          {
            "code": "max_output_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-output-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_OUTPUT_BYTES"
          },
          "integer",
          {
            "code": "200000"
          },
          "Command output limit in bytes."
        ],
        [
          {
            "code": "max_job_log_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-job-log-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_JOB_LOG_BYTES"
          },
          "integer",
          {
            "code": "10000000"
          },
          "Maximum retained output bytes for one tracked background-job attempt."
        ],
        [
          {
            "code": "max_jobs"
          },
          {
            "lines": [
              {
                "code": "--max-jobs"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_JOBS"
          },
          "integer",
          {
            "code": "1000"
          },
          "Maximum retained tracked-job records; active jobs are never pruned."
        ],
        [
          {
            "code": "max_agent_sessions"
          },
          {
            "lines": [
              {
                "code": "--max-agent-sessions"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_AGENT_SESSIONS"
          },
          "integer",
          {
            "code": "256"
          },
          "Maximum durable agent/workspace sessions after stale-session pruning."
        ],
        [
          {
            "code": "agent_session_retention_s"
          },
          {
            "lines": [
              {
                "code": "--agent-session-retention-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_AGENT_SESSION_RETENTION_S"
          },
          "integer",
          {
            "code": "2592000"
          },
          "Idle retention for durable agent/workspace sessions; 0 disables age-based expiry."
        ],
        [
          {
            "code": "max_session_snapshots"
          },
          {
            "lines": [
              {
                "code": "--max-session-snapshots"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_SESSION_SNAPSHOTS"
          },
          "integer",
          {
            "code": "2000"
          },
          "Maximum grounding snapshots retained for one agent session."
        ],
        [
          {
            "code": "max_session_snapshot_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-session-snapshot-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_SESSION_SNAPSHOT_BYTES"
          },
          "integer",
          {
            "code": "8388608"
          },
          "Maximum encoded grounding-snapshot metadata retained for one session."
        ],
        [
          {
            "code": "max_file_read_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-file-read-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_FILE_READ_BYTES"
          },
          "integer",
          {
            "code": "512000"
          },
          "Per-file read limit in bytes."
        ],
        [
          {
            "code": "max_view_image_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-view-image-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_VIEW_IMAGE_BYTES"
          },
          "integer",
          {
            "code": "20971520"
          },
          "Maximum raw bytes accepted by the native MCP image viewer."
        ],
        [
          {
            "code": "max_skills"
          },
          {
            "lines": [
              {
                "code": "--max-skills"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_SKILLS"
          },
          "integer",
          {
            "code": "256"
          },
          "Maximum number of discovered Skills across all configured sources."
        ],
        [
          {
            "code": "max_skill_related_files"
          },
          {
            "lines": [
              {
                "code": "--max-skill-related-files"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_SKILL_RELATED_FILES"
          },
          "integer",
          {
            "code": "1000"
          },
          "Maximum related files returned for one Skill."
        ],
        [
          {
            "code": "max_skill_scan_entries"
          },
          {
            "lines": [
              {
                "code": "--max-skill-scan-entries"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_SKILL_SCAN_ENTRIES"
          },
          "integer",
          {
            "code": "5000"
          },
          "Maximum filesystem entries inspected during one Skill registry scan."
        ],
        [
          {
            "code": "max_skill_path_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-skill-path-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_SKILL_PATH_BYTES"
          },
          "integer",
          {
            "code": "200000"
          },
          "Maximum UTF-8 bytes used by returned related Skill paths."
        ],
        [
          {
            "code": "max_file_write_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-file-write-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_FILE_WRITE_BYTES"
          },
          "integer",
          {
            "code": "5000000"
          },
          "Per-file write/edit limit in bytes."
        ],
        [
          {
            "code": "max_grep_results"
          },
          {
            "lines": [
              {
                "code": "--max-grep-results"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_GREP_RESULTS"
          },
          "integer",
          {
            "code": "200"
          },
          "Maximum grep result count."
        ],
        [
          {
            "code": "max_directory_entries"
          },
          {
            "lines": [
              {
                "code": "--max-directory-entries"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_DIRECTORY_ENTRIES"
          },
          "integer",
          {
            "code": "5000"
          },
          "Maximum listed directory entries."
        ],
        [
          {
            "code": "max_glob_results"
          },
          {
            "lines": [
              {
                "code": "--max-glob-results"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_GLOB_RESULTS"
          },
          "integer",
          {
            "code": "5000"
          },
          "Maximum glob search results."
        ],
        [
          {
            "code": "max_tree_entries"
          },
          {
            "lines": [
              {
                "code": "--max-tree-entries"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_TREE_ENTRIES"
          },
          "integer",
          {
            "code": "5000"
          },
          "Maximum tree-view entries."
        ],
        [
          {
            "code": "max_read_many_files"
          },
          {
            "lines": [
              {
                "code": "--max-read-many-files"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_READ_MANY_FILES"
          },
          "integer",
          {
            "code": "100"
          },
          "Maximum files allowed in one internal multi-file read operation."
        ],
        [
          {
            "code": "max_read_many_total_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-read-many-total-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_READ_MANY_TOTAL_BYTES"
          },
          "integer",
          {
            "code": "5000000"
          },
          "Maximum total byte limit for one internal multi-file read operation."
        ],
        [
          {
            "code": "max_todos"
          },
          {
            "lines": [
              {
                "code": "--max-todos"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_TODOS"
          },
          "integer",
          {
            "code": "1000"
          },
          "Todo-list item limit."
        ],
        [
          {
            "code": "max_todo_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-todo-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_TODO_BYTES"
          },
          "integer",
          {
            "code": "1000000"
          },
          "Todo-list total byte limit."
        ],
        [
          {
            "code": "max_http_request_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-http-request-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_HTTP_REQUEST_BYTES"
          },
          "integer",
          {
            "code": "16000000"
          },
          "Maximum inbound HTTP request-body bytes; 0 disables the shared limit."
        ],
        [
          {
            "code": "max_audit_log_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-audit-log-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_AUDIT_LOG_BYTES"
          },
          "integer",
          {
            "code": "20000000"
          },
          "Maximum active audit JSONL bytes before atomic recent-record retention."
        ],
        [
          {
            "code": "max_audit_event_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-audit-event-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_AUDIT_EVENT_BYTES"
          },
          "integer",
          {
            "code": "1000000"
          },
          "Maximum encoded bytes retained for one audit event before preview truncation."
        ],
        [
          {
            "code": "audit_payloads_enabled"
          },
          {
            "lines": [
              {
                "code": "--audit-payloads-enabled"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_AUDIT_PAYLOADS_ENABLED"
          },
          "true | false",
          {
            "code": "true"
          },
          "Store large sanitized audit field values as private content-addressed payloads."
        ],
        [
          {
            "code": "audit_inline_value_bytes"
          },
          {
            "lines": [
              {
                "code": "--audit-inline-value-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_AUDIT_INLINE_VALUE_BYTES"
          },
          "integer",
          {
            "code": "16384"
          },
          "Maximum canonical JSON bytes kept inline for one sanitized audit field value."
        ],
        [
          {
            "code": "max_audit_payload_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-audit-payload-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_AUDIT_PAYLOAD_BYTES"
          },
          "integer",
          {
            "code": "67108864"
          },
          "Maximum canonical JSON bytes accepted for one recoverable sanitized audit payload."
        ],
        [
          {
            "code": "max_audit_payload_store_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-audit-payload-store-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_AUDIT_PAYLOAD_STORE_BYTES"
          },
          "integer",
          {
            "code": "268435456"
          },
          "Maximum compressed bytes retained in the private audit payload store."
        ],
        [
          {
            "code": "audit_payload_retention_s"
          },
          {
            "lines": [
              {
                "code": "--audit-payload-retention-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_AUDIT_PAYLOAD_RETENTION_S"
          },
          "integer",
          {
            "code": "604800"
          },
          "Recovery lifetime and orphan grace period for private audit payload objects."
        ],
        [
          {
            "code": "max_tmp_files"
          },
          {
            "lines": [
              {
                "code": "--max-tmp-files"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_TMP_FILES"
          },
          "integer",
          {
            "code": "500"
          },
          "Temporary-file count limit. When exceeded, old files are deleted."
        ],
        [
          {
            "code": "max_tmp_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-tmp-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_TMP_BYTES"
          },
          "integer",
          {
            "code": "50000000"
          },
          "Temporary-file byte limit. When exceeded, old files are deleted."
        ],
        [
          {
            "code": "max_transfer_archive_entries"
          },
          {
            "lines": [
              {
                "code": "--max-transfer-archive-entries"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_TRANSFER_ARCHIVE_ENTRIES"
          },
          "integer",
          {
            "code": "100000"
          },
          "Maximum entries accepted from one transferred archive."
        ],
        [
          {
            "code": "max_transfer_unpacked_bytes"
          },
          {
            "lines": [
              {
                "code": "--max-transfer-unpacked-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_TRANSFER_UNPACKED_BYTES"
          },
          "integer",
          {
            "code": "10000000000"
          },
          "Maximum declared regular-file bytes accepted while unpacking an archive."
        ],
        [
          {
            "code": "max_concurrent_commands"
          },
          {
            "lines": [
              {
                "code": "--max-concurrent-commands"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_CONCURRENT_COMMANDS"
          },
          "integer",
          {
            "code": "4"
          },
          "Concurrent command limit."
        ],
        [
          {
            "code": "max_tmux_sessions"
          },
          {
            "lines": [
              {
                "code": "--max-tmux-sessions"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_MAX_TMUX_SESSIONS"
          },
          "integer",
          {
            "code": "16"
          },
          "Persistent shell limit."
        ],
        [
          {
            "code": "file_download_enabled"
          },
          {
            "lines": [
              {
                "code": "--file-download-enabled"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_FILE_DOWNLOAD_ENABLED"
          },
          "true | false",
          {
            "code": "true"
          },
          "Enable download links created by protected tools."
        ],
        [
          {
            "code": "file_download_default_ttl_s"
          },
          {
            "lines": [
              {
                "code": "--file-download-default-ttl-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_FILE_DOWNLOAD_DEFAULT_TTL_S"
          },
          "integer",
          {
            "code": "3600"
          },
          "Default lifetime for file download links in seconds."
        ],
        [
          {
            "code": "file_download_max_ttl_s"
          },
          {
            "lines": [
              {
                "code": "--file-download-max-ttl-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_FILE_DOWNLOAD_MAX_TTL_S"
          },
          "integer",
          {
            "code": "604800"
          },
          "Maximum lifetime accepted for file download links in seconds."
        ],
        [
          {
            "code": "file_download_default_max_downloads"
          },
          {
            "lines": [
              {
                "code": "--file-download-default-max-downloads"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_FILE_DOWNLOAD_DEFAULT_MAX_DOWNLOADS"
          },
          "integer",
          {
            "code": "0"
          },
          "Default download-count limit for file links; 0 means unlimited until expiry."
        ],
        [
          {
            "code": "file_download_max_file_bytes"
          },
          {
            "lines": [
              {
                "code": "--file-download-max-file-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_FILE_DOWNLOAD_MAX_FILE_BYTES"
          },
          "integer",
          {
            "code": "0"
          },
          "Maximum file size allowed for download links; 0 disables this size limit."
        ],
        [
          {
            "code": "command_denylist"
          },
          {
            "lines": [
              {
                "code": "--command-denylist"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_COMMAND_DENYLIST"
          },
          "CSV or YAML list",
          {
            "code": "docker.sock,/var/run/docker.sock,mkfs,mount,umount,shutdown,reboot,systemctl,iptables,nft"
          },
          "Comma-separated command denylist in env/CLI, or a YAML list in config files. Cleared when full-control mode is enabled."
        ],
        [
          {
            "code": "path_denylist"
          },
          {
            "lines": [
              {
                "code": "--path-denylist"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_PATH_DENYLIST"
          },
          "CSV or YAML list",
          {
            "code": ".ssh/id_rsa,.ssh/id_ed25519,.env,secrets,credentials,.git/config"
          },
          "Comma-separated path denylist in env/CLI, or a YAML list in config files. Cleared when full-control mode is enabled."
        ]
      ]
    },
    {
      "headers": [
        "Setting",
        "CLI",
        "Environment",
        "Type",
        "Default",
        "Description"
      ],
      "heading": "Remote workers",
      "kind": "table",
      "rows": [
        [
          {
            "code": "remote_enabled"
          },
          {
            "lines": [
              {
                "code": "--remote-enabled"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_REMOTE_ENABLED"
          },
          "true | false",
          {
            "code": "true"
          },
          "Enable remote worker routes and MCP tools."
        ],
        [
          {
            "code": "remote_invite_ttl_s"
          },
          {
            "lines": [
              {
                "code": "--remote-invite-ttl-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_REMOTE_INVITE_TTL_S"
          },
          "integer",
          {
            "code": "600"
          },
          "One-time remote worker invite lifetime in seconds."
        ],
        [
          {
            "code": "remote_poll_timeout_s"
          },
          {
            "lines": [
              {
                "code": "--remote-poll-timeout-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_REMOTE_POLL_TIMEOUT_S"
          },
          "integer",
          {
            "code": "25"
          },
          "Remote worker long-poll heartbeat timeout in seconds."
        ],
        [
          {
            "code": "remote_job_timeout_s"
          },
          {
            "lines": [
              {
                "code": "--remote-job-timeout-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_REMOTE_JOB_TIMEOUT_S"
          },
          "integer",
          {
            "code": "3600"
          },
          "Control-side remote job result timeout in seconds."
        ],
        [
          {
            "code": "remote_max_pending_jobs"
          },
          {
            "lines": [
              {
                "code": "--remote-max-pending-jobs"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_REMOTE_MAX_PENDING_JOBS"
          },
          "integer",
          {
            "code": "64"
          },
          "Maximum queued or in-flight remote jobs allowed per worker."
        ],
        [
          {
            "code": "remote_http_transfer_enabled"
          },
          {
            "lines": [
              {
                "code": "--remote-http-transfer-enabled"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_REMOTE_HTTP_TRANSFER_ENABLED"
          },
          "true | false",
          {
            "code": "true"
          },
          "Use the private resumable HTTP gateway for capable large session copies."
        ],
        [
          {
            "code": "remote_http_transfer_threshold_bytes"
          },
          {
            "lines": [
              {
                "code": "--remote-http-transfer-threshold-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_REMOTE_HTTP_TRANSFER_THRESHOLD_BYTES"
          },
          "integer",
          {
            "code": "1048576"
          },
          "Minimum payload size selected for private HTTP streaming."
        ],
        [
          {
            "code": "remote_http_transfer_chunk_bytes"
          },
          {
            "lines": [
              {
                "code": "--remote-http-transfer-chunk-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_REMOTE_HTTP_TRANSFER_CHUNK_BYTES"
          },
          "integer",
          {
            "code": "1048576"
          },
          "Maximum request or response chunk size for private HTTP transfer routes."
        ],
        [
          {
            "code": "remote_http_transfer_ticket_ttl_s"
          },
          {
            "lines": [
              {
                "code": "--remote-http-transfer-ticket-ttl-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_REMOTE_HTTP_TRANSFER_TICKET_TTL_S"
          },
          "integer",
          {
            "code": "300"
          },
          "Lifetime of a private transfer grant before it must be renewed."
        ],
        [
          {
            "code": "remote_http_transfer_max_active"
          },
          {
            "lines": [
              {
                "code": "--remote-http-transfer-max-active"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_REMOTE_HTTP_TRANSFER_MAX_ACTIVE"
          },
          "integer",
          {
            "code": "16"
          },
          "Maximum non-terminal private transfer objects retained concurrently."
        ],
        [
          {
            "code": "remote_http_transfer_max_spool_bytes"
          },
          {
            "lines": [
              {
                "code": "--remote-http-transfer-max-spool-bytes"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_REMOTE_HTTP_TRANSFER_MAX_SPOOL_BYTES"
          },
          "integer",
          {
            "code": "10737418240"
          },
          "Maximum aggregate bytes reserved by private controller transfer spools."
        ]
      ]
    },
    {
      "headers": [
        "Setting",
        "CLI",
        "Environment",
        "Type",
        "Default",
        "Description"
      ],
      "heading": "Agent capability bridge",
      "kind": "table",
      "rows": [
        [
          {
            "code": "agent_bridge_enabled"
          },
          {
            "lines": [
              {
                "code": "--agent-bridge-enabled"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_AGENT_BRIDGE_ENABLED"
          },
          "true | false",
          {
            "code": "true"
          },
          "Enable agent capability bridge tools."
        ],
        [
          {
            "code": "agent_mcp_probe_timeout_s"
          },
          {
            "lines": [
              {
                "code": "--agent-mcp-probe-timeout-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_AGENT_MCP_PROBE_TIMEOUT_S"
          },
          "integer",
          {
            "code": "5"
          },
          "Agent MCP server probe timeout in seconds."
        ],
        [
          {
            "code": "agent_mcp_call_timeout_s"
          },
          {
            "lines": [
              {
                "code": "--agent-mcp-call-timeout-s"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_AGENT_MCP_CALL_TIMEOUT_S"
          },
          "integer",
          {
            "code": "60"
          },
          "Agent MCP tool-call timeout in seconds."
        ],
        [
          {
            "code": "agent_dynamic_mcp_tools"
          },
          {
            "lines": [
              {
                "code": "--agent-dynamic-mcp-tools"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_AGENT_DYNAMIC_MCP_TOOLS"
          },
          "true | false",
          {
            "code": "true"
          },
          "Register dynamic MCP bridge tools."
        ],
        [
          {
            "code": "agent_dynamic_skill_tools"
          },
          {
            "lines": [
              {
                "code": "--agent-dynamic-skill-tools"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_AGENT_DYNAMIC_SKILL_TOOLS"
          },
          "true | false",
          {
            "code": "true"
          },
          "Register dynamic skill bridge tools."
        ]
      ]
    },
    {
      "headers": [
        "Setting",
        "CLI",
        "Environment",
        "Type",
        "Default",
        "Description"
      ],
      "heading": "Tool executables",
      "kind": "table",
      "rows": [
        [
          {
            "code": "shell_executable"
          },
          {
            "lines": [
              {
                "code": "--shell-executable"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_SHELL_EXECUTABLE"
          },
          "string",
          {
            "code": "/bin/bash"
          },
          "Shell executable for bounded and persistent sessions; the POSIX default maps to COMSPEC on Windows."
        ],
        [
          {
            "code": "tmux_bin"
          },
          {
            "lines": [
              {
                "code": "--tmux-bin"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_TMUX_BIN"
          },
          "string",
          {
            "code": "tmux"
          },
          "tmux executable."
        ],
        [
          {
            "code": "rg_bin"
          },
          {
            "lines": [
              {
                "code": "--rg-bin"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_RG_BIN"
          },
          "string",
          {
            "code": "rg"
          },
          "ripgrep executable."
        ],
        [
          {
            "code": "git_bin"
          },
          {
            "lines": [
              {
                "code": "--git-bin"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_GIT_BIN"
          },
          "string",
          {
            "code": "git"
          },
          "Git executable used for patch validation and application."
        ],
        [
          {
            "code": "python_bin"
          },
          {
            "lines": [
              {
                "code": "--python-bin"
              }
            ]
          },
          {
            "code": "LOCAL_SHELL_MCP_PYTHON_BIN"
          },
          "string",
          {
            "code": "python3"
          },
          "Python executable; the POSIX default maps to the running interpreter on Windows."
        ]
      ]
    },
    {
      "body": "These variables are consumed by the Docker entrypoint before the Python application starts.",
      "headers": [
        "Environment",
        "Default",
        "Description"
      ],
      "heading": "Docker entrypoint settings",
      "kind": "table",
      "rows": [
        [
          {
            "code": "DOCKER_RUN_AS_ROOT"
          },
          {
            "code": "false"
          },
          "Run the Dockerized MCP server itself as root. Prefer explicit sudo inside commands instead."
        ],
        [
          {
            "code": "DOCKER_PERSISTENT_CREDENTIALS"
          },
          {
            "code": "true"
          },
          "Persist GitHub CLI, Git HTTPS credentials, GitCode credentials, SSH keys, .netrc, and GPG state across container rebuilds."
        ],
        [
          {
            "code": "DOCKER_CREDENTIALS_DIR"
          },
          {
            "code": "/persist/credentials"
          },
          "Root directory for persisted credentials. The Docker Compose example stores it in the local-shell-mcp-credentials volume."
        ],
        [
          {
            "code": "DOCKER_AGENT_UID"
          },
          {
            "code": "unset"
          },
          "Optional UID for the agent user at container startup. Leave empty to auto-detect the mounted workspace owner; set explicitly to override."
        ],
        [
          {
            "code": "DOCKER_AGENT_GID"
          },
          {
            "code": "unset"
          },
          "Optional GID for the agent user at container startup. Leave empty to auto-detect the mounted workspace owner; set explicitly to override."
        ],
        [
          {
            "code": "DOCKER_CHOWN_WORKSPACE"
          },
          {
            "code": "true"
          },
          "chown the mounted workspace to the agent user before starting the server."
        ]
      ]
    },
    {
      "headers": [
        "Environment",
        "Default",
        "Description"
      ],
      "heading": "Optional sidecar settings",
      "kind": "table",
      "rows": [
        [
          {
            "code": "CLOUDFLARE_TUNNEL_TOKEN"
          },
          {
            "code": "unset"
          },
          "Optional token for the cloudflared tunnel sidecar profile. This uses Cloudflare Tunnel only, not Cloudflare Access."
        ]
      ]
    }
  ],
  "settings": [
    {
      "choices": [
        "mcp",
        "http",
        "both",
        "stdio"
      ],
      "cli": "--mode",
      "default": "mcp",
      "default_display": "mcp",
      "description": "Server transport mode.",
      "env": "LOCAL_SHELL_MCP_MODE",
      "name": "mode",
      "nullable": false,
      "section": "Server",
      "type": "mcp | http | both | stdio",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--host",
      "default": "0.0.0.0",
      "default_display": "0.0.0.0",
      "description": "Bind host for HTTP/MCP transports.",
      "env": "LOCAL_SHELL_MCP_HOST",
      "name": "host",
      "nullable": false,
      "section": "Server",
      "type": "string",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--port",
      "default": 8765,
      "default_display": "8765",
      "description": "Bind port for HTTP/MCP transports.",
      "env": "LOCAL_SHELL_MCP_PORT",
      "name": "port",
      "nullable": false,
      "section": "Server",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [
        "true",
        "false"
      ],
      "cli": "--ui-enabled",
      "default": true,
      "default_display": "true",
      "description": "Mount the browser Human UI and its authenticated API on the HTTP server.",
      "env": "LOCAL_SHELL_MCP_UI_ENABLED",
      "name": "ui_enabled",
      "nullable": false,
      "section": "Human interface",
      "type": "true | false",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--ui-path",
      "default": "/ui",
      "default_display": "/ui",
      "description": "Non-root URL path where the browser Human UI is mounted.",
      "env": "LOCAL_SHELL_MCP_UI_PATH",
      "name": "ui_path",
      "nullable": false,
      "section": "Human interface",
      "type": "string",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--ui-tui-command",
      "default": null,
      "default_display": "unset",
      "description": "Optional administrator-supplied OpenTUI executable command.",
      "env": "LOCAL_SHELL_MCP_UI_TUI_COMMAND",
      "name": "ui_tui_command",
      "nullable": true,
      "section": "Human interface",
      "type": "string",
      "unset_cli": "--unset-ui-tui-command"
    },
    {
      "choices": [],
      "cli": "--ui-terminal-idle-timeout-s",
      "default": 3600,
      "default_display": "3600",
      "description": "Idle timeout for authenticated Human UI terminal WebSockets; 0 disables idle expiry.",
      "env": "LOCAL_SHELL_MCP_UI_TERMINAL_IDLE_TIMEOUT_S",
      "name": "ui_terminal_idle_timeout_s",
      "nullable": false,
      "section": "Human interface",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--ui-terminal-max-connections",
      "default": 8,
      "default_display": "8",
      "description": "Maximum concurrent Human UI terminal WebSocket connections.",
      "env": "LOCAL_SHELL_MCP_UI_TERMINAL_MAX_CONNECTIONS",
      "name": "ui_terminal_max_connections",
      "nullable": false,
      "section": "Human interface",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [
        "aurora",
        "grid",
        "none"
      ],
      "cli": "--ui-wallpaper",
      "default": "aurora",
      "default_display": "aurora",
      "description": "Browser Human UI background treatment; no external network image is fetched.",
      "env": "LOCAL_SHELL_MCP_UI_WALLPAPER",
      "name": "ui_wallpaper",
      "nullable": false,
      "section": "Human interface",
      "type": "aurora | grid | none",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--workspace-root",
      "default": "/workspace",
      "default_display": "/workspace",
      "description": "Root directory for workspace.",
      "env": "LOCAL_SHELL_MCP_WORKSPACE_ROOT",
      "name": "workspace_root",
      "nullable": false,
      "section": "Paths and state",
      "type": "path",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--state-dir",
      "default": "/workspace/.local-shell-mcp",
      "default_display": "/workspace/.local-shell-mcp",
      "description": "Directory for runtime state. Including audit logs, temporary files, and config",
      "env": "LOCAL_SHELL_MCP_STATE_DIR",
      "name": "state_dir",
      "nullable": false,
      "section": "Paths and state",
      "type": "path",
      "unset_cli": null
    },
    {
      "choices": [
        "none",
        "oauth"
      ],
      "cli": "--auth-mode",
      "default": "oauth",
      "default_display": "oauth",
      "description": "Authentication mode. Do not expose public services with none.",
      "env": "LOCAL_SHELL_MCP_AUTH_MODE",
      "name": "auth_mode",
      "nullable": false,
      "section": "Authentication and OAuth",
      "type": "none | oauth",
      "unset_cli": null
    },
    {
      "choices": [
        "true",
        "false"
      ],
      "cli": "--auth-bypass-localhost",
      "default": false,
      "default_display": "false",
      "description": "Allow localhost requests without bearer authentication. Keep disabled when exposing HTTP through proxies or shared hosts.",
      "env": "LOCAL_SHELL_MCP_AUTH_BYPASS_LOCALHOST",
      "name": "auth_bypass_localhost",
      "nullable": false,
      "section": "Authentication and OAuth",
      "type": "true | false",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--mcp-session-idle-timeout-s",
      "default": 180,
      "default_display": "180",
      "description": "Idle timeout for stateful Streamable HTTP MCP sessions in seconds.",
      "env": "LOCAL_SHELL_MCP_MCP_SESSION_IDLE_TIMEOUT_S",
      "name": "mcp_session_idle_timeout_s",
      "nullable": false,
      "section": "Authentication and OAuth",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--mcp-max-sessions",
      "default": 1024,
      "default_display": "1024",
      "description": "Maximum concurrent stateful Streamable HTTP MCP sessions.",
      "env": "LOCAL_SHELL_MCP_MCP_MAX_SESSIONS",
      "name": "mcp_max_sessions",
      "nullable": false,
      "section": "Authentication and OAuth",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--base-url",
      "default": null,
      "default_display": "unset",
      "description": "Externally reachable base URL used for OAuth metadata, callbacks, and generated links. If unset, URLs fall back to the bind host and port; configure this before exposing the service behind a proxy or public hostname.",
      "env": "LOCAL_SHELL_MCP_BASE_URL",
      "name": "base_url",
      "nullable": true,
      "section": "Authentication and OAuth",
      "type": "string",
      "unset_cli": "--unset-base-url"
    },
    {
      "choices": [],
      "cli": "--oauth-issuer",
      "default": null,
      "default_display": "unset",
      "description": "Override URL for OAuth issuer metadata; usually derived from base_url.",
      "env": "LOCAL_SHELL_MCP_OAUTH_ISSUER",
      "name": "oauth_issuer",
      "nullable": true,
      "section": "Authentication and OAuth",
      "type": "string",
      "unset_cli": "--unset-oauth-issuer"
    },
    {
      "choices": [],
      "cli": "--oauth-resource",
      "default": null,
      "default_display": "unset",
      "description": "Override URL for OAuth resource metadata; usually derived from base_url plus /mcp.",
      "env": "LOCAL_SHELL_MCP_OAUTH_RESOURCE",
      "name": "oauth_resource",
      "nullable": true,
      "section": "Authentication and OAuth",
      "type": "string",
      "unset_cli": "--unset-oauth-resource"
    },
    {
      "choices": [],
      "cli": "--oauth-admin-pin",
      "default": null,
      "default_display": "unset",
      "description": "Admin PIN required to approve OAuth authorization. Public OAuth URLs require a non-placeholder value of at least 8 characters.",
      "env": "LOCAL_SHELL_MCP_OAUTH_ADMIN_PIN",
      "name": "oauth_admin_pin",
      "nullable": true,
      "section": "Authentication and OAuth",
      "type": "string",
      "unset_cli": "--unset-oauth-admin-pin"
    },
    {
      "choices": [],
      "cli": "--oauth-access-token-ttl-s",
      "default": 3600,
      "default_display": "3600",
      "description": "Bearer token lifetime in seconds. After this time, the token must be re-authorized and refreshed.",
      "env": "LOCAL_SHELL_MCP_OAUTH_ACCESS_TOKEN_TTL_S",
      "name": "oauth_access_token_ttl_s",
      "nullable": false,
      "section": "Authentication and OAuth",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--oauth-code-ttl-s",
      "default": 300,
      "default_display": "300",
      "description": "OAuth authorization-code lifetime in seconds. The authorization must be done within this time.",
      "env": "LOCAL_SHELL_MCP_OAUTH_CODE_TTL_S",
      "name": "oauth_code_ttl_s",
      "nullable": false,
      "section": "Authentication and OAuth",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--oauth-max-pending-codes",
      "default": 2048,
      "default_display": "2048",
      "description": "Maximum unused, unexpired OAuth authorization codes kept in memory; set to 0 to disable this capacity limit.",
      "env": "LOCAL_SHELL_MCP_OAUTH_MAX_PENDING_CODES",
      "name": "oauth_max_pending_codes",
      "nullable": false,
      "section": "Authentication and OAuth",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--oauth-client-ttl-s",
      "default": 86400,
      "default_display": "86400",
      "description": "Pending OAuth client registration lifetime in seconds. Approved clients are persisted without this TTL; set to 0 to disable pending expiration.",
      "env": "LOCAL_SHELL_MCP_OAUTH_CLIENT_TTL_S",
      "name": "oauth_client_ttl_s",
      "nullable": false,
      "section": "Authentication and OAuth",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--oauth-max-dynamic-clients",
      "default": 256,
      "default_display": "256",
      "description": "Maximum pending OAuth client registrations kept in memory. Approved clients do not count; set to 0 to disable this capacity limit.",
      "env": "LOCAL_SHELL_MCP_OAUTH_MAX_DYNAMIC_CLIENTS",
      "name": "oauth_max_dynamic_clients",
      "nullable": false,
      "section": "Authentication and OAuth",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--oauth-registration-max-body-bytes",
      "default": 16384,
      "default_display": "16384",
      "description": "Maximum JSON body size accepted by dynamic OAuth client registration.",
      "env": "LOCAL_SHELL_MCP_OAUTH_REGISTRATION_MAX_BODY_BYTES",
      "name": "oauth_registration_max_body_bytes",
      "nullable": false,
      "section": "Authentication and OAuth",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--oauth-registration-max-redirect-uris",
      "default": 10,
      "default_display": "10",
      "description": "Maximum redirect URIs accepted in one dynamic OAuth client registration.",
      "env": "LOCAL_SHELL_MCP_OAUTH_REGISTRATION_MAX_REDIRECT_URIS",
      "name": "oauth_registration_max_redirect_uris",
      "nullable": false,
      "section": "Authentication and OAuth",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--oauth-registration-max-redirect-uri-chars",
      "default": 2048,
      "default_display": "2048",
      "description": "Maximum length of each dynamic OAuth client redirect URI.",
      "env": "LOCAL_SHELL_MCP_OAUTH_REGISTRATION_MAX_REDIRECT_URI_CHARS",
      "name": "oauth_registration_max_redirect_uri_chars",
      "nullable": false,
      "section": "Authentication and OAuth",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--oauth-registration-max-client-name-chars",
      "default": 200,
      "default_display": "200",
      "description": "Maximum length of a dynamic OAuth client display name.",
      "env": "LOCAL_SHELL_MCP_OAUTH_REGISTRATION_MAX_CLIENT_NAME_CHARS",
      "name": "oauth_registration_max_client_name_chars",
      "nullable": false,
      "section": "Authentication and OAuth",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [
        "true",
        "false"
      ],
      "cli": "--allow-full-control",
      "default": false,
      "default_display": "false",
      "description": "Disable built-in workspace and command restrictions; use only in disposable containers or VMs. MCP safety annotations remain conservative in this mode.",
      "env": "LOCAL_SHELL_MCP_ALLOW_FULL_CONTROL",
      "name": "allow_full_control",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "true | false",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--tool-timeout-s",
      "default": 60,
      "default_display": "60",
      "description": "Base MCP/HTTP tool watchdog timeout in seconds. Shell execution tools receive additional bounded cleanup time beyond run_shell_max_timeout_s.",
      "env": "LOCAL_SHELL_MCP_TOOL_TIMEOUT_S",
      "name": "tool_timeout_s",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "number",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--run-shell-default-timeout-s",
      "default": 10,
      "default_display": "10",
      "description": "Default timeout for bounded shell command calls in seconds.",
      "env": "LOCAL_SHELL_MCP_RUN_SHELL_DEFAULT_TIMEOUT_S",
      "name": "run_shell_default_timeout_s",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--run-shell-max-timeout-s",
      "default": 120,
      "default_display": "120",
      "description": "Maximum timeout accepted by bounded shell command calls in seconds.",
      "env": "LOCAL_SHELL_MCP_RUN_SHELL_MAX_TIMEOUT_S",
      "name": "run_shell_max_timeout_s",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-output-bytes",
      "default": 200000,
      "default_display": "200000",
      "description": "Command output limit in bytes.",
      "env": "LOCAL_SHELL_MCP_MAX_OUTPUT_BYTES",
      "name": "max_output_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-job-log-bytes",
      "default": 10000000,
      "default_display": "10000000",
      "description": "Maximum retained output bytes for one tracked background-job attempt.",
      "env": "LOCAL_SHELL_MCP_MAX_JOB_LOG_BYTES",
      "name": "max_job_log_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-jobs",
      "default": 1000,
      "default_display": "1000",
      "description": "Maximum retained tracked-job records; active jobs are never pruned.",
      "env": "LOCAL_SHELL_MCP_MAX_JOBS",
      "name": "max_jobs",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-agent-sessions",
      "default": 256,
      "default_display": "256",
      "description": "Maximum durable agent/workspace sessions after stale-session pruning.",
      "env": "LOCAL_SHELL_MCP_MAX_AGENT_SESSIONS",
      "name": "max_agent_sessions",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--agent-session-retention-s",
      "default": 2592000,
      "default_display": "2592000",
      "description": "Idle retention for durable agent/workspace sessions; 0 disables age-based expiry.",
      "env": "LOCAL_SHELL_MCP_AGENT_SESSION_RETENTION_S",
      "name": "agent_session_retention_s",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-session-snapshots",
      "default": 2000,
      "default_display": "2000",
      "description": "Maximum grounding snapshots retained for one agent session.",
      "env": "LOCAL_SHELL_MCP_MAX_SESSION_SNAPSHOTS",
      "name": "max_session_snapshots",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-session-snapshot-bytes",
      "default": 8388608,
      "default_display": "8388608",
      "description": "Maximum encoded grounding-snapshot metadata retained for one session.",
      "env": "LOCAL_SHELL_MCP_MAX_SESSION_SNAPSHOT_BYTES",
      "name": "max_session_snapshot_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-file-read-bytes",
      "default": 512000,
      "default_display": "512000",
      "description": "Per-file read limit in bytes.",
      "env": "LOCAL_SHELL_MCP_MAX_FILE_READ_BYTES",
      "name": "max_file_read_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-view-image-bytes",
      "default": 20971520,
      "default_display": "20971520",
      "description": "Maximum raw bytes accepted by the native MCP image viewer.",
      "env": "LOCAL_SHELL_MCP_MAX_VIEW_IMAGE_BYTES",
      "name": "max_view_image_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-skills",
      "default": 256,
      "default_display": "256",
      "description": "Maximum number of discovered Skills across all configured sources.",
      "env": "LOCAL_SHELL_MCP_MAX_SKILLS",
      "name": "max_skills",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-skill-related-files",
      "default": 1000,
      "default_display": "1000",
      "description": "Maximum related files returned for one Skill.",
      "env": "LOCAL_SHELL_MCP_MAX_SKILL_RELATED_FILES",
      "name": "max_skill_related_files",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-skill-scan-entries",
      "default": 5000,
      "default_display": "5000",
      "description": "Maximum filesystem entries inspected during one Skill registry scan.",
      "env": "LOCAL_SHELL_MCP_MAX_SKILL_SCAN_ENTRIES",
      "name": "max_skill_scan_entries",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-skill-path-bytes",
      "default": 200000,
      "default_display": "200000",
      "description": "Maximum UTF-8 bytes used by returned related Skill paths.",
      "env": "LOCAL_SHELL_MCP_MAX_SKILL_PATH_BYTES",
      "name": "max_skill_path_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-file-write-bytes",
      "default": 5000000,
      "default_display": "5000000",
      "description": "Per-file write/edit limit in bytes.",
      "env": "LOCAL_SHELL_MCP_MAX_FILE_WRITE_BYTES",
      "name": "max_file_write_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-grep-results",
      "default": 200,
      "default_display": "200",
      "description": "Maximum grep result count.",
      "env": "LOCAL_SHELL_MCP_MAX_GREP_RESULTS",
      "name": "max_grep_results",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-directory-entries",
      "default": 5000,
      "default_display": "5000",
      "description": "Maximum listed directory entries.",
      "env": "LOCAL_SHELL_MCP_MAX_DIRECTORY_ENTRIES",
      "name": "max_directory_entries",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-glob-results",
      "default": 5000,
      "default_display": "5000",
      "description": "Maximum glob search results.",
      "env": "LOCAL_SHELL_MCP_MAX_GLOB_RESULTS",
      "name": "max_glob_results",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-tree-entries",
      "default": 5000,
      "default_display": "5000",
      "description": "Maximum tree-view entries.",
      "env": "LOCAL_SHELL_MCP_MAX_TREE_ENTRIES",
      "name": "max_tree_entries",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-read-many-files",
      "default": 100,
      "default_display": "100",
      "description": "Maximum files allowed in one internal multi-file read operation.",
      "env": "LOCAL_SHELL_MCP_MAX_READ_MANY_FILES",
      "name": "max_read_many_files",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-read-many-total-bytes",
      "default": 5000000,
      "default_display": "5000000",
      "description": "Maximum total byte limit for one internal multi-file read operation.",
      "env": "LOCAL_SHELL_MCP_MAX_READ_MANY_TOTAL_BYTES",
      "name": "max_read_many_total_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-todos",
      "default": 1000,
      "default_display": "1000",
      "description": "Todo-list item limit.",
      "env": "LOCAL_SHELL_MCP_MAX_TODOS",
      "name": "max_todos",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-todo-bytes",
      "default": 1000000,
      "default_display": "1000000",
      "description": "Todo-list total byte limit.",
      "env": "LOCAL_SHELL_MCP_MAX_TODO_BYTES",
      "name": "max_todo_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-http-request-bytes",
      "default": 16000000,
      "default_display": "16000000",
      "description": "Maximum inbound HTTP request-body bytes; 0 disables the shared limit.",
      "env": "LOCAL_SHELL_MCP_MAX_HTTP_REQUEST_BYTES",
      "name": "max_http_request_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-audit-log-bytes",
      "default": 20000000,
      "default_display": "20000000",
      "description": "Maximum active audit JSONL bytes before atomic recent-record retention.",
      "env": "LOCAL_SHELL_MCP_MAX_AUDIT_LOG_BYTES",
      "name": "max_audit_log_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-audit-event-bytes",
      "default": 1000000,
      "default_display": "1000000",
      "description": "Maximum encoded bytes retained for one audit event before preview truncation.",
      "env": "LOCAL_SHELL_MCP_MAX_AUDIT_EVENT_BYTES",
      "name": "max_audit_event_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [
        "true",
        "false"
      ],
      "cli": "--audit-payloads-enabled",
      "default": true,
      "default_display": "true",
      "description": "Store large sanitized audit field values as private content-addressed payloads.",
      "env": "LOCAL_SHELL_MCP_AUDIT_PAYLOADS_ENABLED",
      "name": "audit_payloads_enabled",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "true | false",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--audit-inline-value-bytes",
      "default": 16384,
      "default_display": "16384",
      "description": "Maximum canonical JSON bytes kept inline for one sanitized audit field value.",
      "env": "LOCAL_SHELL_MCP_AUDIT_INLINE_VALUE_BYTES",
      "name": "audit_inline_value_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-audit-payload-bytes",
      "default": 67108864,
      "default_display": "67108864",
      "description": "Maximum canonical JSON bytes accepted for one recoverable sanitized audit payload.",
      "env": "LOCAL_SHELL_MCP_MAX_AUDIT_PAYLOAD_BYTES",
      "name": "max_audit_payload_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-audit-payload-store-bytes",
      "default": 268435456,
      "default_display": "268435456",
      "description": "Maximum compressed bytes retained in the private audit payload store.",
      "env": "LOCAL_SHELL_MCP_MAX_AUDIT_PAYLOAD_STORE_BYTES",
      "name": "max_audit_payload_store_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--audit-payload-retention-s",
      "default": 604800,
      "default_display": "604800",
      "description": "Recovery lifetime and orphan grace period for private audit payload objects.",
      "env": "LOCAL_SHELL_MCP_AUDIT_PAYLOAD_RETENTION_S",
      "name": "audit_payload_retention_s",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-tmp-files",
      "default": 500,
      "default_display": "500",
      "description": "Temporary-file count limit. When exceeded, old files are deleted.",
      "env": "LOCAL_SHELL_MCP_MAX_TMP_FILES",
      "name": "max_tmp_files",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-tmp-bytes",
      "default": 50000000,
      "default_display": "50000000",
      "description": "Temporary-file byte limit. When exceeded, old files are deleted.",
      "env": "LOCAL_SHELL_MCP_MAX_TMP_BYTES",
      "name": "max_tmp_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-transfer-archive-entries",
      "default": 100000,
      "default_display": "100000",
      "description": "Maximum entries accepted from one transferred archive.",
      "env": "LOCAL_SHELL_MCP_MAX_TRANSFER_ARCHIVE_ENTRIES",
      "name": "max_transfer_archive_entries",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-transfer-unpacked-bytes",
      "default": 10000000000,
      "default_display": "10000000000",
      "description": "Maximum declared regular-file bytes accepted while unpacking an archive.",
      "env": "LOCAL_SHELL_MCP_MAX_TRANSFER_UNPACKED_BYTES",
      "name": "max_transfer_unpacked_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-concurrent-commands",
      "default": 4,
      "default_display": "4",
      "description": "Concurrent command limit.",
      "env": "LOCAL_SHELL_MCP_MAX_CONCURRENT_COMMANDS",
      "name": "max_concurrent_commands",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--max-tmux-sessions",
      "default": 16,
      "default_display": "16",
      "description": "Persistent shell limit.",
      "env": "LOCAL_SHELL_MCP_MAX_TMUX_SESSIONS",
      "name": "max_tmux_sessions",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [
        "true",
        "false"
      ],
      "cli": "--file-download-enabled",
      "default": true,
      "default_display": "true",
      "description": "Enable download links created by protected tools.",
      "env": "LOCAL_SHELL_MCP_FILE_DOWNLOAD_ENABLED",
      "name": "file_download_enabled",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "true | false",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--file-download-default-ttl-s",
      "default": 3600,
      "default_display": "3600",
      "description": "Default lifetime for file download links in seconds.",
      "env": "LOCAL_SHELL_MCP_FILE_DOWNLOAD_DEFAULT_TTL_S",
      "name": "file_download_default_ttl_s",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--file-download-max-ttl-s",
      "default": 604800,
      "default_display": "604800",
      "description": "Maximum lifetime accepted for file download links in seconds.",
      "env": "LOCAL_SHELL_MCP_FILE_DOWNLOAD_MAX_TTL_S",
      "name": "file_download_max_ttl_s",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--file-download-default-max-downloads",
      "default": 0,
      "default_display": "0",
      "description": "Default download-count limit for file links; 0 means unlimited until expiry.",
      "env": "LOCAL_SHELL_MCP_FILE_DOWNLOAD_DEFAULT_MAX_DOWNLOADS",
      "name": "file_download_default_max_downloads",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--file-download-max-file-bytes",
      "default": 0,
      "default_display": "0",
      "description": "Maximum file size allowed for download links; 0 disables this size limit.",
      "env": "LOCAL_SHELL_MCP_FILE_DOWNLOAD_MAX_FILE_BYTES",
      "name": "file_download_max_file_bytes",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--command-denylist",
      "default": [
        "docker.sock",
        "/var/run/docker.sock",
        "mkfs",
        "mount",
        "umount",
        "shutdown",
        "reboot",
        "systemctl",
        "iptables",
        "nft"
      ],
      "default_display": "docker.sock,/var/run/docker.sock,mkfs,mount,umount,shutdown,reboot,systemctl,iptables,nft",
      "description": "Comma-separated command denylist in env/CLI, or a YAML list in config files. Cleared when full-control mode is enabled.",
      "env": "LOCAL_SHELL_MCP_COMMAND_DENYLIST",
      "name": "command_denylist",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "CSV or YAML list",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--path-denylist",
      "default": [
        ".ssh/id_rsa",
        ".ssh/id_ed25519",
        ".env",
        "secrets",
        "credentials",
        ".git/config"
      ],
      "default_display": ".ssh/id_rsa,.ssh/id_ed25519,.env,secrets,credentials,.git/config",
      "description": "Comma-separated path denylist in env/CLI, or a YAML list in config files. Cleared when full-control mode is enabled.",
      "env": "LOCAL_SHELL_MCP_PATH_DENYLIST",
      "name": "path_denylist",
      "nullable": false,
      "section": "Safety and resource limits",
      "type": "CSV or YAML list",
      "unset_cli": null
    },
    {
      "choices": [
        "true",
        "false"
      ],
      "cli": "--remote-enabled",
      "default": true,
      "default_display": "true",
      "description": "Enable remote worker routes and MCP tools.",
      "env": "LOCAL_SHELL_MCP_REMOTE_ENABLED",
      "name": "remote_enabled",
      "nullable": false,
      "section": "Remote workers",
      "type": "true | false",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--remote-invite-ttl-s",
      "default": 600,
      "default_display": "600",
      "description": "One-time remote worker invite lifetime in seconds.",
      "env": "LOCAL_SHELL_MCP_REMOTE_INVITE_TTL_S",
      "name": "remote_invite_ttl_s",
      "nullable": false,
      "section": "Remote workers",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--remote-poll-timeout-s",
      "default": 25,
      "default_display": "25",
      "description": "Remote worker long-poll heartbeat timeout in seconds.",
      "env": "LOCAL_SHELL_MCP_REMOTE_POLL_TIMEOUT_S",
      "name": "remote_poll_timeout_s",
      "nullable": false,
      "section": "Remote workers",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--remote-job-timeout-s",
      "default": 3600,
      "default_display": "3600",
      "description": "Control-side remote job result timeout in seconds.",
      "env": "LOCAL_SHELL_MCP_REMOTE_JOB_TIMEOUT_S",
      "name": "remote_job_timeout_s",
      "nullable": false,
      "section": "Remote workers",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--remote-max-pending-jobs",
      "default": 64,
      "default_display": "64",
      "description": "Maximum queued or in-flight remote jobs allowed per worker.",
      "env": "LOCAL_SHELL_MCP_REMOTE_MAX_PENDING_JOBS",
      "name": "remote_max_pending_jobs",
      "nullable": false,
      "section": "Remote workers",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [
        "true",
        "false"
      ],
      "cli": "--remote-http-transfer-enabled",
      "default": true,
      "default_display": "true",
      "description": "Use the private resumable HTTP gateway for capable large session copies.",
      "env": "LOCAL_SHELL_MCP_REMOTE_HTTP_TRANSFER_ENABLED",
      "name": "remote_http_transfer_enabled",
      "nullable": false,
      "section": "Remote workers",
      "type": "true | false",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--remote-http-transfer-threshold-bytes",
      "default": 1048576,
      "default_display": "1048576",
      "description": "Minimum payload size selected for private HTTP streaming.",
      "env": "LOCAL_SHELL_MCP_REMOTE_HTTP_TRANSFER_THRESHOLD_BYTES",
      "name": "remote_http_transfer_threshold_bytes",
      "nullable": false,
      "section": "Remote workers",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--remote-http-transfer-chunk-bytes",
      "default": 1048576,
      "default_display": "1048576",
      "description": "Maximum request or response chunk size for private HTTP transfer routes.",
      "env": "LOCAL_SHELL_MCP_REMOTE_HTTP_TRANSFER_CHUNK_BYTES",
      "name": "remote_http_transfer_chunk_bytes",
      "nullable": false,
      "section": "Remote workers",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--remote-http-transfer-ticket-ttl-s",
      "default": 300,
      "default_display": "300",
      "description": "Lifetime of a private transfer grant before it must be renewed.",
      "env": "LOCAL_SHELL_MCP_REMOTE_HTTP_TRANSFER_TICKET_TTL_S",
      "name": "remote_http_transfer_ticket_ttl_s",
      "nullable": false,
      "section": "Remote workers",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--remote-http-transfer-max-active",
      "default": 16,
      "default_display": "16",
      "description": "Maximum non-terminal private transfer objects retained concurrently.",
      "env": "LOCAL_SHELL_MCP_REMOTE_HTTP_TRANSFER_MAX_ACTIVE",
      "name": "remote_http_transfer_max_active",
      "nullable": false,
      "section": "Remote workers",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--remote-http-transfer-max-spool-bytes",
      "default": 10737418240,
      "default_display": "10737418240",
      "description": "Maximum aggregate bytes reserved by private controller transfer spools.",
      "env": "LOCAL_SHELL_MCP_REMOTE_HTTP_TRANSFER_MAX_SPOOL_BYTES",
      "name": "remote_http_transfer_max_spool_bytes",
      "nullable": false,
      "section": "Remote workers",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [
        "true",
        "false"
      ],
      "cli": "--agent-bridge-enabled",
      "default": true,
      "default_display": "true",
      "description": "Enable agent capability bridge tools.",
      "env": "LOCAL_SHELL_MCP_AGENT_BRIDGE_ENABLED",
      "name": "agent_bridge_enabled",
      "nullable": false,
      "section": "Agent capability bridge",
      "type": "true | false",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--agent-mcp-probe-timeout-s",
      "default": 5,
      "default_display": "5",
      "description": "Agent MCP server probe timeout in seconds.",
      "env": "LOCAL_SHELL_MCP_AGENT_MCP_PROBE_TIMEOUT_S",
      "name": "agent_mcp_probe_timeout_s",
      "nullable": false,
      "section": "Agent capability bridge",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--agent-mcp-call-timeout-s",
      "default": 60,
      "default_display": "60",
      "description": "Agent MCP tool-call timeout in seconds.",
      "env": "LOCAL_SHELL_MCP_AGENT_MCP_CALL_TIMEOUT_S",
      "name": "agent_mcp_call_timeout_s",
      "nullable": false,
      "section": "Agent capability bridge",
      "type": "integer",
      "unset_cli": null
    },
    {
      "choices": [
        "true",
        "false"
      ],
      "cli": "--agent-dynamic-mcp-tools",
      "default": true,
      "default_display": "true",
      "description": "Register dynamic MCP bridge tools.",
      "env": "LOCAL_SHELL_MCP_AGENT_DYNAMIC_MCP_TOOLS",
      "name": "agent_dynamic_mcp_tools",
      "nullable": false,
      "section": "Agent capability bridge",
      "type": "true | false",
      "unset_cli": null
    },
    {
      "choices": [
        "true",
        "false"
      ],
      "cli": "--agent-dynamic-skill-tools",
      "default": true,
      "default_display": "true",
      "description": "Register dynamic skill bridge tools.",
      "env": "LOCAL_SHELL_MCP_AGENT_DYNAMIC_SKILL_TOOLS",
      "name": "agent_dynamic_skill_tools",
      "nullable": false,
      "section": "Agent capability bridge",
      "type": "true | false",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--shell-executable",
      "default": "/bin/bash",
      "default_display": "/bin/bash",
      "description": "Shell executable for bounded and persistent sessions; the POSIX default maps to COMSPEC on Windows.",
      "env": "LOCAL_SHELL_MCP_SHELL_EXECUTABLE",
      "name": "shell_executable",
      "nullable": false,
      "section": "Tool executables",
      "type": "string",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--tmux-bin",
      "default": "tmux",
      "default_display": "tmux",
      "description": "tmux executable.",
      "env": "LOCAL_SHELL_MCP_TMUX_BIN",
      "name": "tmux_bin",
      "nullable": false,
      "section": "Tool executables",
      "type": "string",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--rg-bin",
      "default": "rg",
      "default_display": "rg",
      "description": "ripgrep executable.",
      "env": "LOCAL_SHELL_MCP_RG_BIN",
      "name": "rg_bin",
      "nullable": false,
      "section": "Tool executables",
      "type": "string",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--git-bin",
      "default": "git",
      "default_display": "git",
      "description": "Git executable used for patch validation and application.",
      "env": "LOCAL_SHELL_MCP_GIT_BIN",
      "name": "git_bin",
      "nullable": false,
      "section": "Tool executables",
      "type": "string",
      "unset_cli": null
    },
    {
      "choices": [],
      "cli": "--python-bin",
      "default": "python3",
      "default_display": "python3",
      "description": "Python executable; the POSIX default maps to the running interpreter on Windows.",
      "env": "LOCAL_SHELL_MCP_PYTHON_BIN",
      "name": "python_bin",
      "nullable": false,
      "section": "Tool executables",
      "type": "string",
      "unset_cli": null
    }
  ],
  "sidecar_settings": [
    {
      "default": "",
      "description": "Optional token for the cloudflared tunnel sidecar profile. This uses Cloudflare Tunnel only, not Cloudflare Access.",
      "env": "CLOUDFLARE_TUNNEL_TOKEN"
    }
  ]
}
