{"id":35886033,"url":"https://github.com/kernel/cli","last_synced_at":"2026-04-01T21:54:33.986Z","repository":{"id":310710290,"uuid":"1040910671","full_name":"kernel/cli","owner":"kernel","description":"Kernel CLI","archived":false,"fork":false,"pushed_at":"2026-03-21T07:00:48.000Z","size":60802,"stargazers_count":14,"open_issues_count":9,"forks_count":7,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-21T12:59:30.136Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.kernel.sh","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kernel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-08-19T17:30:55.000Z","updated_at":"2026-03-20T22:19:33.000Z","dependencies_parsed_at":"2025-10-27T20:20:51.098Z","dependency_job_id":"3095df99-e7b4-4525-8f1e-5c76054e07c4","html_url":"https://github.com/kernel/cli","commit_stats":null,"previous_names":["onkernel/cli","kernel/cli"],"tags_count":64,"template":false,"template_full_name":null,"purl":"pkg:github/kernel/cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kernel%2Fcli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kernel%2Fcli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kernel%2Fcli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kernel%2Fcli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kernel","download_url":"https://codeload.github.com/kernel/cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kernel%2Fcli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31292626,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-08T20:17:17.119Z","updated_at":"2026-04-01T21:54:33.958Z","avatar_url":"https://github.com/kernel.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/onkernel/kernel-images/main/static/images/Kernel-Wordmark_Accent.svg\" alt=\"Kernel Logo\" width=\"55%\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"GitHub License\" src=\"https://img.shields.io/github/license/kernel/cli\"\u003e\n  \u003ca href=\"https://discord.gg/FBrveQRcud\"\u003e\u003cimg src=\"https://img.shields.io/discord/1342243238748225556?logo=discord\u0026logoColor=white\u0026color=7289DA\" alt=\"Discord\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://x.com/juecd__\"\u003e\u003cimg src=\"https://img.shields.io/twitter/follow/juecd__\" alt=\"Follow @juecd__\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://x.com/rfgarcia\"\u003e\u003cimg src=\"https://img.shields.io/twitter/follow/rfgarcia\" alt=\"Follow @rfgarcia\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# Kernel CLI\n\nThe Kernel CLI is a fast, friendly command‑line interface for Kernel — the platform that provides sandboxed, ready‑to‑use Chrome browsers for browser automations and web agents.\n\nSign up at [kernel.sh](https://www.kernel.sh/) and read the [docs](https://www.kernel.sh/docs/introduction).\n\n## What's Kernel?\n\nKernel provides sandboxed, ready-to-use Chrome browsers for browser automations and web agents. This CLI helps you deploy apps, run actions, manage browsers, and access live views.\n\n### What you can do with the CLI\n\n- Create new Kernel applications from templates\n- Deploy and version apps to Kernel\n- Invoke app actions (sync or async) and stream logs\n- Create, list, view, and delete managed browser sessions\n- Get a live view URL for visual monitoring and remote control\n\n## Installation\n\nInstall the Kernel CLI using your favorite package manager:\n\n```bash\n# Using brew (recommended)\nbrew install onkernel/tap/kernel\n\n# Using pnpm\npnpm install -g @onkernel/cli\n\n# Using npm\nnpm install -g @onkernel/cli\n```\n\nVerify the installation:\n\n```bash\nwhich kernel\nkernel --version\n```\n\n## Quick Start\n\n1. **Create a new Kernel app:**\n\n   ```bash\n   kernel create\n   ```\n\n2. **Authenticate with Kernel:**\n\n   ```bash\n   kernel login\n   ```\n\n3. **Deploy your app:**\n\n   ```bash\n   kernel deploy index.ts\n   ```\n\n4. **Invoke your app:**\n   ```bash\n   kernel invoke my-app action-name --payload '{\"key\": \"value\"}'\n   ```\n\n## Authentication\n\n### OAuth 2.0 (Recommended)\n\nThe easiest way to authenticate is using OAuth:\n\n```bash\nkernel login\n```\n\nThis opens your browser to complete the authentication flow. Your credentials are securely stored and automatically refreshed.\n\n### API Key\n\nYou can also authenticate using an API key:\n\n```bash\nexport KERNEL_API_KEY=\u003cYOUR_API_KEY\u003e\n```\n\nCreate an API key from the [Kernel dashboard](https://dashboard.onkernel.com).\n\n## Commands Reference\n\n### Global Flags\n\n- `--version`, `-v` - Print the CLI version\n- `--no-color` - Disable color output\n- `--log-level \u003clevel\u003e` - Set log level (trace, debug, info, warn, error, fatal, print)\n\n## JSON Output\n\nMany commands support JSON output for scripting and automation. Use `--output json` or `-o json` to get machine-readable output:\n\n```bash\n# Get browser session details as JSON\nkernel browsers create -o json\n\n# List apps as JSON\nkernel app list -o json\n\n# Deploy with JSONL streaming output (one JSON object per line)\nkernel deploy index.ts -o json\n```\n\nCommands with JSON output support:\n- **Browsers**: `create`, `list`, `get`, `view`\n- **Browser Pools**: `create`, `list`, `get`, `update`, `acquire`\n- **Profiles**: `create`, `list`, `get`\n- **Extensions**: `upload`, `list`\n- **Proxies**: `create`, `list`, `get`\n- **Apps**: `list`, `history`\n- **Deploy**: `deploy` (JSONL streaming), `history`\n- **Invoke**: `invoke` (JSONL streaming), `history`\n- **Browser Sub-commands**: `replays list/start`, `process exec/spawn`, `fs file-info/list-files`\n\n### Authentication\n\n- `kernel login [--force]` - Login via OAuth 2.0\n- `kernel logout` - Clear stored credentials\n- `kernel auth` - Check authentication status\n\n### App Creation\n\n- `--name \u003cname\u003e`, `-n` - Name of the application\n- `--language \u003clanguage\u003e`, `-l` - Sepecify app language: `typescript`, or `python`\n- `--template \u003ctemplate\u003e`, `-t` - Template to use:\n  - `sample-app` - Basic template with Playwright integration\n  - `captcha-solver` - Template demonstrating Kernel's auto-CAPTCHA solver\n  - `stagehand` - Template with Stagehand SDK (TypeScript only)\n  - `browser-use` - Template with Browser Use SDK (Python only)\n  - `anthropic-computer-use` - Anthropic Computer Use prompt loop\n  - `openai-computer-use` - OpenAI Computer Use Agent sample\n  - `gemini-computer-use` - Implements a Gemini computer use agent (TypeScript only)\n  - `openagi-computer-use` - OpenAGI Lux computer-use models (Python only)\n  - `magnitude` - Magnitude framework sample (TypeScript only)\n  - `claude-agent-sdk` - Claude Agent SDK browser automation agent\n\n### App Deployment\n\n- `kernel deploy \u003cfile\u003e` - Deploy an app to Kernel\n\n  - `--version \u003cversion\u003e` - Specify app version (default: latest)\n  - `--force` - Allow overwriting existing version\n  - `--env \u003cKEY=VALUE\u003e`, `-e` - Set environment variables (can be used multiple times)\n  - `--env-file \u003cfile\u003e` - Load environment variables from file (can be used multiple times)\n  - `--output json`, `-o json` - Output JSONL (one JSON object per line for each event)\n\n- `kernel deploy logs \u003cdeployment_id\u003e` - Stream logs for a deployment\n\n  - `--follow`, `-f` - Follow logs in real-time (stream continuously)\n  - `--since`, `-s` - How far back to retrieve logs. Duration formats: ns, us, ms, s, m, h (e.g., 5m, 2h, 1h30m). Timestamps also supported: 2006-01-02, 2006-01-02T15:04, 2006-01-02T15:04:05, 2006-01-02T15:04:05.000\n  - `--with-timestamps`, `-t` - Include timestamps in each log line\n\n- `kernel deploy history [app_name]` - Show deployment history\n  - `--limit \u003cn\u003e` - Max deployments to return (default: 100; 0 = all)\n  - `--output json`, `-o json` - Output raw JSON array\n\n### App Management\n\n- `kernel invoke \u003capp\u003e \u003caction\u003e` - Run an app action\n\n  - `--version \u003cversion\u003e`, `-v` - Specify app version (default: latest)\n  - `--payload \u003cjson\u003e`, `-p` - JSON payload for the action\n  - `--payload-file \u003cpath\u003e`, `-f` - Read JSON payload from a file (use `-` for stdin)\n  - `--sync`, `-s` - Invoke synchronously (timeout after 60s)\n  - `--output json`, `-o json` - Output JSONL (one JSON object per line for each event)\n\n- `kernel app list` - List deployed apps\n\n  - `--name \u003capp_name\u003e` - Filter by app name\n  - `--version \u003cversion\u003e` - Filter by version\n  - `--output json`, `-o json` - Output raw JSON array\n\n- `kernel app history \u003capp_name\u003e` - Show deployment history for an app\n  - `--limit \u003cn\u003e` - Max deployments to return (default: 100; 0 = all)\n  - `--output json`, `-o json` - Output raw JSON array\n\n### Logs\n\n- `kernel logs \u003capp_name\u003e` - View app logs\n  - `--version \u003cversion\u003e` - Specify app version (default: latest)\n  - `--follow`, `-f` - Follow logs in real-time\n  - `--since \u003ctime\u003e`, `-s` - How far back to retrieve logs (e.g., 5m, 1h)\n  - `--with-timestamps` - Include timestamps in log output\n\n### Browser Management\n\n- `kernel browsers list` - List running browsers\n  - `--output json`, `-o json` - Output raw JSON array\n- `kernel browsers create` - Create a new browser session\n  - `-s, --stealth` - Launch browser in stealth mode to avoid detection\n  - `-H, --headless` - Launch browser without GUI access\n  - `--kiosk` - Launch browser in kiosk mode\n  - `--pool-id \u003cid\u003e` - Acquire a browser from the specified pool (mutually exclusive with --pool-name; ignores other session flags)\n  - `--pool-name \u003cname\u003e` - Acquire a browser from the pool name (mutually exclusive with --pool-id; ignores other session flags)\n  - `--output json`, `-o json` - Output raw JSON object\n  - _Note: When a pool is specified, omit other session configuration flags—pool settings determine profile, proxy, viewport, etc._\n- `kernel browsers delete \u003cid\u003e` - Delete a browser\n- `kernel browsers view \u003cid\u003e` - Get live view URL for a browser\n  - `--output json`, `-o json` - Output JSON with liveViewUrl\n- `kernel browsers get \u003cid\u003e` - Get detailed browser session info\n  - `--output json`, `-o json` - Output raw JSON object\n\n### Browser Pools\n\n- `kernel browser-pools list` - List browser pools\n  - `--output json`, `-o json` - Output raw JSON array\n- `kernel browser-pools create` - Create a browser pool\n  - `--name \u003cname\u003e` - Optional unique name for the pool\n  - `--size \u003cn\u003e` - Number of browsers in the pool (required)\n  - `--fill-rate \u003cn\u003e` - Percentage of the pool to fill per minute\n  - `--timeout \u003cseconds\u003e` - Idle timeout for browsers acquired from the pool\n  - `--stealth`, `--headless`, `--kiosk` - Default pool configuration\n  - `--profile-id`, `--profile-name`, `--save-changes`, `--proxy-id`, `--extension`, `--viewport` - Same semantics as `kernel browsers create`\n  - `--output json`, `-o json` - Output raw JSON object\n- `kernel browser-pools get \u003cid-or-name\u003e` - Get pool details\n  - `--output json`, `-o json` - Output raw JSON object\n- `kernel browser-pools update \u003cid-or-name\u003e` - Update pool configuration\n  - Same flags as create plus `--discard-all-idle` to discard all idle browsers in the pool and refill at the specified fill rate\n  - `--output json`, `-o json` - Output raw JSON object\n- `kernel browser-pools delete \u003cid-or-name\u003e` - Delete a pool\n  - `--force` - Force delete even if browsers are leased\n- `kernel browser-pools acquire \u003cid-or-name\u003e` - Acquire a browser from the pool\n  - `--timeout \u003cseconds\u003e` - Acquire timeout before returning 204\n  - `--output json`, `-o json` - Output raw JSON object\n- `kernel browser-pools release \u003cid-or-name\u003e` - Release a browser back to the pool\n  - `--session-id \u003cid\u003e` - Browser session ID to release (required)\n  - `--reuse` - Reuse the browser instance (default: true)\n- `kernel browser-pools flush \u003cid-or-name\u003e` - Destroy all idle browsers in the pool\n\n### Browser Logs\n\n- `kernel browsers logs stream \u003cid\u003e` - Stream browser logs\n  - `--source \u003csource\u003e` - Log source: \"path\" or \"supervisor\" (required)\n  - `--follow` - Follow the log stream (default: true)\n  - `--path \u003cpath\u003e` - File path when source=path\n  - `--supervisor-process \u003cname\u003e` - Supervisor process name when source=supervisor. Most useful value is \"chromium\"\n\n### Browser Replays\n\n- `kernel browsers replays list \u003cid\u003e` - List replays for a browser\n  - `--output json`, `-o json` - Output raw JSON array\n- `kernel browsers replays start \u003cid\u003e` - Start a replay recording\n  - `--framerate \u003cfps\u003e` - Recording framerate (fps)\n  - `--max-duration \u003cseconds\u003e` - Maximum duration in seconds\n  - `--output json`, `-o json` - Output raw JSON object\n- `kernel browsers replays stop \u003cid\u003e \u003creplay-id\u003e` - Stop a replay recording\n- `kernel browsers replays download \u003cid\u003e \u003creplay-id\u003e` - Download a replay video\n  - `-f, --output-file \u003cpath\u003e` - Output file path for the replay video\n\n### Browser Process Control\n\n- `kernel browsers process exec \u003cid\u003e [--] [command...]` - Execute a command synchronously\n  - `--command \u003ccmd\u003e` - Command to execute (optional; if omitted, trailing args are executed via /bin/bash -c)\n  - `--args \u003cargs\u003e` - Command arguments\n  - `--cwd \u003cpath\u003e` - Working directory\n  - `--timeout \u003cseconds\u003e` - Timeout in seconds\n  - `--as-user \u003cuser\u003e` - Run as user\n  - `--as-root` - Run as root\n  - `--output json`, `-o json` - Output raw JSON object\n- `kernel browsers process spawn \u003cid\u003e [--] [command...]` - Execute a command asynchronously\n  - `--command \u003ccmd\u003e` - Command to execute (optional; if omitted, trailing args are executed via /bin/bash -c)\n  - `--args \u003cargs\u003e` - Command arguments\n  - `--cwd \u003cpath\u003e` - Working directory\n  - `--timeout \u003cseconds\u003e` - Timeout in seconds\n  - `--as-user \u003cuser\u003e` - Run as user\n  - `--as-root` - Run as root\n  - `--output json`, `-o json` - Output raw JSON object\n- `kernel browsers process kill \u003cid\u003e \u003cprocess-id\u003e` - Send a signal to a process\n  - `--signal \u003csignal\u003e` - Signal to send: TERM, KILL, INT, HUP (default: TERM)\n- `kernel browsers process status \u003cid\u003e \u003cprocess-id\u003e` - Get process status\n- `kernel browsers process stdin \u003cid\u003e \u003cprocess-id\u003e` - Write to process stdin (base64)\n  - `--data-b64 \u003cdata\u003e` - Base64-encoded data to write to stdin (required)\n- `kernel browsers process stdout-stream \u003cid\u003e \u003cprocess-id\u003e` - Stream process stdout/stderr\n\n### Browser Filesystem\n\n- `kernel browsers fs new-directory \u003cid\u003e` - Create a new directory\n  - `--path \u003cpath\u003e` - Absolute directory path to create (required)\n  - `--mode \u003cmode\u003e` - Directory mode (octal string)\n- `kernel browsers fs delete-directory \u003cid\u003e` - Delete a directory\n  - `--path \u003cpath\u003e` - Absolute directory path to delete (required)\n- `kernel browsers fs delete-file \u003cid\u003e` - Delete a file\n  - `--path \u003cpath\u003e` - Absolute file path to delete (required)\n- `kernel browsers fs download-dir-zip \u003cid\u003e` - Download a directory as zip\n  - `--path \u003cpath\u003e` - Absolute directory path to download (required)\n  - `-o, --output \u003cpath\u003e` - Output zip file path\n- `kernel browsers fs file-info \u003cid\u003e` - Get file or directory info\n  - `--path \u003cpath\u003e` - Absolute file or directory path (required)\n  - `--output json`, `-o json` - Output raw JSON object\n- `kernel browsers fs list-files \u003cid\u003e` - List files in a directory\n  - `--path \u003cpath\u003e` - Absolute directory path (required)\n  - `--output json`, `-o json` - Output raw JSON array\n- `kernel browsers fs move \u003cid\u003e` - Move or rename a file or directory\n  - `--src \u003cpath\u003e` - Absolute source path (required)\n  - `--dest \u003cpath\u003e` - Absolute destination path (required)\n- `kernel browsers fs read-file \u003cid\u003e` - Read a file\n  - `--path \u003cpath\u003e` - Absolute file path (required)\n  - `-o, --output \u003cpath\u003e` - Output file path (optional)\n- `kernel browsers fs set-permissions \u003cid\u003e` - Set file permissions or ownership\n  - `--path \u003cpath\u003e` - Absolute path (required)\n  - `--mode \u003cmode\u003e` - File mode bits (octal string) (required)\n  - `--owner \u003cuser\u003e` - New owner username or UID\n  - `--group \u003cgroup\u003e` - New group name or GID\n- `kernel browsers fs upload \u003cid\u003e` - Upload one or more files\n  - `--file \u003clocal:remote\u003e` - Mapping local:remote (repeatable)\n  - `--dest-dir \u003cpath\u003e` - Destination directory for uploads\n  - `--paths \u003cpaths\u003e` - Local file paths to upload\n- `kernel browsers fs upload-zip \u003cid\u003e` - Upload a zip and extract it\n  - `--zip \u003cpath\u003e` - Local zip file path (required)\n  - `--dest-dir \u003cpath\u003e` - Destination directory to extract to (required)\n- `kernel browsers fs write-file \u003cid\u003e` - Write a file from local data\n  - `--path \u003cpath\u003e` - Destination absolute file path (required)\n  - `--mode \u003cmode\u003e` - File mode (octal string)\n  - `--source \u003cpath\u003e` - Local source file path (required)\n\n### Browser Extensions\n\n- `kernel browsers extensions upload \u003cid\u003e \u003cextension-path\u003e...` - Ad-hoc upload of one or more unpacked extensions to a running browser instance.\n\n### Browser Computer Controls\n\n- `kernel browsers computer click-mouse \u003cid\u003e` - Click mouse at coordinates\n  - `--x \u003ccoordinate\u003e` - X coordinate (required)\n  - `--y \u003ccoordinate\u003e` - Y coordinate (required)\n  - `--num-clicks \u003cn\u003e` - Number of clicks (default: 1)\n  - `--button \u003cbutton\u003e` - Mouse button: left, right, middle, back, forward (default: left)\n  - `--click-type \u003ctype\u003e` - Click type: down, up, click (default: click)\n  - `--hold-key \u003ckey\u003e` - Modifier keys to hold (repeatable)\n- `kernel browsers computer move-mouse \u003cid\u003e` - Move mouse to coordinates\n  - `--x \u003ccoordinate\u003e` - X coordinate (required)\n  - `--y \u003ccoordinate\u003e` - Y coordinate (required)\n  - `--hold-key \u003ckey\u003e` - Modifier keys to hold (repeatable)\n- `kernel browsers computer screenshot \u003cid\u003e` - Capture a screenshot\n  - `--to \u003cpath\u003e` - Output file path for the PNG image (required)\n  - `--x \u003ccoordinate\u003e` - Top-left X for region capture (optional)\n  - `--y \u003ccoordinate\u003e` - Top-left Y for region capture (optional)\n  - `--width \u003cpixels\u003e` - Region width (optional)\n  - `--height \u003cpixels\u003e` - Region height (optional)\n- `kernel browsers computer type \u003cid\u003e` - Type text on the browser instance\n\n  - `--text \u003ctext\u003e` - Text to type (required)\n  - `--delay \u003cms\u003e` - Delay in milliseconds between keystrokes (optional)\n\n- `kernel browsers computer press-key \u003cid\u003e` - Press one or more keys\n\n  - `--key \u003ckey\u003e` - Key symbols to press (repeatable)\n  - `--duration \u003cms\u003e` - Duration to hold keys down in ms (0=tap)\n  - `--hold-key \u003ckey\u003e` - Modifier keys to hold (repeatable)\n\n- `kernel browsers computer scroll \u003cid\u003e` - Scroll the mouse wheel\n\n  - `--x \u003ccoordinate\u003e` - X coordinate (required)\n  - `--y \u003ccoordinate\u003e` - Y coordinate (required)\n  - `--delta-x \u003cpixels\u003e` - Horizontal scroll amount (+right, -left)\n  - `--delta-y \u003cpixels\u003e` - Vertical scroll amount (+down, -up)\n  - `--hold-key \u003ckey\u003e` - Modifier keys to hold (repeatable)\n\n- `kernel browsers computer drag-mouse \u003cid\u003e` - Drag the mouse along a path\n  - `--point \u003cx,y\u003e` - Add a point as x,y (repeatable)\n  - `--delay \u003cms\u003e` - Delay before dragging starts in ms\n  - `--button \u003cbutton\u003e` - Mouse button: left, middle, right (default: left)\n  - `--hold-key \u003ckey\u003e` - Modifier keys to hold (repeatable)\n\n### Browser Playwright\n\n- `kernel browsers playwright execute \u003cid\u003e [code]` - Execute Playwright/TypeScript code against the browser\n  - `--timeout \u003cseconds\u003e` - Maximum execution time in seconds (defaults server-side)\n  - If `[code]` is omitted, code is read from stdin\n\n### Extension Management\n\n- `kernel extensions list` - List all uploaded extensions\n  - `--output json`, `-o json` - Output raw JSON array\n- `kernel extensions upload \u003cdirectory\u003e` - Upload an unpacked browser extension directory\n  - `--name \u003cname\u003e` - Optional unique extension name\n  - `--output json`, `-o json` - Output raw JSON object\n- `kernel extensions download \u003cid-or-name\u003e` - Download an extension archive\n  - `--to \u003cdirectory\u003e` - Output directory (required)\n- `kernel extensions download-web-store \u003curl\u003e` - Download an extension from the Chrome Web Store\n  - `--to \u003cdirectory\u003e` - Output directory (required)\n  - `--os \u003cos\u003e` - Target OS: mac, win, or linux (default: linux)\n- `kernel extensions delete \u003cid-or-name\u003e` - Delete an extension by ID or name\n  - `-y, --yes` - Skip confirmation prompt\n\n### Proxy Management\n\n- `kernel proxies list` - List proxy configurations\n  - `--output json`, `-o json` - Output raw JSON array\n- `kernel proxies get \u003cid\u003e` - Get a proxy configuration by ID\n  - `--output json`, `-o json` - Output raw JSON object\n- `kernel proxies create` - Create a new proxy configuration\n  - `--output json`, `-o json` - Output raw JSON object\n\n  - `--name \u003cname\u003e` - Proxy configuration name\n  - `--type \u003ctype\u003e` - Proxy type: datacenter, isp, residential, mobile, custom (required)\n  - `--protocol \u003chttp|https\u003e` - Protocol to use (default: https)\n  - `--country \u003ccode\u003e` - ISO 3166 country code or \"EU\" (location-based types)\n  - `--city \u003cname\u003e` - City name (no spaces, e.g. sanfrancisco) (residential, mobile; requires `--country`)\n  - `--state \u003ccode\u003e` - Two-letter state code (residential, mobile)\n  - `--zip \u003czip\u003e` - US ZIP code (residential, mobile)\n  - `--asn \u003casn\u003e` - Autonomous system number (e.g., AS15169) (residential, mobile)\n  - `--os \u003cos\u003e` - Operating system: windows, macos, android (residential)\n  - `--carrier \u003ccarrier\u003e` - Mobile carrier (mobile)\n  - `--host \u003chost\u003e` - Proxy host (custom; required)\n  - `--port \u003cport\u003e` - Proxy port (custom; required)\n  - `--username \u003cusername\u003e` - Username for proxy authentication (custom)\n  - `--password \u003cpassword\u003e` - Password for proxy authentication (custom)\n\n- `kernel proxies delete \u003cid\u003e` - Delete a proxy configuration\n  - `-y, --yes` - Skip confirmation prompt\n\n### Agent Auth\n\nAutomated authentication for web services. The `run` command orchestrates the full auth flow automatically.\n\n- `kernel agents auth run` - Run a complete authentication flow\n  - `--domain \u003cdomain\u003e` - Target domain for authentication (required)\n  - `--profile \u003cname\u003e` - Profile name to use/create (required)\n  - `--value \u003ckey=value\u003e` - Field name=value pair (repeatable, e.g., `--value username=foo --value password=bar`)\n  - `--credential \u003cname\u003e` - Existing credential name to use\n  - `--save-credential-as \u003cname\u003e` - Save provided credentials under this name\n  - `--totp-secret \u003csecret\u003e` - Base32 TOTP secret for automatic 2FA\n  - `--proxy-id \u003cid\u003e` - Proxy ID to use\n  - `--login-url \u003curl\u003e` - Custom login page URL\n  - `--allowed-domain \u003cdomain\u003e` - Additional allowed domains (repeatable)\n  - `--timeout \u003cduration\u003e` - Maximum time to wait for auth completion (default: 5m)\n  - `--open` - Open live view URL in browser when human intervention needed\n  - `--output json`, `-o json` - Output JSONL events\n\n- `kernel agents auth create` - Create an auth agent\n  - `--domain \u003cdomain\u003e` - Target domain for authentication (required)\n  - `--profile-name \u003cname\u003e` - Name of the profile to use (required)\n  - `--credential-name \u003cname\u003e` - Optional credential name to link\n  - `--login-url \u003curl\u003e` - Optional login page URL\n  - `--allowed-domain \u003cdomain\u003e` - Additional allowed domains (repeatable)\n  - `--proxy-id \u003cid\u003e` - Optional proxy ID to use\n  - `--output json`, `-o json` - Output raw JSON object\n\n- `kernel agents auth list` - List auth agents\n  - `--domain \u003cdomain\u003e` - Filter by domain\n  - `--profile-name \u003cname\u003e` - Filter by profile name\n  - `--limit \u003cn\u003e` - Maximum number of results to return\n  - `--offset \u003cn\u003e` - Number of results to skip\n  - `--output json`, `-o json` - Output raw JSON array\n\n- `kernel agents auth get \u003cid\u003e` - Get an auth agent by ID\n  - `--output json`, `-o json` - Output raw JSON object\n\n- `kernel agents auth delete \u003cid\u003e` - Delete an auth agent\n  - `-y, --yes` - Skip confirmation prompt\n\n### Credentials\n\n- `kernel credentials create` - Create a new credential\n  - `--name \u003cname\u003e` - Unique name for the credential (required)\n  - `--domain \u003cdomain\u003e` - Target domain (required)\n  - `--value \u003ckey=value\u003e` - Field name=value pair (repeatable)\n  - `--sso-provider \u003cprovider\u003e` - SSO provider (google, github, microsoft)\n  - `--totp-secret \u003csecret\u003e` - Base32-encoded TOTP secret for 2FA\n  - `--output json`, `-o json` - Output raw JSON object\n\n- `kernel credentials list` - List credentials\n  - `--domain \u003cdomain\u003e` - Filter by domain\n  - `--output json`, `-o json` - Output raw JSON array\n\n- `kernel credentials get \u003cid-or-name\u003e` - Get a credential by ID or name\n  - `--output json`, `-o json` - Output raw JSON object\n\n- `kernel credentials update \u003cid-or-name\u003e` - Update a credential\n  - `--name \u003cname\u003e` - New name\n  - `--value \u003ckey=value\u003e` - Field values to update (repeatable)\n  - `--sso-provider \u003cprovider\u003e` - SSO provider\n  - `--totp-secret \u003csecret\u003e` - TOTP secret\n  - `--output json`, `-o json` - Output raw JSON object\n\n- `kernel credentials delete \u003cid-or-name\u003e` - Delete a credential\n  - `-y, --yes` - Skip confirmation prompt\n\n- `kernel credentials totp-code \u003cid-or-name\u003e` - Get current TOTP code\n  - `--output json`, `-o json` - Output raw JSON object\n\n## Examples\n\n### Create a new app\n\n```bash\n# Interactive mode (prompts for all options)\nkernel create\n\n# Create a TypeScript app with sample template\nkernel create --name my-app --language typescript --template sample-app\n\n# Create a Python app with Browser Use\nkernel create --name my-scraper --language python --template browser-use\n\n# Create a TypeScript app with Stagehand\nkernel create --name my-agent --language ts --template stagehand\n\n# Create a Python Computer Use app\nkernel create --name my-cu-app --language py --template anthropic-computer-use\n\n# Create a Claude Agent SDK app (TypeScript or Python)\nkernel create --name my-claude-agent --language ts --template claude-agent-sdk\n```\n\n### Deploy with environment variables\n\n```bash\n# Set individual variables\nkernel deploy index.ts --env API_KEY=abc123 --env DEBUG=true\n\n# Load from .env file\nkernel deploy index.ts --env-file .env\n\n# Combine both methods\nkernel deploy index.ts --env-file .env --env OVERRIDE_VAR=value\n```\n\n### Invoke with payload\n\n```bash\n# Simple invoke\nkernel invoke my-scraper scrape-page\n\n# With JSON payload\nkernel invoke my-scraper scrape-page --payload '{\"url\": \"https://example.com\"}'\n\n# Read payload from a file\nkernel invoke my-scraper scrape-page --payload-file payload.json\n\n# Read payload from stdin\ncat payload.json | kernel invoke my-scraper scrape-page --payload-file -\n\n# Pipe from another command\necho '{\"url\": \"https://example.com\"}' | kernel invoke my-scraper scrape-page -f -\n\n# Synchronous invoke (wait for completion)\nkernel invoke my-scraper quick-task --sync\n```\n\n### Follow logs in real-time\n\n```bash\n# Follow logs\nkernel logs my-app --follow\n\n# Show recent logs with timestamps\nkernel logs my-app --since 1h --with-timestamps\n```\n\n### Browser management\n\n```bash\n# List all browsers\nkernel browsers list\n\n# Create a new browser session\nkernel browsers create\n\n# Create a browser with a longer timeout (up to 72 hours)\nkernel browsers create --timeout 3600\n\n# Create a headless browser in stealth mode\nkernel browsers create --headless --stealth\n\n# Create a browser in kiosk mode\nkernel browsers create --kiosk\n\n# Create a browser with a profile for session state\nkernel browsers create --profile-name my-profile\n\n# Delete a browser\nkernel browsers delete browser123\n\n# Get live view URL\nkernel browsers view browser123\n\n# Stream browser logs\nkernel browsers logs stream my-browser --source supervisor --follow --supervisor-process chromium\n\n# Start a replay recording\nkernel browsers replays start my-browser --framerate 30 --max-duration 300\n\n# Execute a command in the browser VM\nkernel browsers process exec my-browser -- ls -alh /tmp\n\n# Upload files to the browser VM\nkernel browsers fs upload my-browser --file \"local.txt:remote.txt\" --dest-dir \"/tmp\"\n\n# List files in a directory\nkernel browsers fs list-files my-browser --path \"/tmp\"\n\n# Click the mouse at coordinates (100, 200)\nkernel browsers computer click-mouse my-browser --x 100 --y 200\n\n# Double-click the right mouse button\nkernel browsers computer click-mouse my-browser --x 100 --y 200 --num-clicks 2 --button right\n\n# Move the mouse to coordinates (500, 300)\nkernel browsers computer move-mouse my-browser --x 500 --y 300\n\n# Take a full screenshot\nkernel browsers computer screenshot my-browser --to screenshot.png\n\n# Take a screenshot of a specific region\nkernel browsers computer screenshot my-browser --to region.png --x 0 --y 0 --width 800 --height 600\n\n# Type text in the browser\nkernel browsers computer type my-browser --text \"Hello, World!\"\n\n# Type text with a 100ms delay between keystrokes\nkernel browsers computer type my-browser --text \"Slow typing...\" --delay 100\n\n```\n\n### Playwright execution\n\n```bash\n# Execute inline Playwright (TypeScript) code\nkernel browsers playwright execute my-browser 'await page.goto(\"https://example.com\"); const title = await page.title(); return title;'\n\n# Or pipe code from stdin\ncat \u003c\u003c'TS' | kernel browsers playwright execute my-browser\nawait page.goto(\"https://example.com\");\nconst title = await page.title();\nreturn { title };\nTS\n\n# With a timeout in seconds\nkernel browsers playwright execute my-browser --timeout 30 'await (await context.newPage()).goto(\"https://example.com\")'\n\n# Mini CDP connection load test (10s)\ncat \u003c\u003c'TS' | kernel browsers playwright execute my-browser\nconst start = Date.now();\nlet ops = 0;\nwhile (Date.now() - start \u003c 10_000) {\n  await page.evaluate(\"new Date();\");\n  ops++;\n}\nconst durationMs = Date.now() - start;\nconst opsPerSec = ops / (durationMs / 1000);\nreturn { opsPerSec, ops, durationMs };\nTS\n```\n\n### Extension management\n\n```bash\n# List all uploaded extensions\nkernel extensions list\n\n# Upload an unpacked extension directory\nkernel extensions upload ./my-extension --name my-custom-extension\n\n# Download an extension from Chrome Web Store\nkernel extensions download-web-store \"https://chrome.google.com/webstore/detail/extension-id\" --to ./downloaded-extension\n\n# Download a previously uploaded extension\nkernel extensions download my-extension-id --to ./my-extension\n\n# Delete an extension\nkernel extensions delete my-extension-name --yes\n\n# Upload extensions to a running browser instance\nkernel browsers extensions upload my-browser ./extension1 ./extension2\n```\n\n### Proxy management\n\n```bash\n# List proxy configurations\nkernel proxies list\n\n# Create a datacenter proxy\nkernel proxies create --type datacenter --country US --name \"US Datacenter\"\n\n# Create a datacenter proxy using HTTP protocol\nkernel proxies create --type datacenter --country US --protocol http --name \"US DC (HTTP)\"\n\n# Create a custom proxy\nkernel proxies create --type custom --host proxy.example.com --port 8080 --username myuser --password mypass --name \"My Custom Proxy\"\n\n# Create a residential proxy with location and OS\nkernel proxies create --type residential --country US --city sanfrancisco --state CA --zip 94107 --asn AS15169 --os windows --name \"SF Residential\"\n\n# Create a mobile proxy with carrier\nkernel proxies create --type mobile --country US --carrier verizon --name \"US Mobile\"\n\n# Get proxy details\nkernel proxies get prx_123\n\n# Delete a proxy (skip confirmation)\nkernel proxies delete prx_123 --yes\n```\n\n### Agent auth\n\n```bash\n# Run a complete auth flow with inline credentials\nkernel agents auth run --domain github.com --profile my-github \\\n  --value username=myuser --value password=mypass\n\n# Auth with TOTP for automatic 2FA handling\nkernel agents auth run --domain github.com --profile my-github \\\n  --value username=myuser --value password=mypass \\\n  --totp-secret JBSWY3DPEHPK3PXP\n\n# Save credentials for future re-auth\nkernel agents auth run --domain github.com --profile my-github \\\n  --value username=myuser --value password=mypass \\\n  --save-credential-as github-creds\n\n# Re-use existing saved credential\nkernel agents auth run --domain github.com --profile my-github \\\n  --credential github-creds\n\n# Auto-open browser when human intervention is needed\nkernel agents auth run --domain github.com --profile my-github \\\n  --credential github-creds --open\n\n# Use the authenticated profile with a browser\nkernel browsers create --profile-name my-github\n```\n\n## Getting Help\n\n- `kernel --help` - Show all available commands\n- `kernel \u003ccommand\u003e --help` - Get help for a specific command\n\n## Documentation\n\nFor complete documentation, visit:\n\n- [📖 Documentation](https://www.kernel.sh/docs)\n- [🚀 Quickstart Guide](https://www.kernel.sh/docs/quickstart)\n- [📋 CLI Reference](https://www.kernel.sh/docs/reference/cli)\n\n## Support\n\n- [Discord Community](https://discord.gg/kernel)\n- [GitHub Issues](https://github.com/onkernel/kernel/issues)\n- [Documentation](https://www.kernel.sh/docs)\n\n---\n\nFor development and contribution information, see [DEVELOPMENT.md](./DEVELOPMENT.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkernel%2Fcli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkernel%2Fcli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkernel%2Fcli/lists"}