feat: add JSON Schema for agent-browser config files (#1242)

* feat: add JSON Schema for agent-browser config files

Adds agent-browser.schema.json describing all config options with
types and descriptions. Enables IDE autocomplete and validation when
referenced via $schema in agent-browser.json or
~/.agent-browser/config.json.

README and docs site updated to document the schema reference.

* fix(schema): use integer type for maxOutput to match usize deserialization

Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com>

---------

Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com>
This commit is contained in:
Michael
2026-04-16 08:44:01 -05:00
committed by GitHub
co-authored by vercel[bot] <35613825+vercel[bot]@users.noreply.github.com>
parent 19808d08f8
commit 4f9edf9337
3 changed files with 184 additions and 0 deletions
+166
View File
@@ -0,0 +1,166 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Agent Browser Configuration",
"description": "Configuration file for agent-browser (e.g., agent-browser.json or ~/.agent-browser/config.json)",
"type": "object",
"properties": {
"headed": {
"type": "boolean",
"description": "Show browser window instead of running headless."
},
"json": {
"type": "boolean",
"description": "Output in JSON format."
},
"debug": {
"type": "boolean",
"description": "Enable debug output."
},
"session": {
"type": "string",
"description": "Session identifier."
},
"sessionName": {
"type": "string",
"description": "Auto-save/load state persistence name."
},
"executablePath": {
"type": "string",
"description": "Path to a custom browser executable."
},
"extensions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Paths to browser extensions. Extensions from user-level and project-level configs are concatenated."
},
"profile": {
"type": "string",
"description": "Path to the browser profile data directory."
},
"state": {
"type": "string",
"description": "Path to load/save browser state."
},
"proxy": {
"type": "string",
"description": "Proxy server URL (e.g., http://localhost:8080)."
},
"proxyBypass": {
"type": "string",
"description": "Comma-separated domains to bypass the proxy (e.g., localhost,*.internal.com)."
},
"args": {
"type": "string",
"description": "Additional comma-separated launch arguments for the browser."
},
"userAgent": {
"type": "string",
"description": "Custom User-Agent string."
},
"provider": {
"type": "string",
"description": "Provider to use, such as 'ios'."
},
"device": {
"type": "string",
"description": "Device name or identifier for emulation or providers (e.g., 'iPhone 16 Pro')."
},
"ignoreHttpsErrors": {
"type": "boolean",
"description": "Ignore HTTPS errors during navigation."
},
"allowFileAccess": {
"type": "boolean",
"description": "Allow file:// URLs to access local files."
},
"cdp": {
"type": "string",
"description": "Chrome DevTools Protocol endpoint URL."
},
"autoConnect": {
"type": "boolean",
"description": "Auto-discover and connect to a running Chrome instance."
},
"annotate": {
"type": "boolean",
"description": "Annotated screenshot with numbered element labels."
},
"colorScheme": {
"type": "string",
"enum": ["dark", "light", "no-preference"],
"description": "Color scheme preference."
},
"downloadPath": {
"type": "string",
"description": "Default directory for browser downloads."
},
"contentBoundaries": {
"type": "boolean",
"description": "Wrap page output in boundary markers for LLM safety."
},
"maxOutput": {
"type": "integer",
"minimum": 0,
"description": "Max characters for page output (truncates beyond limit)."
},
"allowedDomains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Allowed domain patterns (e.g., ['example.com', '*.example.com'])."
},
"actionPolicy": {
"type": "string",
"description": "Path to action policy JSON file."
},
"confirmActions": {
"type": "string",
"description": "Comma-separated action categories requiring confirmation."
},
"confirmInteractive": {
"type": "boolean",
"description": "Enable interactive confirmation prompts (auto-denies if stdin is not a TTY)."
},
"engine": {
"type": "string",
"enum": ["chrome", "lightpanda"],
"default": "chrome",
"description": "Browser engine to use."
},
"screenshotDir": {
"type": "string",
"description": "Default screenshot output directory."
},
"screenshotQuality": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "JPEG quality for screenshots (0-100)."
},
"screenshotFormat": {
"type": "string",
"enum": ["png", "jpeg"],
"description": "Screenshot format."
},
"idleTimeout": {
"type": "string",
"description": "Auto-shutdown the daemon after N ms of inactivity (e.g., '60000')."
},
"model": {
"type": "string",
"description": "AI model for chat command (e.g., 'openai/gpt-4o')."
},
"noAutoDialog": {
"type": "boolean",
"description": "Disable automatic dismissal of alert/beforeunload dialogs."
},
"headers": {
"type": "string",
"description": "Custom HTTP headers supplied as a JSON-formatted string."
}
},
"additionalProperties": true
}